diff options
author | Jody Northup | 2009-06-05 23:59:40 +0000 |
---|---|---|
committer | Jody Northup | 2009-06-05 23:59:40 +0000 |
commit | d65bbe1d7a5efbcf04831dbb68a45ca833db1ae1 (patch) | |
tree | 9061e150b7671af93508c1017381e8d7ba3cad3d /graphics | |
parent | ccee18a489ece14c499c4e0c43aeb7fc216451fb (diff) | |
download | scummvm-rg350-d65bbe1d7a5efbcf04831dbb68a45ca833db1ae1.tar.gz scummvm-rg350-d65bbe1d7a5efbcf04831dbb68a45ca833db1ae1.tar.bz2 scummvm-rg350-d65bbe1d7a5efbcf04831dbb68a45ca833db1ae1.zip |
Fixes ScummEngine_v70he::setDefaultCursor to work in 16-bit, using a temporary hack.
svn-id: r41204
Diffstat (limited to 'graphics')
-rw-r--r-- | graphics/cursorman.cpp | 29 | ||||
-rw-r--r-- | graphics/cursorman.h | 40 |
2 files changed, 68 insertions, 1 deletions
diff --git a/graphics/cursorman.cpp b/graphics/cursorman.cpp index 84578a3911..5fe58314b3 100644 --- a/graphics/cursorman.cpp +++ b/graphics/cursorman.cpp @@ -56,6 +56,33 @@ bool CursorManager::showMouse(bool visible) { // Should work, even if there's just a dummy cursor on the stack. return g_system->showMouse(visible); } +#ifdef ENABLE_16BIT +void CursorManager::pushCursor16(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, uint16 keycolor, int targetScale) { + Cursor16 *cur = new Cursor16(buf, w, h, hotspotX, hotspotY, keycolor, targetScale); + + cur->_visible = isVisible(); + _cursor16Stack.push(cur); + + if (buf) { + g_system->setMouseCursor16(cur->_data, w, h, hotspotX, hotspotY, keycolor, targetScale); + } +} + +void CursorManager::popCursor16() { + if (_cursor16Stack.empty()) + return; + + Cursor16 *cur = _cursor16Stack.pop(); + delete cur; + + if (!_cursorStack.empty()) { + cur = _cursor16Stack.top(); + g_system->setMouseCursor16(cur->_data, cur->_width, cur->_height, cur->_hotspotX, cur->_hotspotY, cur->_keycolor, cur->_targetScale); + } + + g_system->showMouse(isVisible()); +} +#endif void CursorManager::pushCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int targetScale) { Cursor *cur = new Cursor(buf, w, h, hotspotX, hotspotY, keycolor, targetScale); @@ -104,7 +131,7 @@ void CursorManager::popAllCursors() { //HACK Made a separate method to avoid massive linker errors on every engine void CursorManager::replaceCursor16(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, uint16 keycolor, int targetScale) { if (_cursorStack.empty()) { - pushCursor(buf, w, h, hotspotX, hotspotY, keycolor, targetScale); + pushCursor16(buf, w, h, hotspotX, hotspotY, keycolor, targetScale); return; } diff --git a/graphics/cursorman.h b/graphics/cursorman.h index 8ad42fe0d4..b54ef31439 100644 --- a/graphics/cursorman.h +++ b/graphics/cursorman.h @@ -64,6 +64,13 @@ public: */ void popCursor(); +#ifdef ENABLE_16BIT + //HACK This is such a incredible hack + //I really need to make the one method + //work under multiple bitdepths + void pushCursor16(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, uint16 keycolor = 65535, int targetScale = 1); + void popCursor16(); +#endif /** * Replace the current cursor on the stack. If the stack is empty, the * cursor is pushed instead. It's a slightly more optimized way of @@ -137,7 +144,37 @@ public: private: friend class Common::Singleton<SingletonBaseType>; CursorManager(); +#ifdef ENABLE_16BIT + struct Cursor16 { + byte *_data; + bool _visible; + uint _width; + uint _height; + int _hotspotX; + int _hotspotY; + uint16 _keycolor; + byte _targetScale; + + uint _size; + Cursor16(const byte *data, uint w, uint h, int hotspotX, int hotspotY, uint16 keycolor = 65535, int targetScale = 1) { + _size = w * h * 2; + _data = new byte[_size]; + if (data && _data) + memcpy(_data, data, _size); + _width = w; + _height = h; + _hotspotX = hotspotX; + _hotspotY = hotspotY; + _keycolor = keycolor; + _targetScale = targetScale; + } + + ~Cursor16() { + delete[] _data; + } + }; +#endif struct Cursor { byte *_data; bool _visible; @@ -197,6 +234,9 @@ private: }; Common::Stack<Cursor *> _cursorStack; +#ifdef ENABLE_16BIT + Common::Stack<Cursor16 *> _cursor16Stack; +#endif Common::Stack<Palette *> _cursorPaletteStack; }; |