diff options
31 files changed, 446 insertions, 410 deletions
diff --git a/src/common/input.h b/src/common/input.h index eaee0bdea..f775a4c01 100644 --- a/src/common/input.h +++ b/src/common/input.h @@ -227,7 +227,7 @@ struct CallbackStatus {  // Triggered once every input change  struct InputCallback { -    std::function<void(CallbackStatus)> on_change; +    std::function<void(const CallbackStatus&)> on_change;  };  /// An abstract class template for an input device (a button, an analog input, etc.). @@ -236,14 +236,10 @@ public:      virtual ~InputDevice() = default;      // Request input device to update if necessary -    virtual void SoftUpdate() { -        return; -    } +    virtual void SoftUpdate() {}      // Force input device to update data regardless of the current state -    virtual void ForceUpdate() { -        return; -    } +    virtual void ForceUpdate() {}      // Sets the function to be triggered when input changes      void SetCallback(InputCallback callback_) { @@ -251,7 +247,7 @@ public:      }      // Triggers the function set in the callback -    void TriggerOnChange(CallbackStatus status) { +    void TriggerOnChange(const CallbackStatus& status) {          if (callback.on_change) {              callback.on_change(status);          } @@ -266,11 +262,9 @@ class OutputDevice {  public:      virtual ~OutputDevice() = default; -    virtual void SetLED([[maybe_unused]] LedStatus led_status) { -        return; -    } +    virtual void SetLED([[maybe_unused]] const LedStatus& led_status) {} -    virtual VibrationError SetVibration([[maybe_unused]] VibrationStatus vibration_status) { +    virtual VibrationError SetVibration([[maybe_unused]] const VibrationStatus& vibration_status) {          return VibrationError::NotSupported;      } diff --git a/src/common/x64/cpu_detect.cpp b/src/common/x64/cpu_detect.cpp index fccd2eee5..fbeacc7e2 100644 --- a/src/common/x64/cpu_detect.cpp +++ b/src/common/x64/cpu_detect.cpp @@ -71,9 +71,6 @@ static CPUCaps Detect() {      else          caps.manufacturer = Manufacturer::Unknown; -    u32 family = {}; -    u32 model = {}; -      __cpuid(cpu_id, 0x80000000);      u32 max_ex_fn = cpu_id[0]; @@ -84,15 +81,6 @@ static CPUCaps Detect() {      // Detect family and other miscellaneous features      if (max_std_fn >= 1) {          __cpuid(cpu_id, 0x00000001); -        family = (cpu_id[0] >> 8) & 0xf; -        model = (cpu_id[0] >> 4) & 0xf; -        if (family == 0xf) { -            family += (cpu_id[0] >> 20) & 0xff; -        } -        if (family >= 6) { -            model += ((cpu_id[0] >> 16) & 0xf) << 4; -        } -          if ((cpu_id[3] >> 25) & 1)              caps.sse = true;          if ((cpu_id[3] >> 26) & 1) diff --git a/src/core/hid/emulated_console.cpp b/src/core/hid/emulated_console.cpp index 80db8e9c6..685ec080c 100644 --- a/src/core/hid/emulated_console.cpp +++ b/src/core/hid/emulated_console.cpp @@ -66,9 +66,10 @@ void EmulatedConsole::ReloadInput() {      motion_devices = Common::Input::CreateDevice<Common::Input::InputDevice>(motion_params);      if (motion_devices) { -        Common::Input::InputCallback motion_callback{ -            [this](Common::Input::CallbackStatus callback) { SetMotion(callback); }}; -        motion_devices->SetCallback(motion_callback); +        motion_devices->SetCallback({ +            .on_change = +                [this](const Common::Input::CallbackStatus& callback) { SetMotion(callback); }, +        });      }      // Unique index for identifying touch device source @@ -78,9 +79,12 @@ void EmulatedConsole::ReloadInput() {          if (!touch_device) {              continue;          } -        Common::Input::InputCallback touch_callback{ -            [this, index](Common::Input::CallbackStatus callback) { SetTouch(callback, index); }}; -        touch_device->SetCallback(touch_callback); +        touch_device->SetCallback({ +            .on_change = +                [this, index](const Common::Input::CallbackStatus& callback) { +                    SetTouch(callback, index); +                }, +        });          index++;      }  } @@ -127,7 +131,7 @@ void EmulatedConsole::SetMotionParam(Common::ParamPackage param) {      ReloadInput();  } -void EmulatedConsole::SetMotion(Common::Input::CallbackStatus callback) { +void EmulatedConsole::SetMotion(const Common::Input::CallbackStatus& callback) {      std::lock_guard lock{mutex};      auto& raw_status = console.motion_values.raw_status;      auto& emulated = console.motion_values.emulated; @@ -162,8 +166,7 @@ void EmulatedConsole::SetMotion(Common::Input::CallbackStatus callback) {      TriggerOnChange(ConsoleTriggerType::Motion);  } -void EmulatedConsole::SetTouch(Common::Input::CallbackStatus callback, -                               [[maybe_unused]] std::size_t index) { +void EmulatedConsole::SetTouch(const Common::Input::CallbackStatus& callback, std::size_t index) {      if (index >= console.touch_values.size()) {          return;      } diff --git a/src/core/hid/emulated_console.h b/src/core/hid/emulated_console.h index bb3d7ab90..3afd284d5 100644 --- a/src/core/hid/emulated_console.h +++ b/src/core/hid/emulated_console.h @@ -155,14 +155,14 @@ private:       * Updates the motion status of the console       * @param callback A CallbackStatus containing gyro and accelerometer data       */ -    void SetMotion(Common::Input::CallbackStatus callback); +    void SetMotion(const Common::Input::CallbackStatus& callback);      /**       * Updates the touch status of the console       * @param callback A CallbackStatus containing the touch position       * @param index Finger ID to be updated       */ -    void SetTouch(Common::Input::CallbackStatus callback, std::size_t index); +    void SetTouch(const Common::Input::CallbackStatus& callback, std::size_t index);      /**       * Triggers a callback that something has changed on the console status diff --git a/src/core/hid/emulated_controller.cpp b/src/core/hid/emulated_controller.cpp index fbb19f230..93372445b 100644 --- a/src/core/hid/emulated_controller.cpp +++ b/src/core/hid/emulated_controller.cpp @@ -205,11 +205,12 @@ void EmulatedController::ReloadInput() {              continue;          }          const auto uuid = Common::UUID{button_params[index].Get("guid", "")}; -        Common::Input::InputCallback button_callback{ -            [this, index, uuid](Common::Input::CallbackStatus callback) { -                SetButton(callback, index, uuid); -            }}; -        button_devices[index]->SetCallback(button_callback); +        button_devices[index]->SetCallback({ +            .on_change = +                [this, index, uuid](const Common::Input::CallbackStatus& callback) { +                    SetButton(callback, index, uuid); +                }, +        });          button_devices[index]->ForceUpdate();      } @@ -218,11 +219,12 @@ void EmulatedController::ReloadInput() {              continue;          }          const auto uuid = Common::UUID{stick_params[index].Get("guid", "")}; -        Common::Input::InputCallback stick_callback{ -            [this, index, uuid](Common::Input::CallbackStatus callback) { -                SetStick(callback, index, uuid); -            }}; -        stick_devices[index]->SetCallback(stick_callback); +        stick_devices[index]->SetCallback({ +            .on_change = +                [this, index, uuid](const Common::Input::CallbackStatus& callback) { +                    SetStick(callback, index, uuid); +                }, +        });          stick_devices[index]->ForceUpdate();      } @@ -231,11 +233,12 @@ void EmulatedController::ReloadInput() {              continue;          }          const auto uuid = Common::UUID{trigger_params[index].Get("guid", "")}; -        Common::Input::InputCallback trigger_callback{ -            [this, index, uuid](Common::Input::CallbackStatus callback) { -                SetTrigger(callback, index, uuid); -            }}; -        trigger_devices[index]->SetCallback(trigger_callback); +        trigger_devices[index]->SetCallback({ +            .on_change = +                [this, index, uuid](const Common::Input::CallbackStatus& callback) { +                    SetTrigger(callback, index, uuid); +                }, +        });          trigger_devices[index]->ForceUpdate();      } @@ -243,9 +246,12 @@ void EmulatedController::ReloadInput() {          if (!battery_devices[index]) {              continue;          } -        Common::Input::InputCallback battery_callback{ -            [this, index](Common::Input::CallbackStatus callback) { SetBattery(callback, index); }}; -        battery_devices[index]->SetCallback(battery_callback); +        battery_devices[index]->SetCallback({ +            .on_change = +                [this, index](const Common::Input::CallbackStatus& callback) { +                    SetBattery(callback, index); +                }, +        });          battery_devices[index]->ForceUpdate();      } @@ -253,9 +259,12 @@ void EmulatedController::ReloadInput() {          if (!motion_devices[index]) {              continue;          } -        Common::Input::InputCallback motion_callback{ -            [this, index](Common::Input::CallbackStatus callback) { SetMotion(callback, index); }}; -        motion_devices[index]->SetCallback(motion_callback); +        motion_devices[index]->SetCallback({ +            .on_change = +                [this, index](const Common::Input::CallbackStatus& callback) { +                    SetMotion(callback, index); +                }, +        });          motion_devices[index]->ForceUpdate();      } @@ -267,22 +276,24 @@ void EmulatedController::ReloadInput() {          if (!tas_button_devices[index]) {              continue;          } -        Common::Input::InputCallback button_callback{ -            [this, index, tas_uuid](Common::Input::CallbackStatus callback) { -                SetButton(callback, index, tas_uuid); -            }}; -        tas_button_devices[index]->SetCallback(button_callback); +        tas_button_devices[index]->SetCallback({ +            .on_change = +                [this, index, tas_uuid](const Common::Input::CallbackStatus& callback) { +                    SetButton(callback, index, tas_uuid); +                }, +        });      }      for (std::size_t index = 0; index < tas_stick_devices.size(); ++index) {          if (!tas_stick_devices[index]) {              continue;          } -        Common::Input::InputCallback stick_callback{ -            [this, index, tas_uuid](Common::Input::CallbackStatus callback) { -                SetStick(callback, index, tas_uuid); -            }}; -        tas_stick_devices[index]->SetCallback(stick_callback); +        tas_stick_devices[index]->SetCallback({ +            .on_change = +                [this, index, tas_uuid](const Common::Input::CallbackStatus& callback) { +                    SetStick(callback, index, tas_uuid); +                }, +        });      }  } @@ -440,7 +451,7 @@ void EmulatedController::SetButtonParam(std::size_t index, Common::ParamPackage      if (index >= button_params.size()) {          return;      } -    button_params[index] = param; +    button_params[index] = std::move(param);      ReloadInput();  } @@ -448,7 +459,7 @@ void EmulatedController::SetStickParam(std::size_t index, Common::ParamPackage p      if (index >= stick_params.size()) {          return;      } -    stick_params[index] = param; +    stick_params[index] = std::move(param);      ReloadInput();  } @@ -456,11 +467,11 @@ void EmulatedController::SetMotionParam(std::size_t index, Common::ParamPackage      if (index >= motion_params.size()) {          return;      } -    motion_params[index] = param; +    motion_params[index] = std::move(param);      ReloadInput();  } -void EmulatedController::SetButton(Common::Input::CallbackStatus callback, std::size_t index, +void EmulatedController::SetButton(const Common::Input::CallbackStatus& callback, std::size_t index,                                     Common::UUID uuid) {      if (index >= controller.button_values.size()) {          return; @@ -600,7 +611,7 @@ void EmulatedController::SetButton(Common::Input::CallbackStatus callback, std::      TriggerOnChange(ControllerTriggerType::Button, true);  } -void EmulatedController::SetStick(Common::Input::CallbackStatus callback, std::size_t index, +void EmulatedController::SetStick(const Common::Input::CallbackStatus& callback, std::size_t index,                                    Common::UUID uuid) {      if (index >= controller.stick_values.size()) {          return; @@ -650,8 +661,8 @@ void EmulatedController::SetStick(Common::Input::CallbackStatus callback, std::s      TriggerOnChange(ControllerTriggerType::Stick, true);  } -void EmulatedController::SetTrigger(Common::Input::CallbackStatus callback, std::size_t index, -                                    Common::UUID uuid) { +void EmulatedController::SetTrigger(const Common::Input::CallbackStatus& callback, +                                    std::size_t index, Common::UUID uuid) {      if (index >= controller.trigger_values.size()) {          return;      } @@ -659,7 +670,7 @@ void EmulatedController::SetTrigger(Common::Input::CallbackStatus callback, std:      const auto trigger_value = TransformToTrigger(callback);      // Only read trigger values that have the same uuid or are pressed once -    if (controller.stick_values[index].uuid != uuid) { +    if (controller.trigger_values[index].uuid != uuid) {          if (!trigger_value.pressed.value) {              return;          } @@ -675,7 +686,7 @@ void EmulatedController::SetTrigger(Common::Input::CallbackStatus callback, std:          return;      } -    const auto trigger = controller.trigger_values[index]; +    const auto& trigger = controller.trigger_values[index];      switch (index) {      case Settings::NativeTrigger::LTrigger: @@ -692,7 +703,8 @@ void EmulatedController::SetTrigger(Common::Input::CallbackStatus callback, std:      TriggerOnChange(ControllerTriggerType::Trigger, true);  } -void EmulatedController::SetMotion(Common::Input::CallbackStatus callback, std::size_t index) { +void EmulatedController::SetMotion(const Common::Input::CallbackStatus& callback, +                                   std::size_t index) {      if (index >= controller.motion_values.size()) {          return;      } @@ -730,7 +742,8 @@ void EmulatedController::SetMotion(Common::Input::CallbackStatus callback, std::      TriggerOnChange(ControllerTriggerType::Motion, true);  } -void EmulatedController::SetBattery(Common::Input::CallbackStatus callback, std::size_t index) { +void EmulatedController::SetBattery(const Common::Input::CallbackStatus& callback, +                                    std::size_t index) {      if (index >= controller.battery_values.size()) {          return;      } @@ -1110,7 +1123,7 @@ void EmulatedController::TriggerOnChange(ControllerTriggerType type, bool is_npa  int EmulatedController::SetCallback(ControllerUpdateCallback update_callback) {      std::lock_guard lock{mutex}; -    callback_list.insert_or_assign(last_callback_key, update_callback); +    callback_list.insert_or_assign(last_callback_key, std::move(update_callback));      return last_callback_key++;  } diff --git a/src/core/hid/emulated_controller.h b/src/core/hid/emulated_controller.h index 425b3e7c4..e42aafebc 100644 --- a/src/core/hid/emulated_controller.h +++ b/src/core/hid/emulated_controller.h @@ -328,35 +328,38 @@ private:       * @param callback A CallbackStatus containing the button status       * @param index Button ID of the to be updated       */ -    void SetButton(Common::Input::CallbackStatus callback, std::size_t index, Common::UUID uuid); +    void SetButton(const Common::Input::CallbackStatus& callback, std::size_t index, +                   Common::UUID uuid);      /**       * Updates the analog stick status of the controller       * @param callback A CallbackStatus containing the analog stick status       * @param index stick ID of the to be updated       */ -    void SetStick(Common::Input::CallbackStatus callback, std::size_t index, Common::UUID uuid); +    void SetStick(const Common::Input::CallbackStatus& callback, std::size_t index, +                  Common::UUID uuid);      /**       * Updates the trigger status of the controller       * @param callback A CallbackStatus containing the trigger status       * @param index trigger ID of the to be updated       */ -    void SetTrigger(Common::Input::CallbackStatus callback, std::size_t index, Common::UUID uuid); +    void SetTrigger(const Common::Input::CallbackStatus& callback, std::size_t index, +                    Common::UUID uuid);      /**       * Updates the motion status of the controller       * @param callback A CallbackStatus containing gyro and accelerometer data       * @param index motion ID of the to be updated       */ -    void SetMotion(Common::Input::CallbackStatus callback, std::size_t index); +    void SetMotion(const Common::Input::CallbackStatus& callback, std::size_t index);      /**       * Updates the battery status of the controller       * @param callback A CallbackStatus containing the battery status       * @param index Button ID of the to be updated       */ -    void SetBattery(Common::Input::CallbackStatus callback, std::size_t index); +    void SetBattery(const Common::Input::CallbackStatus& callback, std::size_t index);      /**       * Triggers a callback that something has changed on the controller status diff --git a/src/core/hid/emulated_devices.cpp b/src/core/hid/emulated_devices.cpp index 874780ec2..708480f2d 100644 --- a/src/core/hid/emulated_devices.cpp +++ b/src/core/hid/emulated_devices.cpp @@ -70,50 +70,55 @@ void EmulatedDevices::ReloadInput() {          if (!mouse_button_devices[index]) {              continue;          } -        Common::Input::InputCallback button_callback{ -            [this, index](Common::Input::CallbackStatus callback) { -                SetMouseButton(callback, index); -            }}; -        mouse_button_devices[index]->SetCallback(button_callback); +        mouse_button_devices[index]->SetCallback({ +            .on_change = +                [this, index](const Common::Input::CallbackStatus& callback) { +                    SetMouseButton(callback, index); +                }, +        });      }      for (std::size_t index = 0; index < mouse_analog_devices.size(); ++index) {          if (!mouse_analog_devices[index]) {              continue;          } -        Common::Input::InputCallback button_callback{ -            [this, index](Common::Input::CallbackStatus callback) { -                SetMouseAnalog(callback, index); -            }}; -        mouse_analog_devices[index]->SetCallback(button_callback); +        mouse_analog_devices[index]->SetCallback({ +            .on_change = +                [this, index](const Common::Input::CallbackStatus& callback) { +                    SetMouseAnalog(callback, index); +                }, +        });      }      if (mouse_stick_device) { -        Common::Input::InputCallback button_callback{ -            [this](Common::Input::CallbackStatus callback) { SetMouseStick(callback); }}; -        mouse_stick_device->SetCallback(button_callback); +        mouse_stick_device->SetCallback({ +            .on_change = +                [this](const Common::Input::CallbackStatus& callback) { SetMouseStick(callback); }, +        });      }      for (std::size_t index = 0; index < keyboard_devices.size(); ++index) {          if (!keyboard_devices[index]) {              continue;          } -        Common::Input::InputCallback button_callback{ -            [this, index](Common::Input::CallbackStatus callback) { -                SetKeyboardButton(callback, index); -            }}; -        keyboard_devices[index]->SetCallback(button_callback); +        keyboard_devices[index]->SetCallback({ +            .on_change = +                [this, index](const Common::Input::CallbackStatus& callback) { +                    SetKeyboardButton(callback, index); +                }, +        });      }      for (std::size_t index = 0; index < keyboard_modifier_devices.size(); ++index) {          if (!keyboard_modifier_devices[index]) {              continue;          } -        Common::Input::InputCallback button_callback{ -            [this, index](Common::Input::CallbackStatus callback) { -                SetKeyboardModifier(callback, index); -            }}; -        keyboard_modifier_devices[index]->SetCallback(button_callback); +        keyboard_modifier_devices[index]->SetCallback({ +            .on_change = +                [this, index](const Common::Input::CallbackStatus& callback) { +                    SetKeyboardModifier(callback, index); +                }, +        });      }  } @@ -159,7 +164,8 @@ void EmulatedDevices::RestoreConfig() {      ReloadFromSettings();  } -void EmulatedDevices::SetKeyboardButton(Common::Input::CallbackStatus callback, std::size_t index) { +void EmulatedDevices::SetKeyboardButton(const Common::Input::CallbackStatus& callback, +                                        std::size_t index) {      if (index >= device_status.keyboard_values.size()) {          return;      } @@ -216,7 +222,7 @@ void EmulatedDevices::UpdateKey(std::size_t key_index, bool status) {      }  } -void EmulatedDevices::SetKeyboardModifier(Common::Input::CallbackStatus callback, +void EmulatedDevices::SetKeyboardModifier(const Common::Input::CallbackStatus& callback,                                            std::size_t index) {      if (index >= device_status.keyboard_moddifier_values.size()) {          return; @@ -286,7 +292,8 @@ void EmulatedDevices::SetKeyboardModifier(Common::Input::CallbackStatus callback      TriggerOnChange(DeviceTriggerType::KeyboardModdifier);  } -void EmulatedDevices::SetMouseButton(Common::Input::CallbackStatus callback, std::size_t index) { +void EmulatedDevices::SetMouseButton(const Common::Input::CallbackStatus& callback, +                                     std::size_t index) {      if (index >= device_status.mouse_button_values.size()) {          return;      } @@ -347,7 +354,8 @@ void EmulatedDevices::SetMouseButton(Common::Input::CallbackStatus callback, std      TriggerOnChange(DeviceTriggerType::Mouse);  } -void EmulatedDevices::SetMouseAnalog(Common::Input::CallbackStatus callback, std::size_t index) { +void EmulatedDevices::SetMouseAnalog(const Common::Input::CallbackStatus& callback, +                                     std::size_t index) {      if (index >= device_status.mouse_analog_values.size()) {          return;      } @@ -374,7 +382,7 @@ void EmulatedDevices::SetMouseAnalog(Common::Input::CallbackStatus callback, std      TriggerOnChange(DeviceTriggerType::Mouse);  } -void EmulatedDevices::SetMouseStick(Common::Input::CallbackStatus callback) { +void EmulatedDevices::SetMouseStick(const Common::Input::CallbackStatus& callback) {      std::lock_guard lock{mutex};      const auto touch_value = TransformToTouch(callback); @@ -435,7 +443,7 @@ void EmulatedDevices::TriggerOnChange(DeviceTriggerType type) {  int EmulatedDevices::SetCallback(InterfaceUpdateCallback update_callback) {      std::lock_guard lock{mutex}; -    callback_list.insert_or_assign(last_callback_key, update_callback); +    callback_list.insert_or_assign(last_callback_key, std::move(update_callback));      return last_callback_key++;  } diff --git a/src/core/hid/emulated_devices.h b/src/core/hid/emulated_devices.h index c72327681..790d3b411 100644 --- a/src/core/hid/emulated_devices.h +++ b/src/core/hid/emulated_devices.h @@ -156,35 +156,34 @@ private:       * @param callback A CallbackStatus containing the key status       * @param index key ID to be updated       */ -    void SetKeyboardButton(Common::Input::CallbackStatus callback, std::size_t index); +    void SetKeyboardButton(const Common::Input::CallbackStatus& callback, std::size_t index);      /**       * Updates the keyboard status of the keyboard device       * @param callback A CallbackStatus containing the modifier key status       * @param index modifier key ID to be updated       */ -    void SetKeyboardModifier(Common::Input::CallbackStatus callback, std::size_t index); +    void SetKeyboardModifier(const Common::Input::CallbackStatus& callback, std::size_t index);      /**       * Updates the mouse button status of the mouse device       * @param callback A CallbackStatus containing the button status       * @param index Button ID to be updated       */ -    void SetMouseButton(Common::Input::CallbackStatus callback, std::size_t index); +    void SetMouseButton(const Common::Input::CallbackStatus& callback, std::size_t index);      /**       * Updates the mouse wheel status of the mouse device       * @param callback A CallbackStatus containing the wheel status       * @param index wheel ID to be updated       */ -    void SetMouseAnalog(Common::Input::CallbackStatus callback, std::size_t index); +    void SetMouseAnalog(const Common::Input::CallbackStatus& callback, std::size_t index);      /**       * Updates the mouse position status of the mouse device       * @param callback A CallbackStatus containing the position status -     * @param index stick ID to be updated       */ -    void SetMouseStick(Common::Input::CallbackStatus callback); +    void SetMouseStick(const Common::Input::CallbackStatus& callback);      /**       * Triggers a callback that something has changed on the device status diff --git a/src/input_common/drivers/gc_adapter.cpp b/src/input_common/drivers/gc_adapter.cpp index 8b6574223..7ab4540a8 100644 --- a/src/input_common/drivers/gc_adapter.cpp +++ b/src/input_common/drivers/gc_adapter.cpp @@ -69,7 +69,7 @@ private:      libusb_device_handle* handle{};  }; -GCAdapter::GCAdapter(const std::string& input_engine_) : InputEngine(input_engine_) { +GCAdapter::GCAdapter(std::string input_engine_) : InputEngine(std::move(input_engine_)) {      if (usb_adapter_handle) {          return;      } @@ -325,8 +325,8 @@ bool GCAdapter::GetGCEndpoint(libusb_device* device) {      return true;  } -Common::Input::VibrationError GCAdapter::SetRumble(const PadIdentifier& identifier, -                                                   const Common::Input::VibrationStatus vibration) { +Common::Input::VibrationError GCAdapter::SetRumble( +    const PadIdentifier& identifier, const Common::Input::VibrationStatus& vibration) {      const auto mean_amplitude = (vibration.low_amplitude + vibration.high_amplitude) * 0.5f;      const auto processed_amplitude =          static_cast<u8>((mean_amplitude + std::pow(mean_amplitude, 0.3f)) * 0.5f * 0x8); diff --git a/src/input_common/drivers/gc_adapter.h b/src/input_common/drivers/gc_adapter.h index 8dc51d2e5..7ce1912a3 100644 --- a/src/input_common/drivers/gc_adapter.h +++ b/src/input_common/drivers/gc_adapter.h @@ -22,13 +22,13 @@ namespace InputCommon {  class LibUSBContext;  class LibUSBDeviceHandle; -class GCAdapter : public InputCommon::InputEngine { +class GCAdapter : public InputEngine {  public: -    explicit GCAdapter(const std::string& input_engine_); -    ~GCAdapter(); +    explicit GCAdapter(std::string input_engine_); +    ~GCAdapter() override;      Common::Input::VibrationError SetRumble( -        const PadIdentifier& identifier, const Common::Input::VibrationStatus vibration) override; +        const PadIdentifier& identifier, const Common::Input::VibrationStatus& vibration) override;      /// Used for automapping features      std::vector<Common::ParamPackage> GetInputDevices() const override; diff --git a/src/input_common/drivers/keyboard.cpp b/src/input_common/drivers/keyboard.cpp index 23b0c0ccf..4c1e5bbec 100644 --- a/src/input_common/drivers/keyboard.cpp +++ b/src/input_common/drivers/keyboard.cpp @@ -24,7 +24,7 @@ constexpr PadIdentifier keyboard_modifier_identifier = {      .pad = 1,  }; -Keyboard::Keyboard(const std::string& input_engine_) : InputEngine(input_engine_) { +Keyboard::Keyboard(std::string input_engine_) : InputEngine(std::move(input_engine_)) {      // Keyboard is broken into 3 diferent sets:      // key: Unfiltered intended for controllers.      // keyboard_key: Allows only Settings::NativeKeyboard::Keys intended for keyboard emulation. diff --git a/src/input_common/drivers/keyboard.h b/src/input_common/drivers/keyboard.h index ad123b136..3856c882c 100644 --- a/src/input_common/drivers/keyboard.h +++ b/src/input_common/drivers/keyboard.h @@ -12,9 +12,9 @@ namespace InputCommon {   * A button device factory representing a keyboard. It receives keyboard events and forward them   * to all button devices it created.   */ -class Keyboard final : public InputCommon::InputEngine { +class Keyboard final : public InputEngine {  public: -    explicit Keyboard(const std::string& input_engine_); +    explicit Keyboard(std::string input_engine_);      /**       * Sets the status of all buttons bound with the key to pressed diff --git a/src/input_common/drivers/mouse.cpp b/src/input_common/drivers/mouse.cpp index 752118e97..aa69216c8 100644 --- a/src/input_common/drivers/mouse.cpp +++ b/src/input_common/drivers/mouse.cpp @@ -24,7 +24,7 @@ constexpr PadIdentifier identifier = {      .pad = 0,  }; -Mouse::Mouse(const std::string& input_engine_) : InputEngine(input_engine_) { +Mouse::Mouse(std::string input_engine_) : InputEngine(std::move(input_engine_)) {      PreSetController(identifier);      PreSetAxis(identifier, mouse_axis_x);      PreSetAxis(identifier, mouse_axis_y); diff --git a/src/input_common/drivers/mouse.h b/src/input_common/drivers/mouse.h index 4a1fd2fd9..040446178 100644 --- a/src/input_common/drivers/mouse.h +++ b/src/input_common/drivers/mouse.h @@ -27,9 +27,9 @@ enum class MouseButton {   * A button device factory representing a keyboard. It receives keyboard events and forward them   * to all button devices it created.   */ -class Mouse final : public InputCommon::InputEngine { +class Mouse final : public InputEngine {  public: -    explicit Mouse(const std::string& input_engine_); +    explicit Mouse(std::string input_engine_);      /**       * Signals that mouse has moved. diff --git a/src/input_common/drivers/sdl_driver.cpp b/src/input_common/drivers/sdl_driver.cpp index 1052ed394..0cda9df62 100644 --- a/src/input_common/drivers/sdl_driver.cpp +++ b/src/input_common/drivers/sdl_driver.cpp @@ -88,7 +88,7 @@ public:          return true;      } -    BasicMotion GetMotion() { +    const BasicMotion& GetMotion() const {          return motion;      } @@ -367,7 +367,7 @@ void SDLDriver::HandleGameControllerEvent(const SDL_Event& event) {              if (joystick->UpdateMotion(event.csensor)) {                  const PadIdentifier identifier = joystick->GetPadIdentifier();                  SetMotion(identifier, 0, joystick->GetMotion()); -            }; +            }          }          break;      } @@ -387,7 +387,7 @@ void SDLDriver::CloseJoysticks() {      joystick_map.clear();  } -SDLDriver::SDLDriver(const std::string& input_engine_) : InputEngine(input_engine_) { +SDLDriver::SDLDriver(std::string input_engine_) : InputEngine(std::move(input_engine_)) {      if (!Settings::values.enable_raw_input) {          // Disable raw input. When enabled this setting causes SDL to die when a web applet opens          SDL_SetHint(SDL_HINT_JOYSTICK_RAWINPUT, "0"); @@ -403,10 +403,11 @@ SDLDriver::SDLDriver(const std::string& input_engine_) : InputEngine(input_engin      // Use hidapi driver for joycons. This will allow joycons to be detected as a GameController and      // not a generic one -    SDL_SetHint("SDL_JOYSTICK_HIDAPI_JOY_CONS", "1"); +    SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS, "1"); -    // Turn off Pro controller home led -    SDL_SetHint("SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED", "0"); +    // Disable hidapi driver for xbox. Already default on Windows, this causes conflict with native +    // driver on Linux. +    SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_XBOX, "0");      // If the frontend is going to manage the event loop, then we don't start one here      start_thread = SDL_WasInit(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER) == 0; @@ -491,8 +492,9 @@ std::vector<Common::ParamPackage> SDLDriver::GetInputDevices() const {      }      return devices;  } -Common::Input::VibrationError SDLDriver::SetRumble(const PadIdentifier& identifier, -                                                   const Common::Input::VibrationStatus vibration) { + +Common::Input::VibrationError SDLDriver::SetRumble( +    const PadIdentifier& identifier, const Common::Input::VibrationStatus& vibration) {      const auto joystick =          GetSDLJoystickByGUID(identifier.guid.Format(), static_cast<int>(identifier.port));      const auto process_amplitude_exp = [](f32 amplitude, f32 factor) { @@ -526,6 +528,7 @@ Common::Input::VibrationError SDLDriver::SetRumble(const PadIdentifier& identifi      return Common::Input::VibrationError::None;  } +  Common::ParamPackage SDLDriver::BuildAnalogParamPackageForButton(int port, std::string guid,                                                                   s32 axis, float value) const {      Common::ParamPackage params{}; diff --git a/src/input_common/drivers/sdl_driver.h b/src/input_common/drivers/sdl_driver.h index d03ff4b84..e9a5d2e26 100644 --- a/src/input_common/drivers/sdl_driver.h +++ b/src/input_common/drivers/sdl_driver.h @@ -19,19 +19,19 @@ using SDL_GameController = struct _SDL_GameController;  using SDL_Joystick = struct _SDL_Joystick;  using SDL_JoystickID = s32; +namespace InputCommon { + +class SDLJoystick; +  using ButtonBindings =      std::array<std::pair<Settings::NativeButton::Values, SDL_GameControllerButton>, 17>;  using ZButtonBindings =      std::array<std::pair<Settings::NativeButton::Values, SDL_GameControllerAxis>, 2>; -namespace InputCommon { - -class SDLJoystick; - -class SDLDriver : public InputCommon::InputEngine { +class SDLDriver : public InputEngine {  public:      /// Initializes and registers SDL device factories -    SDLDriver(const std::string& input_engine_); +    explicit SDLDriver(std::string input_engine_);      /// Unregisters SDL device factories and shut them down.      ~SDLDriver() override; @@ -59,7 +59,7 @@ public:      u8 GetHatButtonId(const std::string& direction_name) const override;      Common::Input::VibrationError SetRumble( -        const PadIdentifier& identifier, const Common::Input::VibrationStatus vibration) override; +        const PadIdentifier& identifier, const Common::Input::VibrationStatus& vibration) override;  private:      void InitJoystick(int joystick_index); diff --git a/src/input_common/drivers/tas_input.cpp b/src/input_common/drivers/tas_input.cpp index 2094c1feb..5bdd5dac3 100644 --- a/src/input_common/drivers/tas_input.cpp +++ b/src/input_common/drivers/tas_input.cpp @@ -46,7 +46,7 @@ constexpr std::array<std::pair<std::string_view, TasButton>, 20> text_to_tas_but      {"KEY_ZR", TasButton::TRIGGER_ZR},  }; -Tas::Tas(const std::string& input_engine_) : InputCommon::InputEngine(input_engine_) { +Tas::Tas(std::string input_engine_) : InputEngine(std::move(input_engine_)) {      for (size_t player_index = 0; player_index < PLAYER_NUMBER; player_index++) {          PadIdentifier identifier{              .guid = Common::UUID{}, diff --git a/src/input_common/drivers/tas_input.h b/src/input_common/drivers/tas_input.h index 3996fe3a8..4b4e6c417 100644 --- a/src/input_common/drivers/tas_input.h +++ b/src/input_common/drivers/tas_input.h @@ -81,10 +81,10 @@ enum class TasState {      Stopped,  }; -class Tas final : public InputCommon::InputEngine { +class Tas final : public InputEngine {  public: -    explicit Tas(const std::string& input_engine_); -    ~Tas(); +    explicit Tas(std::string input_engine_); +    ~Tas() override;      /**       * Changes the input status that will be stored in each frame diff --git a/src/input_common/drivers/touch_screen.cpp b/src/input_common/drivers/touch_screen.cpp index 45b3086f6..880781825 100644 --- a/src/input_common/drivers/touch_screen.cpp +++ b/src/input_common/drivers/touch_screen.cpp @@ -13,7 +13,7 @@ constexpr PadIdentifier identifier = {      .pad = 0,  }; -TouchScreen::TouchScreen(const std::string& input_engine_) : InputEngine(input_engine_) { +TouchScreen::TouchScreen(std::string input_engine_) : InputEngine(std::move(input_engine_)) {      PreSetController(identifier);  } diff --git a/src/input_common/drivers/touch_screen.h b/src/input_common/drivers/touch_screen.h index 25c11e8bf..bf395c40b 100644 --- a/src/input_common/drivers/touch_screen.h +++ b/src/input_common/drivers/touch_screen.h @@ -12,9 +12,9 @@ namespace InputCommon {   * A button device factory representing a keyboard. It receives keyboard events and forward them   * to all button devices it created.   */ -class TouchScreen final : public InputCommon::InputEngine { +class TouchScreen final : public InputEngine {  public: -    explicit TouchScreen(const std::string& input_engine_); +    explicit TouchScreen(std::string input_engine_);      /**       * Signals that mouse has moved. diff --git a/src/input_common/drivers/udp_client.cpp b/src/input_common/drivers/udp_client.cpp index fdee0f2d5..4ab991a7d 100644 --- a/src/input_common/drivers/udp_client.cpp +++ b/src/input_common/drivers/udp_client.cpp @@ -136,7 +136,7 @@ static void SocketLoop(Socket* socket) {      socket->Loop();  } -UDPClient::UDPClient(const std::string& input_engine_) : InputEngine(input_engine_) { +UDPClient::UDPClient(std::string input_engine_) : InputEngine(std::move(input_engine_)) {      LOG_INFO(Input, "Udp Initialization started");      ReloadSockets();  } diff --git a/src/input_common/drivers/udp_client.h b/src/input_common/drivers/udp_client.h index 5d483f26b..1adc947c4 100644 --- a/src/input_common/drivers/udp_client.h +++ b/src/input_common/drivers/udp_client.h @@ -49,10 +49,10 @@ struct DeviceStatus {   * A button device factory representing a keyboard. It receives keyboard events and forward them   * to all button devices it created.   */ -class UDPClient final : public InputCommon::InputEngine { +class UDPClient final : public InputEngine {  public: -    explicit UDPClient(const std::string& input_engine_); -    ~UDPClient(); +    explicit UDPClient(std::string input_engine_); +    ~UDPClient() override;      void ReloadSockets(); diff --git a/src/input_common/helpers/stick_from_buttons.cpp b/src/input_common/helpers/stick_from_buttons.cpp index 77fcd655e..e23394f5f 100644 --- a/src/input_common/helpers/stick_from_buttons.cpp +++ b/src/input_common/helpers/stick_from_buttons.cpp @@ -19,23 +19,36 @@ public:          : up(std::move(up_)), down(std::move(down_)), left(std::move(left_)),            right(std::move(right_)), modifier(std::move(modifier_)), modifier_scale(modifier_scale_),            modifier_angle(modifier_angle_) { -        Common::Input::InputCallback button_up_callback{ -            [this](Common::Input::CallbackStatus callback_) { UpdateUpButtonStatus(callback_); }}; -        Common::Input::InputCallback button_down_callback{ -            [this](Common::Input::CallbackStatus callback_) { UpdateDownButtonStatus(callback_); }}; -        Common::Input::InputCallback button_left_callback{ -            [this](Common::Input::CallbackStatus callback_) { UpdateLeftButtonStatus(callback_); }}; -        Common::Input::InputCallback button_right_callback{ -            [this](Common::Input::CallbackStatus callback_) { -                UpdateRightButtonStatus(callback_); -            }}; -        Common::Input::InputCallback button_modifier_callback{ -            [this](Common::Input::CallbackStatus callback_) { UpdateModButtonStatus(callback_); }}; -        up->SetCallback(button_up_callback); -        down->SetCallback(button_down_callback); -        left->SetCallback(button_left_callback); -        right->SetCallback(button_right_callback); -        modifier->SetCallback(button_modifier_callback); +        up->SetCallback({ +            .on_change = +                [this](const Common::Input::CallbackStatus& callback_) { +                    UpdateUpButtonStatus(callback_); +                }, +        }); +        down->SetCallback({ +            .on_change = +                [this](const Common::Input::CallbackStatus& callback_) { +                    UpdateDownButtonStatus(callback_); +                }, +        }); +        left->SetCallback({ +            .on_change = +                [this](const Common::Input::CallbackStatus& callback_) { +                    UpdateLeftButtonStatus(callback_); +                }, +        }); +        right->SetCallback({ +            .on_change = +                [this](const Common::Input::CallbackStatus& callback_) { +                    UpdateRightButtonStatus(callback_); +                }, +        }); +        modifier->SetCallback({ +            .on_change = +                [this](const Common::Input::CallbackStatus& callback_) { +                    UpdateModButtonStatus(callback_); +                }, +        });          last_x_axis_value = 0.0f;          last_y_axis_value = 0.0f;      } @@ -133,27 +146,27 @@ public:          }      } -    void UpdateUpButtonStatus(Common::Input::CallbackStatus button_callback) { +    void UpdateUpButtonStatus(const Common::Input::CallbackStatus& button_callback) {          up_status = button_callback.button_status.value;          UpdateStatus();      } -    void UpdateDownButtonStatus(Common::Input::CallbackStatus button_callback) { +    void UpdateDownButtonStatus(const Common::Input::CallbackStatus& button_callback) {          down_status = button_callback.button_status.value;          UpdateStatus();      } -    void UpdateLeftButtonStatus(Common::Input::CallbackStatus button_callback) { +    void UpdateLeftButtonStatus(const Common::Input::CallbackStatus& button_callback) {          left_status = button_callback.button_status.value;          UpdateStatus();      } -    void UpdateRightButtonStatus(Common::Input::CallbackStatus button_callback) { +    void UpdateRightButtonStatus(const Common::Input::CallbackStatus& button_callback) {          right_status = button_callback.button_status.value;          UpdateStatus();      } -    void UpdateModButtonStatus(Common::Input::CallbackStatus button_callback) { +    void UpdateModButtonStatus(const Common::Input::CallbackStatus& button_callback) {          modifier_status = button_callback.button_status.value;          UpdateStatus();      } @@ -265,18 +278,18 @@ private:      Button left;      Button right;      Button modifier; -    float modifier_scale; -    float modifier_angle; +    float modifier_scale{}; +    float modifier_angle{};      float angle{};      float goal_angle{};      float amplitude{}; -    bool up_status; -    bool down_status; -    bool left_status; -    bool right_status; -    bool modifier_status; -    float last_x_axis_value; -    float last_y_axis_value; +    bool up_status{}; +    bool down_status{}; +    bool left_status{}; +    bool right_status{}; +    bool modifier_status{}; +    float last_x_axis_value{}; +    float last_y_axis_value{};      const Common::Input::AnalogProperties properties{0.0f, 1.0f, 0.5f, 0.0f, false};      std::chrono::time_point<std::chrono::steady_clock> last_update;  }; diff --git a/src/input_common/helpers/touch_from_buttons.cpp b/src/input_common/helpers/touch_from_buttons.cpp index 35d60bc90..ece1e3b32 100644 --- a/src/input_common/helpers/touch_from_buttons.cpp +++ b/src/input_common/helpers/touch_from_buttons.cpp @@ -14,10 +14,13 @@ public:      using Button = std::unique_ptr<Common::Input::InputDevice>;      TouchFromButtonDevice(Button button_, int touch_id_, float x_, float y_)          : button(std::move(button_)), touch_id(touch_id_), x(x_), y(y_) { -        Common::Input::InputCallback button_up_callback{ -            [this](Common::Input::CallbackStatus callback_) { UpdateButtonStatus(callback_); }};          last_button_value = false; -        button->SetCallback(button_up_callback); +        button->SetCallback({ +            .on_change = +                [this](const Common::Input::CallbackStatus& callback_) { +                    UpdateButtonStatus(callback_); +                }, +        });          button->ForceUpdate();      } @@ -47,7 +50,7 @@ public:          return status;      } -    void UpdateButtonStatus(Common::Input::CallbackStatus button_callback) { +    void UpdateButtonStatus(const Common::Input::CallbackStatus& button_callback) {          const Common::Input::CallbackStatus status{              .type = Common::Input::InputType::Touch,              .touch_status = GetStatus(button_callback.button_status.value), diff --git a/src/input_common/input_engine.cpp b/src/input_common/input_engine.cpp index 2b2105376..9c17ca4f7 100644 --- a/src/input_common/input_engine.cpp +++ b/src/input_common/input_engine.cpp @@ -10,41 +10,31 @@ namespace InputCommon {  void InputEngine::PreSetController(const PadIdentifier& identifier) {      std::lock_guard lock{mutex}; -    if (!controller_list.contains(identifier)) { -        controller_list.insert_or_assign(identifier, ControllerData{}); -    } +    controller_list.try_emplace(identifier);  }  void InputEngine::PreSetButton(const PadIdentifier& identifier, int button) {      std::lock_guard lock{mutex};      ControllerData& controller = controller_list.at(identifier); -    if (!controller.buttons.contains(button)) { -        controller.buttons.insert_or_assign(button, false); -    } +    controller.buttons.try_emplace(button, false);  }  void InputEngine::PreSetHatButton(const PadIdentifier& identifier, int button) {      std::lock_guard lock{mutex};      ControllerData& controller = controller_list.at(identifier); -    if (!controller.hat_buttons.contains(button)) { -        controller.hat_buttons.insert_or_assign(button, u8{0}); -    } +    controller.hat_buttons.try_emplace(button, u8{0});  }  void InputEngine::PreSetAxis(const PadIdentifier& identifier, int axis) {      std::lock_guard lock{mutex};      ControllerData& controller = controller_list.at(identifier); -    if (!controller.axes.contains(axis)) { -        controller.axes.insert_or_assign(axis, 0.0f); -    } +    controller.axes.try_emplace(axis, 0.0f);  }  void InputEngine::PreSetMotion(const PadIdentifier& identifier, int motion) {      std::lock_guard lock{mutex};      ControllerData& controller = controller_list.at(identifier); -    if (!controller.motions.contains(motion)) { -        controller.motions.insert_or_assign(motion, BasicMotion{}); -    } +    controller.motions.try_emplace(motion);  }  void InputEngine::SetButton(const PadIdentifier& identifier, int button, bool value) { @@ -91,7 +81,7 @@ void InputEngine::SetBattery(const PadIdentifier& identifier, BatteryLevel value      TriggerOnBatteryChange(identifier, value);  } -void InputEngine::SetMotion(const PadIdentifier& identifier, int motion, BasicMotion value) { +void InputEngine::SetMotion(const PadIdentifier& identifier, int motion, const BasicMotion& value) {      {          std::lock_guard lock{mutex};          ControllerData& controller = controller_list.at(identifier); @@ -104,85 +94,93 @@ void InputEngine::SetMotion(const PadIdentifier& identifier, int motion, BasicMo  bool InputEngine::GetButton(const PadIdentifier& identifier, int button) const {      std::lock_guard lock{mutex}; -    if (!controller_list.contains(identifier)) { +    const auto controller_iter = controller_list.find(identifier); +    if (controller_iter == controller_list.cend()) {          LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(),                    identifier.pad, identifier.port);          return false;      } -    ControllerData controller = controller_list.at(identifier); -    if (!controller.buttons.contains(button)) { +    const ControllerData& controller = controller_iter->second; +    const auto button_iter = controller.buttons.find(button); +    if (button_iter == controller.buttons.cend()) {          LOG_ERROR(Input, "Invalid button {}", button);          return false;      } -    return controller.buttons.at(button); +    return button_iter->second;  }  bool InputEngine::GetHatButton(const PadIdentifier& identifier, int button, u8 direction) const {      std::lock_guard lock{mutex}; -    if (!controller_list.contains(identifier)) { +    const auto controller_iter = controller_list.find(identifier); +    if (controller_iter == controller_list.cend()) {          LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(),                    identifier.pad, identifier.port);          return false;      } -    ControllerData controller = controller_list.at(identifier); -    if (!controller.hat_buttons.contains(button)) { +    const ControllerData& controller = controller_iter->second; +    const auto hat_iter = controller.hat_buttons.find(button); +    if (hat_iter == controller.hat_buttons.cend()) {          LOG_ERROR(Input, "Invalid hat button {}", button);          return false;      } -    return (controller.hat_buttons.at(button) & direction) != 0; +    return (hat_iter->second & direction) != 0;  }  f32 InputEngine::GetAxis(const PadIdentifier& identifier, int axis) const {      std::lock_guard lock{mutex}; -    if (!controller_list.contains(identifier)) { +    const auto controller_iter = controller_list.find(identifier); +    if (controller_iter == controller_list.cend()) {          LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(),                    identifier.pad, identifier.port);          return 0.0f;      } -    ControllerData controller = controller_list.at(identifier); -    if (!controller.axes.contains(axis)) { +    const ControllerData& controller = controller_iter->second; +    const auto axis_iter = controller.axes.find(axis); +    if (axis_iter == controller.axes.cend()) {          LOG_ERROR(Input, "Invalid axis {}", axis);          return 0.0f;      } -    return controller.axes.at(axis); +    return axis_iter->second;  }  BatteryLevel InputEngine::GetBattery(const PadIdentifier& identifier) const {      std::lock_guard lock{mutex}; -    if (!controller_list.contains(identifier)) { +    const auto controller_iter = controller_list.find(identifier); +    if (controller_iter == controller_list.cend()) {          LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(),                    identifier.pad, identifier.port);          return BatteryLevel::Charging;      } -    ControllerData controller = controller_list.at(identifier); +    const ControllerData& controller = controller_iter->second;      return controller.battery;  }  BasicMotion InputEngine::GetMotion(const PadIdentifier& identifier, int motion) const {      std::lock_guard lock{mutex}; -    if (!controller_list.contains(identifier)) { +    const auto controller_iter = controller_list.find(identifier); +    if (controller_iter == controller_list.cend()) {          LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.Format(),                    identifier.pad, identifier.port);          return {};      } -    ControllerData controller = controller_list.at(identifier); +    const ControllerData& controller = controller_iter->second;      return controller.motions.at(motion);  }  void InputEngine::ResetButtonState() { -    for (std::pair<PadIdentifier, ControllerData> controller : controller_list) { -        for (std::pair<int, bool> button : controller.second.buttons) { +    for (const auto& controller : controller_list) { +        for (const auto& button : controller.second.buttons) {              SetButton(controller.first, button.first, false);          } -        for (std::pair<int, bool> button : controller.second.hat_buttons) { +        for (const auto& button : controller.second.hat_buttons) {              SetHatButton(controller.first, button.first, false);          }      }  }  void InputEngine::ResetAnalogState() { -    for (std::pair<PadIdentifier, ControllerData> controller : controller_list) { -        for (std::pair<int, float> axis : controller.second.axes) { +    for (const auto& controller : controller_list) { +        for (const auto& axis : controller.second.axes) {              SetAxis(controller.first, axis.first, 0.0);          }      } @@ -190,7 +188,7 @@ void InputEngine::ResetAnalogState() {  void InputEngine::TriggerOnButtonChange(const PadIdentifier& identifier, int button, bool value) {      std::lock_guard lock{mutex_callback}; -    for (const std::pair<int, InputIdentifier> poller_pair : callback_list) { +    for (const auto& poller_pair : callback_list) {          const InputIdentifier& poller = poller_pair.second;          if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Button, button)) {              continue; @@ -218,7 +216,7 @@ void InputEngine::TriggerOnButtonChange(const PadIdentifier& identifier, int but  void InputEngine::TriggerOnHatButtonChange(const PadIdentifier& identifier, int button, u8 value) {      std::lock_guard lock{mutex_callback}; -    for (const std::pair<int, InputIdentifier> poller_pair : callback_list) { +    for (const auto& poller_pair : callback_list) {          const InputIdentifier& poller = poller_pair.second;          if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::HatButton, button)) {              continue; @@ -247,7 +245,7 @@ void InputEngine::TriggerOnHatButtonChange(const PadIdentifier& identifier, int  void InputEngine::TriggerOnAxisChange(const PadIdentifier& identifier, int axis, f32 value) {      std::lock_guard lock{mutex_callback}; -    for (const std::pair<int, InputIdentifier> poller_pair : callback_list) { +    for (const auto& poller_pair : callback_list) {          const InputIdentifier& poller = poller_pair.second;          if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Analog, axis)) {              continue; @@ -274,7 +272,7 @@ void InputEngine::TriggerOnAxisChange(const PadIdentifier& identifier, int axis,  void InputEngine::TriggerOnBatteryChange(const PadIdentifier& identifier,                                           [[maybe_unused]] BatteryLevel value) {      std::lock_guard lock{mutex_callback}; -    for (const std::pair<int, InputIdentifier> poller_pair : callback_list) { +    for (const auto& poller_pair : callback_list) {          const InputIdentifier& poller = poller_pair.second;          if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Battery, 0)) {              continue; @@ -286,9 +284,9 @@ void InputEngine::TriggerOnBatteryChange(const PadIdentifier& identifier,  }  void InputEngine::TriggerOnMotionChange(const PadIdentifier& identifier, int motion, -                                        BasicMotion value) { +                                        const BasicMotion& value) {      std::lock_guard lock{mutex_callback}; -    for (const std::pair<int, InputIdentifier> poller_pair : callback_list) { +    for (const auto& poller_pair : callback_list) {          const InputIdentifier& poller = poller_pair.second;          if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Motion, motion)) {              continue; @@ -342,7 +340,7 @@ const std::string& InputEngine::GetEngineName() const {  int InputEngine::SetCallback(InputIdentifier input_identifier) {      std::lock_guard lock{mutex_callback}; -    callback_list.insert_or_assign(last_callback_key, input_identifier); +    callback_list.insert_or_assign(last_callback_key, std::move(input_identifier));      return last_callback_key++;  } diff --git a/src/input_common/input_engine.h b/src/input_common/input_engine.h index 02272b3f8..390581c94 100644 --- a/src/input_common/input_engine.h +++ b/src/input_common/input_engine.h @@ -23,15 +23,15 @@ struct PadIdentifier {      friend constexpr bool operator==(const PadIdentifier&, const PadIdentifier&) = default;  }; -// Basic motion data containing data from the sensors and a timestamp in microsecons +// Basic motion data containing data from the sensors and a timestamp in microseconds  struct BasicMotion { -    float gyro_x; -    float gyro_y; -    float gyro_z; -    float accel_x; -    float accel_y; -    float accel_z; -    u64 delta_timestamp; +    float gyro_x{}; +    float gyro_y{}; +    float gyro_z{}; +    float accel_x{}; +    float accel_y{}; +    float accel_z{}; +    u64 delta_timestamp{};  };  // Stages of a battery charge @@ -102,9 +102,7 @@ struct InputIdentifier {  class InputEngine {  public: -    explicit InputEngine(const std::string& input_engine_) : input_engine(input_engine_) { -        callback_list.clear(); -    } +    explicit InputEngine(std::string input_engine_) : input_engine{std::move(input_engine_)} {}      virtual ~InputEngine() = default; @@ -116,14 +114,12 @@ public:      // Sets a led pattern for a controller      virtual void SetLeds([[maybe_unused]] const PadIdentifier& identifier, -                         [[maybe_unused]] const Common::Input::LedStatus led_status) { -        return; -    } +                         [[maybe_unused]] const Common::Input::LedStatus& led_status) {}      // Sets rumble to a controller      virtual Common::Input::VibrationError SetRumble(          [[maybe_unused]] const PadIdentifier& identifier, -        [[maybe_unused]] const Common::Input::VibrationStatus vibration) { +        [[maybe_unused]] const Common::Input::VibrationStatus& vibration) {          return Common::Input::VibrationError::NotSupported;      } @@ -140,36 +136,36 @@ public:      /// Used for automapping features      virtual std::vector<Common::ParamPackage> GetInputDevices() const {          return {}; -    }; +    }      /// Retrieves the button mappings for the given device -    virtual InputCommon::ButtonMapping GetButtonMappingForDevice( +    virtual ButtonMapping GetButtonMappingForDevice(          [[maybe_unused]] const Common::ParamPackage& params) {          return {}; -    }; +    }      /// Retrieves the analog mappings for the given device -    virtual InputCommon::AnalogMapping GetAnalogMappingForDevice( +    virtual AnalogMapping GetAnalogMappingForDevice(          [[maybe_unused]] const Common::ParamPackage& params) {          return {}; -    }; +    }      /// Retrieves the motion mappings for the given device -    virtual InputCommon::MotionMapping GetMotionMappingForDevice( +    virtual MotionMapping GetMotionMappingForDevice(          [[maybe_unused]] const Common::ParamPackage& params) {          return {}; -    }; +    }      /// Retrieves the name of the given input.      virtual Common::Input::ButtonNames GetUIName(          [[maybe_unused]] const Common::ParamPackage& params) const {          return Common::Input::ButtonNames::Engine; -    }; +    }      /// Retrieves the index number of the given hat button direction      virtual u8 GetHatButtonId([[maybe_unused]] const std::string& direction_name) const {          return 0; -    }; +    }      void PreSetController(const PadIdentifier& identifier);      void PreSetButton(const PadIdentifier& identifier, int button); @@ -194,7 +190,7 @@ protected:      void SetHatButton(const PadIdentifier& identifier, int button, u8 value);      void SetAxis(const PadIdentifier& identifier, int axis, f32 value);      void SetBattery(const PadIdentifier& identifier, BatteryLevel value); -    void SetMotion(const PadIdentifier& identifier, int motion, BasicMotion value); +    void SetMotion(const PadIdentifier& identifier, int motion, const BasicMotion& value);      virtual std::string GetHatButtonName([[maybe_unused]] u8 direction_value) const {          return "Unknown"; @@ -206,14 +202,15 @@ private:          std::unordered_map<int, u8> hat_buttons;          std::unordered_map<int, float> axes;          std::unordered_map<int, BasicMotion> motions; -        BatteryLevel battery; +        BatteryLevel battery{};      };      void TriggerOnButtonChange(const PadIdentifier& identifier, int button, bool value);      void TriggerOnHatButtonChange(const PadIdentifier& identifier, int button, u8 value); -    void TriggerOnAxisChange(const PadIdentifier& identifier, int button, f32 value); +    void TriggerOnAxisChange(const PadIdentifier& identifier, int axis, f32 value);      void TriggerOnBatteryChange(const PadIdentifier& identifier, BatteryLevel value); -    void TriggerOnMotionChange(const PadIdentifier& identifier, int motion, BasicMotion value); +    void TriggerOnMotionChange(const PadIdentifier& identifier, int motion, +                               const BasicMotion& value);      bool IsInputIdentifierEqual(const InputIdentifier& input_identifier,                                  const PadIdentifier& identifier, EngineInputType type, diff --git a/src/input_common/input_mapping.h b/src/input_common/input_mapping.h index 44eb8ad9a..93564b5f8 100644 --- a/src/input_common/input_mapping.h +++ b/src/input_common/input_mapping.h @@ -14,8 +14,8 @@ public:      MappingFactory();      /** -     * Resets all varables to beggin the mapping process -     * @param "type": type of input desired to be returned +     * Resets all variables to begin the mapping process +     * @param type type of input desired to be returned       */      void BeginMapping(Polling::InputType type); @@ -24,8 +24,8 @@ public:      /**       * Registers mapping input data from the driver -     * @param "data": An struct containing all the information needed to create a proper -     * ParamPackage +     * @param data A struct containing all the information needed to create a proper +     *             ParamPackage       */      void RegisterInput(const MappingData& data); @@ -34,42 +34,42 @@ public:  private:      /** -     * If provided data satisfies the requeriments it will push an element to the input_queue +     * If provided data satisfies the requirements it will push an element to the input_queue       * Supported input:       *     - Button: Creates a basic button ParamPackage       *     - HatButton: Creates a basic hat button ParamPackage       *     - Analog: Creates a basic analog ParamPackage -     * @param "data": An struct containing all the information needed to create a proper +     * @param data A struct containing all the information needed to create a proper       * ParamPackage       */      void RegisterButton(const MappingData& data);      /** -     * If provided data satisfies the requeriments it will push an element to the input_queue +     * If provided data satisfies the requirements it will push an element to the input_queue       * Supported input:       *     - Button, HatButton: Pass the data to RegisterButton       *     - Analog: Stores the first axis and on the second axis creates a basic stick ParamPackage -     * @param "data": An struct containing all the information needed to create a proper -     * ParamPackage +     * @param data A struct containing all the information needed to create a proper +     *             ParamPackage       */      void RegisterStick(const MappingData& data);      /** -     * If provided data satisfies the requeriments it will push an element to the input_queue +     * If provided data satisfies the requirements it will push an element to the input_queue       * Supported input:       *     - Button, HatButton: Pass the data to RegisterButton       *     - Analog: Stores the first two axis and on the third axis creates a basic Motion       * ParamPackage       *     - Motion: Creates a basic Motion ParamPackage -     * @param "data": An struct containing all the information needed to create a proper -     * ParamPackage +     * @param data A struct containing all the information needed to create a proper +     *             ParamPackage       */      void RegisterMotion(const MappingData& data);      /**       * Returns true if driver can be mapped -     * @param "data": An struct containing all the information needed to create a proper -     * ParamPackage +     * @param data A struct containing all the information needed to create a proper +     *             ParamPackage       */      bool IsDriverValid(const MappingData& data) const; diff --git a/src/input_common/input_poller.cpp b/src/input_common/input_poller.cpp index 7e4eafded..7b370335f 100644 --- a/src/input_common/input_poller.cpp +++ b/src/input_common/input_poller.cpp @@ -12,8 +12,7 @@ namespace InputCommon {  class DummyInput final : public Common::Input::InputDevice {  public: -    explicit DummyInput() {} -    ~DummyInput() {} +    explicit DummyInput() = default;  };  class InputFromButton final : public Common::Input::InputDevice { @@ -33,7 +32,7 @@ public:          callback_key = input_engine->SetCallback(input_identifier);      } -    ~InputFromButton() { +    ~InputFromButton() override {          input_engine->DeleteCallback(callback_key);      } @@ -45,7 +44,7 @@ public:          };      } -    void ForceUpdate() { +    void ForceUpdate() override {          const Common::Input::CallbackStatus status{              .type = Common::Input::InputType::Button,              .button_status = GetStatus(), @@ -94,7 +93,7 @@ public:          callback_key = input_engine->SetCallback(input_identifier);      } -    ~InputFromHatButton() { +    ~InputFromHatButton() override {          input_engine->DeleteCallback(callback_key);      } @@ -106,7 +105,7 @@ public:          };      } -    void ForceUpdate() { +    void ForceUpdate() override {          const Common::Input::CallbackStatus status{              .type = Common::Input::InputType::Button,              .button_status = GetStatus(), @@ -167,7 +166,7 @@ public:          callback_key_y = input_engine->SetCallback(y_input_identifier);      } -    ~InputFromStick() { +    ~InputFromStick() override {          input_engine->DeleteCallback(callback_key_x);          input_engine->DeleteCallback(callback_key_y);      } @@ -190,7 +189,7 @@ public:          return status;      } -    void ForceUpdate() { +    void ForceUpdate() override {          const Common::Input::CallbackStatus status{              .type = Common::Input::InputType::Stick,              .stick_status = GetStatus(), @@ -266,7 +265,7 @@ public:          callback_key_y = input_engine->SetCallback(y_input_identifier);      } -    ~InputFromTouch() { +    ~InputFromTouch() override {          input_engine->DeleteCallback(callback_key_button);          input_engine->DeleteCallback(callback_key_x);          input_engine->DeleteCallback(callback_key_y); @@ -352,7 +351,7 @@ public:          axis_callback_key = input_engine->SetCallback(axis_input_identifier);      } -    ~InputFromTrigger() { +    ~InputFromTrigger() override {          input_engine->DeleteCallback(callback_key_button);          input_engine->DeleteCallback(axis_callback_key);      } @@ -419,7 +418,7 @@ public:          callback_key = input_engine->SetCallback(input_identifier);      } -    ~InputFromAnalog() { +    ~InputFromAnalog() override {          input_engine->DeleteCallback(callback_key);      } @@ -466,7 +465,7 @@ public:          callback_key = input_engine->SetCallback(input_identifier);      } -    ~InputFromBattery() { +    ~InputFromBattery() override {          input_engine->DeleteCallback(callback_key);      } @@ -474,7 +473,7 @@ public:          return static_cast<Common::Input::BatteryLevel>(input_engine->GetBattery(identifier));      } -    void ForceUpdate() { +    void ForceUpdate() override {          const Common::Input::CallbackStatus status{              .type = Common::Input::InputType::Battery,              .battery_status = GetStatus(), @@ -518,7 +517,7 @@ public:          callback_key = input_engine->SetCallback(input_identifier);      } -    ~InputFromMotion() { +    ~InputFromMotion() override {          input_engine->DeleteCallback(callback_key);      } @@ -593,7 +592,7 @@ public:          callback_key_z = input_engine->SetCallback(z_input_identifier);      } -    ~InputFromAxisMotion() { +    ~InputFromAxisMotion() override {          input_engine->DeleteCallback(callback_key_x);          input_engine->DeleteCallback(callback_key_y);          input_engine->DeleteCallback(callback_key_z); @@ -618,7 +617,7 @@ public:          return status;      } -    void ForceUpdate() { +    void ForceUpdate() override {          const Common::Input::CallbackStatus status{              .type = Common::Input::InputType::Motion,              .motion_status = GetStatus(), @@ -668,16 +667,16 @@ public:      explicit OutputFromIdentifier(PadIdentifier identifier_, InputEngine* input_engine_)          : identifier(identifier_), input_engine(input_engine_) {} -    virtual void SetLED(Common::Input::LedStatus led_status) { +    void SetLED(const Common::Input::LedStatus& led_status) override {          input_engine->SetLeds(identifier, led_status);      } -    virtual Common::Input::VibrationError SetVibration( -        Common::Input::VibrationStatus vibration_status) { +    Common::Input::VibrationError SetVibration( +        const Common::Input::VibrationStatus& vibration_status) override {          return input_engine->SetRumble(identifier, vibration_status);      } -    virtual Common::Input::PollingError SetPollingMode(Common::Input::PollingMode polling_mode) { +    Common::Input::PollingError SetPollingMode(Common::Input::PollingMode polling_mode) override {          return input_engine->SetPollingMode(identifier, polling_mode);      } diff --git a/src/input_common/input_poller.h b/src/input_common/input_poller.h index 573f09fde..8a0977d58 100644 --- a/src/input_common/input_poller.h +++ b/src/input_common/input_poller.h @@ -13,9 +13,6 @@ class Factory;  namespace InputCommon {  class InputEngine; -/** - * An Input factory. It receives input events and forward them to all input devices it created. - */  class OutputFactory final : public Common::Input::Factory<Common::Input::OutputDevice> {  public: @@ -24,10 +21,10 @@ public:      /**       * Creates an output device from the parameters given.       * @param params contains parameters for creating the device: -     * @param    - "guid": text string for identifing controllers -     * @param    - "port": port of the connected device -     * @param    - "pad": slot of the connected controller -     * @return an unique ouput device with the parameters specified +     *               - "guid" text string for identifying controllers +     *               - "port": port of the connected device +     *               - "pad": slot of the connected controller +     * @returns a unique output device with the parameters specified       */      std::unique_ptr<Common::Input::OutputDevice> Create(          const Common::ParamPackage& params) override; @@ -36,6 +33,9 @@ private:      std::shared_ptr<InputEngine> input_engine;  }; +/** + * An Input factory. It receives input events and forward them to all input devices it created. + */  class InputFactory final : public Common::Input::Factory<Common::Input::InputDevice> {  public:      explicit InputFactory(std::shared_ptr<InputEngine> input_engine_); @@ -54,16 +54,16 @@ public:       * - battery: Contains "battery"       * - output: Contains "output"       * @param params contains parameters for creating the device: -     * @param    - "code": the code of the keyboard key to bind with the input -     * @param    - "button": same as "code" but for controller buttons -     * @param    - "hat": similar as "button" but it's a group of hat buttons from SDL -     * @param    - "axis": the axis number of the axis to bind with the input -     * @param    - "motion": the motion number of the motion to bind with the input -     * @param    - "axis_x": same as axis but specifing horizontal direction -     * @param    - "axis_y": same as axis but specifing vertical direction -     * @param    - "axis_z": same as axis but specifing forward direction -     * @param    - "battery": Only used as a placeholder to set the input type -     * @return an unique input device with the parameters specified +     *               - "code": the code of the keyboard key to bind with the input +     *               - "button": same as "code" but for controller buttons +     *               - "hat": similar as "button" but it's a group of hat buttons from SDL +     *               - "axis": the axis number of the axis to bind with the input +     *               - "motion": the motion number of the motion to bind with the input +     *               - "axis_x": same as axis but specifying horizontal direction +     *               - "axis_y": same as axis but specifying vertical direction +     *               - "axis_z": same as axis but specifying forward direction +     *               - "battery": Only used as a placeholder to set the input type +     * @returns a unique input device with the parameters specified       */      std::unique_ptr<Common::Input::InputDevice> Create(const Common::ParamPackage& params) override; @@ -71,14 +71,14 @@ private:      /**       * Creates a button device from the parameters given.       * @param params contains parameters for creating the device: -     * @param    - "code": the code of the keyboard key to bind with the input -     * @param    - "button": same as "code" but for controller buttons -     * @param    - "toggle": press once to enable, press again to disable -     * @param    - "inverted": inverts the output of the button -     * @param    - "guid": text string for identifing controllers -     * @param    - "port": port of the connected device -     * @param    - "pad": slot of the connected controller -     * @return an unique input device with the parameters specified +     *               - "code": the code of the keyboard key to bind with the input +     *               - "button": same as "code" but for controller buttons +     *               - "toggle": press once to enable, press again to disable +     *               - "inverted": inverts the output of the button +     *               - "guid": text string for identifying controllers +     *               - "port": port of the connected device +     *               - "pad": slot of the connected controller +     * @returns a unique input device with the parameters specified       */      std::unique_ptr<Common::Input::InputDevice> CreateButtonDevice(          const Common::ParamPackage& params); @@ -86,14 +86,14 @@ private:      /**       * Creates a hat button device from the parameters given.       * @param params contains parameters for creating the device: -     * @param    - "button": the controller hat id to bind with the input -     * @param    - "direction": the direction id to be detected -     * @param    - "toggle": press once to enable, press again to disable -     * @param    - "inverted": inverts the output of the button -     * @param    - "guid": text string for identifing controllers -     * @param    - "port": port of the connected device -     * @param    - "pad": slot of the connected controller -     * @return an unique input device with the parameters specified +     *               - "button": the controller hat id to bind with the input +     *               - "direction": the direction id to be detected +     *               - "toggle": press once to enable, press again to disable +     *               - "inverted": inverts the output of the button +     *               - "guid": text string for identifying controllers +     *               - "port": port of the connected device +     *               - "pad": slot of the connected controller +     * @returns a unique input device with the parameters specified       */      std::unique_ptr<Common::Input::InputDevice> CreateHatButtonDevice(          const Common::ParamPackage& params); @@ -101,19 +101,19 @@ private:      /**       * Creates a stick device from the parameters given.       * @param params contains parameters for creating the device: -     * @param    - "axis_x": the controller horizontal axis id to bind with the input -     * @param    - "axis_y": the controller vertical axis id to bind with the input -     * @param    - "deadzone": the mimimum required value to be detected -     * @param    - "range": the maximum value required to reach 100% -     * @param    - "threshold": the mimimum required value to considered pressed -     * @param    - "offset_x": the amount of offset in the x axis -     * @param    - "offset_y": the amount of offset in the y axis -     * @param    - "invert_x": inverts the sign of the horizontal axis -     * @param    - "invert_y": inverts the sign of the vertical axis -     * @param    - "guid": text string for identifing controllers -     * @param    - "port": port of the connected device -     * @param    - "pad": slot of the connected controller -     * @return an unique input device with the parameters specified +     *               - "axis_x": the controller horizontal axis id to bind with the input +     *               - "axis_y": the controller vertical axis id to bind with the input +     *               - "deadzone": the minimum required value to be detected +     *               - "range": the maximum value required to reach 100% +     *               - "threshold": the minimum required value to considered pressed +     *               - "offset_x": the amount of offset in the x axis +     *               - "offset_y": the amount of offset in the y axis +     *               - "invert_x": inverts the sign of the horizontal axis +     *               - "invert_y": inverts the sign of the vertical axis +     *               - "guid": text string for identifying controllers +     *               - "port": port of the connected device +     *               - "pad": slot of the connected controller +     * @returns a unique input device with the parameters specified       */      std::unique_ptr<Common::Input::InputDevice> CreateStickDevice(          const Common::ParamPackage& params); @@ -121,16 +121,16 @@ private:      /**       * Creates an analog device from the parameters given.       * @param params contains parameters for creating the device: -     * @param    - "axis": the controller axis id to bind with the input -     * @param    - "deadzone": the mimimum required value to be detected -     * @param    - "range": the maximum value required to reach 100% -     * @param    - "threshold": the mimimum required value to considered pressed -     * @param    - "offset": the amount of offset in the axis -     * @param    - "invert": inverts the sign of the axis -     * @param    - "guid": text string for identifing controllers -     * @param    - "port": port of the connected device -     * @param    - "pad": slot of the connected controller -     * @return an unique input device with the parameters specified +     *               - "axis": the controller axis id to bind with the input +     *               - "deadzone": the minimum required value to be detected +     *               - "range": the maximum value required to reach 100% +     *               - "threshold": the minimum required value to considered pressed +     *               - "offset": the amount of offset in the axis +     *               - "invert": inverts the sign of the axis +     *               - "guid": text string for identifying controllers +     *               - "port": port of the connected device +     *               - "pad": slot of the connected controller +     * @returns a unique input device with the parameters specified       */      std::unique_ptr<Common::Input::InputDevice> CreateAnalogDevice(          const Common::ParamPackage& params); @@ -138,20 +138,20 @@ private:      /**       * Creates a trigger device from the parameters given.       * @param params contains parameters for creating the device: -     * @param    - "button": the controller hat id to bind with the input -     * @param    - "direction": the direction id to be detected -     * @param    - "toggle": press once to enable, press again to disable -     * @param    - "inverted": inverts the output of the button -     * @param    - "axis": the controller axis id to bind with the input -     * @param    - "deadzone": the mimimum required value to be detected -     * @param    - "range": the maximum value required to reach 100% -     * @param    - "threshold": the mimimum required value to considered pressed -     * @param    - "offset": the amount of offset in the axis -     * @param    - "invert": inverts the sign of the axis -     * @param    - "guid": text string for identifing controllers -     * @param    - "port": port of the connected device -     * @param    - "pad": slot of the connected controller -     * @return an unique input device with the parameters specified +     *               - "button": the controller hat id to bind with the input +     *               - "direction": the direction id to be detected +     *               - "toggle": press once to enable, press again to disable +     *               - "inverted": inverts the output of the button +     *               - "axis": the controller axis id to bind with the input +     *               - "deadzone": the minimum required value to be detected +     *               - "range": the maximum value required to reach 100% +     *               - "threshold": the minimum required value to considered pressed +     *               - "offset": the amount of offset in the axis +     *               - "invert": inverts the sign of the axis +     *               - "guid": text string for identifying controllers +     *               - "port": port of the connected device +     *               - "pad": slot of the connected controller +     * @returns a unique input device with the parameters specified       */      std::unique_ptr<Common::Input::InputDevice> CreateTriggerDevice(          const Common::ParamPackage& params); @@ -159,23 +159,23 @@ private:      /**       * Creates a touch device from the parameters given.       * @param params contains parameters for creating the device: -     * @param    - "button": the controller hat id to bind with the input -     * @param    - "direction": the direction id to be detected -     * @param    - "toggle": press once to enable, press again to disable -     * @param    - "inverted": inverts the output of the button -     * @param    - "axis_x": the controller horizontal axis id to bind with the input -     * @param    - "axis_y": the controller vertical axis id to bind with the input -     * @param    - "deadzone": the mimimum required value to be detected -     * @param    - "range": the maximum value required to reach 100% -     * @param    - "threshold": the mimimum required value to considered pressed -     * @param    - "offset_x": the amount of offset in the x axis -     * @param    - "offset_y": the amount of offset in the y axis -     * @param    - "invert_x": inverts the sign of the horizontal axis -     * @param    - "invert_y": inverts the sign of the vertical axis -     * @param    - "guid": text string for identifing controllers -     * @param    - "port": port of the connected device -     * @param    - "pad": slot of the connected controller -     * @return an unique input device with the parameters specified +     *               - "button": the controller hat id to bind with the input +     *               - "direction": the direction id to be detected +     *               - "toggle": press once to enable, press again to disable +     *               - "inverted": inverts the output of the button +     *               - "axis_x": the controller horizontal axis id to bind with the input +     *               - "axis_y": the controller vertical axis id to bind with the input +     *               - "deadzone": the minimum required value to be detected +     *               - "range": the maximum value required to reach 100% +     *               - "threshold": the minimum required value to considered pressed +     *               - "offset_x": the amount of offset in the x axis +     *               - "offset_y": the amount of offset in the y axis +     *               - "invert_x": inverts the sign of the horizontal axis +     *               - "invert_y": inverts the sign of the vertical axis +     *               - "guid": text string for identifying controllers +     *               - "port": port of the connected device +     *               - "pad": slot of the connected controller +     * @returns a unique input device with the parameters specified       */      std::unique_ptr<Common::Input::InputDevice> CreateTouchDevice(          const Common::ParamPackage& params); @@ -183,10 +183,10 @@ private:      /**       * Creates a battery device from the parameters given.       * @param params contains parameters for creating the device: -     * @param    - "guid": text string for identifing controllers -     * @param    - "port": port of the connected device -     * @param    - "pad": slot of the connected controller -     * @return an unique input device with the parameters specified +     *               - "guid": text string for identifying controllers +     *               - "port": port of the connected device +     *               - "pad": slot of the connected controller +     * @returns a unique input device with the parameters specified       */      std::unique_ptr<Common::Input::InputDevice> CreateBatteryDevice(          const Common::ParamPackage& params); @@ -194,21 +194,21 @@ private:      /**       * Creates a motion device from the parameters given.       * @param params contains parameters for creating the device: -     * @param    - "axis_x": the controller horizontal axis id to bind with the input -     * @param    - "axis_y": the controller vertical axis id to bind with the input -     * @param    - "axis_z": the controller fordward axis id to bind with the input -     * @param    - "deadzone": the mimimum required value to be detected -     * @param    - "range": the maximum value required to reach 100% -     * @param    - "offset_x": the amount of offset in the x axis -     * @param    - "offset_y": the amount of offset in the y axis -     * @param    - "offset_z": the amount of offset in the z axis -     * @param    - "invert_x": inverts the sign of the horizontal axis -     * @param    - "invert_y": inverts the sign of the vertical axis -     * @param    - "invert_z": inverts the sign of the fordward axis -     * @param    - "guid": text string for identifing controllers -     * @param    - "port": port of the connected device -     * @param    - "pad": slot of the connected controller -     * @return an unique input device with the parameters specified +     *               - "axis_x": the controller horizontal axis id to bind with the input +     *               - "axis_y": the controller vertical axis id to bind with the input +     *               - "axis_z": the controller forward axis id to bind with the input +     *               - "deadzone": the minimum required value to be detected +     *               - "range": the maximum value required to reach 100% +     *               - "offset_x": the amount of offset in the x axis +     *               - "offset_y": the amount of offset in the y axis +     *               - "offset_z": the amount of offset in the z axis +     *               - "invert_x": inverts the sign of the horizontal axis +     *               - "invert_y": inverts the sign of the vertical axis +     *               - "invert_z": inverts the sign of the forward axis +     *               - "guid": text string for identifying controllers +     *               - "port": port of the connected device +     *               - "pad": slot of the connected controller +     * @returns a unique input device with the parameters specified       */      std::unique_ptr<Common::Input::InputDevice> CreateMotionDevice(Common::ParamPackage params); diff --git a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp index e38cfbc6c..751e4792b 100644 --- a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp +++ b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp @@ -176,8 +176,8 @@ struct FormatTuple {      {VK_FORMAT_R32_UINT, Attachable | Storage},                // R32_UINT      {VK_FORMAT_R32_SINT, Attachable | Storage},                // R32_SINT      {VK_FORMAT_ASTC_8x8_UNORM_BLOCK},                          // ASTC_2D_8X8_UNORM -    {VK_FORMAT_UNDEFINED},                                     // ASTC_2D_8X5_UNORM -    {VK_FORMAT_UNDEFINED},                                     // ASTC_2D_5X4_UNORM +    {VK_FORMAT_ASTC_8x5_UNORM_BLOCK},                          // ASTC_2D_8X5_UNORM +    {VK_FORMAT_ASTC_5x4_UNORM_BLOCK},                          // ASTC_2D_5X4_UNORM      {VK_FORMAT_B8G8R8A8_SRGB, Attachable},                     // B8G8R8A8_SRGB      {VK_FORMAT_BC1_RGBA_SRGB_BLOCK},                           // BC1_RGBA_SRGB      {VK_FORMAT_BC2_SRGB_BLOCK},                                // BC2_SRGB diff --git a/src/yuzu/applets/qt_software_keyboard.cpp b/src/yuzu/applets/qt_software_keyboard.cpp index de7f98c4f..c3857fc98 100644 --- a/src/yuzu/applets/qt_software_keyboard.cpp +++ b/src/yuzu/applets/qt_software_keyboard.cpp @@ -475,11 +475,26 @@ void QtSoftwareKeyboardDialog::open() {      row = 0;      column = 0; -    const auto* const curr_button = -        keyboard_buttons[static_cast<int>(bottom_osk_index)][row][column]; +    switch (bottom_osk_index) { +    case BottomOSKIndex::LowerCase: +    case BottomOSKIndex::UpperCase: { +        const auto* const curr_button = +            keyboard_buttons[static_cast<std::size_t>(bottom_osk_index)][row][column]; + +        // This is a workaround for setFocus() randomly not showing focus in the UI +        QCursor::setPos(curr_button->mapToGlobal(curr_button->rect().center())); +        break; +    } +    case BottomOSKIndex::NumberPad: { +        const auto* const curr_button = numberpad_buttons[row][column]; -    // This is a workaround for setFocus() randomly not showing focus in the UI -    QCursor::setPos(curr_button->mapToGlobal(curr_button->rect().center())); +        // This is a workaround for setFocus() randomly not showing focus in the UI +        QCursor::setPos(curr_button->mapToGlobal(curr_button->rect().center())); +        break; +    } +    default: +        break; +    }      StartInputThread();  }  | 
