diff options
author | Nicolas Bacca | 2004-12-20 23:52:16 +0000 |
---|---|---|
committer | Nicolas Bacca | 2004-12-20 23:52:16 +0000 |
commit | 347815cdaee6f7207bb40692aa8727952496ff58 (patch) | |
tree | 736d02ff7469dae64f471985982f01066ab59519 | |
parent | 54d0384b0e213396ca93760112d3251b60fa6ae8 (diff) | |
download | scummvm-rg350-347815cdaee6f7207bb40692aa8727952496ff58.tar.gz scummvm-rg350-347815cdaee6f7207bb40692aa8727952496ff58.tar.bz2 scummvm-rg350-347815cdaee6f7207bb40692aa8727952496ff58.zip |
Re-add Smartphone support (sorry for the year lag :p)
svn-id: r16215
-rw-r--r-- | backends/wince/CEActions.cpp | 12 | ||||
-rw-r--r-- | backends/wince/CEActions.h | 3 | ||||
-rw-r--r-- | backends/wince/CEActionsPocket.cpp | 9 | ||||
-rw-r--r-- | backends/wince/CEActionsPocket.h | 4 | ||||
-rw-r--r-- | backends/wince/CEActionsSmartphone.cpp | 54 | ||||
-rw-r--r-- | backends/wince/CEActionsSmartphone.h | 8 | ||||
-rw-r--r-- | backends/wince/CEDevice.cpp | 75 | ||||
-rw-r--r-- | backends/wince/CEDevice.h | 9 | ||||
-rw-r--r-- | backends/wince/CEScaler.cpp | 4 | ||||
-rw-r--r-- | backends/wince/CEScaler.h | 4 |
10 files changed, 136 insertions, 46 deletions
diff --git a/backends/wince/CEActions.cpp b/backends/wince/CEActions.cpp index a10b056775..078e0f75a1 100644 --- a/backends/wince/CEActions.cpp +++ b/backends/wince/CEActions.cpp @@ -47,17 +47,21 @@ CEActions::~CEActions() { void CEActions::init(GameDetector &detector) { if (!CEDevice::hasSmartphoneResolution()) CEActionsPocket::init(detector); -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP else CEActionsSmartphone::init(detector); -#endif +//#endif } -void CEActions::initInstance(OSystem_WINCE3 *mainSystem) { +void CEActions::initInstanceMain(OSystem_WINCE3 *mainSystem) { _mainSystem = mainSystem; +} + +void CEActions::initInstanceGame() { _instance->_initialized = true; } + bool CEActions::initialized() { return _initialized; } @@ -82,7 +86,7 @@ bool CEActions::performMapped(unsigned int keyCode, bool pushed) { int i; for (i=0; i<size(); i++) { - if (_action_mapping[i] == keyCode) + if (_action_mapping[i] == keyCode && _action_enabled[i]) return perform((ActionType)i, pushed); } diff --git a/backends/wince/CEActions.h b/backends/wince/CEActions.h index 128af42766..be07e558ac 100644 --- a/backends/wince/CEActions.h +++ b/backends/wince/CEActions.h @@ -41,7 +41,8 @@ class CEActions { public: static CEActions* Instance(); static void init(GameDetector &detector); - virtual void initInstance(OSystem_WINCE3 *mainSystem); + virtual void initInstanceMain(OSystem_WINCE3 *mainSystem); + virtual void initInstanceGame(); bool initialized(); // Actions diff --git a/backends/wince/CEActionsPocket.cpp b/backends/wince/CEActionsPocket.cpp index f382cff80f..06bfc24452 100644 --- a/backends/wince/CEActionsPocket.cpp +++ b/backends/wince/CEActionsPocket.cpp @@ -82,7 +82,12 @@ CEActionsPocket::CEActionsPocket(GameDetector &detector) : } -void CEActionsPocket::initInstance(OSystem_WINCE3 *mainSystem) { +void CEActionsPocket::initInstanceMain(OSystem_WINCE3 *mainSystem) { + // Nothing generic to do for Pocket PC + CEActions::initInstanceMain(mainSystem); +} + +void CEActionsPocket::initInstanceGame() { bool is_simon = (strncmp(_detector->_targetName.c_str(), "simon", 5) == 0); bool is_sword1 = (_detector->_targetName == "sword1"); bool is_sword2 = (strcmp(_detector->_targetName.c_str(), "sword2") == 0); @@ -90,7 +95,7 @@ void CEActionsPocket::initInstance(OSystem_WINCE3 *mainSystem) { bool is_sky = (_detector->_targetName == "sky"); bool is_comi = (strncmp(_detector->_targetName.c_str(), "comi", 4) == 0); - CEActions::initInstance(mainSystem); + CEActions::initInstanceGame(); // See if a right click mapping could be needed if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || diff --git a/backends/wince/CEActionsPocket.h b/backends/wince/CEActionsPocket.h index 348aba5553..f23937895b 100644 --- a/backends/wince/CEActionsPocket.h +++ b/backends/wince/CEActionsPocket.h @@ -58,8 +58,10 @@ class CEActionsPocket : public CEActions { bool perform(ActionType action, bool pushed = true); String actionName(ActionType action); int size(); + static void init(GameDetector &detector); - void initInstance(OSystem_WINCE3 *mainSystem); + void initInstanceMain(OSystem_WINCE3 *mainSystem); + void initInstanceGame(); // Action domain String domain(); diff --git a/backends/wince/CEActionsSmartphone.cpp b/backends/wince/CEActionsSmartphone.cpp index bf5e584412..1dfd7af190 100644 --- a/backends/wince/CEActionsSmartphone.cpp +++ b/backends/wince/CEActionsSmartphone.cpp @@ -19,12 +19,13 @@ * */ +//#define SIMU_SMARTPHONE 1 -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP #include "stdafx.h" -#include "CEActionsPocket.h" -#include "KeysBuffer.h" +#include "CEActionsSmartphone.h" +#include "EventsBuffer.h" #include "gui/message.h" @@ -44,6 +45,12 @@ const String smartphoneActionNames[] = { "Zone" }; +#ifdef SIMU_SMARTPHONE +const int ACTIONS_SMARTPHONE_DEFAULT[] = { 0x111, 0x112, 0x114, 0x113, 0x11a, 0x11b, VK_LWIN, VK_ESCAPE, VK_F8 }; +#else +const int ACTIONS_SMARTPHONE_DEFAULT[] = { '4', '6', '8', '2', 0x11a, 0x11b, '0', VK_ESCAPE, VK_F10 }; +#endif + void CEActionsSmartphone::init(GameDetector &detector) { _instance = new CEActionsSmartphone(detector); } @@ -71,25 +78,15 @@ CEActionsSmartphone::CEActionsSmartphone(GameDetector &detector) : int i; for (i=0; i<SMARTPHONE_ACTION_LAST; i++) { - _action_mapping[i] = 0; + _action_mapping[i] = ACTIONS_SMARTPHONE_DEFAULT[i]; _action_enabled[i] = false; } } -void CEActionsSmartphone::initInstance(OSystem_WINCE3 *mainSystem) { -{ - int i; - bool is_simon = (strncmp(_detector->_targetName.c_str(), "simon", 5) == 0); - bool is_sky = (_detector->_targetName == "sky"); - - CEActions::initInstance(mainSystem); - - // See if a right click mapping could be needed - if (is_sky || _detector->_targetName == "samnmax") - _right_click_needed = true; - - // Initialize keys for different actions +void CEActionsSmartphone::initInstanceMain(OSystem_WINCE3 *mainSystem) { + CEActions::initInstanceMain(mainSystem); + // Mouse Up _action_enabled[SMARTPHONE_ACTION_UP] = true; // Mouse Down @@ -101,7 +98,21 @@ void CEActionsSmartphone::initInstance(OSystem_WINCE3 *mainSystem) { // Left Click _action_enabled[SMARTPHONE_ACTION_LEFTCLICK] = true; // Right Click - _action_enabled[ACTION_RIGHTCLICK] = true; + _action_enabled[SMARTPHONE_ACTION_RIGHTCLICK] = true; +} + +void CEActionsSmartphone::initInstanceGame() { + bool is_simon = (strncmp(_detector->_targetName.c_str(), "simon", 5) == 0); + bool is_sky = (_detector->_targetName == "sky"); + bool is_queen = (_detector->_targetName == "queen"); + + CEActions::initInstanceGame(); + + // See if a right click mapping could be needed + if (is_sky || _detector->_targetName == "samnmax") + _right_click_needed = true; + + // Initialize keys for different actions // Save if (is_simon) _action_enabled[SMARTPHONE_ACTION_SAVE] = false; @@ -133,10 +144,9 @@ void CEActionsSmartphone::initInstance(OSystem_WINCE3 *mainSystem) { CEActionsSmartphone::~CEActionsSmartphone() { } -bool CEActionsSmartphone::perform(ActionType action, bool pushed = true) { +bool CEActionsSmartphone::perform(ActionType action, bool pushed) { if (!pushed) { - _mainSystem->clear_key_repeat(); - return true; + return false; } switch (action) { @@ -170,4 +180,4 @@ bool CEActionsSmartphone::perform(ActionType action, bool pushed = true) { return false; } -#endif +//#endif diff --git a/backends/wince/CEActionsSmartphone.h b/backends/wince/CEActionsSmartphone.h index bbb9d244dc..d780121cca 100644 --- a/backends/wince/CEActionsSmartphone.h +++ b/backends/wince/CEActionsSmartphone.h @@ -22,7 +22,7 @@ #ifndef CEACTIONSSMARTPHONE #define CEACTIONSSMARTPHONE -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP #include "common/stdafx.h" #include "common/scummsys.h" @@ -59,7 +59,8 @@ class CEActionsSmartphone : public CEActions { String actionName(ActionType action); int size(); static void init(GameDetector &detector); - void initInstance(OSystem_WINCE3 *mainSystem); + void initInstanceMain(OSystem_WINCE3 *mainSystem); + void initInstanceGame(); // Action domain String domain(); @@ -68,8 +69,9 @@ class CEActionsSmartphone : public CEActions { ~CEActionsSmartphone(); private: CEActionsSmartphone(GameDetector &detector); + bool _right_click_needed; }; #endif -#endif
\ No newline at end of file +//#endif
\ No newline at end of file diff --git a/backends/wince/CEDevice.cpp b/backends/wince/CEDevice.cpp index 0ef165f6f2..05389de03e 100644 --- a/backends/wince/CEDevice.cpp +++ b/backends/wince/CEDevice.cpp @@ -31,7 +31,7 @@ #define KEY_INBOX 0xc3 #define KEY_TASK 0xc4 -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP const char* SMARTPHONE_KEYS_NAME[] = { "1", "2", "3","4", "5", "6", "7", "8", "9", "*", "0", "#", "Home", "Back", "Up", "Down", "Left", "Right", "Action", "Hang up", "Call", @@ -39,32 +39,99 @@ const char* SMARTPHONE_KEYS_NAME[] = { 0 }; +// Old mapping from the previous (non SDL) version. To be forgotten. +/* const int SMARTPHONE_KEYS_MAPPING[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', VK_F8, '0', VK_F9, VK_LWIN, VK_ESCAPE, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_RETURN, VK_F4, VK_F3, VK_F1, VK_F2, VK_F18, VK_F6, VK_F7, VK_F10, 0xff, 0 }; -#endif +*/ + +// FIXME : Home and Record are not mapped +const int SMARTPHONE_KEYS_MAPPING[] = { + '1', '2', '3', '4', '5', '6', '7', '8', '9', VK_F9, '0', VK_F10, + 0xFF, VK_ESCAPE, 0x113, 0x114, 0x111, 0x112, VK_RETURN, 0x11D, 0x11C, + 0x11A, 0x11B, 0x11D, 0x11F, 0x120, 0xFF, 0 +}; + +static void (WINAPI* _SHIdleTimerReset)(void) = NULL; +static HANDLE (WINAPI* _SetPowerRequirement)(PVOID,int,ULONG,PVOID,ULONG) = NULL; +static DWORD (WINAPI* _ReleasePowerRequirement)(HANDLE) = NULL; +static HANDLE _hPowerManagement = NULL; +static DWORD _lastTime = 0; + +#define TIMER_TRIGGER 9000 + +//#endif + +// Power management code borrowed from MoDaCo & Betaplayer. Thanks ! +void CEDevice::init() { + HINSTANCE dll = LoadLibrary(TEXT("aygshell.dll")); + if (dll) { + *(FARPROC*)&_SHIdleTimerReset = GetProcAddress(dll, MAKEINTRESOURCE(2006)); + } + dll = LoadLibrary(TEXT("coredll.dll")); + if (dll) { + *(FARPROC*)&_SetPowerRequirement = GetProcAddress(dll, TEXT("SetPowerRequirement")); + *(FARPROC*)&_ReleasePowerRequirement = GetProcAddress(dll, TEXT("ReleasePowerRequirement")); + + } + if (_SetPowerRequirement) + _hPowerManagement = _SetPowerRequirement(TEXT("BKL1:"), 0, 1, NULL, 0); + _lastTime = GetTickCount(); +} + +void CEDevice::end() { + if (_ReleasePowerRequirement && _hPowerManagement) { + _ReleasePowerRequirement(_hPowerManagement); + } +} +void CEDevice::wakeUp() { + DWORD currentTime = GetTickCount(); + if (currentTime > _lastTime + TIMER_TRIGGER) { + _lastTime = currentTime; + SystemIdleTimerReset(); + if (_SHIdleTimerReset) + _SHIdleTimerReset(); + } +} bool CEDevice::hasPocketPCResolution() { +#ifdef SIMU_SMARTPHONE + return false; +#else if (OSystem_WINCE3::isOzone() && hasWideResolution()) return true; return (OSystem_WINCE3::getScreenWidth() < 320 && OSystem_WINCE3::getScreenWidth() >= 240); +#endif } bool CEDevice::hasDesktopResolution() { +#ifdef SIMU_SMARTPHONE + return false; +#else if (OSystem_WINCE3::isOzone() && hasWideResolution()) return true; return (OSystem_WINCE3::getScreenWidth() >= 320); +#endif } bool CEDevice::hasWideResolution() { +#ifdef SIMU_SMARTPHONE + return false; +#else return (OSystem_WINCE3::getScreenWidth() >= 640 || OSystem_WINCE3::getScreenHeight() >= 640); +#endif } bool CEDevice::hasSmartphoneResolution() { +#ifdef SIMU_SMARTPHONE + return true; +#else return (OSystem_WINCE3::getScreenWidth() < 240); +#endif } Common::String CEDevice::getKeyName(unsigned int keyCode) { @@ -90,7 +157,7 @@ Common::String CEDevice::getKeyName(unsigned int keyCode) { if (keyCode == SDLK_F4) return "F4 (hard 4)"; -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP if (hasSmartphoneResolution()) { int i = 0; while (SMARTPHONE_KEYS_MAPPING[i]) { @@ -99,7 +166,7 @@ Common::String CEDevice::getKeyName(unsigned int keyCode) { i++; } } -#endif +//#endif sprintf(key_name, "Key %.4x", keyCode); return key_name; diff --git a/backends/wince/CEDevice.h b/backends/wince/CEDevice.h index b8b0dd3f8f..d32b19d7d1 100644 --- a/backends/wince/CEDevice.h +++ b/backends/wince/CEDevice.h @@ -31,15 +31,14 @@ class CEDevice { public: + static void init(); + static void end(); + static void wakeUp(); static bool hasPocketPCResolution(); static bool hasDesktopResolution(); static bool hasWideResolution(); static bool hasSmartphoneResolution(); - static Common::String getKeyName(unsigned int keyCode); - private: - typedef int (*tGXVoidFunction)(void); - typedef struct GXKeyList (*tGXGetDefaultKeys)(int); - + static Common::String getKeyName(unsigned int keyCode); }; #endif diff --git a/backends/wince/CEScaler.cpp b/backends/wince/CEScaler.cpp index 189abe0134..e1cda2fd1b 100644 --- a/backends/wince/CEScaler.cpp +++ b/backends/wince/CEScaler.cpp @@ -120,7 +120,7 @@ void PocketPCHalfZoom(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint3 } } -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP void SmartphoneLandscape(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { uint8 *work; int i; @@ -151,5 +151,5 @@ void SmartphoneLandscape(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, ui } } } -#endif +//#endif diff --git a/backends/wince/CEScaler.h b/backends/wince/CEScaler.h index df6d2364ce..0b41fa3fc5 100644 --- a/backends/wince/CEScaler.h +++ b/backends/wince/CEScaler.h @@ -31,9 +31,9 @@ DECLARE_SCALER(PocketPCPortrait); DECLARE_SCALER(PocketPCHalf); DECLARE_SCALER(PocketPCHalfZoom); -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP DECLARE_SCALER(SmartphoneLandscape); -#endif +//#endif void initCEScaler(void); |