diff options
Diffstat (limited to 'backends/platform')
-rw-r--r-- | backends/platform/symbian/README | 25 | ||||
-rw-r--r-- | backends/platform/symbian/src/SymbianActions.cpp | 18 | ||||
-rw-r--r-- | backends/platform/wii/Makefile | 6 | ||||
-rw-r--r-- | backends/platform/wii/gx_supp.cpp | 47 | ||||
-rw-r--r-- | backends/platform/wii/gx_supp.h | 7 | ||||
-rw-r--r-- | backends/platform/wii/osystem.cpp | 28 | ||||
-rw-r--r-- | backends/platform/wii/osystem.h | 3 | ||||
-rw-r--r-- | backends/platform/wii/osystem_gfx.cpp | 75 | ||||
-rw-r--r-- | backends/platform/wince/CEActionsPocket.cpp | 8 | ||||
-rw-r--r-- | backends/platform/wince/CEActionsSmartphone.cpp | 8 | ||||
-rw-r--r-- | backends/platform/wince/CEkeys/EventsBuffer.cpp | 3 | ||||
-rw-r--r-- | backends/platform/wince/wince-sdl.cpp | 22 |
12 files changed, 183 insertions, 67 deletions
diff --git a/backends/platform/symbian/README b/backends/platform/symbian/README index 8ab729a4d0..db46dae8de 100644 --- a/backends/platform/symbian/README +++ b/backends/platform/symbian/README @@ -1,11 +1,11 @@ ScummVM - ScummVM ported to EPOC/SymbianOS - Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson - Copyright (C) 2007 Lars 'AnotherGuest' Persson - Copyright (C) 2007 Jurgen 'SumthinWicked' Braam - Copyright (C) 2007 ScummVM Team + Copyright (C) 2008 ScummVM Team + Copyright (C) 2003-2008 Lars 'AnotherGuest' Persson + Copyright (C) 2002008 Jurgen 'SumthinWicked' Braam + Copyright (C) 2003-2005 Andreas 'Sprawl' Karlsson $Id$ @@ -13,21 +13,21 @@ About ScummVM -------------- The original ports (uptil 0.7.1) were made by Andreas Karlsson and Lars Persson. The main transition to 0.8.0CVS and all relevant changes were done by Jurgen Braam. - Jurgen and Lars have successfully transfered all needed changes into CVS, with additional helpful tools for Symbian OS + Jurgen and Lars have successfully transfered all needed changes into CVS/SVN, with additional helpful tools for Symbian OS - Release version: 0.10.0 + Release version: 0.12.0 * This version is only supported on Symbian OS 9 devices due to compiler constraints for older devices. (That means UIQ3 and S60V3 devices) - * Updated to SDL version 1.2.11 (previous version used was 1.2.8) + * Updated to SDL version 1.2.13 (previous version used was 1.2.2) * Information about S60 devices can be found here http://wiki.scummvm.org/index.php/SymbianOS_S60 * Information about UIQ devices can be found here http://wiki.scummvm.org/index.php/SymbianOS_UIQ * Best source of general information is the ScummVM forum, http://forums.scummvm.org - * SVN builds (not frequently updated) can be found at http://anotherguest.k0.se + * SVN builds (not frequently updated) can be found at http://www.anotherguest.se Games supported --------------- The Symbian port of ScummVM supports all but Sword1 & 2 games. Some games might not run properly due to screenresolution or memory constraints. - + Minimum free memory requirement is about 12MB to be able to start and run ScummVM, this is enough for most older games, but newer more resource hungry games, might require more. Building ScummVM --------------------- @@ -38,7 +38,7 @@ Building ScummVM Lets just say the framework needs quite some time to set up and takes a while to get used to. If you choose to continue you will need the following items: - - UIQ 3.0 SDK (To build for UIQ3 devices) + - UIQ 3.x SDK (To build for UIQ3 devices)(Build scripts in SDK need tweaking in order to build scummvm since Symbian OS GCCE never builds as large projects as ScummVM before) - UIQ 2.1 SDK (To build for UIQ2 devices); http://www.symbian.com/developer/sdks_uiq.asp @@ -72,8 +72,7 @@ Building ScummVM http://flac.sourceforge.net/ - libmpeg2, a free MPEG-2 video stream decoder - http://libmpeg2.sourceforge.net/ - + http://libmpeg2.sourceforge.net Compiling ScummVM ----------------- @@ -89,7 +88,7 @@ Building ScummVM PETRAN.EXE will be the executable that is started. - SDL: the latest version of SDL at this point in time is 1.2.12. This version + SDL: the latest version of SDL at this point in time is 1.2.13. This version works great for compiling on other platforms. zlib: the zlib-x.x.x.tar.gz does not come with UIQ .mpp build files, that's why diff --git a/backends/platform/symbian/src/SymbianActions.cpp b/backends/platform/symbian/src/SymbianActions.cpp index da127eaec6..60e402632f 100644 --- a/backends/platform/symbian/src/SymbianActions.cpp +++ b/backends/platform/symbian/src/SymbianActions.cpp @@ -129,12 +129,12 @@ void SymbianActions::initInstanceGame() { bool is_simon = (strncmp(gameid.c_str(), "simon", 5) == 0); bool is_sword1 = (gameid == "sword1"); bool is_sword2 = (strcmp(gameid.c_str(), "sword2") == 0); - bool is_sky = (strncmp(gameid.c_str(), "sky", 3) == 0); - bool is_saga = (gameid == "saga"); + bool is_queen = (gameid == "queen"); + bool is_sky = (gameid == "sky"); bool is_comi = (strncmp(gameid.c_str(), "comi", 4) == 0); - bool is_queen = (strncmp(gameid.c_str(), "queen", 5) == 0); bool is_gob = (strncmp(gameid.c_str(), "gob", 3) == 0); - bool is_kyra = (gameid == "kyra1"); + bool is_saga = (gameid == "saga"); + bool is_kyra = (strncmp(gameid.c_str(), "kyra",4) == 0); bool is_samnmax = (gameid == "samnmax"); bool is_cine = (gameid == "cine"); bool is_touche = (gameid == "touche"); @@ -142,6 +142,7 @@ void SymbianActions::initInstanceGame() { bool is_parallaction = (gameid == "parallaction"); bool is_lure = (gameid == "lure"); bool is_feeble = (gameid == "feeble"); + bool is_drascula = (strncmp(gameid.c_str(), "drascula",8) == 0); Actions::initInstanceGame(); @@ -152,16 +153,16 @@ void SymbianActions::initInstanceGame() { // Save - if (is_simon || is_sword2 || is_gob || is_kyra || is_touche) + if (is_simon || is_sword2 || is_gob || is_kyra || is_touche || is_feeble) _action_enabled[ACTION_SAVE] = false; else { _action_enabled[ACTION_SAVE] = true; if (is_queen) { - _key_action[ACTION_SAVE].setKey(Common::ASCII_F5, Common::KEYCODE_F5); // F1 key for FOTAQ + _key_action[ACTION_SAVE].setKey(Common::ASCII_F1, Common::KEYCODE_F1); // F1 key for FOTAQ } else if (is_sky) { _key_action[ACTION_SAVE].setKey(Common::ASCII_F5, Common::KEYCODE_F5); - } else if (is_cine) { + } else if (is_cine || is_drascula) { _key_action[ACTION_SAVE].setKey(Common::ASCII_F10, Common::KEYCODE_F10); // F10 } else if (is_agi) { _key_action[ACTION_SAVE].setKey(Common::ASCII_ESCAPE, Common::KEYCODE_ESCAPE); @@ -177,7 +178,8 @@ void SymbianActions::initInstanceGame() { // Skip text if (!is_cine && !is_parallaction) _action_enabled[ACTION_SKIP_TEXT] = true; - if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche || is_lure || is_feeble) + if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || + is_saga || is_kyra || is_touche || is_lure || is_feeble || is_drascula) _key_action[ACTION_SKIP_TEXT].setKey(Common::KEYCODE_ESCAPE, Common::KEYCODE_ESCAPE); // Escape key else { _key_action[ACTION_SKIP_TEXT].setKey(SDLK_PERIOD); diff --git a/backends/platform/wii/Makefile b/backends/platform/wii/Makefile index d17a7cb41e..90ebcccb66 100644 --- a/backends/platform/wii/Makefile +++ b/backends/platform/wii/Makefile @@ -154,8 +154,10 @@ distclean: distclean-wii distclean-wii: @-$(RM) dist -ifeq ($(GAMECUBE),1) upload: +ifeq ($(GAMECUBE),1) + $(DEVKITPPC)/bin/geckoupload $(TARGET).dol +else $(DEVKITPPC)/bin/wiiload $(TARGET).dol endif @@ -167,6 +169,7 @@ else $(CP) $(TARGET).dol dist/scummvm/boot.dol $(CP) $(DISTPATH)/meta.xml dist/scummvm/ $(CP) $(DISTPATH)/icon.png dist/scummvm/ +endif $(CP) $(DISTPATH)/READMII dist/scummvm/ $(CP) $(srcdir)/AUTHORS dist/scummvm/ $(CP) $(srcdir)/COPYING dist/scummvm/ @@ -175,5 +178,4 @@ else $(CP) $(srcdir)/README dist/scummvm/ $(CP) $(DIST_FILES_THEMES) dist/scummvm/ $(CP) $(DIST_FILES_ENGINEDATA) dist/scummvm/ -endif diff --git a/backends/platform/wii/gx_supp.cpp b/backends/platform/wii/gx_supp.cpp index 4c7b8ed58a..436deddbb8 100644 --- a/backends/platform/wii/gx_supp.cpp +++ b/backends/platform/wii/gx_supp.cpp @@ -1,6 +1,7 @@ /**************************************************************************** * Generic GX Support for Emulators * softdev 2007 +* dhewg 2008 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,12 +22,13 @@ * These are pretty standard functions to setup and use GX scaling. ****************************************************************************/ -#include <gccore.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> +#include "gx_supp.h" + #define DEFAULT_FIFO_SIZE (256 * 1024) #define HASPECT 320 @@ -39,18 +41,19 @@ extern "C" { /*** 2D ***/ static u32 whichfb; static u32 *xfb[2]; -static GXRModeObj *vmode; +GXRModeObj *vmode = NULL; /*** 3D GX ***/ static u8 *gp_fifo; /*** Texture memory ***/ -static u8 *texturemem; +static u8 *texturemem = NULL; static u32 texturesize; -GXTexObj texobj; +static GXTexObj texobj; static Mtx view; static u16 vwidth, vheight, oldvwidth, oldvheight; +static float tex_xT = 0.0f, tex_yT = 0.0f; /* New texture based scaler */ typedef struct tagcamera { @@ -74,6 +77,10 @@ static camera cam = { void GX_InitVideo() { vmode = VIDEO_GetPreferredMode(NULL); + + vmode->viWidth = 678; + vmode->viXOrigin = (VI_MAX_WIDTH_PAL - 678) / 2; + VIDEO_Configure(vmode); xfb[0] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer(vmode)); @@ -93,6 +100,15 @@ void GX_InitVideo() { VIDEO_WaitVSync(); } +void GX_SetTexTrans(float xT, float yT) { + tex_xT = xT; + tex_yT = yT; +} + +void GX_SetCamPosZ(float f) { + cam.pos.z = f; +} + /**************************************************************************** * Scaler Support Functions ****************************************************************************/ @@ -128,7 +144,7 @@ static void draw_square(Mtx v) { Mtx mv; guMtxIdentity(m); - guMtxTransApply(m, m, 0, 0, -100); + guMtxTransApply(m, m, tex_xT, tex_yT, -100); guMtxConcat(v, m, mv); GX_LoadPosMtxImm(mv, GX_PNMTX0); @@ -144,9 +160,9 @@ static void draw_square(Mtx v) { * StartGX ****************************************************************************/ void GX_Start(u16 width, u16 height, s16 haspect, s16 vaspect) { + static bool inited = false; Mtx p; - - GX_AbortFrame(); + GXColor gxbackground = { 0, 0, 0, 0xff }; /*** Set new aspect ***/ square[0] = square[9] = -haspect; @@ -156,9 +172,20 @@ void GX_Start(u16 width, u16 height, s16 haspect, s16 vaspect) { /*** Allocate 32byte aligned texture memory ***/ texturesize = (width * height) * 2; + + if (texturemem) + free(texturemem); + texturemem = (u8 *) memalign(32, texturesize); + memset(texturemem, 0, texturesize); - GXColor gxbackground = { 0, 0, 0, 0xff }; + /*** Setup for first call to scaler ***/ + oldvwidth = oldvheight = -1; + + if (inited) + return; + + inited = true; /*** Clear out FIFO area ***/ memset(gp_fifo, 0, DEFAULT_FIFO_SIZE); @@ -184,12 +211,8 @@ void GX_Start(u16 width, u16 height, s16 haspect, s16 vaspect) { guPerspective(p, 60, 1.33f, 10.0f, 1000.0f); GX_LoadProjectionMtx(p, GX_PERSPECTIVE); - memset(texturemem, 0, texturesize); GX_Flush(); - - /*** Setup for first call to scaler ***/ - vwidth = vheight = -1; } /**************************************************************************** diff --git a/backends/platform/wii/gx_supp.h b/backends/platform/wii/gx_supp.h index 9393e93a26..108a94f0e7 100644 --- a/backends/platform/wii/gx_supp.h +++ b/backends/platform/wii/gx_supp.h @@ -1,6 +1,7 @@ /**************************************************************************** * Generic GX Scaler * softdev 2007 +* dhewg 2008 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,11 +24,17 @@ #ifndef _WII_GX_SUPP_H_ #define _WII_GX_SUPP_H_ +#include <gccore.h> + #ifdef __cplusplus extern "C" { #endif +extern GXRModeObj *vmode; + void GX_InitVideo(); +void GX_SetTexTrans(float xT, float yT); +void GX_SetCamPosZ(float f); void GX_Start(u16 width, u16 height, s16 haspect, s16 vaspect); void GX_Render(u16 width, u16 height, u8 *buffer, u16 pitch); diff --git a/backends/platform/wii/osystem.cpp b/backends/platform/wii/osystem.cpp index 3ec32126f0..505f93c820 100644 --- a/backends/platform/wii/osystem.cpp +++ b/backends/platform/wii/osystem.cpp @@ -19,8 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#include "osystem.h" #include "backends/fs/wii/wii-fs-factory.h" +#include "common/config-manager.h" + +#include "osystem.h" #include <unistd.h> @@ -51,7 +53,9 @@ OSystem_Wii::OSystem_Wii() : _currentHeight(0), _supportedGraphicsModes(NULL), - _activeGraphicsMode(-1), + _activeGraphicsMode(0), + + _fullscreen(false), _mouseVisible(false), _mouseX(0), @@ -98,6 +102,8 @@ void OSystem_Wii::initBackend() { _mixer = new Audio::MixerImpl(this); _timer = new DefaultTimerManager(); + _fullscreen = ConfMan.getBool("fullscreen"); + initGfx(); initSfx(); initEvents(); @@ -112,14 +118,28 @@ void OSystem_Wii::quit() { } bool OSystem_Wii::hasFeature(Feature f) { - return f == kFeatureCursorHasPalette; + return (f == kFeatureFullscreenMode) || + (f == kFeatureCursorHasPalette); } void OSystem_Wii::setFeatureState(Feature f, bool enable) { + switch (f) { + case kFeatureFullscreenMode: + _fullscreen = enable; + setGraphicsMode(_activeGraphicsMode); + break; + default: + break; + } } bool OSystem_Wii::getFeatureState(Feature f) { - return false; + switch (f) { + case kFeatureFullscreenMode: + return _fullscreen; + default: + return false; + } } uint32 OSystem_Wii::getMillis() { diff --git a/backends/platform/wii/osystem.h b/backends/platform/wii/osystem.h index 71bf9bce2e..94c0fa76b3 100644 --- a/backends/platform/wii/osystem.h +++ b/backends/platform/wii/osystem.h @@ -73,6 +73,8 @@ private: OSystem::GraphicsMode *_supportedGraphicsModes; s32 _activeGraphicsMode; + bool _fullscreen; + bool _mouseVisible; s32 _mouseX, _mouseY; u32 _mouseWidth, _mouseHeight; @@ -110,7 +112,6 @@ public: virtual bool getFeatureState(Feature f); virtual const GraphicsMode *getSupportedGraphicsModes() const; virtual int getDefaultGraphicsMode() const; - bool setGraphicsMode(const char *name); virtual bool setGraphicsMode(int mode); virtual int getGraphicsMode() const; virtual void initSize(uint width, uint height); diff --git a/backends/platform/wii/osystem_gfx.cpp b/backends/platform/wii/osystem_gfx.cpp index 1e54233c93..faad41d5f0 100644 --- a/backends/platform/wii/osystem_gfx.cpp +++ b/backends/platform/wii/osystem_gfx.cpp @@ -27,7 +27,12 @@ #define MAX_FPS 30 enum GraphicModeID { - GM_DEFAULT + GM_DEFAULT = 0, + GM_OVERSCAN1, + GM_OVERSCAN2, + GM_OVERSCAN3, + GM_OVERSCAN4, + GM_OVERSCAN5 }; void OSystem_Wii::initGfx() { @@ -42,6 +47,11 @@ void OSystem_Wii::initGfx() { _overlayWidth = 640; _overlayHeight = 480; +#ifndef GAMECUBE + if (CONF_GetAspectRatio() && _fullscreen) + _overlayHeight = 360; +#endif + _overlaySize = _overlayWidth * _overlayHeight * 2; _overlayPixels = (OverlayColor *) memalign(32, _overlaySize); @@ -51,17 +61,32 @@ void OSystem_Wii::initGfx() { _cursorPalette = (u16 *) memalign(32, 256 * 2); memset(_cursorPalette, 0, 256 * 2); - _supportedGraphicsModes = new OSystem::GraphicsMode[2]; - _supportedGraphicsModes[0].name = strdup("gx"); - _supportedGraphicsModes[0].description = strdup("wii hardware scaler"); + _supportedGraphicsModes = new OSystem::GraphicsMode[7]; + _supportedGraphicsModes[0].name = strdup("standard"); + _supportedGraphicsModes[0].description = strdup("standard"); _supportedGraphicsModes[0].id = GM_DEFAULT; - _supportedGraphicsModes[1].name = 0; - _supportedGraphicsModes[1].description = 0; - _supportedGraphicsModes[1].id = 0; - - _texture = (u16 *) memalign(32, _overlaySize); - - GX_Start(_overlayWidth, _overlayHeight, 320, 240); + _supportedGraphicsModes[1].name = strdup("overscan1"); + _supportedGraphicsModes[1].description = strdup("overscan 1"); + _supportedGraphicsModes[1].id = GM_OVERSCAN1; + _supportedGraphicsModes[2].name = strdup("overscan2"); + _supportedGraphicsModes[2].description = strdup("overscan 2"); + _supportedGraphicsModes[2].id = GM_OVERSCAN2; + _supportedGraphicsModes[3].name = strdup("overscan3"); + _supportedGraphicsModes[3].description = strdup("overscan 3"); + _supportedGraphicsModes[3].id = GM_OVERSCAN3; + _supportedGraphicsModes[4].name = strdup("overscan4"); + _supportedGraphicsModes[4].description = strdup("overscan 4"); + _supportedGraphicsModes[4].id = GM_OVERSCAN4; + _supportedGraphicsModes[5].name = strdup("overscan5"); + _supportedGraphicsModes[5].description = strdup("overscan 5"); + _supportedGraphicsModes[5].id = GM_OVERSCAN5; + _supportedGraphicsModes[6].name = 0; + _supportedGraphicsModes[6].description = 0; + _supportedGraphicsModes[6].id = 0; + + _texture = (u16 *) memalign(32, 640 * 480 * 2); + + setGraphicsMode(_activeGraphicsMode); } void OSystem_Wii::deinitGfx() { @@ -111,13 +136,24 @@ int OSystem_Wii::getDefaultGraphicsMode() const { return GM_DEFAULT; } -bool OSystem_Wii::setGraphicsMode(const char *mode) { - setGraphicsMode(GM_DEFAULT); +bool OSystem_Wii::setGraphicsMode(int mode) { + s16 xar, yar; - return true; -} + printf("setGraphicsMode %d\n", mode); + + xar = vmode->viWidth / 2; + yar = vmode->xfbHeight / 2; + +#ifndef GAMECUBE + if (CONF_GetAspectRatio() && !_fullscreen) + xar /= 1.33f; +#endif + + GX_SetCamPosZ(400 - mode * 10); + GX_Start(640, 480, xar, yar); + + _activeGraphicsMode = mode; -bool OSystem_Wii::setGraphicsMode(int mode) { return true; } @@ -129,6 +165,8 @@ void OSystem_Wii::initSize(uint width, uint height) { if (_gameWidth != width || _gameHeight != height) { printf("initSize %u %u\n", width, height); + assert((width <= 640) && (height <= 480)); + _gameWidth = width; _gameHeight = height; @@ -136,12 +174,15 @@ void OSystem_Wii::initSize(uint width, uint height) { free(_gamePixels); _gamePixels = (u8 *) memalign(32, _gameWidth * _gameHeight); + memset(_gamePixels, 0, _gameWidth * _gameHeight); if (!_overlayVisible) { _currentWidth = _gameWidth; _currentHeight = _gameHeight; updateEventScreenResolution(); } + + setGraphicsMode(_activeGraphicsMode); } } @@ -320,6 +361,8 @@ void OSystem_Wii::unlockScreen() { } void OSystem_Wii::setShakePos(int shakeOffset) { + GX_SetTexTrans(0, (float) -shakeOffset * ((float) vmode->efbHeight / + (float) _currentHeight)); } void OSystem_Wii::showOverlay() { diff --git a/backends/platform/wince/CEActionsPocket.cpp b/backends/platform/wince/CEActionsPocket.cpp index 95047ecf5c..3626c4c10b 100644 --- a/backends/platform/wince/CEActionsPocket.cpp +++ b/backends/platform/wince/CEActionsPocket.cpp @@ -215,7 +215,7 @@ CEActionsPocket::~CEActionsPocket() { } bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) { - static bool keydialogrunning = false; + static bool keydialogrunning = false, quitdialog = false; if (!pushed) { switch(action) { @@ -292,12 +292,14 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) { _CESystem->move_cursor_right(); return true; case POCKET_ACTION_QUIT: - { + if (!quitdialog) { + quitdialog = true; GUI::MessageDialog alert(" Are you sure you want to quit ? ", "Yes", "No"); if (alert.runModal() == GUI::kMessageOK) _mainSystem->quit(); - return true; + quitdialog = false; } + return true; case POCKET_ACTION_BINDKEYS: if (!keydialogrunning) { keydialogrunning = true; diff --git a/backends/platform/wince/CEActionsSmartphone.cpp b/backends/platform/wince/CEActionsSmartphone.cpp index dbcddac98c..87f73f5a66 100644 --- a/backends/platform/wince/CEActionsSmartphone.cpp +++ b/backends/platform/wince/CEActionsSmartphone.cpp @@ -179,7 +179,7 @@ CEActionsSmartphone::~CEActionsSmartphone() { } bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) { - static bool keydialogrunning = false; + static bool keydialogrunning = false, quitdialog = false; if (!pushed) { switch (action) { @@ -250,12 +250,14 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) { _CESystem->smartphone_rotate_display(); return true; case SMARTPHONE_ACTION_QUIT: - { + if (!quitdialog) { + quitdialog = true; GUI::MessageDialog alert(" Are you sure you want to quit ? ", "Yes", "No"); if (alert.runModal() == GUI::kMessageOK) _mainSystem->quit(); - return true; + quitdialog = false; } + return true; } return false; diff --git a/backends/platform/wince/CEkeys/EventsBuffer.cpp b/backends/platform/wince/CEkeys/EventsBuffer.cpp index 92a21ab7ad..f31a77570f 100644 --- a/backends/platform/wince/CEkeys/EventsBuffer.cpp +++ b/backends/platform/wince/CEkeys/EventsBuffer.cpp @@ -36,9 +36,8 @@ namespace CEKEYS { key->setKey(key->keycode()); ev.type = (pushed ? SDL_KEYDOWN : SDL_KEYUP); - ev.key.keysym.mod = (SDLMod)key->flags(); + ev.key.keysym.unicode = (SDLMod)key->flags(); // HACK: put the flags into the unused unicode field ev.key.keysym.sym = (SDLKey)key->keycode(); - ev.key.keysym.unicode = key->keycode(); ev.key.keysym.mod = KMOD_RESERVED; return (SDL_PushEvent(&ev) == 0); } diff --git a/backends/platform/wince/wince-sdl.cpp b/backends/platform/wince/wince-sdl.cpp index 3f16b4fdd1..48f157f6ff 100644 --- a/backends/platform/wince/wince-sdl.cpp +++ b/backends/platform/wince/wince-sdl.cpp @@ -805,8 +805,16 @@ void OSystem_WINCE3::setupMixer() { debug(1, "Sound opened OK, mixing at %d Hz", _sampleRate); // Re-create mixer to match the output rate + int vol1 = _mixer->getVolumeForSoundType(Audio::Mixer::kPlainSoundType); + int vol2 = _mixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType); + int vol3 = _mixer->getVolumeForSoundType(Audio::Mixer::kSFXSoundType); + int vol4 = _mixer->getVolumeForSoundType(Audio::Mixer::kSpeechSoundType); delete(_mixer); _mixer = new Audio::MixerImpl(this); + _mixer->setVolumeForSoundType(Audio::Mixer::kPlainSoundType, vol1); + _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, vol2); + _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, vol3); + _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, vol4); _mixer->setOutputRate(_sampleRate); _mixer->setReady(true); SDL_PauseAudio(0); @@ -2254,15 +2262,18 @@ bool OSystem_WINCE3::pollEvent(Common::Event &event) { _lastKeyPressed = 0; event.type = Common::EVENT_PREDICTIVE_DIALOG; return true; - } - - event.type = Common::EVENT_KEYDOWN; + } 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); + if (ev.key.keysym.mod == KMOD_RESERVED && ev.key.keysym.unicode == KMOD_SHIFT) { + event.kbd.ascii ^= 0x20; + event.kbd.flags = Common::KBD_SHIFT; + } + return true; case SDL_KEYUP: @@ -2290,6 +2301,11 @@ bool OSystem_WINCE3::pollEvent(Common::Event &event) { 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); + if (ev.key.keysym.mod == KMOD_RESERVED && ev.key.keysym.unicode == KMOD_SHIFT) { + event.kbd.ascii ^= 0x20; + event.kbd.flags = Common::KBD_SHIFT; + } + return true; case SDL_MOUSEMOTION: |