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
path: root/source
diff options
context:
space:
mode:
authorRicki Myers <antihc3@gmail.com>2008-03-04 03:41:30 +0300
committerRicki Myers <antihc3@gmail.com>2008-03-04 03:41:30 +0300
commitffcbff62dd569b880c39084889fe68be76f67f51 (patch)
tree61e5ba1ed5395117a41b90323c25a54e3ab7c234 /source
parentc7d0a2a92a0029573130896ae93171cfb055c50f (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')
-rw-r--r--source/blender/blenkernel/BKE_text.h3
-rw-r--r--source/blender/src/drawtext.c95
-rw-r--r--source/blender/src/header_text.c6
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: