Revision: 39078
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39078
Author:   campbellbarton
Date:     2011-08-05 17:39:44 +0000 (Fri, 05 Aug 2011)
Log Message:
-----------
fix for GHOST/SDL key input with uppercase keys.

Modified Paths:
--------------
    trunk/blender/intern/ghost/intern/GHOST_SystemSDL.cpp

Modified: trunk/blender/intern/ghost/intern/GHOST_SystemSDL.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemSDL.cpp       2011-08-05 
17:19:31 UTC (rev 39077)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemSDL.cpp       2011-08-05 
17:39:44 UTC (rev 39078)
@@ -180,6 +180,7 @@
                GXMAP(type,SDL_SCANCODE_RCTRL,          GHOST_kKeyRightControl);
                GXMAP(type,SDL_SCANCODE_LALT,           GHOST_kKeyLeftAlt);
                GXMAP(type,SDL_SCANCODE_RALT,           GHOST_kKeyRightAlt);
+               GXMAP(type,SDL_SCANCODE_LGUI,           GHOST_kKeyOS);
                GXMAP(type,SDL_SCANCODE_RGUI,           GHOST_kKeyOS);
 
                GXMAP(type,SDL_SCANCODE_INSERT,         GHOST_kKeyInsert);
@@ -228,6 +229,7 @@
         GXMAP(type,SDL_SCANCODE_AUDIONEXT,      GHOST_kKeyMediaLast);
 
                default:
+                       printf("Unknown\n");
                        type= GHOST_kKeyUnknown;
                        break;
                }
@@ -372,6 +374,7 @@
        case SDL_KEYUP:
                {
                        SDL_KeyboardEvent &sdl_sub_evt= sdl_event->key;
+                       SDL_Keycode sym= sdl_sub_evt.keysym.sym;
                        GHOST_TEventType type= (sdl_sub_evt.state == 
SDL_PRESSED) ? GHOST_kEventKeyDown : GHOST_kEventKeyUp;
 
                        GHOST_WindowSDL *window= 
findGhostWindow(SDL_GetWindowFromID(sdl_sub_evt.windowID));
@@ -379,7 +382,45 @@
 
                        GHOST_TKey gkey= 
convertSDLKey(sdl_sub_evt.keysym.scancode);
                        /* note, the sdl_sub_evt.keysym.sym is truncated, for 
unicode support ghost has to be modified */
-                       g_event= new GHOST_EventKey(getMilliSeconds(), type, 
window, gkey, sdl_sub_evt.keysym.sym);
+                       if(sym > 127) {
+                               sym= 0;
+                       }
+                       else {
+                               if(sdl_sub_evt.keysym.mod & 
(KMOD_LSHIFT|KMOD_RSHIFT)) {
+                                       /* lame US keyboard assumptions */
+                                       if(sym >= 'a' && sym <= ('a' + 32)) {
+                                               sym -= 32;
+                                       }
+                                       else {
+                                               switch(sym) {
+                                                       case '`': sym= '~'; 
break;
+                                                       case '1': sym= '!'; 
break;
+                                                       case '2': sym= '@'; 
break;
+                                                       case '3': sym= '#'; 
break;
+                                                       case '4': sym= '$'; 
break;
+                                                       case '5': sym= '%'; 
break;
+                                                       case '6': sym= '^'; 
break;
+                                                       case '7': sym= '&'; 
break;
+                                                       case '8': sym= '*'; 
break;
+                                                       case '9': sym= '('; 
break;
+                                                       case '0': sym= ')'; 
break;
+                                                       case '-': sym= '_'; 
break;
+                                                       case '=': sym= '+'; 
break;
+                                                       case '[': sym= '{'; 
break;
+                                                       case ']': sym= '}'; 
break;
+                                                       case '\\': sym= '|'; 
break;
+                                                       case ';': sym= ':'; 
break;
+                                                       case '\'': sym= '"'; 
break;
+                                                       case ',': sym= '<'; 
break;
+                                                       case '.': sym= '>'; 
break;
+                                                       case '/': sym= '?'; 
break;
+                                                       default:            
break;
+                                               }
+                                       }
+                               }
+                       }
+
+                       g_event= new GHOST_EventKey(getMilliSeconds(), type, 
window, gkey, sym);
                }
                break;
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to