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
This commit is contained in:
John Willis
2010-09-07 14:17:31 +00:00
parent 532663c742
commit fd407eeca3
6 changed files with 280 additions and 269 deletions
+212 -249
View File
@@ -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;
/* Custom handleMouseButtonDown/handleMouseButtonUp to deal with 'Tap Mode' for the touchscreen */
/* 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:
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 == GP2X_BUTTON_X) {
} else if (ev.jbutton.button == BUTTON_CLICK) {
event.type = Common::EVENT_LBUTTONDOWN;
fillMouseEvent(event, _km.x, _km.y);
} 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 == GP2X_BUTTON_X) {
} else if (ev.jbutton.button == BUTTON_CLICK) {
event.type = Common::EVENT_LBUTTONUP;
fillMouseEvent(event, _km.x, _km.y);
} 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;
}
+15 -13
View File
@@ -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;
+25
View File
@@ -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 */
+17
View File
@@ -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
+4 -4
View File
@@ -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();
+7 -3
View File
@@ -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