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:
authorJens Verwiebe <info@jensverwiebe.de>2011-10-20 14:35:54 +0400
committerJens Verwiebe <info@jensverwiebe.de>2011-10-20 14:35:54 +0400
commit36017e2af9a3015876b4f573f00630cdae39c1ac (patch)
treec4b74325aef438eeef51cc7761fb26e3033259be /intern/ghost
parentfe30dcbfb6281857435759b5c36ff390d7c067cb (diff)
OSX: dalai's patch for utf8 support, todo: uppercase chars not working yet
Diffstat (limited to 'intern/ghost')
-rw-r--r--intern/ghost/intern/GHOST_SystemCocoa.mm33
1 files changed, 29 insertions, 4 deletions
diff --git a/intern/ghost/intern/GHOST_SystemCocoa.mm b/intern/ghost/intern/GHOST_SystemCocoa.mm
index 58a856375bb..1dfb8e36422 100644
--- a/intern/ghost/intern/GHOST_SystemCocoa.mm
+++ b/intern/ghost/intern/GHOST_SystemCocoa.mm
@@ -1654,8 +1654,17 @@ GHOST_TSuccess GHOST_SystemCocoa::handleKeyEvent(void *eventPtr)
//printf("\nW failure for event 0x%x",[event type]);
return GHOST_kFailure;
}
+
+ /* unicode input - not entirely supported yet
+ * but we are getting the right byte, Blender is not drawing it though
+ * also some languages may need special treatment:
+ - Japanese: romanji is used as input, and every 2 letters OSX converts the text
+ to Hiragana/Katakana.
+ - Korean: one add one letter at a time, and then the OSX join them in the equivalent
+ combined letter.
+ */
+ char utf8_buf[6]= {'\0'};
- char utf8_buf[6]= {'\0'}; /* TODO, unicode input */
switch ([event type]) {
case NSKeyDown:
@@ -1669,7 +1678,7 @@ GHOST_TSuccess GHOST_SystemCocoa::handleKeyEvent(void *eventPtr)
keyCode = convertKey([event keyCode],0,
[event type] == NSKeyDown?kUCKeyActionDown:kUCKeyActionUp);
-
+ /* ascii */
characters = [event characters];
if ([characters length]>0) { //Check for dead keys
//Convert characters to iso latin 1 encoding
@@ -1681,16 +1690,32 @@ GHOST_TSuccess GHOST_SystemCocoa::handleKeyEvent(void *eventPtr)
}
else
ascii= 0;
+
+ /* unicode */
+ if ([characters length]>0) {
+ convertedCharacters = [characters dataUsingEncoding:NSUTF8StringEncoding];
+ if ([convertedCharacters length]>0) {
+ utf8_buf[0] = ((char*)[convertedCharacters bytes])[0];
+ utf8_buf[1] = ((char*)[convertedCharacters bytes])[1];
+ utf8_buf[2] = ((char*)[convertedCharacters bytes])[2];
+ utf8_buf[3] = ((char*)[convertedCharacters bytes])[3];
+ utf8_buf[4] = ((char*)[convertedCharacters bytes])[4];
+ utf8_buf[5] = ((char*)[convertedCharacters bytes])[5];
+ }
+ else {
+ utf8_buf[0] = '\0';
+ }
+ }
if ((keyCode == GHOST_kKeyQ) && (m_modifierMask & NSCommandKeyMask))
break; //Cmd-Q is directly handled by Cocoa
if ([event type] == NSKeyDown) {
pushEvent( new GHOST_EventKey([event timestamp]*1000, GHOST_kEventKeyDown, window, keyCode, ascii, utf8_buf) );
- //printf("\nKey down rawCode=0x%x charsIgnoringModifiers=%c keyCode=%u ascii=%i %c",[event keyCode],[charsIgnoringModifiers length]>0?[charsIgnoringModifiers characterAtIndex:0]:' ',keyCode,ascii,ascii);
+ //printf("Key down rawCode=0x%x charsIgnoringModifiers=%c keyCode=%u ascii=%i %c utf8=%s\n",[event keyCode],[charsIgnoringModifiers length]>0?[charsIgnoringModifiers characterAtIndex:0]:' ',keyCode,ascii,ascii, utf8_buf);
} else {
pushEvent( new GHOST_EventKey([event timestamp]*1000, GHOST_kEventKeyUp, window, keyCode, ascii, utf8_buf) );
- //printf("\nKey up rawCode=0x%x charsIgnoringModifiers=%c keyCode=%u ascii=%i %c",[event keyCode],[charsIgnoringModifiers length]>0?[charsIgnoringModifiers characterAtIndex:0]:' ',keyCode,ascii,ascii);
+ //printf("Key down rawCode=0x%x charsIgnoringModifiers=%c keyCode=%u ascii=%i %c utf8=%s\n",[event keyCode],[charsIgnoringModifiers length]>0?[charsIgnoringModifiers characterAtIndex:0]:' ',keyCode,ascii,ascii, utf8_buf);
}
break;