diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/wintermute/ui/ui_edit.cpp | 171 |
1 files changed, 74 insertions, 97 deletions
diff --git a/engines/wintermute/ui/ui_edit.cpp b/engines/wintermute/ui/ui_edit.cpp index 0592464928..d78981a2db 100644 --- a/engines/wintermute/ui/ui_edit.cpp +++ b/engines/wintermute/ui/ui_edit.cpp @@ -740,116 +740,93 @@ bool UIEdit::display(int offsetX, int offsetY) { ////////////////////////////////////////////////////////////////////////// bool UIEdit::handleKeypress(Common::Event *event, bool printable) { - bool handled = false; - - if (event->type == Common::EVENT_KEYDOWN && !printable) { - switch (event->kbd.keycode) { - case Common::KEYCODE_ESCAPE: - case Common::KEYCODE_TAB: - case Common::KEYCODE_RETURN: - return false; - - // ctrl+A - case Common::KEYCODE_a: - if (BaseKeyboardState::isControlDown()) { - _selStart = 0; - _selEnd = strlen(_text); - handled = true; - } - break; - - case Common::KEYCODE_BACKSPACE: - if (_selStart == _selEnd) { - if (_gameRef->_textRTL) { - deleteChars(_selStart, _selStart + 1); - } else { - deleteChars(_selStart - 1, _selStart); - } - } else { - deleteChars(_selStart, _selEnd); - } - if (_selEnd >= _selStart) { - _selEnd -= MAX<int32>(1, _selEnd - _selStart); - } - _selStart = _selEnd; - - handled = true; - break; - - case Common::KEYCODE_LEFT: - case Common::KEYCODE_UP: + if (event->type != Common::EVENT_KEYDOWN) { + return false; + } + + switch (event->kbd.keycode) { + + // Those keys are 'printable' in WME 1.x, let's ignore them + case Common::KEYCODE_ESCAPE: + case Common::KEYCODE_TAB: + case Common::KEYCODE_KP_ENTER: + case Common::KEYCODE_RETURN: + return false; + + // Movement keys are controlling _selEnd and _selStart + case Common::KEYCODE_HOME: + case Common::KEYCODE_END: + case Common::KEYCODE_LEFT: + case Common::KEYCODE_UP: + case Common::KEYCODE_RIGHT: + case Common::KEYCODE_DOWN: + if (event->kbd.keycode == Common::KEYCODE_HOME) { + _selEnd = _gameRef->_textRTL ? strlen(_text) : 0; + } else if (event->kbd.keycode == Common::KEYCODE_END) { + _selEnd = _gameRef->_textRTL ? 0 : strlen(_text); + } else if (event->kbd.keycode == Common::KEYCODE_LEFT || + event->kbd.keycode == Common::KEYCODE_UP) { _selEnd--; - if (!BaseKeyboardState::isShiftDown()) { - _selStart = _selEnd; - } - handled = true; - break; - - case Common::KEYCODE_RIGHT: - case Common::KEYCODE_DOWN: + } else { _selEnd++; - if (!BaseKeyboardState::isShiftDown()) { - _selStart = _selEnd; - } - handled = true; - break; + } + + if (!BaseKeyboardState::isShiftDown()) { + _selStart = _selEnd; + } + return true; - case Common::KEYCODE_HOME: + // Delete right + case Common::KEYCODE_DELETE: + if (_selStart == _selEnd) { if (_gameRef->_textRTL) { - _selEnd = strlen(_text); - if (!BaseKeyboardState::isShiftDown()) { - _selStart = _selEnd; + deleteChars(_selStart - 1, _selStart); + _selEnd--; + if (_selEnd < 0) { + _selEnd = 0; } } else { - _selEnd = 0; - if (!BaseKeyboardState::isShiftDown()) { - _selStart = _selEnd; - } + deleteChars(_selStart, _selStart + 1); } - handled = true; - break; + } else { + deleteChars(_selStart, _selEnd); + } + if (_selEnd > _selStart) { + _selEnd -= (_selEnd - _selStart); + } + _selStart = _selEnd; + return true; - case Common::KEYCODE_END: + // Delete left + case Common::KEYCODE_BACKSPACE: + if (_selStart == _selEnd) { if (_gameRef->_textRTL) { - _selEnd = 0; - if (!BaseKeyboardState::isShiftDown()) { - _selStart = _selEnd; - } + deleteChars(_selStart, _selStart + 1); } else { - _selEnd = strlen(_text); - if (!BaseKeyboardState::isShiftDown()) { - _selStart = _selEnd; - } + deleteChars(_selStart - 1, _selStart); } - handled = true; - break; + } else { + deleteChars(_selStart, _selEnd); + } + if (_selEnd >= _selStart) { + _selEnd -= MAX<int32>(1, _selEnd - _selStart); + } + _selStart = _selEnd; + return true; - case Common::KEYCODE_DELETE: - if (_selStart == _selEnd) { - if (_gameRef->_textRTL) { - deleteChars(_selStart - 1, _selStart); - _selEnd--; - if (_selEnd < 0) { - _selEnd = 0; - } - } else { - deleteChars(_selStart, _selStart + 1); - } - } else { - deleteChars(_selStart, _selEnd); - } - if (_selEnd > _selStart) { - _selEnd -= (_selEnd - _selStart); - } + default: + break; + } - _selStart = _selEnd; - handled = true; - break; - default: - break; - } - return handled; - } else if (event->type == Common::EVENT_KEYDOWN && printable) { + // Ctrl+A = Select All + if (BaseKeyboardState::isControlDown() && event->kbd.keycode == Common::KEYCODE_a) { + _selStart = 0; + _selEnd = strlen(_text); + return true; + } + + // Those are actually printable characters + else if (printable) { if (_selStart != _selEnd) { deleteChars(_selStart, _selEnd); } |