From d9ba5bedd7bc68c291b9cbaf8811d5aea01f16f3 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 28 May 2019 18:29:18 +0200 Subject: [PATCH] fix mapping for side independent modifiers (press both + key) --- src/emucore/EventHandler.cxx | 2 +- src/gui/EventMappingWidget.cxx | 20 ++++++++++++++++++-- src/gui/EventMappingWidget.hxx | 6 ++++++ src/gui/InputDialog.cxx | 12 ++++++++++++ src/gui/InputDialog.hxx | 1 + 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 13ae57eee..49bd70298 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -1542,7 +1542,6 @@ EventHandler::ActionList EventHandler::ourEmulActionList[EMUL_ACTIONLIST_SIZE] = { Event::DecreaseFormat, "Decrease display format", "", false }, { Event::IncreaseFormat, "Increase display format", "", false }, { Event::TogglePalette, "Switch palette (Standard/Z26/User)", "", false }, - { Event::ToggleColorLoss, "Toggle PAL color-loss effect", "", false }, #ifdef PNG_SUPPORT { Event::ToggleContSnapshots, "Save cont. PNG snapsh. (as defined)", "", false }, { Event::ToggleContSnapshotsFrame,"Save cont. PNG snapsh. (every frame)", "", false }, @@ -1662,6 +1661,7 @@ EventHandler::ActionList EventHandler::ourEmulActionList[EMUL_ACTIONLIST_SIZE] = { Event::ToggleFixedColors, "Toggle TIA 'Fixed Debug Colors' mode", "", false }, { Event::ToggleBits, "Toggle all TIA objects", "", false }, { Event::ToggleCollisions, "Toggle all TIA collisions", "", false }, + { Event::ToggleColorLoss, "Toggle PAL color-loss effect", "", false }, { Event::ToggleJitter, "Toggle TV 'Jitter' effect", "", false } }; diff --git a/src/gui/EventMappingWidget.cxx b/src/gui/EventMappingWidget.cxx index 40bcaf50b..669a52612 100644 --- a/src/gui/EventMappingWidget.cxx +++ b/src/gui/EventMappingWidget.cxx @@ -165,6 +165,9 @@ void EventMappingWidget::startRemapping() // Reset all previous events for determining correct axis/hat values myLastStick = myLastAxis = myLastHat = myLastValue = -1; + // Reset the previously aggregated key mappings + myMod = myKey = 0; + // Disable all other widgets while in remap mode, except enable 'Cancel' enableButtons(false); @@ -254,14 +257,27 @@ void EventMappingWidget::enableButtons(bool state) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool EventMappingWidget::handleKeyUp(StellaKey key, StellaMod mod) +bool EventMappingWidget::handleKeyDown(StellaKey key, StellaMod mod) { // Remap keys in remap mode if (myRemapStatus && myActionSelected >= 0) + { + myKey = key; + myMod |= mod; + } + return true; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool EventMappingWidget::handleKeyUp(StellaKey key, StellaMod mod) +{ + // Remap keys in remap mode + if (myRemapStatus && myActionSelected >= 0 + && (mod & (KBDM_ALT | KBDM_CTRL | KBDM_SHIFT)) == 0) { Event::Type event = instance().eventHandler().eventAtIndex(myActionSelected, myEventMode); - if (instance().eventHandler().addKeyMapping(event, myEventMode, key, mod)) + if (instance().eventHandler().addKeyMapping(event, myEventMode, StellaKey(myKey), StellaMod(myMod))) stopRemapping(); } return true; diff --git a/src/gui/EventMappingWidget.hxx b/src/gui/EventMappingWidget.hxx index 9e9a11bd9..7fb82dad4 100644 --- a/src/gui/EventMappingWidget.hxx +++ b/src/gui/EventMappingWidget.hxx @@ -57,6 +57,7 @@ class EventMappingWidget : public Widget, public CommandSender kComboCmd = 'cmbo' }; + bool handleKeyDown(StellaKey key, StellaMod mod) override; bool handleKeyUp(StellaKey key, StellaMod mod) override; void handleJoyDown(int stick, int button) override; void handleJoyAxis(int stick, int axis, int value) override; @@ -104,6 +105,11 @@ class EventMappingWidget : public Widget, public CommandSender // As a result, we need to keep track of their old values int myLastStick, myLastAxis, myLastHat, myLastValue; + // Aggregates the modifier flags of the mapping + int myMod; + // Saves the last *pressed* key + int myKey; + bool myFirstTime; private: diff --git a/src/gui/InputDialog.cxx b/src/gui/InputDialog.cxx index cbde6f1b3..6717639d0 100644 --- a/src/gui/InputDialog.cxx +++ b/src/gui/InputDialog.cxx @@ -444,6 +444,18 @@ void InputDialog::setDefaults() } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void InputDialog::handleKeyDown(StellaKey key, StellaMod mod) +{ + // Remap key events in remap mode, otherwise pass to parent dialog + if (myEmulEventMapper->remapMode()) + myEmulEventMapper->handleKeyDown(key, mod); + else if (myMenuEventMapper->remapMode()) + myMenuEventMapper->handleKeyDown(key, mod); + else + Dialog::handleKeyDown(key, mod); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void InputDialog::handleKeyUp(StellaKey key, StellaMod mod) { diff --git a/src/gui/InputDialog.hxx b/src/gui/InputDialog.hxx index 1460b6751..5d815c1da 100644 --- a/src/gui/InputDialog.hxx +++ b/src/gui/InputDialog.hxx @@ -43,6 +43,7 @@ class InputDialog : public Dialog virtual ~InputDialog(); private: + void handleKeyDown(StellaKey key, StellaMod mod) override; void handleKeyUp(StellaKey key, StellaMod mod) override; void handleJoyDown(int stick, int button) override; void handleJoyAxis(int stick, int axis, int value) override;