aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/wince
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/wince')
-rw-r--r--backends/platform/wince/CEActionsPocket.cpp54
-rw-r--r--backends/platform/wince/CEActionsPocket.h2
-rw-r--r--backends/platform/wince/CEActionsSmartphone.cpp48
-rw-r--r--backends/platform/wince/CEActionsSmartphone.h2
-rw-r--r--backends/platform/wince/CEDevice.cpp9
-rw-r--r--backends/platform/wince/CEgui/PanelKeyboard.cpp31
-rw-r--r--backends/platform/wince/CEgui/PanelKeyboard.h3
-rw-r--r--backends/platform/wince/CEkeys/EventsBuffer.cpp7
-rw-r--r--backends/platform/wince/Makefile100
-rw-r--r--backends/platform/wince/README-WinCE506
-rw-r--r--backends/platform/wince/wince-sdl.cpp78
-rw-r--r--backends/platform/wince/wince-sdl.h3
12 files changed, 262 insertions, 581 deletions
diff --git a/backends/platform/wince/CEActionsPocket.cpp b/backends/platform/wince/CEActionsPocket.cpp
index 2bb79850e3..efada68ad9 100644
--- a/backends/platform/wince/CEActionsPocket.cpp
+++ b/backends/platform/wince/CEActionsPocket.cpp
@@ -49,7 +49,7 @@ const String pocketActionNames[] = {
"Free look",
"Zoom up",
"Zoom down",
- "FT Cheat",
+ "Multi Function",
"Bind Keys",
"Cursor Up",
"Cursor Down",
@@ -99,7 +99,7 @@ GUI::Actions()
_action_enabled[POCKET_ACTION_DOWN] = true;
_action_enabled[POCKET_ACTION_LEFT] = true;
_action_enabled[POCKET_ACTION_RIGHT] = true;
- _action_mapping[POCKET_ACTION_LEFTCLICK] = SDLK_RETURN;
+ _action_mapping[POCKET_ACTION_LEFTCLICK] = SDLK_F1;
_action_mapping[POCKET_ACTION_UP] = SDLK_UP;
_action_mapping[POCKET_ACTION_DOWN] = SDLK_DOWN;
_action_mapping[POCKET_ACTION_LEFT] = SDLK_LEFT;
@@ -127,11 +127,12 @@ void CEActionsPocket::initInstanceGame() {
bool is_cine = (gameid == "cine");
bool is_touche = (gameid == "touche");
bool is_agi = (gameid == "agi");
+ bool is_parallaction = (gameid == "parallaction");
GUI_Actions::initInstanceGame();
// See if a right click mapping could be needed
- if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || is_gob || is_samnmax || is_cine || is_touche)
+ if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || is_gob || is_samnmax || is_cine || is_touche || is_parallaction)
_right_click_needed = true;
// See if a "hide toolbar" mapping could be needed
@@ -140,36 +141,39 @@ void CEActionsPocket::initInstanceGame() {
// Initialize keys for different actions
// Pause
- _key_action[POCKET_ACTION_PAUSE].setAscii(VK_SPACE);
+ _key_action[POCKET_ACTION_PAUSE].setKey(VK_SPACE);
_action_enabled[POCKET_ACTION_PAUSE] = true;
// Save
if (is_simon || is_sword2 || is_gob || is_kyra || is_touche)
_action_enabled[POCKET_ACTION_SAVE] = false;
else if (is_queen) {
_action_enabled[POCKET_ACTION_SAVE] = true;
- _key_action[POCKET_ACTION_SAVE].setAscii(286); // F1 key for FOTAQ
+ _key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
} else if (is_sky) {
_action_enabled[POCKET_ACTION_SAVE] = true;
- _key_action[POCKET_ACTION_SAVE].setAscii(63);
+ _key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
} else if (is_cine) {
_action_enabled[POCKET_ACTION_SAVE] = true;
- _key_action[POCKET_ACTION_SAVE].setAscii(291); // F10
+ _key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); // F10
} else if (is_agi) {
_action_enabled[POCKET_ACTION_SAVE] = true;
- _key_action[POCKET_ACTION_SAVE].setAscii(SDLK_ESCAPE);
+ _key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
+ } else if (is_parallaction) {
+ _action_enabled[POCKET_ACTION_SAVE] = true;
+ _key_action[POCKET_ACTION_SAVE].setKey('s', SDLK_s);
} else {
_action_enabled[POCKET_ACTION_SAVE] = true;
- _key_action[POCKET_ACTION_SAVE].setAscii(319); // F5 key
+ _key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
}
// Quit
_action_enabled[POCKET_ACTION_QUIT] = true;
// Skip
- if (!is_cine)
+ if (!is_cine && !is_parallaction)
_action_enabled[POCKET_ACTION_SKIP] = true;
if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche)
- _key_action[POCKET_ACTION_SKIP].setAscii(VK_ESCAPE);
+ _key_action[POCKET_ACTION_SKIP].setKey(VK_ESCAPE);
else
- _key_action[POCKET_ACTION_SKIP].setAscii(KEY_ALL_SKIP);
+ _key_action[POCKET_ACTION_SKIP].setKey(KEY_ALL_SKIP);
// Hide
_action_enabled[POCKET_ACTION_HIDE] = true;
// Keyboard
@@ -188,9 +192,16 @@ void CEActionsPocket::initInstanceGame() {
_action_enabled[POCKET_ACTION_ZOOM_UP] = true;
_action_enabled[POCKET_ACTION_ZOOM_DOWN] = true;
}
- // FT Cheat
- _action_enabled[POCKET_ACTION_FT_CHEAT] = true;
- _key_action[POCKET_ACTION_FT_CHEAT].setAscii(86); // shift-V
+ // Multi function key
+ _action_enabled[POCKET_ACTION_MULTI] = true;
+ if (is_agi)
+ _key_action[POCKET_ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
+ else if (is_gob)
+ _key_action[POCKET_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
+ else if (gameid == "atlantis")
+ _key_action[POCKET_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
+ else
+ _key_action[POCKET_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
// Key bind method
_action_enabled[POCKET_ACTION_BINDKEYS] = true;
}
@@ -213,7 +224,7 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) {
case POCKET_ACTION_PAUSE:
case POCKET_ACTION_SAVE:
case POCKET_ACTION_SKIP:
- case POCKET_ACTION_FT_CHEAT:
+ case POCKET_ACTION_MULTI:
EventsBuffer::simulateKey(&_key_action[action], false);
return true;
@@ -225,7 +236,16 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) {
case POCKET_ACTION_PAUSE:
case POCKET_ACTION_SAVE:
case POCKET_ACTION_SKIP:
- case POCKET_ACTION_FT_CHEAT:
+ case POCKET_ACTION_MULTI:
+ if (action == POCKET_ACTION_SAVE && ConfMan.get("gameid") == "parallaction") {
+ // FIXME: This is a temporary solution. The engine should handle its own menus.
+ // Note that the user can accomplish this via the virtual keyboard as well, this is just for convenience
+ GUI::MessageDialog alert("Do you want to load or save the game?", "Load", "Save");
+ if (alert.runModal() == GUI::kMessageOK)
+ _key_action[action].setKey(SDLK_l);
+ else
+ _key_action[action].setKey(SDLK_s);
+ }
EventsBuffer::simulateKey(&_key_action[action], true);
return true;
case POCKET_ACTION_KEYBOARD:
diff --git a/backends/platform/wince/CEActionsPocket.h b/backends/platform/wince/CEActionsPocket.h
index 0f6430d443..9749ca60ef 100644
--- a/backends/platform/wince/CEActionsPocket.h
+++ b/backends/platform/wince/CEActionsPocket.h
@@ -48,7 +48,7 @@ enum pocketActionType {
POCKET_ACTION_FREELOOK,
POCKET_ACTION_ZOOM_UP,
POCKET_ACTION_ZOOM_DOWN,
- POCKET_ACTION_FT_CHEAT,
+ POCKET_ACTION_MULTI,
POCKET_ACTION_BINDKEYS,
POCKET_ACTION_UP,
POCKET_ACTION_DOWN,
diff --git a/backends/platform/wince/CEActionsSmartphone.cpp b/backends/platform/wince/CEActionsSmartphone.cpp
index 3d85ebc68e..227318d552 100644
--- a/backends/platform/wince/CEActionsSmartphone.cpp
+++ b/backends/platform/wince/CEActionsSmartphone.cpp
@@ -43,7 +43,7 @@ const String smartphoneActionNames[] = {
"Save",
"Skip",
"Zone",
- "FT Cheat",
+ "Multi Function",
"Bind Keys",
"Keyboard",
"Rotate",
@@ -117,11 +117,12 @@ void CEActionsSmartphone::initInstanceGame() {
bool is_cine = (gameid == "cine");
bool is_touche = (gameid == "touche");
bool is_agi = (gameid == "agi");
+ bool is_parallaction = (gameid == "parallaction");
GUI_Actions::initInstanceGame();
// See if a right click mapping could be needed
- if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || is_gob || is_samnmax || is_cine || is_touche)
+ if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || is_gob || is_samnmax || is_cine || is_touche || is_parallaction)
_right_click_needed = true;
// Initialize keys for different actions
@@ -130,31 +131,41 @@ void CEActionsSmartphone::initInstanceGame() {
_action_enabled[SMARTPHONE_ACTION_SAVE] = false;
else if (is_queen) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
- _key_action[SMARTPHONE_ACTION_SAVE].setAscii(286); // F1 key for FOTAQ
+ _key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
} else if (is_sky) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
- _key_action[SMARTPHONE_ACTION_SAVE].setAscii(63);
+ _key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
} else if (is_cine) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
- _key_action[SMARTPHONE_ACTION_SAVE].setAscii(291); //F10
+ _key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); //F10
} else if (is_agi) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
- _key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_ESCAPE);
+ _key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
+ } else if (is_parallaction) {
+ _action_enabled[SMARTPHONE_ACTION_SAVE] = true;
+ _key_action[SMARTPHONE_ACTION_SAVE].setKey('s', SDLK_s);
} else {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
- _key_action[SMARTPHONE_ACTION_SAVE].setAscii(319); // F5 key
+ _key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
}
// Skip
_action_enabled[SMARTPHONE_ACTION_SKIP] = true;
if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche)
- _key_action[SMARTPHONE_ACTION_SKIP].setAscii(VK_ESCAPE);
+ _key_action[SMARTPHONE_ACTION_SKIP].setKey(VK_ESCAPE);
else
- _key_action[SMARTPHONE_ACTION_SKIP].setAscii(KEY_ALL_SKIP);
+ _key_action[SMARTPHONE_ACTION_SKIP].setKey(KEY_ALL_SKIP);
// Zone
_action_enabled[SMARTPHONE_ACTION_ZONE] = true;
- // FT Cheat
- _action_enabled[SMARTPHONE_ACTION_FT_CHEAT] = true;
- _key_action[SMARTPHONE_ACTION_FT_CHEAT].setAscii(86); // shift-V
+ // Multi function key
+ _action_enabled[SMARTPHONE_ACTION_MULTI] = true;
+ if (is_agi)
+ _key_action[SMARTPHONE_ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
+ else if (is_gob)
+ _key_action[SMARTPHONE_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
+ else if (gameid == "atlantis")
+ _key_action[SMARTPHONE_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
+ else
+ _key_action[SMARTPHONE_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
// Bind keys
_action_enabled[SMARTPHONE_ACTION_BINDKEYS] = true;
}
@@ -176,7 +187,7 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) {
return true;
case SMARTPHONE_ACTION_SAVE:
case SMARTPHONE_ACTION_SKIP:
- case SMARTPHONE_ACTION_FT_CHEAT:
+ case SMARTPHONE_ACTION_MULTI:
EventsBuffer::simulateKey(&_key_action[action], false);
return true;
}
@@ -186,7 +197,16 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) {
switch (action) {
case SMARTPHONE_ACTION_SAVE:
case SMARTPHONE_ACTION_SKIP:
- case SMARTPHONE_ACTION_FT_CHEAT:
+ case SMARTPHONE_ACTION_MULTI:
+ if (action == SMARTPHONE_ACTION_SAVE && ConfMan.get("gameid") == "parallaction") {
+ // FIXME: This is a temporary solution. The engine should handle its own menus.
+ // Note that the user can accomplish this via the virtual keyboard as well, this is just for convenience
+ GUI::MessageDialog alert("Do you want to load or save the game?", "Load", "Save");
+ if (alert.runModal() == GUI::kMessageOK)
+ _key_action[action].setKey(SDLK_l);
+ else
+ _key_action[action].setKey(SDLK_s);
+ }
EventsBuffer::simulateKey(&_key_action[action], true);
return true;
case SMARTPHONE_ACTION_RIGHTCLICK:
diff --git a/backends/platform/wince/CEActionsSmartphone.h b/backends/platform/wince/CEActionsSmartphone.h
index 648d0ae4cf..590302ef26 100644
--- a/backends/platform/wince/CEActionsSmartphone.h
+++ b/backends/platform/wince/CEActionsSmartphone.h
@@ -45,7 +45,7 @@ enum smartphoneActionType {
SMARTPHONE_ACTION_SAVE,
SMARTPHONE_ACTION_SKIP,
SMARTPHONE_ACTION_ZONE,
- SMARTPHONE_ACTION_FT_CHEAT,
+ SMARTPHONE_ACTION_MULTI,
SMARTPHONE_ACTION_BINDKEYS,
SMARTPHONE_ACTION_KEYBOARD,
SMARTPHONE_ACTION_ROTATE,
diff --git a/backends/platform/wince/CEDevice.cpp b/backends/platform/wince/CEDevice.cpp
index a76360f590..855c601741 100644
--- a/backends/platform/wince/CEDevice.cpp
+++ b/backends/platform/wince/CEDevice.cpp
@@ -53,15 +53,13 @@ DWORD CEDevice::reg_access(TCHAR *key, TCHAR *val, DWORD data) {
return data;
cbdata = sizeof(DWORD);
- if (RegQueryValueEx(regkey, val, NULL, NULL, (LPBYTE) &tmpval, &cbdata) != ERROR_SUCCESS)
- {
+ if (RegQueryValueEx(regkey, val, NULL, NULL, (LPBYTE) &tmpval, &cbdata) != ERROR_SUCCESS) {
RegCloseKey(regkey);
return data;
}
cbdata = sizeof(DWORD);
- if (RegSetValueEx(regkey, val, 0, REG_DWORD, (LPBYTE) &data, cbdata) != ERROR_SUCCESS)
- {
+ if (RegSetValueEx(regkey, val, 0, REG_DWORD, (LPBYTE) &data, cbdata) != ERROR_SUCCESS) {
RegCloseKey(regkey);
return data;
}
@@ -78,8 +76,7 @@ void CEDevice::backlight_xchg() {
REG_disp = reg_access(TEXT("ControlPanel\\Power"), TEXT("Display"), REG_disp);
h = CreateEvent(NULL, FALSE, FALSE, TEXT("BackLightChangeEvent"));
- if (h)
- {
+ if (h) {
SetEvent(h);
CloseHandle(h);
}
diff --git a/backends/platform/wince/CEgui/PanelKeyboard.cpp b/backends/platform/wince/CEgui/PanelKeyboard.cpp
index 8a17a4c1c4..79b833f84b 100644
--- a/backends/platform/wince/CEgui/PanelKeyboard.cpp
+++ b/backends/platform/wince/CEgui/PanelKeyboard.cpp
@@ -35,6 +35,8 @@ namespace CEGUI {
PanelKeyboard::PanelKeyboard(WORD reference) : Toolbar() {
setBackground(reference);
+ _state = false;
+ _lastKey.setKey(0);
}
@@ -42,6 +44,7 @@ namespace CEGUI {
}
bool PanelKeyboard::action(int x, int y, bool pushed) {
+ Key key;
if (checkInside(x, y)) {
int keyAscii = 0;
@@ -62,19 +65,35 @@ namespace CEGUI {
keyAscii = VK_BACK; keyCode = keyAscii;
} else {
// Enter
- keyAscii = 13; keyCode = 10;
+ keyAscii = 13; keyCode = 13;
}
}
if (keyAscii != 0) {
- _key.setAscii(keyAscii);
- _key.setKeycode(tolower(keyCode));
- return EventsBuffer::simulateKey(&_key, pushed);
+ if (_state && pushed && keyCode != _lastKey.keycode()) // if cursor is still down and off the current key
+ return false;
+ else if (_state && !pushed && keyCode != _lastKey.keycode()) { // cursor is up but off the current key
+ keyAscii = _lastKey.ascii();
+ keyCode = _lastKey.keycode();
+ }
+ _state = pushed;
+ _lastKey.setKey(keyAscii, tolower(keyCode));
+
+ key.setKey(keyAscii, tolower(keyCode));
+ return EventsBuffer::simulateKey(&key, pushed);
}
- else
+ else if (_state && !pushed) { // cursor is in some forbidden region and is up
+ _state = false;
+ key = _lastKey;
+ return EventsBuffer::simulateKey(&key, false);
+ } else
return false;
}
- else
+ else if (_state && !pushed) { // cursor left the keyboard area and is up
+ _state = false;
+ key = _lastKey;
+ return EventsBuffer::simulateKey(&key, false);
+ } else
return false;
}
}
diff --git a/backends/platform/wince/CEgui/PanelKeyboard.h b/backends/platform/wince/CEgui/PanelKeyboard.h
index fe586b3727..d0182ce5fe 100644
--- a/backends/platform/wince/CEgui/PanelKeyboard.h
+++ b/backends/platform/wince/CEgui/PanelKeyboard.h
@@ -44,7 +44,8 @@ namespace CEGUI {
virtual ~PanelKeyboard();
virtual bool action(int x, int y, bool pushed);
private:
- Key _key;
+ bool _state;
+ Key _lastKey;
};
}
diff --git a/backends/platform/wince/CEkeys/EventsBuffer.cpp b/backends/platform/wince/CEkeys/EventsBuffer.cpp
index c8b09f611a..19978c23dc 100644
--- a/backends/platform/wince/CEkeys/EventsBuffer.cpp
+++ b/backends/platform/wince/CEkeys/EventsBuffer.cpp
@@ -32,10 +32,9 @@ namespace CEKEYS {
SDL_Event ev = {0};
if (!key->keycode())
- key->setKeycode(key->ascii());
-
- if (!key->ascii())
- key->setAscii(key->keycode());
+ key->setKey(key->ascii(), key->ascii());
+ else if (!key->ascii())
+ key->setKey(key->keycode());
ev.type = (pushed ? SDL_KEYDOWN : SDL_KEYUP);
ev.key.keysym.mod = (SDLMod)key->flags();
diff --git a/backends/platform/wince/Makefile b/backends/platform/wince/Makefile
index cc9e2951be..0d9556e967 100644
--- a/backends/platform/wince/Makefile
+++ b/backends/platform/wince/Makefile
@@ -3,9 +3,20 @@
# $URL$
# $Id$
+########################################################################
+## Set this to point to where the tools are installed on your system
+
wince_gcc_root = /cygdrive/e/wince-gcc-root
-srcdir = ../../..
-VPATH = $(srcdir)
+
+
+########################################################################
+## Do you want a debug build or not?
+
+#WINCE_DEBUG_BUILD = 1
+
+
+########################################################################
+## Disable whichever engines you want here
#DISABLE_SCUMM = 1
#DISABLE_SKY = 1
@@ -20,10 +31,36 @@ DISABLE_LURE = 1
#DISABLE_SWORD1 = 1
#DISABLE_SWORD2 = 1
#DISABLE_TOUCHE = 1
-DISABLE_PARALLACTION = 1
+#DISABLE_PARALLACTION = 1
DISABLE_CRUISE = 1
+
+########################################################################
+## Pick which libraries you want to use here
+
+USE_MAD = 1
+USE_MPEG2 = 1
+USE_TREMOR = 1
+#USE_TREMOLO = 1
+USE_FLAC = 1
+USE_ZLIB = 1
+
+
+########################################################################
+## You're probably not going to want to change these defines...
+
#DISABLE_HQ_SCALERS = 1
+USE_ARM_SOUND_ASM = 1
+USE_ARM_SMUSH = 1
+
+
+########################################################################
+## Hopefully you shouldn't need to change anything below here. ##
+########################################################################
+
+
+srcdir = ../../..
+VPATH = $(srcdir)
CXX = arm-wince-pe-g++
LD = arm-wince-pe-g++
@@ -38,9 +75,19 @@ ECHO = echo -n
CAT = cat
AS = arm-wince-pe-as
-DEFINES := -D_WIN32_WCE=300 -DARM -D__ARM__ -D_ARM_ -DUNICODE -DSCUMM_NEED_ALIGNMENT -DFPM_DEFAULT -DUSE_MAD -DNONSTANDARD_PORT -DUSE_TREMOR -DUSE_VORBIS -DUSE_MPEG2 -DWIN32 -DUSE_ZLIB
+########################################################################
+## Set up defines, includes, cflags etc
+
+DEFINES := -D_WIN32_WCE=300 -DARM -D__ARM__ -D_ARM_ -DUNICODE -DSCUMM_NEED_ALIGNMENT
+DEFINES += -DFPM_DEFAULT
+
+DEFINES += -DNONSTANDARD_PORT
+DEFINES += -DWIN32
DEFINES += -D__stdcall= -Dcdecl= -D__cdecl__= -D__cdecl= -Wno-multichar
-#DEFINES += -DDEBUG -DUSE_WINDBG -g
+
+ifdef WINCE_DEBUG_BUILD
+DEFINES += -DDEBUG -DUSE_WINDBG -g
+endif
INCLUDES := -I$(srcdir) -I. -I$(srcdir)/engines -Imissing/gcc -Ilibs/include -Ilibs/include/sdl -ICEgui -ICEkeys -I$(wince_gcc_root)/include
@@ -49,7 +96,47 @@ CFLAGS := -O3 -march=armv4 -mtune=xscale
CXXFLAGS := $(CFLAGS)
LDFLAGS := -Llibs/lib -L$(wince_gcc_root)/lib
-LIBS := -lSDL -lzlib -lmad -lmpeg2 -ltremorce --entry WinMainCRTStartup
+LIBS := -lSDL
+
+ifdef USE_ZLIB
+DEFINES += -DUSE_ZLIB
+LIBS += -lzlib
+endif
+
+ifdef USE_MAD
+DEFINES += -DUSE_MAD
+LIBS += -lmad
+endif
+
+ifdef USE_MPEG2
+DEFINES += -DUSE_MPEG2
+LIBS += -lmpeg2
+endif
+
+ifdef USE_TREMOR
+DEFINES += -DUSE_TREMOR -DUSE_VORBIS
+LIBS += -ltremorce
+endif
+
+ifdef USE_TREMOLO
+DEFINES += -DUSE_TREMOR -DUSE_VORBIS
+INCLUDES += -Ilibs/include/tremolo
+LIBS += -llibTremolo
+endif
+
+ifdef USE_FLAC
+DEFINES += -DUSE_FLAC
+LIBS += -lFLAC
+endif
+
+ifdef USE_ARM_SMUSH
+DEFINES += -DUSE_ARM_SMUSH
+endif
+
+LIBS += --entry WinMainCRTStartup
+
+########################################################################
+# Targets follow here
TARGET = scummvm.exe
OBJS :=
@@ -71,7 +158,6 @@ include $(srcdir)/Makefile.common
all: dist
dist: $(TARGET)
-# bzip2 -fvk $(TARGET)
$(STRIP) $(TARGET)
PocketSCUMM.o:
diff --git a/backends/platform/wince/README-WinCE b/backends/platform/wince/README-WinCE
deleted file mode 100644
index b1fc585e22..0000000000
--- a/backends/platform/wince/README-WinCE
+++ /dev/null
@@ -1,506 +0,0 @@
-ScummVM Windows CE FAQ
-Last updated: 2006-06-20
-Release version: 0.9.0
-------------------------------------------------------------------------
-
-This document is intended to give common answers to specific ScummVM
-issues on Windows CE, in 3 sections
- * "General questions" : browse this section to get started and see
- general issues
- * "Game specific questions" : lists some common game specific issues
- * "Support and links" : how to get support if you're still puzzled
-
-------------------------------------------------------------------------
-General questions
-------------------------------------------------------------------------
-
-Which devices are supported ?
------------------------------
-
-Official build
---------------
-
-The official build is based on the ARM architecture and should work with any
-Pocket PC 2000, Pocket PC 2002, Pocket PC 2003, Pocket PC 2003 SE, Smartphone
-2002, Smartphone 2003 or Windows Mobile based device.
-
-Support for old ARM architectures (Handheld PCs, Palm Size PCs) and other CPUs
-(MIPS, SH3) is discontinued. Feel free to generate builds for these
-architectures and contact me to include them on ScummVM website.
-
-Full support
-------------
-
-* ARM based Windows Mobile handhelds with QVGA resolution (240x320) slower
- than 200 MHz (PocketPC platform)
-
-All AdLib first generation games should work properly on these devices.
-Sam'n'Max will be a bit too slow to be played with music.
-More recent games (The Dig, Curse of Monkey Island, Broken Sword series)
-and all VGA games will probably be too slow to be enjoyable.
-
-* ARM based Windows Mobile handhelds with QVGA resolution (240x320) faster
- than 200 MHz
-
-All games should work properly on these devices.
-VGA games will be resized and the font gets hard to read in this case (be sure
-to install the talkie version the game :p)
-
-* ARM based Windows Mobile handhelds with VGA resolution (640x480)
-
-All non VGA games should work properly on these devices. They can be resized
-with different scalers (not all desktop scalers are supported due to Embedded
-Visual C++ very personal interpretation of the C++ standard).
-VGA games will be displayed in true VGA mode, which can takes a lot of memory
-and slow down the game (especially during scrollings). It will get better in
-the next releases or with faster devices.
-
-* Windows Mobile Smartphones (176x220 or 240x320)
-
-Early support is provided for all 320x200 games.
-The font can get hard to read (you should prefer talkie games, or wear glasses)
-
-* Support for Windows Mobile 5 is experimental but should work. "Flipping" devices
-such as the HTC Wizard or HTC Universal work only in portait (closed) mode for the
-moment.
-
-Partial / Discontinued support
-------------------------------
-
-Support for the following devices is not complete, not working properly or
-discontinued because the device is now obsolete. Feel free to contribute and
-improve the port for your favorite device, or use the last release built with
-the previous port architecture (0.5.1) which was less resource hungry and
-supported more exotic devices.
-
-* "Paletted" devices (non "true color")
-
-These devices will be supported through the GDI layer which will slow down the
-games a lot. You can try to disable the music/sound effects to get a better
-game experience.
-
-* "Mono" devices
-
-I don't even think anything will be displayed on these devices :) you can try
-and report your success ...
-
-* MIPS/SH3 devices with QVGA resolution (240x320), "true color"
-
-Some devices may be a bit too slow, especially if direct screen access (GAPI)
-is not supported on these devices.
-
-* ARM/MIPS/SH3 devices with VGA resolution (640x480) (Palm Size PC / Handheld
- PC platform)
-
-True VGA games will probably be too slow to run properly on these devices even
-if they can support them ...
-
-* ARM/MIPS/SH3 devices with desktop resolution (800x600) (Handheld PC platform)
-
-No, there will never be ANY scaler supporting 800x600 resolution, because
-320x200 games CANNOT be resized to a 800x600 by a simple operation.
-
-And the device will probably be too slow to perform any kind of graphic
-transform anyway :)
-
-How do I install ScummVM for Windows CE ?
------------------------------------------
-
-If the current release includes a .EXE installer, ScummVM for Windows CE
-will be installed without hassle.
-Otherwise, you'll unzip the release on your desktop computer, and copy
-all files on your device.
-
-If you're using a Pocket PC 2000 operating system, be sure to have GAPI
-installed - it's available on Microsoft website http://www.microsoft.com
-
-How do I install a game ?
--------------------------
-
-You'll at least need to copy all the data files from your game, in a
-sub-directory of your game directory.
-
-You'll need to put the data files in a directory named after ScummVM game
-name (see "Supported Game" section in ScummVM readme) for the games having
-"generic" data files (.LFL files). Recent games can be put in any directory.
-
-You can compress the multimedia files (sound/video) as described in the
-ScummVM readme.
-
-You can compress the audio tracks of Loom or Monkey Island 1 as described in
-the ScummVM readme. If you are running these games on a slow device with Ogg
-Vorbis compression, it's recommended to sample the files to 11 kHz (this sample
-rate is not supported by other versions of ScummVM).
-
-If you need more details, you can check SirDave's mini-manual online available
-at: http://forums.scummvm.org/viewtopic.php?t=936
-and at: http://www.pocketmatrix.com/forums/viewtopic.php?t=8606
-
-How do I run a game ?
----------------------
-
-If it's the first time you're running ScummVM for Windows CE, have installed or
-removed games, you need to rescan your game directory.
- * Select Scan, tap the root directory of your games, and tap "Yes" to begin
- an automatic scan of the installed games.
-
-Usually all games are detected and you can start playing right away. If your
-game is not detected check its directory name and your data files.
-
-To play a game, tap on its name then tap the "Play" button or double tap its
-name.
-
-How do I play a game on a Pocket PC or Handheld PC device ?
------------------------------------------------------------
-
-The stylus is your mouse cursor, and a tap is a left mouse button click.
-
-As the Pocket PC lacks some keys, a toolbar is displayed at the bottom of the
-screen to make the most common functions just a tap away
- * The disk icon opens ScummVM options menu to save your game, or change your
- current game settings.
- * The movie icon skips a non interactive sequence, the current dialog or
- behaves like the ESC key on a regular keyboard
- * The sound icon turns all sound effects and music off and on
- * The key icon allow you to map a key action to a device button.
- * The monkey icon switches between portrait, landscape and inverse landscape
- mode.
-
-You can map additional actions on your device hardware buttons using the
-"Options" / "Key" menu in the ScummVM options menu. To associate an action to
-a key, tap the action, then the "Map" button and press the hardware key.
-The following actions are available
- * Pause : pause the game
- * Save : open ScummVM option menu
- * Quit : quit ScummVM (without saving, be careful when using it)
- * Skip : skip a non interactive sequence, the current dialog or
- behaves like the ESC key on a regular keyboard
- * Hide : hide or display the toolbar
- - YOU MUST HIDE THE TOOLBAR TO SCROLL THROUGH THE INVENTORY IN ZAK -
- * Keyboard : hide or display the virtual keyboard
- - YOU MUST DISPLAY THE KEYBOARD TO FIGHT IN INDIANA JONES 3 -
- * Sound : turns all sound effects and music off and on
- * Right click : acts as a right mouse button click
- - YOU MUST MAP THIS ACTION TO PLAY THE FOLLOWING GAMES -
- - SAM & MAX, BENEATH A STEEL SKY, CURSE OF MONKEY ISLAND -
- * Cursor : hide or display the mouse cursor
- * Free look : go in or out of free-look mode. In this mode, you can tap
- the screen to look for interesting locations without walking.
- * Zoom up : magnify the upper part of the screen for 640x480 games
- rendered on a 320x240 device.
- * Zoom down : magnify the lower part of the screen for 640x480 games
- rendered on a 320x240 device.
- * FT Cheat : win a Full Throttle action sequence
- * Bind keys : map a key action to a device button
- * Up,Down,Left:
- Right, : emulate mouse/stylus behavior
- Left Click :
-
-If you start a game when a Right click mapping is necessary, ScummVM will ask
-you to map one of your hardware key to this action before playing. Just press
-the key you want to map if you see this message.
-
-How do I hide the toolbar ?
-----------------------------
-
-A shortcut is available to hide the toolbar directly from the game screen from
-release 0.8.0. Double tapping the stylus at the top of the screen will switch
-between a visible toolbar panel, a virtual keyboard, and an invisible panel.
-If any part of the screen is obscured by the toolbar (like the load/save game
-dialogs) you can use the invisible panel mode to get to it. For 320x200 games
-on QVGA Pocket PCs, when the panel is hidden the game screen is resized to
-320x240 for better gaming experience.
-
-How do I play a game on a Microsoft Smartphone device ?
--------------------------------------------------------
-
-When playing on a Smartphone, the cursor and mouse buttons are emulated by
-a set of default keys :
- 4 Move up
- 6 Move down
- 8 Move left
- 2 Move right
- Hotkey 1 Left mouse button click
- Hotkey 2 Right mouse button click
- Return/Action Open the key mapping menu
-
-Note that this means that the input will be "inversed" on a 240x320 (Windows
-Mobile 2005) Smartphone. You'll have to remap the keys.
-
-A few options are also emulated by a set of default keys :
-
- 0 Options menu
- Back Skip
- # Zone option
-
-The cursor will move faster if you keep the key down. You can tweak this
-behaviour in the configuration file described below.
-
-The "Zone" key is a *very* valuable addition allowing you to jump quickly
-between three screen zones : the game zone, the verbs zone and the inventory
-zone. When you switch to a zone the cursor will be reset to its former location
-in this zone.
-
-There are two more actions available for mapping:
- - Keyboard: Shows hides a virtual keyboard which can be use whenever text
- input is required in a game, or a dialog.
- - Rotate : Flips the screen orientation between normal and inverse landscape.
-
-You can change the keys mapping during the game in the key mapping menu.
-
-Note that you'll need to push the Action button (center of the pad) to quit
-a Simon game.
-
-How can I apply a ScummVM command line option (f.e. to change the language)
----------------------------------------------------------------------------
-
-See the section regarding the configuration file (scummvm.ini) in ScummVM
-README file - the same keywords apply.
-
-Some parameters are specific to this port :
-
-game specific section (f.e. [monkey2]) - performance options
-
-high_sample_rate bool Desktop quality (22 kHz) sound output if set.
- 11 kHz otherwise.
- The default is 11 kHz.
- If you have a fast device, you can set this to
- true to enjoy better sound effects and music.
-FM_high_quality bool Desktop quality FM synthesis if set. Lower
- quality otherwise. The default is low quality.
- You can change this if you have a fast device.
-sound_thread_priority int Set the priority of the sound thread
- (given to SetThreadPriority API)
-Smush_force_redraw int Force a Smush frame redraw every X missed
- frames. Mainly used for Full Throttle action
- sequences. Setting it lower gives more
- priority to screen redraws. Setting it higher
- gives more priority to stylus/keyboard input.
- The default is 30.
-
-game specific section (f.e. [monkey2]) - game options
-
-landscape int 0: Portrait, 1: Landscape, 2: Inverse Landscape
-
-[scummvm] section - keys definition
-
-You usually do not wish to modify these values directly, as they are set
-by the option dialog, and are only given here for reference.
-
-action_mapping_version int Mapping version linked to ScummVM version.
-action_mapping string Hex codes describing the key associated to
- each different action.
-
-[scummvm] section - mouse emulation tuning
-
-You can tweak these parameters to customize how the cursor is handled.
-
-repeatTrigger int Number of milliseconds a key must be held to
- consider being repeated.
-
-repeatX int Number of key repeat events before changing
- horizontal cursor behaviour.
-stepX1 int Horizontal cursor offset value when the key is
- not repeated.
-stepX2 int Horizontal cursor offset value when the key is
- repeated less than repeatX.
-stepX3 int Horizontal cursor offset value when the key is
- repeated more than repeatX.
-
-
-repeatY int Number of key repeat events before changing
- vertical cursor behaviour.
-stepY1 int Vertical cursor offset value when the key is
- not repeated.
-stepY2 int Horizontal cursor offset value when the key is
- repeated less than repeatY.
-stepY3 int Vertical cursor offset value when the key is
- repeated more than repeatY.
-
-Game xxx is too slow on my device
----------------------------------
-
-Even if it shouldn't happen (this port is running almost correctly on a
-80 / 120 MHz first generation SPV phone), you can try some things :
-
- * Disable sound in the engine (see the global README)
- * Play with the priority of the sound thread (change the
- sound_thread_priority value - the higher the lower priority)
-
-And don't forget to report your progress in the ScummVM forum !
-
-------------------------------------------------------------------------
-Game specific questions
-------------------------------------------------------------------------
-
---------------------------
--- Beneath a Steel Sky --
---------------------------
-
-Introduction movie is too slow or never ends ...
--------------------------------------------------
-
-Skip it :)
-
-How can I open the inventory in Beneath a Steel Sky ?
----------------------------------------------------
-
-Tap the top of the screen. Check your stylus calibration if you still cannot
-open it.
-
-How can I use an item in Beneath a Steel Sky ?
-----------------------------------------------
-
-You need to map the right click button (see the General Questions section).
-
-----------------------------
--- Curse of Monkey Island --
-----------------------------
-
-How can I open the inventory in Curse of Monkey Island ?
-------------------------------------------------------
-
-You need to map the right click button (see the General Questions section).
-
-I'm experiencing random crashes ...
-------------------------------------
-
-This game has high memory requirements, and may crash sometimes on low
-memory devices. Continue your game with the latest automatically saved
-game and everything should be fine.
-You can consider removing the music and voice files (VOXDISK.BUN, MUSDISK.BUN)
-to lower these requirements.
-
-Sound synchronization is lost in Curse of Monkey Island videos
---------------------------------------------------------------
-
-This is a port bug which is very noticeable in VGA mode. It can probably be
-fixed with a faster blitting routine or a faster device.
-
---------------------
--- Full Throttle --
---------------------
-
-I'm experiencing random crashes ...
-------------------------------------
-
-This game has high memory requirements, and may crash sometimes on low
-memory devices. Continue your game with the latest automatically saved
-game and everything should be fine.
-You can consider removing the voice file (MONSTER.SOU) and disable the
-music to lower these requirements.
-
-----------------------------------------
--- Indiana Jones and the Last Crusade --
-----------------------------------------
-
-How can I fight in Indiana Jones and the Last Crusade ?
------------------------------------------------------
-
-You need to map the keyboard button (see the General Questions section).
-
----------------
--- Sam & Max --
----------------
-
-How can I change the current action ?
--------------------------------------
-
-You need to map the right click button (see the General Questions section).
-
-How can I exit a mini game ?
-----------------------------
-
-Use the skip toolbar icon (see the General Questions section).
-
--------------------
--- Simon 1 and 2 --
---------------------
-
-How can I save or quit in Simon ?
---------------------------------
-
-"Use" (use the use verb :p) the postcard. The ScummVM option dialog is disabled
-in Simon games.
-
-On Smartphone, you'll need to push the Action button (center of the pad) to
-quit the game.
-
--------------
--- The Dig --
--------------
-
-I'm experiencing random crashes ...
-------------------------------------
-
-This game has high memory requirements, and may crash sometimes on low
-memory devices. Continue your game with the latest automatically saved
-game and everything should be fine.
-You can consider removing the music and voice files (VOXDISK.BUN, MUSDISK.BUN)
-to lower these requirements.
-
---------------------
--- Zak Mc Kracken --
---------------------
-
-How can I scroll through my inventory items in Zak Mc Kracken ?
--------------------------------------------------------------
-
-You need to map the hide toolbar button (see the General Questions section) or
-double tap at the top of the screen (from 0.8.0+)
-
---------------------
--- Broken Sword 2 --
---------------------
-
-I've installed the movies pack but they are not playing
--------------------------------------------------------
-
-MPEG 2 playback takes too much memory in the current release, and may prevent
-movies from playing in VGA mode. This may get better in the next releases.
-
-----------------
--- Gobliiins --
-----------------
-
-Cursor is grabled after loading a game
---------------------------------------
-
-Due to a bug in 0.8.0, you'll have to tap the stylus somewhere on the game
-screen between 2 letters when entering a code. Otherwise the cursor will get
-garbled.
-
-This has not been retested for 0.8.1 but should be fixed.
-
-------------------------------------------------------------------------
-Support
-------------------------------------------------------------------------
-
-Help, I've read everything and ...
------------------------------------
-
-Luckily, as there is a huge variety of Windows Mobile devices, a specific forum
-is dedicated to this ScummVM port. You can ask your question on the WinCE
-ScummVM forum available at http://forums.scummvm.org/viewforum.php?f=6
-
-Some older questions and very nice tutorials are still available on the historic
-PocketMatrix forum at http://www.pocketmatrix.com/forums/viewforum.php?f=20
-where the community is always glad to help and have dealt with all my bugs for more
-than three years now :)
-
-I think I found a bug, ScummVM crashes in ...
----------------------------------------------
-
-See the "Reporting Bugs" section in ScummVM readme.
-
-If you have a Pocket PC or Handheld PC, be sure to include its resolution (obtained
-on the second dialog displayed on the "About" menu) in your bug report.
-
-If you cannot reproduce this bug on another ScummVM version, you can cross
-post your bug report on ScummVM forums.
-
-------------------------------------------------------------------------
-Good Luck and Happy Adventuring!
-The ScummVM team.
-http://www.scummvm.org/
-------------------------------------------------------------------------
diff --git a/backends/platform/wince/wince-sdl.cpp b/backends/platform/wince/wince-sdl.cpp
index 8ef7412530..2d6e9a4302 100644
--- a/backends/platform/wince/wince-sdl.cpp
+++ b/backends/platform/wince/wince-sdl.cpp
@@ -314,9 +314,6 @@ void OSystem_WINCE3::initScreenInfos() {
_isOzone = 0;
SDL_Rect **r;
r = SDL_ListModes(NULL, 0);
- printf("listmodes: %dx%d\n", r[0]->w, r[0]->h);
- //_platformScreenWidth = GetSystemMetrics(SM_CXSCREEN);
- //_platformScreenHeight = GetSystemMetrics(SM_CYSCREEN);
_platformScreenWidth = r[0]->w;
_platformScreenHeight = r[0]->h;
}
@@ -330,7 +327,7 @@ bool OSystem_WINCE3::isOzone() {
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 +768,7 @@ void OSystem_WINCE3::setFeatureState(Feature f, bool enable) {
switch(f) {
case kFeatureFullscreenMode:
return;
+
case kFeatureVirtualKeyboard:
if (_hasSmartphoneResolution)
return;
@@ -790,6 +788,12 @@ void OSystem_WINCE3::setFeatureState(Feature f, bool enable) {
//_toolbarHandler.setVisible(_saveToolbarState);
}
return;
+
+ case kFeatureDisableKeyFiltering:
+ if (_hasSmartphoneResolution)
+ _unfilteredkeys = enable;
+ return;
+
default:
OSystem_SDL::setFeatureState(f, enable);
}
@@ -1583,6 +1587,17 @@ void OSystem_WINCE3::internUpdateScreen() {
_forceFull = false;
}
+Graphics::Surface *OSystem_WINCE3::lockScreen() {
+ // FIXME: Fingolfing asks: Why is undrawMouse() needed here?
+ // Please document this.
+ undrawMouse();
+ return OSystem_SDL::lockScreen();
+}
+
+void OSystem_WINCE3::unlockScreen() {
+ OSystem_SDL::unlockScreen();
+}
+
bool OSystem_WINCE3::saveScreenshot(const char *filename) {
assert(_hwscreen != NULL);
@@ -2067,18 +2082,30 @@ void OSystem_WINCE3::addDirtyRect(int x, int y, int w, int h, bool mouseRect) {
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) {
return key;
} else if (unicode) {
return unicode;
- } else if (key >= 'a' && key <= 'z' && mod & KMOD_SHIFT) {
+ } else if (key >= 'a' && key <= 'z' && (mod & KMOD_SHIFT)) {
return key & ~0x20;
} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
return 0;
@@ -2113,9 +2140,9 @@ bool OSystem_WINCE3::pollEvent(Common::Event &event) {
while(SDL_PollEvent(&ev)) {
switch(ev.type) {
case SDL_KEYDOWN:
- // 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) {
+ // KMOD_RESERVED is used if the key has been injected by an external buffer
+ if (ev.key.keysym.mod != KMOD_RESERVED && !_unfilteredkeys) {
keyEvent = true;
_lastKeyPressed = ev.key.keysym.sym;
_keyRepeatTime = currentTime;
@@ -2125,19 +2152,27 @@ bool OSystem_WINCE3::pollEvent(Common::Event &event) {
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 = (Common::KeyCode)ev.key.keysym.sym;
+ else
+ event.kbd.keycode = (Common::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:
- // 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) {
+ // KMOD_RESERVED is used if the key has been injected by an external buffer
+ if (ev.key.keysym.mod != KMOD_RESERVED && !_unfilteredkeys) {
keyEvent = true;
_lastKeyPressed = 0;
@@ -2145,12 +2180,19 @@ bool OSystem_WINCE3::pollEvent(Common::Event &event) {
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 = (Common::KeyCode)ev.key.keysym.sym;
+ else
+ event.kbd.keycode = (Common::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;
diff --git a/backends/platform/wince/wince-sdl.h b/backends/platform/wince/wince-sdl.h
index 0e8e5e53ba..e74c438807 100644
--- a/backends/platform/wince/wince-sdl.h
+++ b/backends/platform/wince/wince-sdl.h
@@ -97,6 +97,8 @@ public:
void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
void showOverlay();
void hideOverlay();
+ Graphics::Surface *lockScreen();
+ void unlockScreen();
// GUI and action stuff
void swap_panel_visibility();
@@ -189,6 +191,7 @@ private:
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