Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WINTERMUTE: Add keymappings #2051

Merged
merged 5 commits into from Feb 19, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 8 additions & 0 deletions backends/keymapper/action.h
Expand Up @@ -92,6 +92,14 @@ struct Action {
setEvent(EVENT_RBUTTONDOWN);
}

void setMouseWheelUpEvent() {
setEvent(EVENT_WHEELUP);
}

void setMouseWheelDownEvent() {
setEvent(EVENT_WHEELDOWN);
}

/**
* Add a default input mapping for the action
*
Expand Down
8 changes: 8 additions & 0 deletions backends/keymapper/hardware-input.cpp
Expand Up @@ -234,6 +234,8 @@ const HardwareInputTableEntry defaultMouseButtons[] = {
{ "MOUSE_LEFT", MOUSE_BUTTON_LEFT, _s("Left Mouse Button") },
{ "MOUSE_RIGHT", MOUSE_BUTTON_RIGHT, _s("Right Mouse Button") },
{ "MOUSE_MIDDLE", MOUSE_BUTTON_MIDDLE, _s("Middle Mouse Button") },
{ "MOUSE_WHEEL_UP", MOUSE_WHEEL_UP, _s("Mouse Wheel Up") },
{ "MOUSE_WHEEL_DOWN", MOUSE_WHEEL_DOWN, _s("Mouse Wheel Down") },
{ nullptr, 0, nullptr }
};

Expand Down Expand Up @@ -434,6 +436,12 @@ HardwareInput MouseHardwareInputSet::findHardwareInput(const Event &event) const
case EVENT_MBUTTONUP:
button = MOUSE_BUTTON_MIDDLE;
break;
case Common::EVENT_WHEELUP:
button = MOUSE_WHEEL_UP;
break;
case Common::EVENT_WHEELDOWN:
button = MOUSE_WHEEL_DOWN;
break;
default:
button = -1;
break;
Expand Down
2 changes: 2 additions & 0 deletions backends/keymapper/input-watcher.cpp
Expand Up @@ -70,6 +70,8 @@ bool InputWatcher::notifyEvent(const Event &event) {
case EVENT_LBUTTONUP:
case EVENT_RBUTTONUP:
case EVENT_MBUTTONUP:
case EVENT_WHEELUP:
case EVENT_WHEELDOWN:
case EVENT_CUSTOM_BACKEND_HARDWARE:
_hwInput = _keymapper->findHardwareInput(event);
if (_hwInput.type != kHardwareInputTypeInvalid) {
Expand Down
8 changes: 8 additions & 0 deletions backends/keymapper/keymap.cpp
Expand Up @@ -147,6 +147,14 @@ Keymap::ActionArray Keymap::getMappedActions(const Event &event) const {
HardwareInput hardwareInput = HardwareInput::createMouse("", MOUSE_BUTTON_MIDDLE, "");
return _hwActionMap[hardwareInput];
}
case Common::EVENT_WHEELUP: {
HardwareInput hardwareInput = HardwareInput::createMouse("", MOUSE_WHEEL_UP, "");
return _hwActionMap[hardwareInput];
}
case Common::EVENT_WHEELDOWN: {
HardwareInput hardwareInput = HardwareInput::createMouse("", MOUSE_WHEEL_DOWN, "");
return _hwActionMap[hardwareInput];
}
case EVENT_JOYBUTTON_DOWN:
case EVENT_JOYBUTTON_UP: {
HardwareInput hardwareInput = HardwareInput::createJoystickButton("", event.joystick.button, "");
Expand Down
6 changes: 5 additions & 1 deletion backends/keymapper/keymapper.cpp
Expand Up @@ -228,7 +228,9 @@ List<Event> Keymapper::mapEvent(const Event &ev) {
}

Keymapper::IncomingEventType Keymapper::convertToIncomingEventType(const Event &ev) const {
if (ev.type == EVENT_CUSTOM_BACKEND_HARDWARE) {
if (ev.type == EVENT_CUSTOM_BACKEND_HARDWARE
|| ev.type == EVENT_WHEELDOWN
|| ev.type == EVENT_WHEELUP) {
return kIncomingEventInstant;
} else if (ev.type == EVENT_JOYAXIS_MOTION) {
if (ev.joystick.axis >= ARRAYSIZE(_joystickAxisPreviouslyPressed)) {
Expand Down Expand Up @@ -260,6 +262,8 @@ bool Keymapper::isMouseEvent(const Event &event) {
|| event.type == EVENT_RBUTTONUP
|| event.type == EVENT_MBUTTONDOWN
|| event.type == EVENT_MBUTTONUP
|| event.type == EVENT_WHEELDOWN
|| event.type == EVENT_WHEELUP
|| event.type == EVENT_MOUSEMOVE;
}

Expand Down
4 changes: 3 additions & 1 deletion common/events.h
Expand Up @@ -156,7 +156,9 @@ enum JoystickAxis {
enum MouseButton {
MOUSE_BUTTON_LEFT = 0,
MOUSE_BUTTON_RIGHT = 1,
MOUSE_BUTTON_MIDDLE = 2
MOUSE_BUTTON_MIDDLE = 2,
MOUSE_WHEEL_UP = 3,
MOUSE_WHEEL_DOWN = 4
};

typedef uint32 CustomEventType;
Expand Down
29 changes: 26 additions & 3 deletions engines/wintermute/base/base_keyboard_state.cpp
Expand Up @@ -47,6 +47,12 @@ const keyCodeMapping wmeOriginalMapping[] = {
{ Common::KEYCODE_ESCAPE, 27 },
{ Common::KEYCODE_SPACE, 32 },

{ Common::KEYCODE_LSHIFT, 16 },
{ Common::KEYCODE_RSHIFT, 16 },
{ Common::KEYCODE_LCTRL, 17 },
{ Common::KEYCODE_RCTRL, 17 },
// WME 1.x does not produce events for LALT & RALT

{ Common::KEYCODE_PAUSE, 19 },
{ Common::KEYCODE_PAGEUP, 33 },
{ Common::KEYCODE_PAGEDOWN, 34 },
Expand Down Expand Up @@ -144,6 +150,13 @@ const keyCodeMapping wmeSdlMapping[] = {
{ Common::KEYCODE_SPACE, 32 },
{ Common::KEYCODE_CAPSLOCK, 1073741881 },

{ Common::KEYCODE_LCTRL, 1073742048 },
{ Common::KEYCODE_LSHIFT, 1073742049 },
{ Common::KEYCODE_LALT, 1073742050 },
{ Common::KEYCODE_RCTRL, 1073742052 },
{ Common::KEYCODE_RSHIFT, 1073742053 },
{ Common::KEYCODE_RALT, 1073742054 },

{ Common::KEYCODE_DELETE, 127 },
{ Common::KEYCODE_PRINT, 1073741894 },
{ Common::KEYCODE_SCROLLOCK, 1073741895 },
Expand Down Expand Up @@ -325,6 +338,16 @@ bool BaseKeyboardState::scCallMethod(ScScript *script, ScStack *stack, ScStack *
if (vKeyCode == Common::KEYCODE_INVALID) {
warning("Unknown VKEY: %d", temp);
}

if (BaseEngine::instance().getTargetExecutable() < WME_LITE && temp == 16) {
stack->pushBool(_keyStates[Common::KEYCODE_LSHIFT] || _keyStates[Common::KEYCODE_RSHIFT]);
return STATUS_OK;
}

if (BaseEngine::instance().getTargetExecutable() < WME_LITE && temp == 17) {
stack->pushBool(_keyStates[Common::KEYCODE_LCTRL] || _keyStates[Common::KEYCODE_RCTRL]);
return STATUS_OK;
}
}

bool isDown = _keyStates[vKeyCode];
Expand Down Expand Up @@ -490,9 +513,9 @@ bool BaseKeyboardState::readKey(Common::Event *event) {
}
}

_currentControl = isControlDown();
_currentAlt = isAltDown();
_currentShift = isShiftDown();
_currentControl = event->kbd.flags & Common::KBD_CTRL;
_currentAlt = event->kbd.flags & Common::KBD_ALT;
_currentShift = event->kbd.flags & Common::KBD_SHIFT;

return STATUS_OK;
}
Expand Down