ANDROID: Add basic keymapper support (#2026)
* ANDROID: Remove hard-coded key mappings * ANDROID: Add default key bindings
This commit is contained in:
parent
00a7626a8a
commit
fffb25a47a
4 changed files with 23 additions and 111 deletions
|
@ -60,6 +60,10 @@
|
||||||
#include "backends/saves/default/default-saves.h"
|
#include "backends/saves/default/default-saves.h"
|
||||||
#include "backends/timer/default/default-timer.h"
|
#include "backends/timer/default/default-timer.h"
|
||||||
|
|
||||||
|
#include "backends/keymapper/keymapper.h"
|
||||||
|
#include "backends/keymapper/keymapper-defaults.h"
|
||||||
|
#include "backends/keymapper/standard-actions.h"
|
||||||
|
|
||||||
#include "backends/platform/android/jni-android.h"
|
#include "backends/platform/android/jni-android.h"
|
||||||
#include "backends/platform/android/android.h"
|
#include "backends/platform/android/android.h"
|
||||||
#include "backends/platform/android/graphics.h"
|
#include "backends/platform/android/graphics.h"
|
||||||
|
@ -101,8 +105,7 @@ OSystem_Android::OSystem_Android(int audio_sample_rate, int audio_buffer_size) :
|
||||||
_dpad_scale(4),
|
_dpad_scale(4),
|
||||||
_fingersDown(0),
|
_fingersDown(0),
|
||||||
_trackball_scale(2),
|
_trackball_scale(2),
|
||||||
_joystick_scale(10),
|
_joystick_scale(10) {
|
||||||
_swap_menu_and_back(false) {
|
|
||||||
|
|
||||||
_fsFactory = new POSIXFilesystemFactory();
|
_fsFactory = new POSIXFilesystemFactory();
|
||||||
|
|
||||||
|
@ -330,11 +333,6 @@ void OSystem_Android::initBackend() {
|
||||||
else
|
else
|
||||||
ConfMan.setBool("onscreen_control", true);
|
ConfMan.setBool("onscreen_control", true);
|
||||||
|
|
||||||
if (ConfMan.hasKey("swap_menu_and_back_buttons"))
|
|
||||||
_swap_menu_and_back = ConfMan.getBool("swap_menu_and_back_buttons");
|
|
||||||
else
|
|
||||||
ConfMan.setBool("swap_menu_and_back_buttons", false);
|
|
||||||
|
|
||||||
// BUG: "transient" ConfMan settings get nuked by the options
|
// BUG: "transient" ConfMan settings get nuked by the options
|
||||||
// screen. Passing the savepath in this way makes it stick
|
// screen. Passing the savepath in this way makes it stick
|
||||||
// (via ConfMan.registerDefault)
|
// (via ConfMan.registerDefault)
|
||||||
|
@ -374,7 +372,6 @@ bool OSystem_Android::hasFeature(Feature f) {
|
||||||
f == kFeatureOpenUrl ||
|
f == kFeatureOpenUrl ||
|
||||||
f == kFeatureTouchpadMode ||
|
f == kFeatureTouchpadMode ||
|
||||||
f == kFeatureOnScreenControl ||
|
f == kFeatureOnScreenControl ||
|
||||||
f == kFeatureSwapMenuAndBackButtons ||
|
|
||||||
f == kFeatureClipboardSupport) {
|
f == kFeatureClipboardSupport) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -397,10 +394,6 @@ void OSystem_Android::setFeatureState(Feature f, bool enable) {
|
||||||
ConfMan.setBool("onscreen_control", enable);
|
ConfMan.setBool("onscreen_control", enable);
|
||||||
JNI::showKeyboardControl(enable);
|
JNI::showKeyboardControl(enable);
|
||||||
break;
|
break;
|
||||||
case kFeatureSwapMenuAndBackButtons:
|
|
||||||
ConfMan.setBool("swap_menu_and_back_buttons", enable);
|
|
||||||
_swap_menu_and_back = enable;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
ModularBackend::setFeatureState(f, enable);
|
ModularBackend::setFeatureState(f, enable);
|
||||||
break;
|
break;
|
||||||
|
@ -415,13 +408,27 @@ bool OSystem_Android::getFeatureState(Feature f) {
|
||||||
return ConfMan.getBool("touchpad_mouse_mode");
|
return ConfMan.getBool("touchpad_mouse_mode");
|
||||||
case kFeatureOnScreenControl:
|
case kFeatureOnScreenControl:
|
||||||
return ConfMan.getBool("onscreen_control");
|
return ConfMan.getBool("onscreen_control");
|
||||||
case kFeatureSwapMenuAndBackButtons:
|
|
||||||
return ConfMan.getBool("swap_menu_and_back_buttons");
|
|
||||||
default:
|
default:
|
||||||
return ModularBackend::getFeatureState(f);
|
return ModularBackend::getFeatureState(f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Common::KeymapperDefaultBindings *OSystem_Android::getKeymapperDefaultBindings() {
|
||||||
|
Common::KeymapperDefaultBindings *keymapperDefaultBindings = new Common::KeymapperDefaultBindings();
|
||||||
|
|
||||||
|
if (ConfMan.hasKey("swap_menu_and_back") && ConfMan.getBool("swap_menu_and_back")) {
|
||||||
|
keymapperDefaultBindings->setDefaultBinding(Common::kGlobalKeymapName, "MENU", "AC_BACK");
|
||||||
|
keymapperDefaultBindings->setDefaultBinding("engine-default", Common::kStandardActionSkip, "MENU");
|
||||||
|
keymapperDefaultBindings->setDefaultBinding(Common::kGuiKeymapName, "CLOS", "MENU");
|
||||||
|
} else {
|
||||||
|
keymapperDefaultBindings->setDefaultBinding(Common::kGlobalKeymapName, "MENU", "MENU");
|
||||||
|
keymapperDefaultBindings->setDefaultBinding("engine-default", Common::kStandardActionSkip, "AC_BACK");
|
||||||
|
keymapperDefaultBindings->setDefaultBinding(Common::kGuiKeymapName, "CLOS", "AC_BACK");
|
||||||
|
}
|
||||||
|
|
||||||
|
return keymapperDefaultBindings;
|
||||||
|
}
|
||||||
|
|
||||||
uint32 OSystem_Android::getMillis(bool skipRecord) {
|
uint32 OSystem_Android::getMillis(bool skipRecord) {
|
||||||
timeval curTime;
|
timeval curTime;
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,6 @@ private:
|
||||||
int _dpad_scale;
|
int _dpad_scale;
|
||||||
int _joystick_scale;
|
int _joystick_scale;
|
||||||
int _fingersDown;
|
int _fingersDown;
|
||||||
bool _swap_menu_and_back;
|
|
||||||
|
|
||||||
void clipMouse(Common::Point &p);
|
void clipMouse(Common::Point &p);
|
||||||
void scaleMouse(Common::Point &p, int x, int y, bool deductDrawRect = true, bool touchpadMode = false);
|
void scaleMouse(Common::Point &p, int x, int y, bool deductDrawRect = true, bool touchpadMode = false);
|
||||||
|
@ -119,6 +118,8 @@ private:
|
||||||
public:
|
public:
|
||||||
virtual void pushEvent(const Common::Event &event);
|
virtual void pushEvent(const Common::Event &event);
|
||||||
virtual bool pollEvent(Common::Event &event);
|
virtual bool pollEvent(Common::Event &event);
|
||||||
|
virtual Common::KeymapperDefaultBindings *getKeymapperDefaultBindings();
|
||||||
|
|
||||||
virtual uint32 getMillis(bool skipRecord = false);
|
virtual uint32 getMillis(bool skipRecord = false);
|
||||||
virtual void delayMillis(uint msecs);
|
virtual void delayMillis(uint msecs);
|
||||||
|
|
||||||
|
|
|
@ -58,76 +58,6 @@ void OSystem_Android::pushEvent(int type, int arg1, int arg2, int arg3,
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case JE_SYS_KEY:
|
case JE_SYS_KEY:
|
||||||
switch (arg1) {
|
|
||||||
case JACTION_DOWN:
|
|
||||||
e.type = Common::EVENT_KEYDOWN;
|
|
||||||
break;
|
|
||||||
case JACTION_UP:
|
|
||||||
e.type = Common::EVENT_KEYUP;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
LOGE("unhandled jaction on system key: %d", arg1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (arg2) {
|
|
||||||
case JKEYCODE_BACK:
|
|
||||||
if (_swap_menu_and_back) {
|
|
||||||
if (arg1 == JACTION_DOWN) {
|
|
||||||
e.type = Common::EVENT_MAINMENU;
|
|
||||||
pushEvent(e);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
e.kbd.keycode = Common::KEYCODE_ESCAPE;
|
|
||||||
e.kbd.ascii = Common::ASCII_ESCAPE;
|
|
||||||
pushEvent(e);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
case JKEYCODE_MENU:
|
|
||||||
if (_swap_menu_and_back) {
|
|
||||||
e.kbd.keycode = Common::KEYCODE_ESCAPE;
|
|
||||||
e.kbd.ascii = Common::ASCII_ESCAPE;
|
|
||||||
pushEvent(e);
|
|
||||||
} else {
|
|
||||||
if (arg1 == JACTION_DOWN) {
|
|
||||||
e.type = Common::EVENT_MAINMENU;
|
|
||||||
pushEvent(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
case JKEYCODE_MEDIA_PAUSE:
|
|
||||||
case JKEYCODE_MEDIA_PLAY:
|
|
||||||
case JKEYCODE_MEDIA_PLAY_PAUSE:
|
|
||||||
if (arg1 == JACTION_DOWN) {
|
|
||||||
e.type = Common::EVENT_MAINMENU;
|
|
||||||
|
|
||||||
pushEvent(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
case JKEYCODE_CAMERA:
|
|
||||||
case JKEYCODE_SEARCH:
|
|
||||||
if (arg1 == JACTION_DOWN)
|
|
||||||
e.type = Common::EVENT_RBUTTONDOWN;
|
|
||||||
else
|
|
||||||
e.type = Common::EVENT_RBUTTONUP;
|
|
||||||
|
|
||||||
e.mouse = dynamic_cast<AndroidGraphicsManager *>(_graphicsManager)->getMousePosition();
|
|
||||||
|
|
||||||
pushEvent(e);
|
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// fall through
|
|
||||||
|
|
||||||
case JE_KEY:
|
case JE_KEY:
|
||||||
switch (arg1) {
|
switch (arg1) {
|
||||||
case JACTION_DOWN:
|
case JACTION_DOWN:
|
||||||
|
|
|
@ -62,32 +62,6 @@ enum {
|
||||||
JACTION_POINTER_UP = 6
|
JACTION_POINTER_UP = 6
|
||||||
};
|
};
|
||||||
|
|
||||||
// system keys
|
|
||||||
enum {
|
|
||||||
JKEYCODE_SOFT_RIGHT = 2,
|
|
||||||
JKEYCODE_HOME = 3,
|
|
||||||
JKEYCODE_BACK = 4,
|
|
||||||
JKEYCODE_CALL = 5,
|
|
||||||
JKEYCODE_ENDCALL = 6,
|
|
||||||
JKEYCODE_VOLUME_UP = 24,
|
|
||||||
JKEYCODE_VOLUME_DOWN = 25,
|
|
||||||
JKEYCODE_POWER = 26,
|
|
||||||
JKEYCODE_CAMERA = 27,
|
|
||||||
JKEYCODE_HEADSETHOOK = 79,
|
|
||||||
JKEYCODE_FOCUS = 80,
|
|
||||||
JKEYCODE_MENU = 82,
|
|
||||||
JKEYCODE_SEARCH = 84,
|
|
||||||
JKEYCODE_MUTE = 91,
|
|
||||||
JKEYCODE_MEDIA_PLAY_PAUSE = 85,
|
|
||||||
JKEYCODE_MEDIA_STOP = 86,
|
|
||||||
JKEYCODE_MEDIA_NEXT = 87,
|
|
||||||
JKEYCODE_MEDIA_PREVIOUS = 88,
|
|
||||||
JKEYCODE_MEDIA_REWIND = 89,
|
|
||||||
JKEYCODE_MEDIA_FAST_FORWARD = 90,
|
|
||||||
JKEYCODE_MEDIA_PLAY = 126,
|
|
||||||
JKEYCODE_MEDIA_PAUSE = 127
|
|
||||||
};
|
|
||||||
|
|
||||||
// five-way navigation control
|
// five-way navigation control
|
||||||
enum {
|
enum {
|
||||||
JKEYCODE_DPAD_UP = 19,
|
JKEYCODE_DPAD_UP = 19,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue