diff options
author | Ricki Myers <antihc3@gmail.com> | 2008-03-04 03:41:30 +0300 |
---|---|---|
committer | Ricki Myers <antihc3@gmail.com> | 2008-03-04 03:41:30 +0300 |
commit | ffcbff62dd569b880c39084889fe68be76f67f51 (patch) | |
tree | 61e5ba1ed5395117a41b90323c25a54e3ab7c234 /source/blender | |
parent | c7d0a2a92a0029573130896ae93171cfb055c50f (diff) |
Added Copy and Paste functions to GHOST.
- Moved WIN32 code to ghost and added code for other systems.
- Added functions getClipboard(flag), and putClipboard(buffer, flag)
-Flag is used on X11 to request selection buffer or clipboard.
-If any other system uses flag = 1 the function returns doing nothing.
- Changed ctrl +c/v and shift+ctrl + c/v to do the same thing (use the clipboard).
- Changed the menu items (copy, paste) to use the clipboard.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_text.h | 3 | ||||
-rw-r--r-- | source/blender/src/drawtext.c | 95 | ||||
-rw-r--r-- | source/blender/src/header_text.c | 6 |
3 files changed, 53 insertions, 51 deletions
diff --git a/source/blender/blenkernel/BKE_text.h b/source/blender/blenkernel/BKE_text.h index 35f0ee841be..c4a2ffe369b 100644 --- a/source/blender/blenkernel/BKE_text.h +++ b/source/blender/blenkernel/BKE_text.h @@ -95,7 +95,8 @@ void indent (struct Text *text); void uncomment (struct Text *text); int setcurr_tab (struct Text *text); void convert_tabs (struct SpaceText *st, int tab); - +void txt_copy_clipboard (struct Text *text); +void txt_paste_clipboard (struct Text *text); /* Undo opcodes */ /* Simple main cursor movement */ diff --git a/source/blender/src/drawtext.c b/source/blender/src/drawtext.c index fff1d768b93..4751882a3ae 100644 --- a/source/blender/src/drawtext.c +++ b/source/blender/src/drawtext.c @@ -85,6 +85,8 @@ #include "mydevice.h" #include "blendef.h" +#include "GHOST_C-api.h" + #define TEXTXLOC 38 /* forward declarations */ @@ -92,10 +94,9 @@ void drawtextspace(ScrArea *sa, void *spacedata); void winqreadtextspace(struct ScrArea *sa, void *spacedata, struct BWinEvent *evt); void txt_copy_selectbuffer (Text *text); -void txt_paste_clipboard(Text *text); /* blank on non Win32 */ -void txt_copy_clipboard(Text *text); /* blank on non Win32 */ void do_brackets(); +void get_selection_buffer(Text *text); int check_bracket(char *string); static int check_delim(char *string); static int check_numbers(char *string); @@ -1306,8 +1307,6 @@ void txt_copy_selectbuffer (Text *text) bufferlength = length; } - -#ifdef _WIN32 static char *unixNewLine(char *buffer) { char *p, *p2, *output; @@ -1340,55 +1339,42 @@ static char *winNewLine(char *buffer) return(output); } -#endif - void txt_paste_clipboard(Text *text) { -#ifdef _WIN32 - char * buffer = NULL; - - if ( OpenClipboard(NULL) ) { - HANDLE hData = GetClipboardData( CF_TEXT ); - buffer = (char*)GlobalLock( hData ); - if (buffer) { - buffer = unixNewLine(buffer); - if (buffer) txt_insert_buf(text, buffer); - } - GlobalUnlock( hData ); - CloseClipboard(); - MEM_freeN(buffer); + + char * buff; + char *temp_buff; + + buff = (char*)getClipboard(0); + if(buff) { + temp_buff = unixNewLine(buff); + + txt_insert_buf(text, temp_buff); + if(buff){free((void*)buff);} + if(temp_buff){MEM_freeN(temp_buff);} } -#endif } -void txt_copy_clipboard(Text *text) { -#ifdef _WIN32 - txt_copy_selectbuffer(text); - - if (OpenClipboard(NULL)) { - HLOCAL clipbuffer; - char* buffer; - - if (copybuffer) { - copybuffer = winNewLine(copybuffer); +void get_selection_buffer(Text *text) +{ + char *buff = (char*)getClipboard(1); + txt_insert_buf(text, buff); +} - EmptyClipboard(); - clipbuffer = LocalAlloc(LMEM_FIXED,((bufferlength+1))); - buffer = (char *) LocalLock(clipbuffer); +void txt_copy_clipboard(Text *text) { + char *temp; - strncpy(buffer, copybuffer, bufferlength); - buffer[bufferlength] = '\0'; - LocalUnlock(clipbuffer); - SetClipboardData(CF_TEXT,clipbuffer); - } - CloseClipboard(); - } + txt_copy_selectbuffer(text); if (copybuffer) { + copybuffer[bufferlength] = '\0'; + temp = winNewLine(copybuffer); + + putClipboard((GHOST_TInt8*)temp, 0); + MEM_freeN(temp); MEM_freeN(copybuffer); copybuffer= NULL; } -#endif } /* @@ -1537,19 +1523,29 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt) if (event==LEFTMOUSE) { if (val) { short mval[2]; + char *buffer; set_tabs(text); getmouseco_areawin(mval); - + if (mval[0]>2 && mval[0]<20 && mval[1]>2 && mval[1]<curarea->winy-2) { do_textscroll(st, 2); - } else { + } else { do_selection(st, G.qual&LR_SHIFTKEY); + buffer = txt_sel_to_buf(text); + putClipboard((GHOST_TInt8*)buffer, 1); + MEM_freeN(buffer); do_draw= 1; } } } else if (event==MIDDLEMOUSE) { if (val) { - do_textscroll(st, 1); + #ifdef _WIN32 || __APPLE__ + do_textscroll(st, 1); + #else + do_selection(st, G.qual&LR_SHIFTKEY); + get_selection_buffer(text); + do_draw= 1; + #endif } } else if (event==RIGHTMOUSE) { if (val) { @@ -1606,7 +1602,7 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt) if(G.qual & LR_SHIFTKEY) txt_copy_clipboard(text); else - txt_copy_sel(text); + txt_copy_clipboard(text); do_draw= 1; } @@ -1630,15 +1626,18 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt) if (G.qual == (LR_ALTKEY|LR_SHIFTKEY)) { switch(pupmenu("Edit %t|Cut %x0|Copy %x1|Paste %x2|Print Cut Buffer %x3")) { case 0: + txt_copy_clipboard(text); //First copy to clipboard txt_cut_sel(text); do_draw= 1; break; case 1: - txt_copy_sel(text); + txt_copy_clipboard(text); + //txt_copy_sel(text); do_draw= 1; break; case 2: - txt_paste(text); + //txt_paste(text); + txt_paste_clipboard(text); if (st->showsyntax) get_format_string(st); do_draw= 1; break; @@ -1804,7 +1803,7 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt) if (G.qual & LR_SHIFTKEY) txt_paste_clipboard(text); else - txt_paste(text); + txt_paste_clipboard(text); if (st->showsyntax) get_format_string(st); do_draw= 1; pop_space_text(st); diff --git a/source/blender/src/header_text.c b/source/blender/src/header_text.c index ac7f4be9ec0..9ee7896d65e 100644 --- a/source/blender/src/header_text.c +++ b/source/blender/src/header_text.c @@ -348,14 +348,16 @@ static void do_text_editmenu(void *arg, int event) txt_do_redo(text); break; case 3: + txt_copy_clipboard(text); txt_cut_sel(text); pop_space_text(st); break; case 4: - txt_copy_sel(text); + //txt_copy_sel(text); + txt_copy_clipboard(text); break; case 5: - txt_paste(text); + txt_paste_clipboard(text); if (st->showsyntax) get_format_string(st); break; case 6: |