aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/3ds/osystem-events.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/3ds/osystem-events.cpp')
-rw-r--r--backends/platform/3ds/osystem-events.cpp72
1 files changed, 59 insertions, 13 deletions
diff --git a/backends/platform/3ds/osystem-events.cpp b/backends/platform/3ds/osystem-events.cpp
index de0f58426c..0e635f0e1f 100644
--- a/backends/platform/3ds/osystem-events.cpp
+++ b/backends/platform/3ds/osystem-events.cpp
@@ -33,6 +33,7 @@ namespace _3DS {
static Common::Mutex *eventMutex;
static InputMode inputMode = MODE_DRAG;
+static InputMode savedInputMode = MODE_DRAG;
static aptHookCookie cookie;
static bool optionMenuOpening = false;
static Common::String messageOSD;
@@ -146,13 +147,41 @@ static void eventThreadFunc(void *arg) {
}
// Button events
+ if (keysPressed & KEY_L) {
+ if (osys->getWidth() >= 400 || osys->getHeight() >= 240) {
+ if (osys->getMagnifyMode() == MODE_MAGOFF) {
+ osys->setMagnifyMode(MODE_MAGON);
+ if (inputMode == MODE_DRAG) {
+ inputMode = MODE_HOVER;
+ osys->displayMessageOnOSD("Magnify Mode On. Switching to Hover Mode...");
+ } else
+ osys->displayMessageOnOSD("Magnify Mode On");
+ } else {
+ osys->setMagnifyMode(MODE_MAGOFF);
+ osys->updateSize();
+ if (savedInputMode == MODE_DRAG) {
+ inputMode = savedInputMode;
+ osys->displayMessageOnOSD("Magnify Mode Off. Reactivating Drag Mode...");
+ } else
+ osys->displayMessageOnOSD("Magnify Mode Off");
+ }
+ } else {
+ if (osys->getWidth() == 0 || osys->getHeight() == 0) {
+ osys->displayMessageOnOSD("Magnify Mode cannot be activated in Launcher.");
+ } else
+ osys->displayMessageOnOSD("In-game resolution too small to magnify.");
+ }
+ }
if (keysPressed & KEY_R) {
if (inputMode == MODE_DRAG) {
- inputMode = MODE_HOVER;
+ inputMode = savedInputMode = MODE_HOVER;
osys->displayMessageOnOSD("Hover Mode");
} else {
- inputMode = MODE_DRAG;
- osys->displayMessageOnOSD("Drag Mode");
+ if (osys->getMagnifyMode() == MODE_MAGOFF) {
+ inputMode = savedInputMode = MODE_DRAG;
+ osys->displayMessageOnOSD("Drag Mode");
+ } else
+ osys->displayMessageOnOSD("Cannot Switch to Drag Mode while Magnify Mode is On");
}
}
if (keysPressed & KEY_A || keysPressed & KEY_DLEFT || keysReleased & KEY_A || keysReleased & KEY_DLEFT) {
@@ -165,6 +194,16 @@ static void eventThreadFunc(void *arg) {
event.type = Common::EVENT_LBUTTONUP;
pushEventQueue(eventQueue, event);
}
+ if (keysPressed & KEY_B || keysReleased & KEY_B || keysPressed & KEY_DDOWN || keysReleased & KEY_DDOWN) {
+ if (keysPressed & KEY_B || keysPressed & KEY_DDOWN)
+ event.type = Common::EVENT_KEYDOWN;
+ else
+ event.type = Common::EVENT_KEYUP;
+ event.kbd.keycode = Common::KEYCODE_ESCAPE;
+ event.kbd.ascii = Common::ASCII_ESCAPE;
+ event.kbd.flags = 0;
+ pushEventQueue(eventQueue, event);
+ }
if (keysPressed & KEY_X || keysPressed & KEY_DUP || keysReleased & KEY_X || keysReleased & KEY_DUP) {
// SIMULATE RIGHT CLICK
event.mouse.x = lastTouch.px;
@@ -175,7 +214,7 @@ static void eventThreadFunc(void *arg) {
event.type = Common::EVENT_RBUTTONUP;
pushEventQueue(eventQueue, event);
}
- if (keysPressed & KEY_L) {
+ if (keysPressed & KEY_Y || keysPressed & KEY_DRIGHT) {
event.type = Common::EVENT_VIRTUAL_KEYBOARD;
pushEventQueue(eventQueue, event);
}
@@ -187,15 +226,18 @@ static void eventThreadFunc(void *arg) {
if (!optionMenuOpened)
optionMenuOpening = true;
}
- if (keysPressed & KEY_B || keysReleased & KEY_B || keysPressed & KEY_DDOWN || keysReleased & KEY_DDOWN) {
- if (keysPressed & KEY_B || keysPressed & KEY_DDOWN)
- event.type = Common::EVENT_KEYDOWN;
- else
- event.type = Common::EVENT_KEYUP;
- event.kbd.keycode = Common::KEYCODE_ESCAPE;
- event.kbd.ascii = Common::ASCII_ESCAPE;
- event.kbd.flags = 0;
- pushEventQueue(eventQueue, event);
+
+ // If magnify mode is on when returning to Launcher, turn it off
+ if (g_system->getEventManager()->shouldRTL()) {
+ if (osys->getMagnifyMode() == MODE_MAGON) {
+ osys->setMagnifyMode(MODE_MAGOFF);
+ osys->updateSize();
+ if (savedInputMode == MODE_DRAG) {
+ inputMode = savedInputMode;
+ osys->displayMessageOnOSD("Magnify Mode Off. Reactivating Drag Mode.\nReturning to Launcher...");
+ } else
+ osys->displayMessageOnOSD("Magnify Mode Off. Returning to Launcher...");
+ }
}
// TODO: EVENT_PREDICTIVE_DIALOG
@@ -268,6 +310,10 @@ void OSystem_3DS::transformPoint(touchPosition &point) {
}
}
+void OSystem_3DS::setMagnifyMode(MagnifyMode mode) {
+ _magnifyMode = mode;
+}
+
void OSystem_3DS::displayMessageOnOSD(const char *msg) {
messageOSD = msg;
showMessageOSD = true;