diff options
-rw-r--r-- | gui.cpp | 26 | ||||
-rw-r--r-- | gui.h | 7 |
2 files changed, 25 insertions, 8 deletions
@@ -947,17 +947,19 @@ void Gui::init(Scumm *s) void Gui::loop() { - /* FIXME - _active is a bool, so what was that code meant to do ? */ -#if OLD_WEIRD_CODE - if (_active == 1) { - _active++; -#else - if (_active) { -#endif + if (_active && !_inited) { + _inited = true; draw(0, 200); // was 100 _s->pauseSounds(true); + // Backup old cursor + memcpy(_old_grabbedCursor, _s->_grabbedCursor, sizeof(_old_grabbedCursor)); + _old_cursorWidth = _s->_cursorWidth; + _old_cursorHeight = _s->_cursorHeight; + _old_cursorHotspotX = _s->_cursorHotspotX; + _old_cursorHotspotY = _s->_cursorHotspotY; _old_cursor_mode = _s->_system->show_mouse(true); + _s->_cursorAnimate++; _s->gdi._cursorActive = 1; } @@ -991,10 +993,20 @@ void Gui::close() _s->_fullRedraw = true; _s->_completeScreenRedraw = true; _s->_cursorAnimate--; + + // Restore old cursor + memcpy(_s->_grabbedCursor, _old_grabbedCursor, sizeof(_old_grabbedCursor)); + _s->_cursorWidth = _old_cursorWidth; + _s->_cursorHeight = _old_cursorHeight; + _s->_cursorHotspotX = _old_cursorHotspotX; + _s->_cursorHotspotY = _old_cursorHotspotY; + _s->updateCursor(); + _s->_system->show_mouse(_old_cursor_mode); _s->pauseSounds(false); _active = false; + _inited = false; #ifdef _WIN32_WCE @@ -52,14 +52,19 @@ protected: int _return_to; int _curX, _curY; VirtScreen *_vs; - bool _old_cursor_mode; int _parentX, _parentY; bool _active; + bool _inited; byte _clickTimer; byte _cur_page; byte _dialog; int _clickWidget; char *_queryMess; + + // mouse cursor state + bool _old_cursor_mode; + int _old_cursorHotspotX, _old_cursorHotspotY, _old_cursorWidth, _old_cursorHeight; + byte _old_grabbedCursor[2048]; // optiondialog specifics int _gui_variables[100]; |