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/intern
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-08-05 21:39:44 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-08-05 21:39:44 +0400
commit4d319f8059fb66cd05ef42defc967f6bc7f93859 (patch)
tree9df2826225bab4531a90f25751693790d5cf24d5 /intern
parent3a82a690abca993866c30f03696e8d2415455f64 (diff)
fix for GHOST/SDL key input with uppercase keys.
Diffstat (limited to 'intern')
-rw-r--r--intern/ghost/intern/GHOST_SystemSDL.cpp43
1 files changed, 42 insertions, 1 deletions
diff --git a/intern/ghost/intern/GHOST_SystemSDL.cpp b/intern/ghost/intern/GHOST_SystemSDL.cpp
index 2c61acc2d93..69a9f936cf6 100644
--- a/intern/ghost/intern/GHOST_SystemSDL.cpp
+++ b/intern/ghost/intern/GHOST_SystemSDL.cpp
@@ -180,6 +180,7 @@ convertSDLKey(SDL_Scancode key)
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 @@ convertSDLKey(SDL_Scancode key)
GXMAP(type,SDL_SCANCODE_AUDIONEXT, GHOST_kKeyMediaLast);
default:
+ printf("Unknown\n");
type= GHOST_kKeyUnknown;
break;
}
@@ -372,6 +374,7 @@ GHOST_SystemSDL::processEvent(SDL_Event *sdl_event)
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_SystemSDL::processEvent(SDL_Event *sdl_event)
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;
}