git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@6395 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: a78c3403d861fb0be0fb4d80bd46be335334ed75
Former-commit-id: 6a977646425d8b62dcfa53b2ff7430b3cb36c1a3
This commit is contained in:
beaglejoe 2016-04-04 03:40:56 +00:00
parent 92f3c5a1d4
commit 46b1b818cc
2 changed files with 38 additions and 28 deletions

View file

@ -58,10 +58,8 @@ private: // Private data members.
//! Initialization flag for the underlying software layers. //! Initialization flag for the underlying software layers.
static bool _bInitialized; static bool _bInitialized;
#if SDL_MAJOR_VERSION < 2
//! Unicode for each typed SDL key sym + modifier //! Unicode for each typed SDL key sym + modifier
std::map<Uint32, Uint16> _mapUnicodes; std::map<Uint32, Uint16> _mapUnicodes;
#endif
}; };
GfEventLoop::Private::Private() GfEventLoop::Private::Private()
@ -118,11 +116,40 @@ int GfEventLoop::Private::translateKeySym(int code, int modifier, int unicode)
// Done. // Done.
return keyUnicode; return keyUnicode;
#else #else
int keyUnicode = code; //default to returning code
// Make the Numpad <Enter> key behave like the regular <Enter> key // Make the Numpad <Enter> key behave like the regular <Enter> key
if(SDLK_KP_ENTER == code) if(SDLK_KP_ENTER == code)
code = SDLK_RETURN; keyUnicode = SDLK_RETURN;
return code; else
{
const Uint32 keyId = ((Uint32)code & GF_MAX_KEYCODE) | (((Uint32)modifier) << 9);
// If unicode - add to the map...
if(unicode)
{
// Truncate unicodes above GF_MAX_KEYCODE (no need for more).
keyUnicode = (unsigned short)(unicode & GF_MAX_KEYCODE);
_mapUnicodes[keyId] = (unsigned short)keyUnicode;
GfLogDebug("translateKeySym(c=%X, m=%X, u=%X) : '%c', id=%X, ucode=%X (nk=%d)\n",
code, modifier, unicode, // Truncate high bits for MSVC 2010 bugs.
(keyUnicode > 0 && keyUnicode < 128 && isprint(keyUnicode & 0x7F))
? (char)(keyUnicode & 0x7F) : ' ',
keyId, keyUnicode, _mapUnicodes.size());
}
else
{
// Search it in our unicode map.
const std::map<Uint32, Uint16>::const_iterator itUnicode = _mapUnicodes.find(keyId);
if (itUnicode != _mapUnicodes.end())
{
keyUnicode = (*itUnicode).second;
}
}
}
return keyUnicode;
#endif #endif
} }

View file

@ -136,6 +136,7 @@ void GfuiEventLoop::operator()()
#if SDL_MAJOR_VERSION >= 2 #if SDL_MAJOR_VERSION >= 2
static int unicode = 0; static int unicode = 0;
static SDL_Keymod modifier = KMOD_NONE; static SDL_Keymod modifier = KMOD_NONE;
static SDL_Keycode keysym = SDLK_UNKNOWN;
#endif #endif
// Check for events. // Check for events.
@ -165,12 +166,11 @@ void GfuiEventLoop::operator()()
{ {
injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 0,0); injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 0,0);
} }
#if 0
else else
{ {
printf("SDL_KEYDOWN: %c\r\n",(char)event.key.keysym.sym); //GfLogDebug("SDL_KEYDOWN: %c\r\n",(char)event.key.keysym.sym);
keysym = event.key.keysym.sym;
} }
#endif
#endif #endif
break; break;
@ -178,8 +178,8 @@ void GfuiEventLoop::operator()()
case SDL_TEXTINPUT: case SDL_TEXTINPUT:
unicode = (int)(event.text.text[0]); unicode = (int)(event.text.text[0]);
modifier = SDL_GetModState(); modifier = SDL_GetModState();
injectKeyboardEvent(unicode,modifier, 0,0); injectKeyboardEvent(keysym, modifier, 0, unicode);
//printf("SDL_TEXTINPUT: %c %X\r\n",(char)unicode,modifier); //GfLogDebug("SDL_TEXTINPUT: %c %X\r\n",(char)unicode,modifier);
break; break;
#endif #endif
@ -187,25 +187,8 @@ void GfuiEventLoop::operator()()
#if SDL_MAJOR_VERSION < 2 #if SDL_MAJOR_VERSION < 2
injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 1,event.key.keysym.unicode); injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 1,event.key.keysym.unicode);
#else #else
if((event.key.keysym.sym & SDLK_SCANCODE_MASK) == SDLK_SCANCODE_MASK) injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 1,0);
{ //GfLogDebug("SDL_KEYUP: %c\r\n",(char)event.key.keysym.sym);
injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 1,0);
}
else if(false == isprint(event.key.keysym.sym))
{
injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 1,0);
}
else if((event.key.keysym.mod & KMOD_CTRL)
||(event.key.keysym.mod & KMOD_ALT)
||(event.key.keysym.mod & KMOD_GUI))
{
injectKeyboardEvent(event.key.keysym.sym, event.key.keysym.mod, 1,0);
}
else
{
injectKeyboardEvent(unicode, event.key.keysym.mod, 1,0);
//printf("SDL_KEYUP: %c unicode = %c\r\n",(char)event.key.keysym.sym,unicode);
}
#endif #endif
break; break;