mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user