Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2009-03-01 02:33:35 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2009-03-01 02:33:35 +0300
commit6cc89b9d4e6ab17bea0631b1be800dd9a022db23 (patch)
tree356e3649b94ec7f5a144f1fa6304f5646c4b9bf1 /source/blender/windowmanager
parent2469305376856e0f53b4ffdbe2bf2576fa25809c (diff)
2.5: Text Editor back.
There was very little structure in this code, using many globals and duplicated code. Now it should be better structured. Most things should work, the main parts that are not back yet are the python plugins and markers. Notes: * Blenfont is used for drawing the text, nicely anti-aliased. * A monospace truetype font was added, since that is needed for the text editor. It's Bitstream Vera Sans Mono. This is the default gnome terminal font, but it doesn't fit entirely well with the other font I think, can be changed easily of course. * Clipboard copy/cut/paste now always uses the system clipboard, the code for the own cut buffer was removed. * The interface buttons should support copy/cut/paste again now as well. * WM_clipboard_text_get/WM_clipboard_text_set were added to the windowmanager code. * Find panel is now a kind of second header, instead of a panel. This needs especially a way to start editing the text field immediately on open still. * Operators are independent of the actual space when possible, was a bit of puzzling but got it solved nice with notifiers, and some lazy init for syntax highlight in the drawing code. * RNA was created for the text editor space and used for buttons. * Operators: * New, Open, Reload, Save, Save As, Make Internal * Run Script, Refresh Pyconstraints * Copy, Cut, Paste * Convert Whitespace, Uncomment, Comment, Indent, Unindent * Line Break, Insert * Next Marker, Previous Marker, Clear All Markers, Mark All * Select Line, Select All * Jump, Move, Move Select, Delete, Toggle Overwrite * Scroll, Scroll Bar, Set Cursor, Line Number * Find and Replace, Find, Replace, Find Set Selected, Replace Set Selected * To 3D Object * Resolve Conflict
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/WM_api.h5
-rw-r--r--source/blender/windowmanager/WM_types.h5
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c5
-rw-r--r--source/blender/windowmanager/intern/wm_window.c51
4 files changed, 65 insertions, 1 deletions
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 99e6e26d6a9..5a059b72e27 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -206,5 +206,10 @@ void WM_jobs_start(struct wmJob *);
void WM_jobs_stop(struct wmWindowManager *wm, void *owner);
void WM_jobs_stop_all(struct wmWindowManager *wm);
+ /* clipboard */
+char *WM_clipboard_text_get(int selection);
+void WM_clipboard_text_set(char *buf, int selection);
+
+
#endif /* WM_API_H */
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index 9dc2d5cf0b2..d3cb60d90fe 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -156,6 +156,7 @@ typedef struct wmNotifier {
#define NC_GROUP (9<<24)
#define NC_IMAGE (10<<24)
#define NC_BRUSH (11<<24)
+#define NC_TEXT (12<<24)
/* data type, 256 entries is enough, it can overlap */
#define NOTE_DATA 0x00FF0000
@@ -205,6 +206,10 @@ typedef struct wmNotifier {
#define ND_LIGHTING_DRAW (45<<16)
#define ND_SKY (46<<16)
+ /* NC_TEXT Text */
+#define ND_CURSOR (50<<16)
+#define ND_DISPLAY (51<<16)
+
/* subtype, 256 entries too */
#define NOTE_SUBTYPE 0x0000FF00
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 5247cb8abc1..8c06be7a37e 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -151,12 +151,15 @@ void wm_event_do_notifiers(bContext *C)
}
if(note->window==win) {
if(note->category==NC_SCREEN) {
- if(note->data==ND_SCREENBROWSE)
+ if(note->data==ND_SCREENBROWSE) {
ED_screen_set(C, note->reference); // XXX hrms, think this over!
+ printf("screen set %p\n", note->reference);
+ }
}
else if(note->category==NC_SCENE) {
if(note->data==ND_SCENEBROWSE) {
ED_screen_set_scene(C, note->reference); // XXX hrms, think this over!
+ printf("scene set %p\n", note->reference);
}
else if(note->data==ND_FRAME)
do_anim= 1;
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 43871ba5a7f..a57fff58948 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -661,6 +661,57 @@ void WM_event_remove_window_timer(wmWindow *win, wmTimer *timer)
}
}
+/* ******************* clipboard **************** */
+
+char *WM_clipboard_text_get(int selection)
+{
+ char *p, *p2, *buf, *newbuf;
+
+ buf= (char*)GHOST_getClipboard(selection);
+ if(!buf)
+ return NULL;
+
+ /* always convert from \r\n to \n */
+ newbuf= MEM_callocN(strlen(buf)+1, "WM_clipboard_text_get");
+
+ for(p= buf, p2= newbuf; *p; p++) {
+ if(*p != '\r')
+ *(p2++)= *p;
+ }
+ *p2= '\0';
+
+ free(buf); /* ghost uses regular malloc */
+
+ return newbuf;
+}
+
+void WM_clipboard_text_set(char *buf, int selection)
+{
+ /* do conversion from \n to \r\n on Windows */
+ char *p, *p2, *newbuf;
+ int newlen= 0;
+
+ for(p= buf; *p; p++) {
+ if(*p == '\n')
+ newlen += 2;
+ else
+ newlen++;
+ }
+
+ newbuf= MEM_callocN(newlen+1, "WM_clipboard_text_set");
+
+ for(p= buf, p2= newbuf; *p; p++, p2++) {
+ if(*p == '\n') {
+ *(p2++)= '\r'; *p2= '\n';
+ }
+ else *p2= *p;
+ }
+ *p2= '\0';
+
+ GHOST_putClipboard((GHOST_TInt8*)newbuf, selection);
+ MEM_freeN(newbuf);
+}
+
/* ************************************ */
void wm_window_get_position(wmWindow *win, int *posx_r, int *posy_r)