diff options
author | Andrei Karas <akaras@inbox.ru> | 2013-01-23 19:51:38 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2013-01-23 19:51:38 +0300 |
commit | 533e703a2c394b9c4a0c0e2d7367dd5cc48c1502 (patch) | |
tree | bc416027f6fb4d221d04c22ca9c15c11674ca45b | |
parent | 0d1ecc47f4b30d40474ac9402180f1a690a8eee2 (diff) | |
download | mv-533e703a2c394b9c4a0c0e2d7367dd5cc48c1502.tar.gz mv-533e703a2c394b9c4a0c0e2d7367dd5cc48c1502.tar.bz2 mv-533e703a2c394b9c4a0c0e2d7367dd5cc48c1502.tar.xz mv-533e703a2c394b9c4a0c0e2d7367dd5cc48c1502.zip |
Add support for handling event for show/hide on screen keyboard.
-rw-r--r-- | src/client.cpp | 23 | ||||
-rw-r--r-- | src/client.h | 2 | ||||
-rw-r--r-- | src/game.cpp | 34 |
3 files changed, 43 insertions, 16 deletions
diff --git a/src/client.cpp b/src/client.cpp index 3a2a5f493..871b5c873 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -115,6 +115,10 @@ #include <cerrno> #endif +#ifdef ANDROID +#include <SDL_screenkeyboard.h> +#endif + #include <sys/stat.h> #include <iostream> @@ -685,8 +689,11 @@ void Client::gameInit() start_time = static_cast<int>(time(nullptr)); - // Initialize PlayerInfo PlayerInfo::init(); + +#ifdef ANDROID + updateScreenKeyboard(SDL_GetScreenKeyboardHeight(nullptr)); +#endif } Client::~Client() @@ -958,6 +965,9 @@ int Client::gameExec() inputManager.handleAssignKey(event, INPUT_JOYSTICK); break; + case SDL_MOUSEMOTION: + break; + #ifdef ANDROID case SDL_ACTIVEEVENT: if ((event.active.state & SDL_APPACTIVE) @@ -967,9 +977,11 @@ int Client::gameExec() logger->log("exit on lost focus"); } break; -#endif - case SDL_MOUSEMOTION: + + case SDL_KEYBOARDSHOW: + updateScreenKeyboard(event.user.code); break; +#endif default: // logger->log("unknown event: %d", event.type); @@ -2882,3 +2894,8 @@ void Client::windowRemoved(const Window *const window) if (instance()->mCurrentDialog == window) instance()->mCurrentDialog = nullptr; } + +void Client::updateScreenKeyboard(int height) +{ +// logger->log("keyboard height: %d", height); +} diff --git a/src/client.h b/src/client.h index a448678d0..956ee9b85 100644 --- a/src/client.h +++ b/src/client.h @@ -321,6 +321,8 @@ public: static void windowRemoved(const Window *const window); + static void updateScreenKeyboard(int height); + private: void initRootDir(); diff --git a/src/game.cpp b/src/game.cpp index fe279868e..7b5413692 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -942,20 +942,28 @@ void Game::handleInput() if (inputManager.handleEvent(event)) return; - if (event.type == SDL_VIDEORESIZE) + switch (event.type) { - // Let the client deal with this one (it'll pass down from there) - Client::resize(event.resize.w, event.resize.h); - } - // Active event - else if (event.type == SDL_ACTIVEEVENT) - { - handleActive(event); - } - // Quit event - else if (event.type == SDL_QUIT) - { - Client::setState(STATE_EXIT); + case SDL_VIDEORESIZE: + // Let the client deal with this one (it'll + // pass down from there) + Client::resize(event.resize.w, event.resize.h); + break; + // Active event + case SDL_ACTIVEEVENT: + handleActive(event); + break; + // Quit event + case SDL_QUIT: + Client::setState(STATE_EXIT); + break; +#ifdef ANDROID + case SDL_KEYBOARDSHOW: + Client::updateScreenKeyboard(event.user.code); + break; +#endif + default: + break; } BLOCK_END("Game::handleInput 2") } // End while |