[Scummvm-cvs-logs] SF.net SVN: scummvm:[52619] scummvm/trunk/backends/platform/gp2xwiz

djwillis at users.sourceforge.net djwillis at users.sourceforge.net
Tue Sep 7 16:17:31 CEST 2010


Revision: 52619
          http://scummvm.svn.sourceforge.net/scummvm/?rev=52619&view=rev
Author:   djwillis
Date:     2010-09-07 14:17:31 +0000 (Tue, 07 Sep 2010)

Log Message:
-----------
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.

Modified Paths:
--------------
    scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-events.cpp
    scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp
    scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-hw.cpp
    scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-hw.h
    scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-main.cpp
    scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-sdl.h

Modified: scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-events.cpp
===================================================================
--- scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-events.cpp	2010-09-07 11:40:44 UTC (rev 52618)
+++ scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-events.cpp	2010-09-07 14:17:31 UTC (rev 52619)
@@ -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 @@
 	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 @@
 	}
 }
 
-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 @@
 		_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 @@
 	}
 }
 
-/* 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 @@
 							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 @@
 							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 @@
 							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 @@
 							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;
 }

Modified: scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp
===================================================================
--- scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp	2010-09-07 11:40:44 UTC (rev 52618)
+++ scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp	2010-09-07 14:17:31 UTC (rev 52619)
@@ -38,15 +38,15 @@
 	{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 @@
 	return true;
 }
 
-void OSystem_GP2XWIZ::setGraphicsModeIntern() {
+void OSystem_GPH::setGraphicsModeIntern() {
 	Common::StackLock lock(_graphicsMutex);
 	ScalerProc *newScalerProc = 0;
 
@@ -109,7 +109,7 @@
 	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 @@
 	_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 @@
 	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 @@
 	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::internUpdateScreen() {
+void OSystem_GPH::internUpdateScreen() {
 	SDL_Surface *srcSurf, *origSurf;
 	int height, width;
 	ScalerProc *scalerProc;
@@ -256,7 +256,8 @@
 #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 @@
 		width = _videoMode.overlayWidth;
 		height = _videoMode.overlayHeight;
 		scalerProc = Normal1x;
+
 		scale1 = 1;
 	}
 
@@ -441,7 +443,7 @@
 	_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 @@
 	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 @@
 	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;

Modified: scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-hw.cpp
===================================================================
--- scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-hw.cpp	2010-09-07 11:40:44 UTC (rev 52618)
+++ scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-hw.cpp	2010-09-07 14:17:31 UTC (rev 52619)
@@ -82,3 +82,28 @@
 }
 
 } /* 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 */

Modified: scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-hw.h
===================================================================
--- scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-hw.h	2010-09-07 11:40:44 UTC (rev 52618)
+++ scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-hw.h	2010-09-07 14:17:31 UTC (rev 52619)
@@ -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 @@
 
 } /* namespace WIZ_HW */
 
+namespace GPH {
+
+extern int tapmodeLevel;
+
+extern void	ToggleTapMode();
+extern int GetTapMode();
+
+} /* namespace GPH */
+
 #endif //GP2XWIZ_HW_H

Modified: scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-main.cpp
===================================================================
--- scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-main.cpp	2010-09-07 11:40:44 UTC (rev 52618)
+++ scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-main.cpp	2010-09-07 14:17:31 UTC (rev 52619)
@@ -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 @@
 	return res;
 }
 
-void OSystem_GP2XWIZ::initBackend() {
+void OSystem_GPH::initBackend() {
 
 	/* Setup default save path to be workingdir/saves */
 
@@ -164,7 +164,7 @@
 	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::quit() {
+void OSystem_GPH::quit() {
 
 	WIZ_HW::deviceDeinit();
 

Modified: scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-sdl.h
===================================================================
--- scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-sdl.h	2010-09-07 11:40:44 UTC (rev 52618)
+++ scummvm/trunk/backends/platform/gp2xwiz/gp2xwiz-sdl.h	2010-09-07 14:17:31 UTC (rev 52619)
@@ -40,9 +40,9 @@
 	#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 @@
     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 @@
 
 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


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list