diff options
-rw-r--r-- | engines/sci/engine/kmenu.cpp | 10 | ||||
-rw-r--r-- | engines/sci/graphics/menu.cpp | 18 | ||||
-rw-r--r-- | engines/sci/graphics/menu.h | 6 |
3 files changed, 15 insertions, 19 deletions
diff --git a/engines/sci/engine/kmenu.cpp b/engines/sci/engine/kmenu.cpp index 69ec07559e..c8a6e03556 100644 --- a/engines/sci/engine/kmenu.cpp +++ b/engines/sci/engine/kmenu.cpp @@ -91,16 +91,8 @@ reg_t kDrawMenuBar(EngineState *s, int argc, reg_t *argv) { reg_t kMenuSelect(EngineState *s, int argc, reg_t *argv) { reg_t eventObject = argv[0]; bool pauseSound = argc > 1 ? (argv[1].isNull() ? false : true) : true; - reg_t result; - if (pauseSound) - g_sci->_soundCmd->pauseAll(true); - - result = g_sci->_gfxMenu->kernelSelect(eventObject); - - if (pauseSound) - g_sci->_soundCmd->pauseAll(false); - return result; + return g_sci->_gfxMenu->kernelSelect(eventObject, pauseSound); } } // End of namespace Sci diff --git a/engines/sci/graphics/menu.cpp b/engines/sci/graphics/menu.cpp index d85d4456fc..f959ffb3a5 100644 --- a/engines/sci/graphics/menu.cpp +++ b/engines/sci/graphics/menu.cpp @@ -382,7 +382,7 @@ void GfxMenu::calculateMenuAndItemWidth() { } } -reg_t GfxMenu::kernelSelect(reg_t eventObject) { +reg_t GfxMenu::kernelSelect(reg_t eventObject, bool pauseSound) { int16 eventType = readSelectorValue(_segMan, eventObject, SELECTOR(type)); int16 keyPress, keyModifier; Common::Point mousePosition; @@ -407,9 +407,9 @@ reg_t GfxMenu::kernelSelect(reg_t eventObject) { case 0: break; case SCI_KEY_ESC: - interactiveShowMouse(); + interactiveStart(pauseSound); itemEntry = interactiveWithKeyboard(); - interactiveRestoreMouse(); + interactiveEnd(pauseSound); forceClaimed = true; break; default: @@ -445,9 +445,9 @@ reg_t GfxMenu::kernelSelect(reg_t eventObject) { case SCI_EVENT_MOUSE_PRESS: mousePosition = _cursor->getPosition(); if (mousePosition.y < 10) { - interactiveShowMouse(); + interactiveStart(pauseSound); itemEntry = interactiveWithMouse(); - interactiveRestoreMouse(); + interactiveEnd(pauseSound); forceClaimed = true; } break; @@ -632,12 +632,16 @@ void GfxMenu::invertMenuSelection(uint16 itemId) { _paint16->bitsShow(itemRect); } -void GfxMenu::interactiveShowMouse() { +void GfxMenu::interactiveStart(bool pauseSound) { _mouseOldState = _cursor->isVisible(); _cursor->kernelShow(); + if (pauseSound) + g_sci->_soundCmd->pauseAll(true); } -void GfxMenu::interactiveRestoreMouse() { +void GfxMenu::interactiveEnd(bool pauseSound) { + if (pauseSound) + g_sci->_soundCmd->pauseAll(false); if (!_mouseOldState) _cursor->kernelHide(); } diff --git a/engines/sci/graphics/menu.h b/engines/sci/graphics/menu.h index b72d518977..9a14d4c64a 100644 --- a/engines/sci/graphics/menu.h +++ b/engines/sci/graphics/menu.h @@ -92,7 +92,7 @@ public: reg_t kernelGetAttribute(uint16 menuId, uint16 itemId, uint16 attributeId); void drawBar(); - reg_t kernelSelect(reg_t eventObject); + reg_t kernelSelect(reg_t eventObject, bool pauseSound); void kernelDrawStatus(const char *text, int16 colorPen, int16 colorBack); void kernelDrawMenuBar(bool clear); @@ -103,8 +103,8 @@ private: void calculateMenuAndItemWidth(); void drawMenu(uint16 oldMenuId, uint16 newMenuId); void invertMenuSelection(uint16 itemId); - void interactiveShowMouse(); - void interactiveRestoreMouse(); + void interactiveStart(bool pauseSound); + void interactiveEnd(bool pauseSound); GuiMenuItemEntry *interactiveWithKeyboard(); GuiMenuItemEntry *interactiveWithMouse(); uint16 mouseFindMenuSelection(Common::Point mousePosition); |