aboutsummaryrefslogtreecommitdiff
path: root/backends/platform
diff options
context:
space:
mode:
authorJohn Willis2010-09-07 14:17:31 +0000
committerJohn Willis2010-09-07 14:17:31 +0000
commitfd407eeca3f2d50bc1a005bbcfd171369daa4f5f (patch)
tree187d262fca4340c1423a9bab6b99b54dc3bb0df0 /backends/platform
parent532663c742150b341de22a65da4fd761da6f497a (diff)
downloadscummvm-rg350-fd407eeca3f2d50bc1a005bbcfd171369daa4f5f.tar.gz
scummvm-rg350-fd407eeca3f2d50bc1a005bbcfd171369daa4f5f.tar.bz2
scummvm-rg350-fd407eeca3f2d50bc1a005bbcfd171369daa4f5f.zip
GP2XWIZ: Refactor backend.
* Add support for TouchScreen 'Tap Modes' Left Click, Right Click and Hover. * Rename OSystem_GP2XWIZ to OSystem_GPH to start the work on supporting a unified backend codebase for the GP2X, Wiz and Caanoo. * Sort out bugs in Caanoo input code. * Rework GP2XWiz input code to support switching new TouchScreen modes. svn-id: r52619
Diffstat (limited to 'backends/platform')
-rw-r--r--backends/platform/gp2xwiz/gp2xwiz-events.cpp463
-rw-r--r--backends/platform/gp2xwiz/gp2xwiz-graphics.cpp28
-rw-r--r--backends/platform/gp2xwiz/gp2xwiz-hw.cpp25
-rw-r--r--backends/platform/gp2xwiz/gp2xwiz-hw.h17
-rw-r--r--backends/platform/gp2xwiz/gp2xwiz-main.cpp8
-rw-r--r--backends/platform/gp2xwiz/gp2xwiz-sdl.h10
6 files changed, 281 insertions, 270 deletions
diff --git a/backends/platform/gp2xwiz/gp2xwiz-events.cpp b/backends/platform/gp2xwiz/gp2xwiz-events.cpp
index 19ef24ef58..1f603b4a3d 100644
--- a/backends/platform/gp2xwiz/gp2xwiz-events.cpp
+++ b/backends/platform/gp2xwiz/gp2xwiz-events.cpp
@@ -24,7 +24,7 @@
*/
/*
- * GP2X Wiz: Device Specific Event Handling.
+ * GPH: Device Specific Event Handling.
*
*/
@@ -35,33 +35,91 @@
#include "common/util.h"
#include "common/events.h"
-// FIXME move joystick defines out and replace with confile file options
-// we should really allow users to map any key to a joystick button using the keymapper.
#define JOY_DEADZONE 2200
#define JOY_XAXIS 0
#define JOY_YAXIS 1
-/* GP2X Wiz: Main Joystick Mappings */
+/* Quick default button states for modifiers. */
+int BUTTON_STATE_L = false;
+
+#if defined(CAANOO)
+
+ /* Caanoo: Main Joystick Button Mappings */
+ /* The Caanoo has an analogue stick so no digital DPAD */
+ enum {
+ /* Joystick Buttons */
+ BUTTON_A = 0,
+ BUTTON_X = 1,
+ BUTTON_B = 2,
+ BUTTON_Y = 3,
+ BUTTON_L = 4,
+ BUTTON_R = 5,
+ BUTTON_HOME = 6, // Home
+ BUTTON_HOLD = 7, // Hold (on Power)
+ BUTTON_HELP = 8, // Help I
+ BUTTON_HELP2 = 9, // Help II
+ BUTTON_CLICK = 10 // Stick Click
+ };
+
+ enum {
+ /* Unused Joystick Buttons on the Caanoo */
+ BUTTON_VOLUP = 51,
+ BUTTON_VOLDOWN = 52,
+ BUTTON_UP = 53,
+ BUTTON_UPLEFT = 54,
+ BUTTON_LEFT = 55,
+ BUTTON_DOWNLEFT = 56,
+ BUTTON_DOWN = 57,
+ BUTTON_DOWNRIGHT = 58,
+ BUTTON_RIGHT = 59,
+ BUTTON_UPRIGHT = 60,
+ BUTTON_MENU = 61,
+ BUTTON_SELECT = 62
+ };
+
+#else
+
+ /* Wiz: Main Joystick Mappings */
+ enum {
+ /* DPAD */
+ BUTTON_UP = 0,
+ BUTTON_UPLEFT = 1,
+ BUTTON_LEFT = 2,
+ BUTTON_DOWNLEFT = 3,
+ BUTTON_DOWN = 4,
+ BUTTON_DOWNRIGHT = 5,
+ BUTTON_RIGHT = 6,
+ BUTTON_UPRIGHT = 7,
+ /* Joystick Buttons */
+ BUTTON_MENU = 8,
+ BUTTON_SELECT = 9,
+ BUTTON_L = 10,
+ BUTTON_R = 11,
+ BUTTON_A = 12,
+ BUTTON_B = 13,
+ BUTTON_X = 14,
+ BUTTON_Y = 15,
+ BUTTON_VOLUP = 16,
+ BUTTON_VOLDOWN = 17
+ };
+
+ enum {
+ /* Unused Joystick Buttons on the Wiz */
+ BUTTON_HOME = 51,
+ BUTTON_HOLD = 52,
+ BUTTON_CLICK = 53,
+ BUTTON_HELP = 54,
+ BUTTON_HELP2 = 55
+ };
+
+#endif
+
enum {
- GP2X_BUTTON_UP = 0,
- GP2X_BUTTON_UPLEFT = 1,
- GP2X_BUTTON_LEFT = 2,
- GP2X_BUTTON_DOWNLEFT = 3,
- GP2X_BUTTON_DOWN = 4,
- GP2X_BUTTON_DOWNRIGHT = 5,
- GP2X_BUTTON_RIGHT = 6,
- GP2X_BUTTON_UPRIGHT = 7,
- GP2X_BUTTON_MENU = 8,
- GP2X_BUTTON_SELECT = 9,
- GP2X_BUTTON_L = 10,
- GP2X_BUTTON_R = 11,
- GP2X_BUTTON_A = 12,
- GP2X_BUTTON_B = 13,
- GP2X_BUTTON_X = 14,
- GP2X_BUTTON_Y = 15,
- GP2X_BUTTON_VOLUP = 16,
- GP2X_BUTTON_VOLDOWN = 17
+ /* Touchscreen TapMode */
+ TAPMODE_LEFT = 0,
+ TAPMODE_RIGHT = 1,
+ TAPMODE_HOVER = 2
};
static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode) {
@@ -81,7 +139,8 @@ static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode) {
return key;
}
-void OSystem_GP2XWIZ::fillMouseEvent(Common::Event &event, int x, int y) {
+
+void OSystem_GPH::fillMouseEvent(Common::Event &event, int x, int y) {
if (_videoMode.mode == GFX_HALF && !_overlayVisible){
event.mouse.x = x*2;
event.mouse.y = y*2;
@@ -103,19 +162,8 @@ void OSystem_GP2XWIZ::fillMouseEvent(Common::Event &event, int x, int y) {
}
}
-static byte SDLModToOSystemKeyFlags(SDLMod mod) {
- byte b = 0;
- if (mod & KMOD_SHIFT)
- b |= Common::KBD_SHIFT;
- if (mod & KMOD_ALT)
- b |= Common::KBD_ALT;
- if (mod & KMOD_CTRL)
- b |= Common::KBD_CTRL;
- return b;
-}
-
-void OSystem_GP2XWIZ::moveStick() {
+void OSystem_GPH::moveStick() {
bool stickBtn[32];
memcpy(stickBtn, _stickBtn, sizeof(stickBtn));
@@ -140,7 +188,6 @@ void OSystem_GP2XWIZ::moveStick() {
_km.x_down_count = 0;
}
-
if ((stickBtn[0])||(stickBtn[1])||(stickBtn[7])) {
if (_km.y_down_count!=2) {
_km.y_vel = -1;
@@ -159,167 +206,99 @@ void OSystem_GP2XWIZ::moveStick() {
}
}
-/* Quick default button states for modifiers. */
-int GP2X_BUTTON_STATE_L = false;
-
-/* Override the SDL pollEvent with the Wiz's own event code. */
-bool OSystem_GP2XWIZ::pollEvent(Common::Event &event) {
- SDL_Event ev;
- ev.type = SDL_NOEVENT;
- int axis;
- byte b = 0;
-
- handleKbdMouse();
-
- // If the screen mode changed, send an Common::EVENT_SCREEN_CHANGED
- if (_modeChanged) {
- _modeChanged = false;
- event.type = Common::EVENT_SCREEN_CHANGED;
- return true;
- }
-
- // GP2X Wiz Input mappings.
-
- /*
- Single Button
-
- Movement:
-
- GP2X_BUTTON_UP Cursor Up
- GP2X_BUTTON_DOWN Cursor Down
- GP2X_BUTTON_LEFT Cursor Left
- GP2X_BUTTON_RIGHT Cursor Right
-
- GP2X_BUTTON_UPLEFT Cursor Up Left
- GP2X_BUTTON_UPRIGHT Cursor Up Right
- GP2X_BUTTON_DOWNLEFT Cursor Down Left
- GP2X_BUTTON_DOWNRIGHT Cursor Down Right
-
- Button Emulation:
-
- GP2X_BUTTON_A . (Period)
- GP2X_BUTTON_B Left Mouse Click
- GP2X_BUTTON_Y Space Bar
- GP2X_BUTTON_X Right Mouse Click
- GP2X_BUTTON_L Combo Modifier (Left Trigger)
- GP2X_BUTTON_R Return (Right Trigger)
- GP2X_BUTTON_MENU F5 (Game Menu)
- GP2X_BUTTON_SELECT Escape
- GP2X_BUTTON_VOLUP /dev/mixer Global Volume Up
- GP2X_BUTTON_VOLDOWN /dev/mixer Global Volume Down
-
- Combos:
-
- GP2X_BUTTON_VOLUP & GP2X_BUTTON_VOLDOWN 0 (For Monkey 2 CP) or Virtual Keyboard if enabled
- GP2X_BUTTON_L & GP2X_BUTTON_SELECT Common::EVENT_QUIT (Calls Sync() to make sure SD is flushed)
- GP2X_BUTTON_L & GP2X_BUTTON_MENU Common::EVENT_MAINMENU (ScummVM Global Main Menu)
- GP2X_BUTTON_L & GP2X_BUTTON_A Common::EVENT_PREDICTIVE_DIALOG for predictive text entry box (AGI games)
- */
-
- while (SDL_PollEvent(&ev)) {
-
- switch (ev.type) {
- case SDL_KEYDOWN:{
- b = event.kbd.flags = SDLModToOSystemKeyFlags(SDL_GetModState());
-
- const bool event_complete = remapKey(ev,event);
-
- if (event_complete)
- return true;
-
- event.type = Common::EVENT_KEYDOWN;
- event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
- event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
-
- return true;
- }
- case SDL_KEYUP:
- {
- const bool event_complete = remapKey(ev,event);
-
- if (event_complete)
- return true;
-
- event.type = Common::EVENT_KEYUP;
- event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym;
- event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
- b = event.kbd.flags = SDLModToOSystemKeyFlags(SDL_GetModState());
-
- // Ctrl-Alt-<key> will change the GFX mode
- if ((b & (Common::KBD_CTRL|Common::KBD_ALT)) == (Common::KBD_CTRL|Common::KBD_ALT)) {
- // Swallow these key up events
- break;
- }
-
- return true;
- }
- case SDL_MOUSEMOTION:
+/* Custom handleMouseButtonDown/handleMouseButtonUp to deal with 'Tap Mode' for the touchscreen */
+
+bool OSystem_GPH::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) {
+ if (ev.button.button == SDL_BUTTON_LEFT){
+ if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */
+ event.type = Common::EVENT_RBUTTONDOWN;
+ else if (GPH::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */
+ event.type = Common::EVENT_LBUTTONDOWN;
+ else if (GPH::tapmodeLevel == TAPMODE_RIGHT) /* TAPMODE_RIGHT = Right Click Tap Mode */
+ event.type = Common::EVENT_RBUTTONDOWN;
+ else if (GPH::tapmodeLevel == TAPMODE_HOVER) /* TAPMODE_HOVER = Hover (No Click) Tap Mode */
event.type = Common::EVENT_MOUSEMOVE;
- fillMouseEvent(event, ev.motion.x, ev.motion.y);
-
- setMousePos(event.mouse.x, event.mouse.y);
- return true;
-
- case SDL_MOUSEBUTTONDOWN:
- if (ev.button.button == SDL_BUTTON_LEFT)
- event.type = Common::EVENT_LBUTTONDOWN;
- else if (ev.button.button == SDL_BUTTON_RIGHT)
- event.type = Common::EVENT_RBUTTONDOWN;
+ else
+ event.type = Common::EVENT_LBUTTONDOWN; /* For normal mice etc. */
+ }
+ else if (ev.button.button == SDL_BUTTON_RIGHT)
+ event.type = Common::EVENT_RBUTTONDOWN;
#if defined(SDL_BUTTON_WHEELUP) && defined(SDL_BUTTON_WHEELDOWN)
- else if (ev.button.button == SDL_BUTTON_WHEELUP)
- event.type = Common::EVENT_WHEELUP;
- else if (ev.button.button == SDL_BUTTON_WHEELDOWN)
- event.type = Common::EVENT_WHEELDOWN;
+ else if (ev.button.button == SDL_BUTTON_WHEELUP)
+ event.type = Common::EVENT_WHEELUP;
+ else if (ev.button.button == SDL_BUTTON_WHEELDOWN)
+ event.type = Common::EVENT_WHEELDOWN;
#endif
#if defined(SDL_BUTTON_MIDDLE)
- else if (ev.button.button == SDL_BUTTON_MIDDLE)
- event.type = Common::EVENT_MBUTTONDOWN;
+ else if (ev.button.button == SDL_BUTTON_MIDDLE)
+ event.type = Common::EVENT_MBUTTONDOWN;
#endif
- else
- break;
+ else
+ return false;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ fillMouseEvent(event, ev.button.x, ev.button.y);
- return true;
+ return true;
+}
- case SDL_MOUSEBUTTONUP:
- if (ev.button.button == SDL_BUTTON_LEFT)
- event.type = Common::EVENT_LBUTTONUP;
- else if (ev.button.button == SDL_BUTTON_RIGHT)
- event.type = Common::EVENT_RBUTTONUP;
+bool OSystem_GPH::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) {
+ if (ev.button.button == SDL_BUTTON_LEFT){
+ if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */
+ event.type = Common::EVENT_RBUTTONUP;
+ else if (GPH::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */
+ event.type = Common::EVENT_LBUTTONUP;
+ else if (GPH::tapmodeLevel == TAPMODE_RIGHT) /* TAPMODE_RIGHT = Right Click Tap Mode */
+ event.type = Common::EVENT_RBUTTONUP;
+ else if (GPH::tapmodeLevel == TAPMODE_HOVER) /* TAPMODE_HOVER = Hover (No Click) Tap Mode */
+ event.type = Common::EVENT_MOUSEMOVE;
+ else
+ event.type = Common::EVENT_LBUTTONUP; /* For normal mice etc. */
+
+ }
+ else if (ev.button.button == SDL_BUTTON_RIGHT)
+ event.type = Common::EVENT_RBUTTONUP;
#if defined(SDL_BUTTON_MIDDLE)
- else if (ev.button.button == SDL_BUTTON_MIDDLE)
- event.type = Common::EVENT_MBUTTONUP;
+ else if (ev.button.button == SDL_BUTTON_MIDDLE)
+ event.type = Common::EVENT_MBUTTONUP;
#endif
- else
- break;
- fillMouseEvent(event, ev.button.x, ev.button.y);
+ else
+ return false;
- return true;
+ fillMouseEvent(event, ev.button.x, ev.button.y);
- case SDL_JOYBUTTONDOWN:
+ return true;
+}
+
+/* Custom handleJoyButtonDown/handleJoyButtonUp to deal with the joystick buttons on GPH devices */
+
+bool OSystem_GPH::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) {
_stickBtn[ev.jbutton.button] = 1;
- if (ev.jbutton.button == GP2X_BUTTON_B) {
+ if (ev.jbutton.button == BUTTON_B) {
+ event.type = Common::EVENT_LBUTTONDOWN;
+ fillMouseEvent(event, _km.x, _km.y);
+ } else if (ev.jbutton.button == BUTTON_CLICK) {
event.type = Common::EVENT_LBUTTONDOWN;
fillMouseEvent(event, _km.x, _km.y);
- } else if (ev.jbutton.button == GP2X_BUTTON_X) {
+ } else if (ev.jbutton.button == BUTTON_X) {
event.type = Common::EVENT_RBUTTONDOWN;
fillMouseEvent(event, _km.x, _km.y);
- } else if (_stickBtn[GP2X_BUTTON_L] && (ev.jbutton.button == GP2X_BUTTON_SELECT)) {
+ } else if (_stickBtn[BUTTON_L] && (ev.jbutton.button == BUTTON_SELECT)) {
event.type = Common::EVENT_QUIT;
+#if !defined (CAANOO)
} else if (ev.jbutton.button < 8) {
moveStick();
event.type = Common::EVENT_MOUSEMOVE;
fillMouseEvent(event, _km.x, _km.y);
+#endif
} else {
event.type = Common::EVENT_KEYDOWN;
event.kbd.flags = 0;
switch (ev.jbutton.button) {
- case GP2X_BUTTON_L:
- GP2X_BUTTON_STATE_L = true;
+ case BUTTON_L:
+ BUTTON_STATE_L = true;
break;
- case GP2X_BUTTON_R:
- if (GP2X_BUTTON_STATE_L == true) {
+ case BUTTON_R:
+ if (BUTTON_STATE_L == true) {
#ifdef ENABLE_VKEYBD
event.kbd.keycode = Common::KEYCODE_F7;
event.kbd.ascii = mapKey(SDLK_F7, ev.key.keysym.mod, 0);
@@ -332,35 +311,48 @@ bool OSystem_GP2XWIZ::pollEvent(Common::Event &event) {
event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0);
}
break;
- case GP2X_BUTTON_SELECT:
- if (GP2X_BUTTON_STATE_L == true) {
+ case BUTTON_SELECT:
+ case BUTTON_HELP2:
+ if (BUTTON_STATE_L == true) {
event.type = Common::EVENT_QUIT;
} else {
event.kbd.keycode = Common::KEYCODE_ESCAPE;
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
}
break;
- case GP2X_BUTTON_A:
- if (GP2X_BUTTON_STATE_L == true) {
+ case BUTTON_A:
+ if (BUTTON_STATE_L == true) {
event.type = Common::EVENT_PREDICTIVE_DIALOG;
} else {
event.kbd.keycode = Common::KEYCODE_PERIOD;
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
}
break;
- case GP2X_BUTTON_Y:
- event.kbd.keycode = Common::KEYCODE_SPACE;
- event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
+ case BUTTON_Y:
+ if (BUTTON_STATE_L == true) {
+ GPH::ToggleTapMode();
+ if (GPH::tapmodeLevel == TAPMODE_LEFT) {
+ displayMessageOnOSD("Touchscreen 'Tap Mode': Left Click");
+ } else if (GPH::tapmodeLevel == TAPMODE_RIGHT) {
+ displayMessageOnOSD("Touchscreen 'Tap Mode': Right Click");
+ } else if (GPH::tapmodeLevel == TAPMODE_HOVER) {
+ displayMessageOnOSD("Touchscreen 'Tap Mode': Hover (No Click)");
+ }
+ } else {
+ event.kbd.keycode = Common::KEYCODE_SPACE;
+ event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
+ }
break;
- case GP2X_BUTTON_MENU:
- if (GP2X_BUTTON_STATE_L == true) {
+ case BUTTON_MENU:
+ case BUTTON_HELP:
+ if (BUTTON_STATE_L == true) {
event.type = Common::EVENT_MAINMENU;
} else {
event.kbd.keycode = Common::KEYCODE_F5;
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
}
break;
- case GP2X_BUTTON_VOLUP:
+ case BUTTON_VOLUP:
WIZ_HW::mixerMoveVolume(2);
if (WIZ_HW::volumeLevel == 100) {
displayMessageOnOSD("Maximum Volume");
@@ -368,8 +360,7 @@ bool OSystem_GP2XWIZ::pollEvent(Common::Event &event) {
displayMessageOnOSD("Increasing Volume");
}
break;
-
- case GP2X_BUTTON_VOLDOWN:
+ case BUTTON_VOLDOWN:
WIZ_HW::mixerMoveVolume(1);
if (WIZ_HW::volumeLevel == 0) {
displayMessageOnOSD("Minimal Volume");
@@ -377,51 +368,72 @@ bool OSystem_GP2XWIZ::pollEvent(Common::Event &event) {
displayMessageOnOSD("Decreasing Volume");
}
break;
+ case BUTTON_HOLD:
+ event.type = Common::EVENT_QUIT;
+ break;
+ case BUTTON_HOME:
+ GPH::ToggleTapMode();
+ if (GPH::tapmodeLevel == TAPMODE_LEFT) {
+ displayMessageOnOSD("Touchscreen 'Tap Mode': Left Click");
+ } else if (GPH::tapmodeLevel == TAPMODE_RIGHT) {
+ displayMessageOnOSD("Touchscreen 'Tap Mode': Right Click");
+ } else if (GPH::tapmodeLevel == TAPMODE_HOVER) {
+ displayMessageOnOSD("Touchscreen 'Tap Mode': Hover (No Click)");
+ }
+ break;
}
}
return true;
+}
- case SDL_JOYBUTTONUP:
+bool OSystem_GPH::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) {
_stickBtn[ev.jbutton.button] = 0;
- if (ev.jbutton.button == GP2X_BUTTON_B) {
+ if (ev.jbutton.button == BUTTON_B) {
+ event.type = Common::EVENT_LBUTTONUP;
+ fillMouseEvent(event, _km.x, _km.y);
+ } else if (ev.jbutton.button == BUTTON_CLICK) {
event.type = Common::EVENT_LBUTTONUP;
fillMouseEvent(event, _km.x, _km.y);
- } else if (ev.jbutton.button == GP2X_BUTTON_X) {
+ } else if (ev.jbutton.button == BUTTON_X) {
event.type = Common::EVENT_RBUTTONUP;
fillMouseEvent(event, _km.x, _km.y);
+#if !defined (CAANOO)
} else if (ev.jbutton.button < 8) {
moveStick();
event.type = Common::EVENT_MOUSEMOVE;
fillMouseEvent(event, _km.x, _km.y);
+#endif
} else {
event.type = Common::EVENT_KEYUP;
event.kbd.flags = 0;
switch (ev.jbutton.button) {
- case GP2X_BUTTON_SELECT:
+ case BUTTON_SELECT:
+ case BUTTON_HELP2:
event.kbd.keycode = Common::KEYCODE_ESCAPE;
event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0);
break;
- case GP2X_BUTTON_A:
+ case BUTTON_A:
event.kbd.keycode = Common::KEYCODE_PERIOD;
event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0);
break;
- case GP2X_BUTTON_Y:
+ case BUTTON_Y:
event.kbd.keycode = Common::KEYCODE_SPACE;
event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0);
break;
- case GP2X_BUTTON_MENU:
- if (GP2X_BUTTON_STATE_L == true) {
+ case BUTTON_MENU:
+ case BUTTON_HELP:
+ if (BUTTON_STATE_L == true) {
event.type = Common::EVENT_MAINMENU;
} else {
event.kbd.keycode = Common::KEYCODE_F5;
event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0);
}
break;
- case GP2X_BUTTON_L:
- GP2X_BUTTON_STATE_L = false;
+ case BUTTON_L:
+ BUTTON_STATE_L = false;
break;
- case GP2X_BUTTON_R:
- if (GP2X_BUTTON_STATE_L == true) {
+ case BUTTON_R:
+ if (BUTTON_STATE_L == true) {
#ifdef ENABLE_VKEYBD
event.kbd.keycode = Common::KEYCODE_F7;
event.kbd.ascii = mapKey(SDLK_F7, ev.key.keysym.mod, 0);
@@ -434,68 +446,19 @@ bool OSystem_GP2XWIZ::pollEvent(Common::Event &event) {
event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0);
}
break;
- case GP2X_BUTTON_VOLUP:
+ case BUTTON_VOLUP:
break;
- case GP2X_BUTTON_VOLDOWN:
+ case BUTTON_VOLDOWN:
+ break;
+ case BUTTON_HOLD:
+ break;
+ case BUTTON_HOME:
break;
}
}
return true;
-
- case SDL_JOYAXISMOTION:
- axis = ev.jaxis.value;
- if ( axis > JOY_DEADZONE) {
- axis -= JOY_DEADZONE;
- event.type = Common::EVENT_MOUSEMOVE;
- } else if ( axis < -JOY_DEADZONE ) {
- axis += JOY_DEADZONE;
- event.type = Common::EVENT_MOUSEMOVE;
- } else
- axis = 0;
-
- if ( ev.jaxis.axis == JOY_XAXIS) {
- if (axis != 0) {
- _km.x_vel = (axis > 0) ? 1:-1;
- _km.x_down_count = 1;
- } else {
- _km.x_vel = 0;
- _km.x_down_count = 0;
- }
-
- } else if (ev.jaxis.axis == JOY_YAXIS) {
-#ifndef JOY_INVERT_Y
- axis = -axis;
-#endif
-#ifdef JOY_ANALOG
- _km.y_vel = -axis / 2000;
- _km.y_down_count = 0;
-#else
- if (axis != 0) {
- _km.y_vel = (-axis > 0) ? 1: -1;
- _km.y_down_count = 1;
- } else {
- _km.y_vel = 0;
- _km.y_down_count = 0;
- }
-#endif
- }
-
- fillMouseEvent(event, _km.x, _km.y);
-
- return true;
-
- case SDL_VIDEOEXPOSE:
- _forceFull = true;
- break;
-
- case SDL_QUIT:
- event.type = Common::EVENT_QUIT;
- return true;
- }
- }
- return false;
}
-bool OSystem_GP2XWIZ::remapKey(SDL_Event &ev,Common::Event &event) {
+bool OSystem_GPH::remapKey(SDL_Event &ev,Common::Event &event) {
return false;
}
diff --git a/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp b/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp
index 9b8a41a7cf..92329d7c40 100644
--- a/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp
+++ b/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp
@@ -38,15 +38,15 @@ static const OSystem::GraphicsMode s_supportedGraphicsModes[] = {
{0, 0, 0}
};
-const OSystem::GraphicsMode *OSystem_GP2XWIZ::getSupportedGraphicsModes() const {
+const OSystem::GraphicsMode *OSystem_GPH::getSupportedGraphicsModes() const {
return s_supportedGraphicsModes;
}
-int OSystem_GP2XWIZ::getDefaultGraphicsMode() const {
+int OSystem_GPH::getDefaultGraphicsMode() const {
return GFX_NORMAL;
}
-bool OSystem_GP2XWIZ::setGraphicsMode(int mode) {
+bool OSystem_GPH::setGraphicsMode(int mode) {
Common::StackLock lock(_graphicsMutex);
assert(_transactionMode == kTransactionActive);
@@ -80,7 +80,7 @@ bool OSystem_GP2XWIZ::setGraphicsMode(int mode) {
return true;
}
-void OSystem_GP2XWIZ::setGraphicsModeIntern() {
+void OSystem_GPH::setGraphicsModeIntern() {
Common::StackLock lock(_graphicsMutex);
ScalerProc *newScalerProc = 0;
@@ -109,7 +109,7 @@ void OSystem_GP2XWIZ::setGraphicsModeIntern() {
blitCursor();
}
-void OSystem_GP2XWIZ::initSize(uint w, uint h) {
+void OSystem_GPH::initSize(uint w, uint h) {
assert(_transactionMode == kTransactionActive);
// Avoid redundant res changes
@@ -127,7 +127,7 @@ void OSystem_GP2XWIZ::initSize(uint w, uint h) {
_transactionDetails.sizeChanged = true;
}
-bool OSystem_GP2XWIZ::loadGFXMode() {
+bool OSystem_GPH::loadGFXMode() {
if (_videoMode.screenWidth > 320 || _videoMode.screenHeight > 240) {
_videoMode.aspectRatioCorrection = false;
setGraphicsMode(GFX_HALF);
@@ -155,7 +155,7 @@ bool OSystem_GP2XWIZ::loadGFXMode() {
return OSystem_SDL::loadGFXMode();
}
-void OSystem_GP2XWIZ::drawMouse() {
+void OSystem_GPH::drawMouse() {
if (!_mouseVisible || !_mouseSurface) {
_mouseBackup.x = _mouseBackup.y = _mouseBackup.w = _mouseBackup.h = 0;
return;
@@ -226,7 +226,7 @@ void OSystem_GP2XWIZ::drawMouse() {
addDirtyRect(dst.x, dst.y, dst.w, dst.h, true);
}
-void OSystem_GP2XWIZ::undrawMouse() {
+void OSystem_GPH::undrawMouse() {
const int x = _mouseBackup.x;
const int y = _mouseBackup.y;
@@ -244,7 +244,7 @@ void OSystem_GP2XWIZ::undrawMouse() {
}
}
-void OSystem_GP2XWIZ::internUpdateScreen() {
+void OSystem_GPH::internUpdateScreen() {
SDL_Surface *srcSurf, *origSurf;
int height, width;
ScalerProc *scalerProc;
@@ -256,7 +256,8 @@ void OSystem_GP2XWIZ::internUpdateScreen() {
#endif
// If the shake position changed, fill the dirty area with blackness
- if (_currentShakePos != _newShakePos) {
+ if (_currentShakePos != _newShakePos ||
+ (_mouseNeedsRedraw && _mouseBackup.y <= _currentShakePos)) {
SDL_Rect blackrect = {0, 0, _videoMode.screenWidth * _videoMode.scaleFactor, _newShakePos * _videoMode.scaleFactor};
if (_videoMode.aspectRatioCorrection && !_overlayVisible)
@@ -314,6 +315,7 @@ void OSystem_GP2XWIZ::internUpdateScreen() {
width = _videoMode.overlayWidth;
height = _videoMode.overlayHeight;
scalerProc = Normal1x;
+
scale1 = 1;
}
@@ -441,7 +443,7 @@ void OSystem_GP2XWIZ::internUpdateScreen() {
_mouseNeedsRedraw = false;
}
-void OSystem_GP2XWIZ::showOverlay() {
+void OSystem_GPH::showOverlay() {
if (_videoMode.mode == GFX_HALF){
_mouseCurState.x = _mouseCurState.x / 2;
_mouseCurState.y = _mouseCurState.y / 2;
@@ -449,7 +451,7 @@ void OSystem_GP2XWIZ::showOverlay() {
OSystem_SDL::showOverlay();
}
-void OSystem_GP2XWIZ::hideOverlay() {
+void OSystem_GPH::hideOverlay() {
if (_videoMode.mode == GFX_HALF){
_mouseCurState.x = _mouseCurState.x * 2;
_mouseCurState.y = _mouseCurState.y * 2;
@@ -457,7 +459,7 @@ void OSystem_GP2XWIZ::hideOverlay() {
OSystem_SDL::hideOverlay();
}
-void OSystem_GP2XWIZ::warpMouse(int x, int y) {
+void OSystem_GPH::warpMouse(int x, int y) {
if (_mouseCurState.x != x || _mouseCurState.y != y) {
if (_videoMode.mode == GFX_HALF && !_overlayVisible){
x = x / 2;
diff --git a/backends/platform/gp2xwiz/gp2xwiz-hw.cpp b/backends/platform/gp2xwiz/gp2xwiz-hw.cpp
index bc1aa00ce4..f7cc716df0 100644
--- a/backends/platform/gp2xwiz/gp2xwiz-hw.cpp
+++ b/backends/platform/gp2xwiz/gp2xwiz-hw.cpp
@@ -82,3 +82,28 @@ void mixerMoveVolume(int direction) {
}
} /* namespace WIZ_HW */
+
+namespace GPH {
+
+enum {
+ /* Touchscreen TapMode */
+ TAPMODE_LEFT = 0,
+ TAPMODE_RIGHT = 1,
+ TAPMODE_HOVER = 2
+};
+
+int tapmodeLevel = TAPMODE_LEFT;
+
+void ToggleTapMode() {
+ if (tapmodeLevel == TAPMODE_LEFT) {
+ tapmodeLevel = TAPMODE_RIGHT;
+ } else if (tapmodeLevel == TAPMODE_RIGHT) {
+ tapmodeLevel = TAPMODE_HOVER;
+ } else if (tapmodeLevel == TAPMODE_HOVER) {
+ tapmodeLevel = TAPMODE_LEFT;
+ } else {
+ tapmodeLevel = TAPMODE_LEFT;
+ }
+}
+
+} /* namespace GPH */
diff --git a/backends/platform/gp2xwiz/gp2xwiz-hw.h b/backends/platform/gp2xwiz/gp2xwiz-hw.h
index 507841e902..2fc7a85f5c 100644
--- a/backends/platform/gp2xwiz/gp2xwiz-hw.h
+++ b/backends/platform/gp2xwiz/gp2xwiz-hw.h
@@ -31,6 +31,14 @@
#ifndef GP2XWIZ_HW_H
#define GP2XWIZ_HW_H
+#if defined (CAANOO)
+ /* Vibrate features that GPH put in the */
+ /* SDL port but did not define */
+ extern void SDL_VibrateInit();
+ extern void SDL_VibrateQuit();
+ extern void SDL_VibratePlay(int);
+#endif
+
namespace WIZ_HW {
extern int volumeLevel;
@@ -41,4 +49,13 @@ extern void mixerMoveVolume(int);
} /* namespace WIZ_HW */
+namespace GPH {
+
+extern int tapmodeLevel;
+
+extern void ToggleTapMode();
+extern int GetTapMode();
+
+} /* namespace GPH */
+
#endif //GP2XWIZ_HW_H
diff --git a/backends/platform/gp2xwiz/gp2xwiz-main.cpp b/backends/platform/gp2xwiz/gp2xwiz-main.cpp
index 839afa6a95..a40b49ae18 100644
--- a/backends/platform/gp2xwiz/gp2xwiz-main.cpp
+++ b/backends/platform/gp2xwiz/gp2xwiz-main.cpp
@@ -57,7 +57,7 @@
#define DUMP_STDOUT
int main(int argc, char *argv[]) {
- g_system = new OSystem_GP2XWIZ();
+ g_system = new OSystem_GPH();
assert(g_system);
#ifdef DYNAMIC_MODULES
PluginManager::instance().addPluginProvider(new POSIXPluginProvider());
@@ -70,7 +70,7 @@ int main(int argc, char *argv[]) {
return res;
}
-void OSystem_GP2XWIZ::initBackend() {
+void OSystem_GPH::initBackend() {
/* Setup default save path to be workingdir/saves */
@@ -164,7 +164,7 @@ void OSystem_GP2XWIZ::initBackend() {
OSystem_SDL::initBackend();
}
-void OSystem_GP2XWIZ::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
+void OSystem_GPH::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
/* Setup default extra data paths for engine data files and plugins */
char workDirName[PATH_MAX+1];
@@ -199,7 +199,7 @@ void OSystem_GP2XWIZ::addSysArchivesToSearchSet(Common::SearchSet &s, int priori
}
}
-void OSystem_GP2XWIZ::quit() {
+void OSystem_GPH::quit() {
WIZ_HW::deviceDeinit();
diff --git a/backends/platform/gp2xwiz/gp2xwiz-sdl.h b/backends/platform/gp2xwiz/gp2xwiz-sdl.h
index e312d0f26d..bae9a87771 100644
--- a/backends/platform/gp2xwiz/gp2xwiz-sdl.h
+++ b/backends/platform/gp2xwiz/gp2xwiz-sdl.h
@@ -40,9 +40,9 @@ enum {
#define PATH_MAX 255
#endif
-class OSystem_GP2XWIZ : public OSystem_SDL {
+class OSystem_GPH : public OSystem_SDL {
public:
- OSystem_GP2XWIZ() {}
+ OSystem_GPH() {}
/* Graphics */
void initSize(uint w, uint h);
@@ -59,7 +59,6 @@ public:
void hideOverlay();
/* Event Stuff */
- bool pollEvent(Common::Event &event);
void moveStick();
void fillMouseEvent(Common::Event&, int, int);
void warpMouse(int, int);
@@ -72,6 +71,11 @@ public:
protected:
bool _stickBtn[32];
+
+ bool handleMouseButtonDown(SDL_Event &ev, Common::Event &event);
+ bool handleMouseButtonUp(SDL_Event &ev, Common::Event &event);
+ bool handleJoyButtonDown(SDL_Event &ev, Common::Event &event);
+ bool handleJoyButtonUp(SDL_Event &ev, Common::Event &event);
};
#endif