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

knakos at users.sourceforge.net knakos at users.sourceforge.net
Sun Jun 3 21:29:14 CEST 2007


Revision: 27071
          http://scummvm.svn.sourceforge.net/scummvm/?rev=27071&view=rev
Author:   knakos
Date:     2007-06-03 12:29:13 -0700 (Sun, 03 Jun 2007)

Log Message:
-----------
new functionality for the predictive input dialog for smartphones

Modified Paths:
--------------
    scummvm/trunk/backends/platform/wince/CEActionsSmartphone.cpp
    scummvm/trunk/backends/platform/wince/wince-sdl.cpp
    scummvm/trunk/backends/platform/wince/wince-sdl.h

Modified: scummvm/trunk/backends/platform/wince/CEActionsSmartphone.cpp
===================================================================
--- scummvm/trunk/backends/platform/wince/CEActionsSmartphone.cpp	2007-06-03 19:15:59 UTC (rev 27070)
+++ scummvm/trunk/backends/platform/wince/CEActionsSmartphone.cpp	2007-06-03 19:29:13 UTC (rev 27071)
@@ -43,7 +43,7 @@
 	"Save",
 	"Skip",
 	"Zone",
-	"FT Cheat",
+	"Multi Function",
 	"Bind Keys",
 	"Keyboard",
 	"Rotate",
@@ -152,9 +152,12 @@
 		_key_action[SMARTPHONE_ACTION_SKIP].setAscii(KEY_ALL_SKIP);
 	// Zone
 	_action_enabled[SMARTPHONE_ACTION_ZONE] = true;
-	// FT Cheat
+	// Multi function key
 	_action_enabled[SMARTPHONE_ACTION_FT_CHEAT] = true;
-	_key_action[SMARTPHONE_ACTION_FT_CHEAT].setAscii(86); // shift-V
+	if (is_agi)
+		_key_action[SMARTPHONE_ACTION_FT_CHEAT].setAscii(SDLK_PAUSE);
+	else
+		_key_action[SMARTPHONE_ACTION_FT_CHEAT].setAscii(86); // shift-V
 	// Bind keys
 	_action_enabled[SMARTPHONE_ACTION_BINDKEYS] = true;
 }

Modified: scummvm/trunk/backends/platform/wince/wince-sdl.cpp
===================================================================
--- scummvm/trunk/backends/platform/wince/wince-sdl.cpp	2007-06-03 19:15:59 UTC (rev 27070)
+++ scummvm/trunk/backends/platform/wince/wince-sdl.cpp	2007-06-03 19:29:13 UTC (rev 27071)
@@ -330,7 +330,7 @@
 
 OSystem_WINCE3::OSystem_WINCE3() : OSystem_SDL(),
 	_orientationLandscape(0), _newOrientation(0), _panelInitialized(false),
-	_panelVisible(true), _panelStateForced(false), _forceHideMouse(false),
+	_panelVisible(true), _panelStateForced(false), _forceHideMouse(false), _unfilteredkeys(false),
 	_freeLook(false), _forcePanelInvisible(false), _toolbarHighDrawn(false), _zoomUp(false), _zoomDown(false),
 	_scalersChanged(false), _monkeyKeyboard(false), _lastKeyPressed(0), _tapTime(0),
 	_saveToolbarState(false), _saveActiveToolbar(NAME_MAIN_PANEL), _rbutton(false), _hasfocus(true),
@@ -771,6 +771,7 @@
 	switch(f) {
 		case kFeatureFullscreenMode:
 			return;
+
 		case kFeatureVirtualKeyboard:
 			if (_hasSmartphoneResolution)
 				return;
@@ -790,6 +791,12 @@
 					//_toolbarHandler.setVisible(_saveToolbarState);
 				}
 			return;
+
+		case kFeatureDisableKeyFiltering:
+			if (_hasSmartphoneResolution)
+				_unfilteredkeys = enable;
+			return;
+
 		default:
 			OSystem_SDL::setFeatureState(f, enable);
 	}
@@ -2067,11 +2074,23 @@
 	OSystem_SDL::addDirtyRect(x, y, w, h, false);
 }
 
-static int mapKeyCE(SDLKey key, SDLMod mod, Uint16 unicode)
+static int mapKeyCE(SDLKey key, SDLMod mod, Uint16 unicode, bool unfilter)
 {
 	if (GUI::Actions::Instance()->mappingActive())
 		return key;
 
+	if (unfilter) {
+		switch (key) {
+			case SDLK_ESCAPE:
+				return SDLK_BACKSPACE;
+			case SDLK_F8:
+				return SDLK_ASTERISK;
+			case SDLK_F9:
+				return SDLK_HASH;
+		}
+		return key;
+	}
+
 	if (key >= SDLK_KP0 && key <= SDLK_KP9) {
 		return key - SDLK_KP0 + '0';
 	} else if (key >= SDLK_UP && key <= SDLK_PAGEDOWN) {
@@ -2113,9 +2132,9 @@
 	while(SDL_PollEvent(&ev)) {
 		switch(ev.type) {
 		case SDL_KEYDOWN:
+			debug(1, "Key down %X %s", ev.key.keysym.sym, SDL_GetKeyName((SDLKey)ev.key.keysym.sym));
 			// KMOD_RESERVED is used if the key has been injected by an external buffer
-			debug(1, "Key down %X %s", ev.key.keysym.sym, SDL_GetKeyName((SDLKey)ev.key.keysym.sym));
-			if (ev.key.keysym.mod != KMOD_RESERVED) {
+			if (ev.key.keysym.mod != KMOD_RESERVED && !_unfilteredkeys) {
 				keyEvent = true;
 				_lastKeyPressed = ev.key.keysym.sym;
 				_keyRepeatTime = currentTime;
@@ -2125,19 +2144,27 @@
 					return true;
 			}
 
-			event.type = Common::EVENT_KEYDOWN;
-			event.kbd.keycode = ev.key.keysym.sym;
-			event.kbd.ascii = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
-
 			if (GUI_Actions::Instance()->mappingActive())
 				event.kbd.flags = 0xFF;
+			else if (ev.key.keysym.sym == SDLK_PAUSE) {
+				_lastKeyPressed = 0;
+				event.type = Common::EVENT_PREDICTIVE_DIALOG;
+				return true;
+			}
 
+			event.type = Common::EVENT_KEYDOWN;
+			if (!_unfilteredkeys)
+				event.kbd.keycode = ev.key.keysym.sym;
+			else
+				event.kbd.keycode = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode, _unfilteredkeys);
+			event.kbd.ascii = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode, _unfilteredkeys);
+
 			return true;
 
 		case SDL_KEYUP:
+			debug(1, "Key up %X %s", ev.key.keysym.sym, SDL_GetKeyName((SDLKey)ev.key.keysym.sym));
 			// KMOD_RESERVED is used if the key has been injected by an external buffer
-			debug(1, "Key up %X %s", ev.key.keysym.sym, SDL_GetKeyName((SDLKey)ev.key.keysym.sym));
-			if (ev.key.keysym.mod != KMOD_RESERVED) {
+			if (ev.key.keysym.mod != KMOD_RESERVED && !_unfilteredkeys) {
 				keyEvent = true;
 				_lastKeyPressed = 0;
 
@@ -2145,13 +2172,20 @@
 					return true;
 			}
 
-			event.type = Common::EVENT_KEYUP;
-			event.kbd.keycode = ev.key.keysym.sym;
-			event.kbd.ascii = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode);
-
 			if (GUI_Actions::Instance()->mappingActive())
 				event.kbd.flags = 0xFF;
+			else if (ev.key.keysym.sym == SDLK_PAUSE) {
+				_lastKeyPressed = 0;
+				return false;	// chew up the show agi dialog key up event
+			}
 
+			event.type = Common::EVENT_KEYUP;
+			if (!_unfilteredkeys)
+				event.kbd.keycode = ev.key.keysym.sym;
+			else
+				event.kbd.keycode = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode, _unfilteredkeys);
+			event.kbd.ascii = mapKeyCE(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode, _unfilteredkeys);
+
 			return true;
 
 		case SDL_MOUSEMOTION:

Modified: scummvm/trunk/backends/platform/wince/wince-sdl.h
===================================================================
--- scummvm/trunk/backends/platform/wince/wince-sdl.h	2007-06-03 19:15:59 UTC (rev 27070)
+++ scummvm/trunk/backends/platform/wince/wince-sdl.h	2007-06-03 19:29:13 UTC (rev 27071)
@@ -189,6 +189,7 @@
 	bool _panelInitialized;		// only initialize the toolbar once
 
 	bool _monkeyKeyboard;		// forced keyboard for Monkey Island copy protection
+	bool _unfilteredkeys;		// discard key mapping temporarily (agi pred. dialog)
 	static bool _soundMaster;	// turn off sound after all calculations
 								// static since needed by the SDL callback
 	int _orientationLandscape;	// current orientation


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