From 6707343ac49a46f97bbc2828b8de5a8d7b5fcd83 Mon Sep 17 00:00:00 2001 From: SoftCoder Date: Thu, 8 Oct 2015 17:04:43 -0700 Subject: [PATCH] - fix special keys in sld2 (like arrow key) --- source/glest_game/game/game.cpp | 4 ++ source/glest_game/main/main.cpp | 2 + .../sources/platform/sdl/window.cpp | 46 +++++++++---------- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/source/glest_game/game/game.cpp b/source/glest_game/game/game.cpp index d6e2afe0..48799bd8 100644 --- a/source/glest_game/game/game.cpp +++ b/source/glest_game/game/game.cpp @@ -4601,6 +4601,8 @@ void Game::keyDown(SDL_KeyboardEvent key) { return; } + //printf("In game checking keypress for key [%d]\n",key.keysym.sym); + try { if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = [%c] [%d] gameStarted [%d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,key.keysym.sym,key.keysym.sym, gameStarted); if(gameStarted == false || totalRenderFps <= 0) { @@ -4641,6 +4643,8 @@ void Game::keyDown(SDL_KeyboardEvent key) { setMarkerKeyAllowsModifier = true; } + //printf("In game checking keypress for key [%d] camera left [%d]\n",key.keysym.sym,configKeys.getSDLKey("CameraModeLeft")); + if(isKeyPressed(configKeys.getSDLKey("RenderInGamePerformance"),key, false) == true) { renderInGamePerformance = !renderInGamePerformance; diff --git a/source/glest_game/main/main.cpp b/source/glest_game/main/main.cpp index 251f4c2e..9c467466 100644 --- a/source/glest_game/main/main.cpp +++ b/source/glest_game/main/main.cpp @@ -1093,6 +1093,8 @@ void MainWindow::toggleLanguage(string language) { void MainWindow::eventKeyDown(SDL_KeyboardEvent key) { SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] [%d]\n",__FILE__,__FUNCTION__,__LINE__,key.keysym.sym); + //printf("In mainwindow checking keypress for key [%d]\n",key.keysym.sym); + SDL_keysym keystate = key.keysym; SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = [%c][%d]\n",__FILE__,__FUNCTION__,__LINE__,key,key); diff --git a/source/shared_lib/sources/platform/sdl/window.cpp b/source/shared_lib/sources/platform/sdl/window.cpp index 6554a683..865c3bcb 100644 --- a/source/shared_lib/sources/platform/sdl/window.cpp +++ b/source/shared_lib/sources/platform/sdl/window.cpp @@ -79,29 +79,26 @@ static HWND GetSDLWindow() #endif -static bool isUnprintableChar(SDL_keysym key) -{ - // U+0000 to U+001F are control characters - if (key.sym < 0x20) - { - switch (key.sym) - { - // We want to allow some, which are handled specially - case SDLK_RETURN: case SDLK_TAB: - case SDLK_BACKSPACE: case SDLK_DELETE: - case SDLK_HOME: case SDLK_END: - case SDLK_LEFT: case SDLK_RIGHT: - case SDLK_UP: case SDLK_DOWN: - case SDLK_PAGEUP: case SDLK_PAGEDOWN: - return true; - - // Ignore the others - default: - return true; - } +static bool isUnprintableChar(SDL_keysym key) { + switch (key.sym) { + // We want to allow some, which are handled specially + case SDLK_RETURN: + case SDLK_TAB: + case SDLK_BACKSPACE: + case SDLK_DELETE: + case SDLK_HOME: + case SDLK_END: + case SDLK_LEFT: + case SDLK_RIGHT: + case SDLK_UP: + case SDLK_DOWN: + case SDLK_PAGEUP: + case SDLK_PAGEDOWN: + return true; + default: + // U+0000 to U+001F are control characters + return (key.sym < 0x20); } - - return false; } Window::Window() { @@ -280,7 +277,7 @@ bool Window::handleEvent() { if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] Raw SDL key [%d - %c] mod [%d] scancode [%d] keyName [%s]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,event.key.keysym.sym,event.key.keysym.sym,event.key.keysym.mod,event.key.keysym.scancode,keyName.c_str()); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] Raw SDL key [%d] mod [%d] scancode [%d] keyName [%s]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,event.key.keysym.sym,event.key.keysym.mod,event.key.keysym.scancode,keyName.c_str()); - //printf("In SDL_TEXTINPUT key [%s] keyName [%s] mod: %d\n",event.text.text,keyName.c_str(),event.key.keysym.mod); + //printf("In SDL_TEXTINPUT key [%s] keyName [%s] mod: %d global_window: %p\n",event.text.text,keyName.c_str(),event.key.keysym.mod,global_window); /* handle ALT+Return */ if((keyName == "Return" || keyName == "Enter") @@ -304,6 +301,7 @@ bool Window::handleEvent() { //event.key.keysym.mod = SDL_GetModState(); event.key.keysym.sym = event.text.text[0]; + global_window->eventKeyDown(event.key); global_window->eventKeyPress(event.key); @@ -331,7 +329,7 @@ bool Window::handleEvent() { // Stop unprintable characters (ctrl+, alt+ and escape), // also prevent ` and/or ~ appearing in console every time it's toggled. if (!isUnprintableChar(event.key.keysym)) { - //printf("In SDL_KEYDOWN key SKIP\n"); + //printf("In SDL_KEYDOWN key SKIP [%d]\n",event.key.keysym.sym); break; } codeLocation = "i";