From 3e56c3a40973d89c0ae6f95d46d2f982becdde1a Mon Sep 17 00:00:00 2001 From: Chris Apers Date: Sun, 1 Mar 2009 10:25:33 +0000 Subject: PalmOS Backend updates: - Removed old clearScreen backend method and keep it for internal use only - Fixed save path with missing end slash - Added use of the new audio mixer - Added new file system factory - Added missing getOverlayWidth/Height - Changed color encoding from int16 to uint16 as required by the new ScummVM code - Fixed ColorMasks use with missing namespace svn-id: r39028 --- backends/platform/PalmOS/Src/base_gfx.cpp | 6 ------ backends/platform/PalmOS/Src/be_base.cpp | 15 +++++++++++---- backends/platform/PalmOS/Src/be_base.h | 15 +++++++++++---- backends/platform/PalmOS/Src/be_os5.cpp | 2 +- backends/platform/PalmOS/Src/be_os5.h | 6 +++--- backends/platform/PalmOS/Src/be_zodiac.cpp | 2 +- backends/platform/PalmOS/Src/os5_gfx.cpp | 14 +++++++------- backends/platform/PalmOS/Src/os5_mouse.cpp | 10 +++++----- backends/platform/PalmOS/Src/os5_overlay.cpp | 2 +- backends/platform/PalmOS/Src/os5_renderer.cpp | 14 +++++++------- backends/platform/PalmOS/Src/os5_sound.cpp | 9 ++++++++- backends/platform/PalmOS/Src/os5ex_sound.cpp | 7 ++++++- backends/platform/PalmOS/Src/zodiac_gfx.cpp | 8 ++++---- backends/platform/PalmOS/Src/zodiac_mouse.cpp | 6 +++--- 14 files changed, 68 insertions(+), 48 deletions(-) (limited to 'backends') diff --git a/backends/platform/PalmOS/Src/base_gfx.cpp b/backends/platform/PalmOS/Src/base_gfx.cpp index cb40bb55e5..73a98909d6 100644 --- a/backends/platform/PalmOS/Src/base_gfx.cpp +++ b/backends/platform/PalmOS/Src/base_gfx.cpp @@ -150,12 +150,6 @@ void OSystem_PalmBase::updateScreen() { } -void OSystem_PalmBase::clearScreen() { - WinSetDrawWindow(WinGetDisplayWindow()); - WinSetBackColor(Graphics::RGBToColor >(0,0,0)); - WinEraseWindow(); -} - void OSystem_PalmBase::draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color) { //return; diff --git a/backends/platform/PalmOS/Src/be_base.cpp b/backends/platform/PalmOS/Src/be_base.cpp index 424c70566c..0355f28501 100644 --- a/backends/platform/PalmOS/Src/be_base.cpp +++ b/backends/platform/PalmOS/Src/be_base.cpp @@ -28,9 +28,10 @@ #include "common/config-manager.h" #include "backends/saves/default/default-saves.h" #include "backends/timer/default/default-timer.h" -#include "sound/mixer.h" +#include "backends/fs/palmos/palmos-fs-factory.h" +#include "sound/mixer_intern.h" -#define DEFAULT_SAVE_PATH "/PALM/Programs/ScummVM/Saved" +#define DEFAULT_SAVE_PATH "/PALM/Programs/ScummVM/Saved/" OSystem_PalmBase::OSystem_PalmBase() { @@ -109,8 +110,9 @@ void OSystem_PalmBase::initBackend() { // Create and hook up the mixer, if none exists yet (we check for this to // allow subclasses to provide their own). if (_mixerMgr == 0) { - _mixerMgr = new Audio::Mixer(); - setSoundCallback(Audio::Mixer::mixCallback, _mixerMgr); + _mixerMgr = new Audio::MixerImpl(this); + setSoundCallback(0, _mixerMgr); +// setSoundCallback(Audio::Mixer::mixCallback, _mixerMgr); } // Create and hook up the timer manager, if none exists yet (we check for @@ -179,6 +181,11 @@ Common::TimerManager *OSystem_PalmBase::getTimerManager() { return _timerMgr; } +FilesystemFactory *OSystem_PalmBase::getFilesystemFactory() { + return &PalmOSFilesystemFactory::instance(); +} + + #define PALMOS_CONFIG_FILE "/PALM/Programs/ScummVM/scummvm.ini" Common::SeekableReadStream *OSystem_PalmBase::createConfigReadStream() { diff --git a/backends/platform/PalmOS/Src/be_base.h b/backends/platform/PalmOS/Src/be_base.h index 333b633f05..83b2ec2cbd 100644 --- a/backends/platform/PalmOS/Src/be_base.h +++ b/backends/platform/PalmOS/Src/be_base.h @@ -32,11 +32,13 @@ #include "globals.h" #include "backends/base-backend.h" +#include "common/scummsys.h" #include "common/events.h" #include "graphics/surface.h" +#include "graphics/colormasks.h" namespace Audio { - class Mixer; + class MixerImpl; } namespace Common { @@ -73,7 +75,8 @@ enum { #define computeMsecs(x) ((SysTicksPerSecond() * x) / 1000) -typedef void (*SoundProc)(void *param, byte *buf, int len); +//typedef void (*SoundProc)(void *param, byte *buf, int len); +typedef void (*SoundProc)(byte *buf, uint len); typedef int (*TimerProc)(int interval); typedef struct { @@ -121,6 +124,7 @@ protected: OSystem_PalmBase(); virtual void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0); + virtual void clear_screen() = 0; struct MousePos { int16 x,y,w,h; @@ -130,7 +134,7 @@ protected: SoundType _sound; Common::SaveFileManager *_saveMgr; - Audio::Mixer *_mixerMgr; + Audio::MixerImpl *_mixerMgr; Common::TimerManager *_timerMgr; RGBColorType _currentPalette[256]; @@ -215,7 +219,6 @@ public: void setShakePos(int shakeOffset); virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) = 0; virtual void updateScreen(); - virtual void clearScreen(); bool showMouse(bool visible); void warpMouse(int x, int y); @@ -227,6 +230,9 @@ public: virtual void grabOverlay(OverlayColor *buf, int pitch) = 0; virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) = 0; + int16 getOverlayWidth() { return getWidth(); } + int16 getOverlayHeight() { return getHeight(); } + void setPalette(const byte *colors, uint start, uint num); void grabPalette(byte *colors, uint start, uint num); virtual Graphics::PixelFormat getOverlayFormat() const { return Graphics::createPixelFormat<565>(); } @@ -252,6 +258,7 @@ public: Common::SaveFileManager *getSavefileManager(); Common::TimerManager *getTimerManager(); + FilesystemFactory *getFilesystemFactory(); virtual Common::SeekableReadStream *createConfigReadStream(); virtual Common::WriteStream *createConfigWriteStream(); diff --git a/backends/platform/PalmOS/Src/be_os5.cpp b/backends/platform/PalmOS/Src/be_os5.cpp index 1fc61cffbf..aa578dad9c 100644 --- a/backends/platform/PalmOS/Src/be_os5.cpp +++ b/backends/platform/PalmOS/Src/be_os5.cpp @@ -108,7 +108,7 @@ void OSystem_PalmOS5::setFeatureState(Feature f, bool enable) { //calc_rect(true); hotswap_gfx_mode(_mode); // TwGfxSetClip(_palmScreenP, &_dstRect); - clearScreen(); + clear_screen(); } break; } diff --git a/backends/platform/PalmOS/Src/be_os5.h b/backends/platform/PalmOS/Src/be_os5.h index c56688b98f..692e304007 100644 --- a/backends/platform/PalmOS/Src/be_os5.h +++ b/backends/platform/PalmOS/Src/be_os5.h @@ -101,7 +101,7 @@ extern SoundExType _soundEx; class OSystem_PalmOS5 : public OSystem_PalmBase { protected: - int16 _nativePal[256], _mousePal[256]; + uint16 _nativePal[256], _mousePal[256]; private: uint16 _scaleTableX[512]; @@ -114,7 +114,7 @@ private: OverlayColor *_overlayP; WinHandle _overlayH, _workScreenH; - int16 *_workScreenP; + uint16 *_workScreenP; Boolean _isSwitchable, _wasRotated; @@ -160,6 +160,7 @@ protected: void calc_rect(Boolean fullscreen); void get_coordinates(EventPtr ev, Coord &x, Coord &y); + void clear_screen(); public: OSystem_PalmOS5(); @@ -169,7 +170,6 @@ public: void setFeatureState(Feature f, bool enable); void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); - void clearScreen(); virtual Graphics::Surface *lockScreen(); virtual void unlockScreen(); diff --git a/backends/platform/PalmOS/Src/be_zodiac.cpp b/backends/platform/PalmOS/Src/be_zodiac.cpp index bb78030290..d6e7e2c292 100644 --- a/backends/platform/PalmOS/Src/be_zodiac.cpp +++ b/backends/platform/PalmOS/Src/be_zodiac.cpp @@ -67,7 +67,7 @@ void OSystem_PalmZodiac::setFeatureState(Feature f, bool enable) { _ratio.adjustAspect = (_ratio.adjustAspect + 1) % 3; calc_rect(true); TwGfxSetClip(_palmScreenP, &_dstRect); - clearScreen(); + clear_screen(); } break; } diff --git a/backends/platform/PalmOS/Src/os5_gfx.cpp b/backends/platform/PalmOS/Src/os5_gfx.cpp index c02e1f7db4..6a7b21e100 100644 --- a/backends/platform/PalmOS/Src/os5_gfx.cpp +++ b/backends/platform/PalmOS/Src/os5_gfx.cpp @@ -67,7 +67,7 @@ void OSystem_PalmOS5::load_gfx_mode() { UInt32 depth = 16; WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); - clearScreen(); + clear_screen(); if (OPTIONS_TST(kOptModeRotatable)) { _sysOldOrientation = __68K(SysGetOrientation()); @@ -77,8 +77,8 @@ void OSystem_PalmOS5::load_gfx_mode() { __68K(PINSetInputTriggerState(pinInputTriggerDisabled)); } - gVars->indicator.on = Graphics::RGBToColor >(0,255,0); - gVars->indicator.off = Graphics::RGBToColor >(0,0,0); + gVars->indicator.on = Graphics::RGBToColor >(0,255,0); + gVars->indicator.off = Graphics::RGBToColor >(0,0,0); _overlayH = alloc_screen(_screenWidth, _screenHeight); _overlayP = (OverlayColor *)(BmpGetBits(WinGetBitmap(_overlayH))); @@ -153,11 +153,11 @@ void OSystem_PalmOS5::hotswap_gfx_mode(int mode) { } _workScreenH = alloc_screen(_screenDest.w, _screenDest.h); - _workScreenP = (int16 *)(BmpGetBits(WinGetBitmap(_workScreenH))); + _workScreenP = (uint16 *)(BmpGetBits(WinGetBitmap(_workScreenH))); MemSet(_workScreenP, _screenDest.w * _screenDest.h * 2, 0); _mode = mode; - clearScreen(); + clear_screen(); } void OSystem_PalmOS5::unload_gfx_mode() { @@ -178,7 +178,7 @@ void OSystem_PalmOS5::unload_gfx_mode() { UInt32 depth = 8; WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); - clearScreen(); + clear_screen(); if (OPTIONS_TST(kOptModeRotatable)) { __68K(PINSetInputTriggerState(_sysOldTriggerState)); @@ -251,7 +251,7 @@ void OSystem_PalmOS5::int_updateScreen() { undraw_mouse(); } -void OSystem_PalmOS5::clearScreen() { +void OSystem_PalmOS5::clear_screen() { RGBColorType rgb = { 0,0,0,0 }; WinSetDrawWindow(WinGetDisplayWindow()); WinSetBackColorRGB(&rgb, 0); diff --git a/backends/platform/PalmOS/Src/os5_mouse.cpp b/backends/platform/PalmOS/Src/os5_mouse.cpp index 0be9d3da46..c019e1607d 100644 --- a/backends/platform/PalmOS/Src/os5_mouse.cpp +++ b/backends/platform/PalmOS/Src/os5_mouse.cpp @@ -81,9 +81,9 @@ void OSystem_PalmOS5::draw_mouse() { int ww; if (_overlayVisible) { - int16 *bak = (int16 *)_mouseBackupP; - int16 *pal = _cursorPaletteDisabled ? _nativePal : _mousePal; - int16 *dst = _overlayP + y * _screenWidth + x; + uint16 *bak = (uint16 *)_mouseBackupP; + uint16 *pal = _cursorPaletteDisabled ? _nativePal : _mousePal; + uint16 *dst = _overlayP + y * _screenWidth + x; do { ww = w; @@ -133,8 +133,8 @@ void OSystem_PalmOS5::undraw_mouse() { // no need to do clipping here, since draw_mouse() did that already if (_overlayVisible) { - int16 *dst = _overlayP + _mouseOldState.y * _screenWidth + _mouseOldState.x; - int16 *bak = (int16 *)_mouseBackupP; + uint16 *dst = _overlayP + _mouseOldState.y * _screenWidth + _mouseOldState.x; + uint16 *bak = (uint16 *)_mouseBackupP; do { MemMove(dst, bak, _mouseOldState.w * 2); diff --git a/backends/platform/PalmOS/Src/os5_overlay.cpp b/backends/platform/PalmOS/Src/os5_overlay.cpp index 2ffc082547..7e16a6b7b9 100644 --- a/backends/platform/PalmOS/Src/os5_overlay.cpp +++ b/backends/platform/PalmOS/Src/os5_overlay.cpp @@ -46,7 +46,7 @@ void OSystem_PalmOS5::clearOverlay() { return; byte *src = _offScreenP; - int16 *dst = _overlayP; + uint16 *dst = _overlayP; int cnt = _screenWidth * _screenHeight; do { *dst++ = _nativePal[*src++]; diff --git a/backends/platform/PalmOS/Src/os5_renderer.cpp b/backends/platform/PalmOS/Src/os5_renderer.cpp index 2c1c122a7d..fea3ec28d7 100644 --- a/backends/platform/PalmOS/Src/os5_renderer.cpp +++ b/backends/platform/PalmOS/Src/os5_renderer.cpp @@ -29,13 +29,13 @@ void OSystem_PalmOS5::render_1x(RectangleType &r, PointType &p) { Coord o = 0; if (_overlayVisible) { - int16 *src = _overlayP; - int16 *dst = _workScreenP; + uint16 *src = _overlayP; + uint16 *dst = _workScreenP; MemMove(dst, src, _screenWidth * _screenHeight * 2); } else { byte *src = _offScreenP; - int16 *dst = _workScreenP; + uint16 *dst = _workScreenP; int cnt = _screenWidth * _screenHeight; o = _current_shake_pos; @@ -51,11 +51,11 @@ void OSystem_PalmOS5::render_1x(RectangleType &r, PointType &p) { void OSystem_PalmOS5::render_landscapeAny(RectangleType &r, PointType &p) { Coord x, y, o = 0; - int16 *dst = _workScreenP; + uint16 *dst = _workScreenP; if (_overlayVisible) { for (y = 0; y < _screenDest.h; y++) { - int16 *src = _overlayP + *(_scaleTableY + y); + uint16 *src = _overlayP + *(_scaleTableY + y); for (x = 0; x < _screenDest.w; x++) { *dst++ = *(src + *(_scaleTableX + x)); } @@ -79,10 +79,10 @@ void OSystem_PalmOS5::render_landscapeAny(RectangleType &r, PointType &p) { void OSystem_PalmOS5::render_landscape15x(RectangleType &r, PointType &p) { Coord x, y, o = 0; - int16 *dst = _workScreenP; + uint16 *dst = _workScreenP; if (_overlayVisible) { - int16 *src = _overlayP; + uint16 *src = _overlayP; for (y = 0; y < 100; y++) { // draw 2 lines diff --git a/backends/platform/PalmOS/Src/os5_sound.cpp b/backends/platform/PalmOS/Src/os5_sound.cpp index 608b8af543..7553f032a9 100644 --- a/backends/platform/PalmOS/Src/os5_sound.cpp +++ b/backends/platform/PalmOS/Src/os5_sound.cpp @@ -25,6 +25,8 @@ #include "be_os5.h" #include "common/config-manager.h" +#include "sound/mixer_intern.h" + #ifdef PALMOS_ARM # ifdef COMPILE_ZODIAC @@ -63,7 +65,8 @@ void OSystem_PalmOS5::sound_handler() { if (!_soundEx.dataP) _soundEx.dataP = MemPtrNew(_soundEx.size); - ((SoundProc)_sound.proc)(_sound.param, (byte *)_soundEx.dataP, _soundEx.size); + _mixerMgr->mixCallback((byte *)_soundEx.dataP, _soundEx.size); +// ((SoundProc)_sound.proc)(_sound.param, (byte *)_soundEx.dataP, _soundEx.size); _soundEx.set = true; } }// TODO : no Sound API case @@ -128,6 +131,10 @@ bool OSystem_PalmOS5::setSoundCallback(SoundProc proc, void *param) { } } // if not true some scenes (indy3 256,...) may freeze (ESC to skip) + + _mixerMgr->setOutputRate(_samplesPerSec); + _mixerMgr->setReady(true); + return true; } diff --git a/backends/platform/PalmOS/Src/os5ex_sound.cpp b/backends/platform/PalmOS/Src/os5ex_sound.cpp index 77569e2548..f27f5a202d 100644 --- a/backends/platform/PalmOS/Src/os5ex_sound.cpp +++ b/backends/platform/PalmOS/Src/os5ex_sound.cpp @@ -24,11 +24,16 @@ */ #include "be_os5ex.h" +#include "sound/mixer_intern.h" static SYSTEM_CALLBACK Err sndCallbackEx(void* UserDataP, SndStreamRef stream, void* bufferP, UInt32 *bufferSizeP) { CALLBACK_PROLOGUE SoundType *_sound = ((SoundExType *)UserDataP)->sound; - ((SoundProc)_sound->proc)(_sound->param, (byte *)bufferP, *bufferSizeP); +// ((SoundProc)_sound->proc)(_sound->param, (byte *)bufferP, *bufferSizeP); + + Audio::MixerImpl *_mixerMgr = ( Audio::MixerImpl *)_sound->param; + _mixerMgr->mixCallback((byte *)bufferP, *bufferSizeP); + CALLBACK_EPILOGUE return errNone; } diff --git a/backends/platform/PalmOS/Src/zodiac_gfx.cpp b/backends/platform/PalmOS/Src/zodiac_gfx.cpp index 866ee086f7..98c563e101 100644 --- a/backends/platform/PalmOS/Src/zodiac_gfx.cpp +++ b/backends/platform/PalmOS/Src/zodiac_gfx.cpp @@ -71,8 +71,8 @@ void OSystem_PalmZodiac::load_gfx_mode() { SysSetOrientationTriggerState(sysOrientationTriggerDisabled); PINSetInputTriggerState(pinInputTriggerDisabled); - gVars->indicator.on = Graphics::RGBToColor >(0,255,0); - gVars->indicator.off = Graphics::RGBToColor >(0,0,0); + gVars->indicator.on = Graphics::RGBToColor >(0,255,0); + gVars->indicator.off = Graphics::RGBToColor >(0,0,0); _screenH = WinGetDisplayWindow(); _screenP = (byte *)BmpGetBits(WinGetBitmap(_screenH)); @@ -167,7 +167,7 @@ void OSystem_PalmZodiac::hotswap_gfx_mode(int mode) { _mode = mode; _srcPos.x = _screenOffset.x; _srcPos.y = _screenOffset.y; - clearScreen(); + clear_screen(); // updateScreen(); } @@ -188,7 +188,7 @@ void OSystem_PalmZodiac::unload_gfx_mode() { UInt32 depth = 8; WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL); - clearScreen(); + clear_screen(); MemPtrFree(_offScreenP); diff --git a/backends/platform/PalmOS/Src/zodiac_mouse.cpp b/backends/platform/PalmOS/Src/zodiac_mouse.cpp index 6fa19d090b..39a789aaa1 100644 --- a/backends/platform/PalmOS/Src/zodiac_mouse.cpp +++ b/backends/platform/PalmOS/Src/zodiac_mouse.cpp @@ -67,9 +67,9 @@ void OSystem_PalmZodiac::draw_mouse() { int ww; if (_overlayVisible) { - int16 *bak = (int16 *)_mouseBackupP; - int16 *pal = _cursorPaletteDisabled ? _nativePal : _mousePal; - int16 *dst; + uint16 *bak = (uint16 *)_mouseBackupP; + uint16 *pal = _cursorPaletteDisabled ? _nativePal : _mousePal; + uint16 *dst; TwGfxLockSurface(_overlayP, (void **)&dst); dst += y * _screenWidth + x; -- cgit v1.2.3