From 15acee29f19c845dc534d2c8af48a449ea1cd380 Mon Sep 17 00:00:00 2001 From: lubomyr Date: Mon, 30 Jan 2017 22:35:40 +0200 Subject: [PATCH] ANDROIDSDL: implemented checkbox for change mouse mode in Options menu --- .../platform/androidsdl/androidsdl-sdl.cpp | 33 ++++++++++++++ backends/platform/androidsdl/androidsdl-sdl.h | 4 ++ common/system.h | 8 ++++ gui/options.cpp | 41 ++++++++++++++++++ gui/options.h | 16 +++++++ gui/themes/scummclassic.zip | Bin 126739 -> 127241 bytes gui/themes/scummclassic/classic_layout.stx | 8 ++++ .../scummclassic/classic_layout_lowres.stx | 8 ++++ gui/themes/scummmodern.zip | Bin 1646279 -> 1646781 bytes gui/themes/scummmodern/scummmodern_layout.stx | 8 ++++ .../scummmodern/scummmodern_layout_lowres.stx | 8 ++++ 11 files changed, 134 insertions(+) diff --git a/backends/platform/androidsdl/androidsdl-sdl.cpp b/backends/platform/androidsdl/androidsdl-sdl.cpp index d04512475a2..ab0c0524f1d 100644 --- a/backends/platform/androidsdl/androidsdl-sdl.cpp +++ b/backends/platform/androidsdl/androidsdl-sdl.cpp @@ -27,6 +27,7 @@ #include "backends/platform/androidsdl/androidsdl-sdl.h" #include "backends/events/androidsdl/androidsdl-events.h" #include "backends/graphics/androidsdl/androidsdl-graphics.h" +#include void OSystem_ANDROIDSDL::initBackend() { // Create the backend custom managers @@ -42,7 +43,39 @@ void OSystem_ANDROIDSDL::initBackend() { if (!ConfMan.hasKey("gfx_mode")) ConfMan.set("gfx_mode", "2x"); + + if (!ConfMan.hasKey("touchpad_mouse_mode")) { + const bool enable = (SDL_ANDROID_GetMouseEmulationMode() == 0) ? false : true; + ConfMan.setBool("touchpad_mouse_mode", enable); + } else { + touchpadMode(ConfMan.getBool("touchpad_mouse_mode")); + } // Call parent implementation of this method OSystem_POSIX::initBackend(); } + +void OSystem_ANDROIDSDL::touchpadMode(bool enable) { + if (enable) + switchToRelativeMouseMode(); + else + switchToDirectMouseMode(); +} + +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: + touchpadMode(enable); + break; + } + + OSystem_POSIX::setFeatureState(f, enable); +} diff --git a/backends/platform/androidsdl/androidsdl-sdl.h b/backends/platform/androidsdl/androidsdl-sdl.h index 6ebe5022ebb..72d2a50093a 100644 --- a/backends/platform/androidsdl/androidsdl-sdl.h +++ b/backends/platform/androidsdl/androidsdl-sdl.h @@ -28,6 +28,10 @@ class OSystem_ANDROIDSDL : public OSystem_POSIX { public: virtual void initBackend(); + virtual void setFeatureState(Feature f, bool enable); + void touchpadMode(bool enable); + void switchToDirectMouseMode(); + void switchToRelativeMouseMode(); #ifdef ENABLE_KEYMAPPER // FIXME: This just calls parent methods, is it needed? diff --git a/common/system.h b/common/system.h index 41f217fc0b6..5dd3f68bc0f 100644 --- a/common/system.h +++ b/common/system.h @@ -337,6 +337,14 @@ public: * This feature has no associated state. */ kFeatureOpenUrl + +#ifdef ANDROIDSDL + /** + * mouse emulation mode + */ + , + kFeatureTouchpadMode +#endif }; /** diff --git a/gui/options.cpp b/gui/options.cpp index 371a949c35c..ffce01fc1e8 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -136,6 +136,10 @@ OptionsDialog::~OptionsDialog() { } void OptionsDialog::init() { +#ifdef ANDROIDSDL + _enableAndroidSdlSettings = false; + _touchpadCheckbox = 0; +#endif _enableGraphicSettings = false; _gfxPopUp = 0; _gfxPopUpDesc = 0; @@ -202,6 +206,14 @@ void OptionsDialog::build() { _guioptionsString = ConfMan.get("guioptions", _domain); _guioptions = parseGameGUIOptions(_guioptionsString); } + +#ifdef ANDROIDSDL + // AndroidSDL options + if (ConfMan.hasKey("touchpad_mouse_mode", _domain)) { + bool touchpadState = ConfMan.getBool("touchpad_mouse_mode", _domain); + _touchpadCheckbox->setState(touchpadState); + } +#endif // Graphic options if (_fullscreenCheckbox) { @@ -380,6 +392,14 @@ void OptionsDialog::open() { } void OptionsDialog::apply() { +#ifdef ANDROIDSDL + if (_enableAndroidSdlSettings) { + if (ConfMan.getBool("touchpad_mouse_mode", _domain) != _touchpadCheckbox->getState()) { + ConfMan.setBool("touchpad_mouse_mode", _touchpadCheckbox->getState(), _domain); + g_system->setFeatureState(OSystem::kFeatureTouchpadMode, _touchpadCheckbox->getState()); + } + } +#endif // Graphic options bool graphicsModeChanged = false; if (_fullscreenCheckbox) { @@ -672,6 +692,10 @@ void OptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data Dialog::handleCommand(sender, cmd, data); } } + +void OptionsDialog::setAndroidSdlSettingsState(bool enabled) { + _enableAndroidSdlSettings = enabled; +} void OptionsDialog::setGraphicSettingsState(bool enabled) { _enableGraphicSettings = enabled; @@ -798,6 +822,15 @@ void OptionsDialog::setSubtitleSettingsState(bool enabled) { _subSpeedSlider->setEnabled(ena); _subSpeedLabel->setEnabled(ena); } + +#ifdef ANDROIDSDL + void OptionsDialog::addAndroidSdlControls(GuiObject *boss, const Common::String &prefix) { + // Touchpad Mouse mode + _touchpadCheckbox = new CheckboxWidget(boss, prefix + "grTouchpadCheckbox", _("Touchpad mouse mode")); + + _enableAndroidSdlSettings = true; + } +#endif void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &prefix) { const OSystem::GraphicsMode *gm = g_system->getSupportedGraphicsModes(); @@ -1226,6 +1259,14 @@ void GlobalOptionsDialog::build() { // The tab widget TabWidget *tab = new TabWidget(this, "GlobalOptions.TabWidget"); +#ifdef ANDROIDSDL + // + // The control tab only for Android SDL platform + // + tab->addTab(_("Control")); + addAndroidSdlControls(tab, "GlobalOptions_AndroidSdl."); +#endif + // // 1) The graphics tab // diff --git a/gui/options.h b/gui/options.h index a6eebe57485..e6bb195b411 100644 --- a/gui/options.h +++ b/gui/options.h @@ -86,6 +86,9 @@ protected: virtual void clean(); void rebuild(); +#ifdef ANDROIDSDL + void addAndroidSdlControls(GuiObject *boss, const Common::String &prefix); +#endif void addGraphicControls(GuiObject *boss, const Common::String &prefix); void addAudioControls(GuiObject *boss, const Common::String &prefix); void addMIDIControls(GuiObject *boss, const Common::String &prefix); @@ -96,6 +99,9 @@ protected: void addSubtitleControls(GuiObject *boss, const Common::String &prefix, int maxSliderVal = 255); void addEngineControls(GuiObject *boss, const Common::String &prefix, const ExtraGuiOptions &engineOptions); +#ifdef ANDROIDSDL + void setAndroidSdlSettingsState(bool enabled); +#endif void setGraphicSettingsState(bool enabled); void setAudioSettingsState(bool enabled); void setMIDISettingsState(bool enabled); @@ -112,6 +118,16 @@ protected: int _pathsTabId; private: + +#ifdef ANDROIDSDL + // + // AndroidSDL controls + // + bool _enableAndroidSdlSettings; + + CheckboxWidget *_touchpadCheckbox; +#endif + // // Graphics controls // diff --git a/gui/themes/scummclassic.zip b/gui/themes/scummclassic.zip index 400b997b93f202e309476eccd9811c72c1736d22..175a646fd6b4cfede0d9dcbf57e7f32579f20530 100644 GIT binary patch delta 640 zcmbPykG=B|J8ytDGm8iV2w3N(PUH<^amoz$+?c+H56sxC&cBC`*(o!8^E26eYa#Wm zHeP-`ar;C!Fff3y5X1BdZy7~4S4Rp-GICCCoUFj*n3qzNpP3Szk~96I4P)ixznl5F z(u+d!OOrDS5>qCB+@v}AY^mwywMCz%@@Z_f@p5{dmYcJdfgxw@_O%?0Y@``8d2P|Y z=>@)w8k6r7b5EXMyamkJzCf9A`9!e$w|j48bmWFGCmdk>0%dlbVYCo{h#tAaxQXA= zIxp2zI`VYC2?GNI2(yDj1Om1+g6I$rS6|m4=Kya;CJ|;xfPq44`uaDF5{z4>pLoNl zE(;Q9t4%xI!^gk?!eYp#Oy_wERdP~QBFEL5fdPd1QIrI{WmJ&G3}gh@GQIaLqp|{O zz%ejLB2+MJX`H}0{lZ&Dbp?=fShsOI32-wofUr1NHpY}u5$@5oR@V*qFYD56sxC&cBC`xp{Zs=4Z0`)_g@Z zah@@TZ}v#7XJC+8zd1QlOLB6Nz)-km`wC7*Hf*YGr++YK)Y!gWg|TlE*v{>a+Zi3XAt*Cu@ZeWxrdK|0ffcC{)B)f z)Azk&R965gX{${;ja5mbB>(h-?-+%rOT1?k1ckzMo%f8Aj7z4wy=PRAMGXuF1|byF zo8L1kE20Jg1A`>8lE$eVjMLY0GD-=cyLtM@_ly#(OB!vrGENWJ&L}Z`{Rc)KEs#^o zcQl+l%+0_6!r~}~H637NNXx89O);&on9lc}QCbnC{-NIbO&kIY3?Pi+`^Ks>jMID1 iF^YrD1_$f({T~=5Se7(yyEFav2SyFHtT&7d3=9B5QJXjb diff --git a/gui/themes/scummclassic/classic_layout.stx b/gui/themes/scummclassic/classic_layout.stx index b3100d4b92a..d48f208714e 100644 --- a/gui/themes/scummclassic/classic_layout.stx +++ b/gui/themes/scummclassic/classic_layout.stx @@ -237,6 +237,14 @@ + + + + + + diff --git a/gui/themes/scummclassic/classic_layout_lowres.stx b/gui/themes/scummclassic/classic_layout_lowres.stx index 7879e05a977..f58cf76e231 100644 --- a/gui/themes/scummclassic/classic_layout_lowres.stx +++ b/gui/themes/scummclassic/classic_layout_lowres.stx @@ -234,6 +234,14 @@ + + + + + + diff --git a/gui/themes/scummmodern.zip b/gui/themes/scummmodern.zip index 673d67ed87b37d077d845e8c88a77da8652424e2..8eb1353e274542dbb6deb53ffabc12926f879cdd 100644 GIT binary patch delta 2020 zcmbVMZA?>F7(V>~N=s?${W=F)N^#0G46^Yd0ZsT=NKhAXXc0slcnj;&QLJo(tQv1N zy_?#7u#huDvn<(m(alAWV&iBVx5TJR4D82@*$)g$B-#GBEo@7c=$3Oo40ppnyUCNB zo<8sMzVCC+d##an38hElw=iCk}a8%@*XZLA(@z6%*67=Ow1u>Voos=b0sse zbz`rant~mZ?YYz$nV0Msr^-yqQv8s5MqQ>Ss8qhPd-U^1%WYSvt~_OT;u_UvR+jf~ zQe7sZn%sGdGOMzCI_do?btXXfs)Z1>{I2IOPCs`LM^UjYSm?TGc)B-cAf1SR}A@?WXR9% zQyaX&vy08L^!amamMVRzimOni?``3#mHs^S++DwG)VaO>_7rNmmr<-&W;I;3$Kjhn(HawaYV4 zN=887)KR7xh`00?ZlTst9hTZnYv+oyc^I}f7k5<*KS4FY^{_%UjSarG{(3YShT15t_G+^)aR zpQtqfK%grWKY&_uZX_F0jgVK4d0~#fr^zbjD_;U1MrebN6!~a;Z2)kqGYeHw8t;zM z5YHo|TrPYUA()jAMn(A_3OfprOHSm7x5YI#9II9EwgObFINw`<;Fg3C^)g@}66Du1 z_2j2tbYwdLAYgSeQw6A0u6L>Y;w6g{00JFFSXas5ib{rCRj;>D_M^5?y&#c`Q%5yF zEIR#YAwqS;kAq{=qc!;kK%k=tJ$?p+!UN&83di$>2wD@uS3E0o@DhjE4x;zR+td}! z8Qo16;^$Zp9t`l2;H!bPG&digtk-5l?`e-470b3a!e94m6h_z2gd1&?DRu9hyfEzt zfPm6b7TxFx&wn099mVTGr9S#V=`My7>^?W~2qmrWX^_Ywaaw?IE!1$`x{OZ;>`G W$BPg&Cxjm<94|r}vRgR>0Qd)#atjOq delta 2028 zcmZuxTWl0n82;Otg|@rBF|(cdyWJZI#ezjCHz8bPg-}r_6qeFLP3i8o8wy*tH9)#x z$4V!WF3uqHWJ9MStyu$ng@bd{>zL&ArHTvx2I+CRR^S9%_R!U;gO zy3wV+@w(WAqEzBi!K$inix-Zuw@>yiRd+lQ>yzr-d@82ot6;Gy`S$Qc z+?v$v5r;wMReP+l`ulIV+$sQ|n5Y}ccoGu*-LPuKTPxQ4YF1}u^Nis$YA|w0Krt&p zP7CPO{X%XDC@xA!=ag(%84U(&n|5|oc6NrI5B&Mhx_E1s1t^Nrs}Z+|UT4qcb=55g z-hXlIAOMA_A+l9OaT8TP)bnKj1O|Y@mYzkbKF&dNYp{9yw#c5!Z9Cf2>(j_{Kkc2G ziky@lNp6Wa#Ys)H(EiKOz5)P>5);LSSguog_l0g|rqm#oZ={6|PpJycvjI@#rDu_5 zUE-kmooGiSnyJB=vHla&SO5yMK(`RR`oxfN)Wy#$MTeg%cIVOE>nX*ordmsHa}bC| z+B2v@$1M2WOWstIra;nFie)*JvWv`JJLo|^FCl#rb`N+3P2&4l09_b^l~at;i;NaDS-;pDblW^JhVh2Ep5c>!V)LF5xgs( zR?TAoD00%tq`eH$=p|mJ_i}eKdBuqw(aNyc*!aQNm{g^23_6oN9=kd)-dzYlVfIv| z6U!IUveEOy`!bf5vTNtsS|4L2mt>9btC

+ + + + + + diff --git a/gui/themes/scummmodern/scummmodern_layout_lowres.stx b/gui/themes/scummmodern/scummmodern_layout_lowres.stx index 7ef5fc5ee19..f8e56f40833 100644 --- a/gui/themes/scummmodern/scummmodern_layout_lowres.stx +++ b/gui/themes/scummmodern/scummmodern_layout_lowres.stx @@ -232,6 +232,14 @@ + + + + + +