aboutsummaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
Diffstat (limited to 'backends')
-rw-r--r--backends/events/androidsdl/androidsdl-events.cpp13
-rw-r--r--backends/platform/androidsdl/androidsdl-sdl.cpp96
-rw-r--r--backends/platform/androidsdl/androidsdl-sdl.h8
3 files changed, 106 insertions, 11 deletions
diff --git a/backends/events/androidsdl/androidsdl-events.cpp b/backends/events/androidsdl/androidsdl-events.cpp
index 0adcff817e..125f411289 100644
--- a/backends/events/androidsdl/androidsdl-events.cpp
+++ b/backends/events/androidsdl/androidsdl-events.cpp
@@ -26,7 +26,6 @@
#include "backends/events/androidsdl/androidsdl-events.h"
#include "backends/platform/androidsdl/androidsdl-sdl.h"
-#include <SDL_screenkeyboard.h>
bool AndroidSdlEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {
if (ev.button.button == SDL_BUTTON_LEFT)
@@ -43,16 +42,8 @@ bool AndroidSdlEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &
else if (ev.button.button == SDL_BUTTON_MIDDLE) {
event.type = Common::EVENT_MBUTTONDOWN;
- static int show_onscreen = 0;
- if (show_onscreen == 0) {
- SDL_ANDROID_SetScreenKeyboardShown(0);
- show_onscreen++;
- } else if (show_onscreen==1) {
- SDL_ANDROID_SetScreenKeyboardShown(1);
- show_onscreen++;
- }
- if (show_onscreen == 2)
- show_onscreen = 0;
+ const bool show_onscreen = g_system->getFeatureState(OSystem::kFeatureOnScreenControl);
+ g_system->setFeatureState(OSystem::kFeatureOnScreenControl, !show_onscreen);
}
#endif
else
diff --git a/backends/platform/androidsdl/androidsdl-sdl.cpp b/backends/platform/androidsdl/androidsdl-sdl.cpp
index d04512475a..920dad2234 100644
--- a/backends/platform/androidsdl/androidsdl-sdl.cpp
+++ b/backends/platform/androidsdl/androidsdl-sdl.cpp
@@ -27,6 +27,8 @@
#include "backends/platform/androidsdl/androidsdl-sdl.h"
#include "backends/events/androidsdl/androidsdl-events.h"
#include "backends/graphics/androidsdl/androidsdl-graphics.h"
+#include <SDL_android.h>
+#include <SDL_screenkeyboard.h>
void OSystem_ANDROIDSDL::initBackend() {
// Create the backend custom managers
@@ -42,7 +44,101 @@ void OSystem_ANDROIDSDL::initBackend() {
if (!ConfMan.hasKey("gfx_mode"))
ConfMan.set("gfx_mode", "2x");
+
+ if (!ConfMan.hasKey("swap_menu_and_back_buttons"))
+ ConfMan.setBool("swap_menu_and_back_buttons", true);
+ else
+ swapMenuAndBackButtons(ConfMan.getBool("swap_menu_and_back_buttons"));
+
+ if (!ConfMan.hasKey("touchpad_mouse_mode")) {
+ const bool enable = SDL_ANDROID_GetMouseEmulationMode();
+ ConfMan.setBool("touchpad_mouse_mode", enable);
+ } else
+ touchpadMode(ConfMan.getBool("touchpad_mouse_mode"));
+
+ if (!ConfMan.hasKey("onscreen_control")) {
+ const bool enable = SDL_ANDROID_GetScreenKeyboardShown();
+ ConfMan.setBool("onscreen_control", enable);
+ } else
+ showOnScreenControl(ConfMan.getBool("onscreen_control"));
// Call parent implementation of this method
OSystem_POSIX::initBackend();
}
+
+void OSystem_ANDROIDSDL::showOnScreenControl(bool enable) {
+ if (enable)
+ SDL_ANDROID_SetScreenKeyboardShown(1);
+ else
+ SDL_ANDROID_SetScreenKeyboardShown(0);
+}
+
+void OSystem_ANDROIDSDL::touchpadMode(bool enable) {
+ if (enable)
+ switchToRelativeMouseMode();
+ else
+ switchToDirectMouseMode();
+}
+
+void OSystem_ANDROIDSDL::swapMenuAndBackButtons(bool enable) {
+ static int KEYCODE_MENU = 82;
+ static int KEYCODE_BACK = 4;
+ if (enable) {
+ SDL_ANDROID_SetAndroidKeycode(KEYCODE_BACK, SDLK_F13);
+ SDL_ANDROID_SetAndroidKeycode(KEYCODE_MENU, SDLK_ESCAPE);
+ } else {
+ SDL_ANDROID_SetAndroidKeycode(KEYCODE_BACK, SDLK_ESCAPE);
+ SDL_ANDROID_SetAndroidKeycode(KEYCODE_MENU, SDLK_F13);
+ }
+}
+
+void OSystem_ANDROIDSDL::switchToDirectMouseMode() {
+ SDL_ANDROID_SetMouseEmulationMode(0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1);
+}
+
+void OSystem_ANDROIDSDL::switchToRelativeMouseMode() {
+ SDL_ANDROID_SetMouseEmulationMode(1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1);
+}
+
+void OSystem_ANDROIDSDL::setFeatureState(Feature f, bool enable) {
+ switch (f) {
+ case kFeatureTouchpadMode:
+ ConfMan.setBool("touchpad_mouse_mode", enable);
+ touchpadMode(enable);
+ break;
+ case kFeatureOnScreenControl:
+ ConfMan.setBool("onscreen_control", enable);
+ showOnScreenControl(enable);
+ break;
+ case kFeatureSwapMenuAndBackButtons:
+ ConfMan.setBool("swap_menu_and_back_buttons", enable);
+ swapMenuAndBackButtons(enable);
+ break;
+ }
+
+ OSystem_POSIX::setFeatureState(f, enable);
+}
+
+bool OSystem_ANDROIDSDL::getFeatureState(Feature f) {
+ switch (f) {
+ case kFeatureTouchpadMode:
+ return ConfMan.getBool("touchpad_mouse_mode");
+ break;
+ case kFeatureOnScreenControl:
+ return ConfMan.getBool("onscreen_control");
+ break;
+ case kFeatureSwapMenuAndBackButtons:
+ return ConfMan.getBool("swap_menu_and_back_buttons");
+ break;
+ default:
+ return OSystem_POSIX::getFeatureState(f);
+ break;
+ }
+}
+
+bool OSystem_ANDROIDSDL::hasFeature(Feature f) {
+ return (f == kFeatureTouchpadMode ||
+ f == kFeatureOnScreenControl ||
+ f == kFeatureSwapMenuAndBackButtons ||
+ f == OSystem_POSIX::getFeatureState(f));
+}
diff --git a/backends/platform/androidsdl/androidsdl-sdl.h b/backends/platform/androidsdl/androidsdl-sdl.h
index 6ebe5022eb..e83f610d10 100644
--- a/backends/platform/androidsdl/androidsdl-sdl.h
+++ b/backends/platform/androidsdl/androidsdl-sdl.h
@@ -28,6 +28,14 @@
class OSystem_ANDROIDSDL : public OSystem_POSIX {
public:
virtual void initBackend();
+ virtual void setFeatureState(Feature f, bool enable);
+ virtual bool getFeatureState(Feature f);
+ virtual bool hasFeature(Feature f);
+ void touchpadMode(bool enable);
+ void swapMenuAndBackButtons(bool enable);
+ void switchToDirectMouseMode();
+ void switchToRelativeMouseMode();
+ void showOnScreenControl(bool enable);
#ifdef ENABLE_KEYMAPPER
// FIXME: This just calls parent methods, is it needed?