From e76fed006bb4973dd2ca96fb2f16f56e07dc5cfb Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 18 Dec 2020 22:34:36 +0100 Subject: [PATCH] minor enhancement of input global keys --- docs/index.html | 2 +- src/common/PJoystickHandler.cxx | 20 ++++- src/common/PJoystickHandler.hxx | 1 + src/emucore/EventHandler.cxx | 141 +++++++++++++++++++------------- src/emucore/EventHandler.hxx | 7 +- 5 files changed, 109 insertions(+), 62 deletions(-) diff --git a/docs/index.html b/docs/index.html index 3b32b5b46..071244afc 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2926,7 +2926,7 @@
-dsense <number>
Sensitivity for emulation of paddles when using a digital device - (ie, joystick digital axis or button, keyboard key, etc.). + (i.e. joystick digital axis or button, keyboard key, etc.). Valid range of values is from 1 to 20, with larger numbers causing faster movement. diff --git a/src/common/PJoystickHandler.cxx b/src/common/PJoystickHandler.cxx index 92ba5ae15..d93ae293c 100644 --- a/src/common/PJoystickHandler.cxx +++ b/src/common/PJoystickHandler.cxx @@ -267,6 +267,24 @@ void PhysicalJoystickHandler::mapStelladaptors(const string& saport) myOSystem.settings().setValue("saport", saport); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool PhysicalJoystickHandler::hasStelladaptors() const +{ + for(auto& [_id, _joyptr] : mySticks) + { + // remove previously added emulated ports + size_t pos = _joyptr->name.find(" (emulates "); + + if(pos != std::string::npos) + _joyptr->name.erase(pos); + + if(BSPF::startsWithIgnoreCase(_joyptr->name, "Stelladaptor") + || BSPF::startsWithIgnoreCase(_joyptr->name, "2600-daptor")) + return true; + } + return false; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Depending on parameters, this method does the following: // 1. update all events with default (event == Event::NoType, updateDefault == true) @@ -989,7 +1007,7 @@ void PhysicalJoystickHandler::changeDrivingSensitivity(int direction) ostringstream ss; ss << sense * 10 << "%"; - myOSystem.frameBuffer().showGaugeMessage("Mouse driving controller sensitivity", + myOSystem.frameBuffer().showGaugeMessage("Driving controller sensitivity", ss.str(), sense, Driving::MIN_SENSE, Driving::MAX_SENSE); } diff --git a/src/common/PJoystickHandler.hxx b/src/common/PJoystickHandler.hxx index f03217410..e02250da4 100644 --- a/src/common/PJoystickHandler.hxx +++ b/src/common/PJoystickHandler.hxx @@ -71,6 +71,7 @@ class PhysicalJoystickHandler bool remove(int id); bool remove(const string& name); void mapStelladaptors(const string& saport); + bool hasStelladaptors() const; void setDefaultMapping(Event::Type type, EventMode mode); /** define mappings for current controllers */ diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 0d8be1a63..e965ceaf3 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -246,7 +246,7 @@ void EventHandler::changeMouseControl(int direction) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool EventHandler::hasMouseControl() +bool EventHandler::hasMouseControl() const { return myMouseControl && myMouseControl->hasMouseControl(); } @@ -416,97 +416,120 @@ bool EventHandler::isTrackball(const Controller& controller) const } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -AdjustFunction EventHandler::cycleAdjustSetting(int direction) +bool EventHandler::skipAVSetting() const +{ + const bool isFullScreen = myOSystem.frameBuffer().fullScreen(); + const bool isCustomPalette = + myOSystem.settings().getString("palette") == PaletteHandler::SETTING_CUSTOM; + const bool isCustomFilter = + myOSystem.settings().getInt("tv.filter") == int(NTSCFilter::Preset::CUSTOM); + + return (myAdjustSetting == AdjustSetting::OVERSCAN && !isFullScreen) + #ifdef ADAPTABLE_REFRESH_SUPPORT + || (myAdjustSetting == AdjustSetting::ADAPT_REFRESH && !isFullScreen) + #endif + || (myAdjustSetting >= AdjustSetting::PALETTE_PHASE + && myAdjustSetting <= AdjustSetting::PALETTE_BLUE_SHIFT + && !isCustomPalette) + || (myAdjustSetting >= AdjustSetting::NTSC_SHARPNESS + && myAdjustSetting <= AdjustSetting::NTSC_BLEEDING + && !isCustomFilter); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool EventHandler::skipInputSetting() const +{ + const bool grabMouseAllowed = myOSystem.frameBuffer().grabMouseAllowed(); + const bool analog = myOSystem.console().leftController().isAnalog() + || myOSystem.console().rightController().isAnalog(); + const bool joystick = isJoystick(myOSystem.console().leftController()) + || isJoystick(myOSystem.console().rightController()); + const bool paddle = isPaddle(myOSystem.console().leftController()) + || isPaddle(myOSystem.console().rightController()); + const bool trackball = isTrackball(myOSystem.console().leftController()) + || isTrackball(myOSystem.console().rightController()); + const bool driving = + myOSystem.console().leftController().type() == Controller::Type::Driving + || myOSystem.console().rightController().type() == Controller::Type::Driving; + const bool useMouse = + BSPF::equalsIgnoreCase("always", myOSystem.settings().getString("usemouse")) + || (BSPF::equalsIgnoreCase("analog", myOSystem.settings().getString("usemouse")) + && analog); + const bool stelladapter = myPJoyHandler->hasStelladaptors(); + + return (!grabMouseAllowed && myAdjustSetting == AdjustSetting::GRAB_MOUSE) + || (!joystick + && (myAdjustSetting == AdjustSetting::DEADZONE + || myAdjustSetting == AdjustSetting::FOUR_DIRECTIONS)) + || (!paddle + && (myAdjustSetting == AdjustSetting::ANALOG_SENSITIVITY + || myAdjustSetting == AdjustSetting::DEJITTER_AVERAGING + || myAdjustSetting == AdjustSetting::DEJITTER_REACTION + || myAdjustSetting == AdjustSetting::DIGITAL_SENSITIVITY + || myAdjustSetting == AdjustSetting::SWAP_PADDLES + || myAdjustSetting == AdjustSetting::PADDLE_CENTER_X + || myAdjustSetting == AdjustSetting::PADDLE_CENTER_Y)) + || ((!paddle || !useMouse) + && myAdjustSetting == AdjustSetting::PADDLE_SENSITIVITY) + || ((!trackball || !useMouse) + && myAdjustSetting == AdjustSetting::TRACKBALL_SENSITIVITY) + || (!driving + && myAdjustSetting == AdjustSetting::DRIVING_SENSITIVITY) // also affects digital device input sensitivity + || ((!hasMouseControl() || !useMouse) + && myAdjustSetting == AdjustSetting::MOUSE_CONTROL) + || ((!paddle || !useMouse) + && myAdjustSetting == AdjustSetting::MOUSE_RANGE) + || (!stelladapter + && myAdjustSetting == AdjustSetting::SA_PORT_ORDER); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool EventHandler::skipDebugSetting() const { const bool isPAL = myOSystem.console().timing() == ConsoleTiming::pal; - bool repeat = false; + return (myAdjustSetting == AdjustSetting::COLOR_LOSS && !isPAL); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +AdjustFunction EventHandler::cycleAdjustSetting(int direction) +{ + bool skip = false; do { switch (getAdjustGroup()) { case AdjustGroup::AV: - { - const bool isFullScreen = myOSystem.frameBuffer().fullScreen(); - const bool isCustomPalette = - myOSystem.settings().getString("palette") == PaletteHandler::SETTING_CUSTOM; - const bool isCustomFilter = - myOSystem.settings().getInt("tv.filter") == int(NTSCFilter::Preset::CUSTOM); - myAdjustSetting = AdjustSetting(BSPF::clampw(int(myAdjustSetting) + direction, int(AdjustSetting::START_AV_ADJ), int(AdjustSetting::END_AV_ADJ))); // skip currently non-relevant adjustments - repeat = (myAdjustSetting == AdjustSetting::OVERSCAN && !isFullScreen) - #ifdef ADAPTABLE_REFRESH_SUPPORT - || (myAdjustSetting == AdjustSetting::ADAPT_REFRESH && !isFullScreen) - #endif - || (myAdjustSetting >= AdjustSetting::PALETTE_PHASE - && myAdjustSetting <= AdjustSetting::PALETTE_BLUE_SHIFT - && !isCustomPalette) - || (myAdjustSetting >= AdjustSetting::NTSC_SHARPNESS - && myAdjustSetting <= AdjustSetting::NTSC_BLEEDING - && !isCustomFilter); + skip = skipAVSetting(); break; - } case AdjustGroup::INPUT: - { - const bool grabMouseAllowed = myOSystem.frameBuffer().grabMouseAllowed(); - const bool joystick = isJoystick(myOSystem.console().leftController()) - || isJoystick(myOSystem.console().rightController()); - const bool paddle = isPaddle(myOSystem.console().leftController()) - || isPaddle(myOSystem.console().rightController()); - const bool trackball = isTrackball(myOSystem.console().leftController()) - || isTrackball(myOSystem.console().rightController()); - const bool driving = myOSystem.console().leftController().type() == Controller::Type::Driving - || myOSystem.console().rightController().type() == Controller::Type::Driving; - const bool useMouse = myOSystem.settings().getString("usemouse") != "never"; - myAdjustSetting = AdjustSetting(BSPF::clampw(int(myAdjustSetting) + direction, int(AdjustSetting::START_INPUT_ADJ), int(AdjustSetting::END_INPUT_ADJ))); // skip currently non-relevant adjustments - repeat = (!grabMouseAllowed && myAdjustSetting == AdjustSetting::GRAB_MOUSE) - || (!joystick - && (myAdjustSetting == AdjustSetting::DEADZONE - || myAdjustSetting == AdjustSetting::FOUR_DIRECTIONS)) - || (!paddle - && (myAdjustSetting == AdjustSetting::ANALOG_SENSITIVITY - || myAdjustSetting == AdjustSetting::DEJITTER_AVERAGING - || myAdjustSetting == AdjustSetting::DEJITTER_REACTION - || myAdjustSetting == AdjustSetting::DIGITAL_SENSITIVITY - || myAdjustSetting == AdjustSetting::SWAP_PADDLES - || myAdjustSetting == AdjustSetting::PADDLE_CENTER_X - || myAdjustSetting == AdjustSetting::PADDLE_CENTER_Y)) - || ((!paddle || !useMouse) - && myAdjustSetting == AdjustSetting::PADDLE_SENSITIVITY) - || ((!trackball || !useMouse) - && myAdjustSetting == AdjustSetting::TRACKBALL_SENSITIVITY) - || (!driving - && myAdjustSetting == AdjustSetting::DRIVING_SENSITIVITY) // also affects keyboard input sensitivity - || ((!hasMouseControl() || !useMouse) - && myAdjustSetting == AdjustSetting::MOUSE_CONTROL) - || ((!paddle || !useMouse) - && myAdjustSetting == AdjustSetting::MOUSE_RANGE); + skip = skipInputSetting(); break; - } case AdjustGroup::DEBUG: myAdjustSetting = AdjustSetting(BSPF::clampw(int(myAdjustSetting) + direction, int(AdjustSetting::START_DEBUG_ADJ), int(AdjustSetting::END_DEBUG_ADJ))); // skip currently non-relevant adjustments - repeat = (myAdjustSetting == AdjustSetting::COLOR_LOSS && !isPAL); + skip = skipDebugSetting(); break; default: break; } // avoid endless loop - if(repeat && !direction) + if(skip && !direction) direction = 1; - } while(repeat); + } while(skip); return getAdjustSetting(myAdjustSetting); } diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index ab3771e9a..a6c477923 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -361,7 +361,7 @@ class EventHandler Handle changing mouse modes. */ void changeMouseControl(int direction = +1); - bool hasMouseControl(); + bool hasMouseControl() const; void saveKeyMapping(); void saveJoyMapping(); @@ -576,6 +576,11 @@ class EventHandler bool isPaddle(const Controller& controller) const; bool isTrackball(const Controller& controller) const; + // Check if a currently non-relevant adjustment can be skipped + bool skipAVSetting() const; + bool skipInputSetting() const; + bool skipDebugSetting() const; + private: // Structure used for action menu items struct ActionList {