diff options
Diffstat (limited to 'engines/xeen/dialogs')
-rw-r--r-- | engines/xeen/dialogs/dialogs.cpp | 78 | ||||
-rw-r--r-- | engines/xeen/dialogs/dialogs_input.cpp | 9 |
2 files changed, 44 insertions, 43 deletions
diff --git a/engines/xeen/dialogs/dialogs.cpp b/engines/xeen/dialogs/dialogs.cpp index f404996b56..1b99ec6978 100644 --- a/engines/xeen/dialogs/dialogs.cpp +++ b/engines/xeen/dialogs/dialogs.cpp @@ -66,51 +66,55 @@ bool ButtonContainer::checkEvents(XeenEngine *vm) { EventsManager &events = *vm->_events; Party &party = *vm->_party; Windows &windows = *_vm->_windows; + PendingEvent event; + const Common::Rect WAIT_BOUNDS(8, 8, 224, 140); _buttonValue = 0; - if (events._leftButton) { - Common::Point pt = events._mousePos; - - // Check for party member glyphs being clicked - Common::Rect r(0, 0, 32, 32); - for (uint idx = 0; idx < party._activeParty.size(); ++idx) { - r.moveTo(Res.CHAR_FACES_X[idx], 150); - if (r.contains(pt)) { - _buttonValue = Common::KEYCODE_F1 + idx; - break; + if (events.getEvent(event)) { + if (event._leftButton) { + Common::Point pt = events._mousePos; + + // Check for party member glyphs being clicked + Common::Rect r(0, 0, 32, 32); + for (uint idx = 0; idx < party._activeParty.size(); ++idx) { + r.moveTo(Res.CHAR_FACES_X[idx], 150); + if (r.contains(pt)) { + _buttonValue = Common::KEYCODE_F1 + idx; + break; + } } - } - // Check whether any button is selected - for (uint i = 0; i < _buttons.size(); ++i) { - if (_buttons[i]._bounds.contains(pt)) { - events.debounceMouse(); + // Check whether any button is selected + for (uint i = 0; i < _buttons.size(); ++i) { + if (_buttons[i]._bounds.contains(pt)) { + events.debounceMouse(); - _buttonValue = _buttons[i]._value; - break; + _buttonValue = _buttons[i]._value; + break; + } + } + + if (!_buttonValue && WAIT_BOUNDS.contains(pt)) { + _buttonValue = Common::KEYCODE_SPACE; + return true; } - } - if (!_buttonValue && Common::Rect(8, 8, 224, 135).contains(pt)) { - _buttonValue = 1; - return true; + } else if (event.isKeyboard()) { + const Common::KeyCode &keycode = event._keyState.keycode; + + if (keycode == Common::KEYCODE_KP8) + _buttonValue = Common::KEYCODE_UP; + else if (keycode == Common::KEYCODE_KP2) + _buttonValue = Common::KEYCODE_DOWN; + else if (keycode == Common::KEYCODE_KP_ENTER) + _buttonValue = Common::KEYCODE_RETURN; + else if (keycode != Common::KEYCODE_LCTRL && keycode != Common::KEYCODE_RCTRL + && keycode != Common::KEYCODE_LALT && keycode != Common::KEYCODE_RALT) + _buttonValue = keycode; + + if (_buttonValue) + _buttonValue |= (event._keyState.flags & ~Common::KBD_STICKY) << 16; } - } else if (events.isKeyPending()) { - Common::KeyState keyState; - events.getKey(keyState); - - if (keyState.keycode == Common::KEYCODE_KP8) - _buttonValue = Common::KEYCODE_UP; - else if (keyState.keycode == Common::KEYCODE_KP2) - _buttonValue = Common::KEYCODE_DOWN; - else if (keyState.keycode == Common::KEYCODE_KP_ENTER) - _buttonValue = Common::KEYCODE_RETURN; - else if (keyState.keycode != Common::KEYCODE_LCTRL && keyState.keycode != Common::KEYCODE_RCTRL - && keyState.keycode != Common::KEYCODE_LALT && keyState.keycode != Common::KEYCODE_RALT) - _buttonValue = keyState.keycode; - - if (_buttonValue) - _buttonValue |= (keyState.flags & ~Common::KBD_STICKY) << 16; } if (_buttonValue) { diff --git a/engines/xeen/dialogs/dialogs_input.cpp b/engines/xeen/dialogs/dialogs_input.cpp index b259908fe0..214aa28e5c 100644 --- a/engines/xeen/dialogs/dialogs_input.cpp +++ b/engines/xeen/dialogs/dialogs_input.cpp @@ -86,7 +86,7 @@ Common::KeyState Input::waitForKey(const Common::String &msg) { bool flag = !_vm->_startupWindowActive && !windows[25]._enabled && _vm->_mode != MODE_FF && _vm->_mode != MODE_17; - Common::KeyState ks; + PendingEvent pe; while (!_vm->shouldExit()) { events.updateGameCounter(); @@ -100,11 +100,8 @@ Common::KeyState Input::waitForKey(const Common::String &msg) { windows[3].update(); events.wait(1); - - if (events.isKeyPending()) { - events.getKey(ks); + if (events.getEvent(pe) && pe.isKeyboard()) break; - } } _window->writeString(""); @@ -113,7 +110,7 @@ Common::KeyState Input::waitForKey(const Common::String &msg) { intf._tillMove = oldTillMove; intf._upDoorText = oldUpDoorText; - return ks; + return pe._keyState; } void Input::animateCursor() { |