diff options
| author | 2021-11-14 21:28:38 -0600 | |
|---|---|---|
| committer | 2021-11-24 20:30:28 -0600 | |
| commit | f4e5f89e6fb9d68cd4ba7d98c281584c50f0e149 (patch) | |
| tree | 9e9f9114d9b7528e74e78102279411595632f048 /src/core/hid | |
| parent | core/hid: Fully implement native mouse (diff) | |
| download | yuzu-f4e5f89e6fb9d68cd4ba7d98c281584c50f0e149.tar.gz yuzu-f4e5f89e6fb9d68cd4ba7d98c281584c50f0e149.tar.xz yuzu-f4e5f89e6fb9d68cd4ba7d98c281584c50f0e149.zip | |
core/hid: Improve accuary of mouse implementation
Diffstat (limited to 'src/core/hid')
| -rw-r--r-- | src/core/hid/emulated_devices.cpp | 10 | ||||
| -rw-r--r-- | src/core/hid/emulated_devices.h | 4 | ||||
| -rw-r--r-- | src/core/hid/hid_types.h | 35 | ||||
| -rw-r--r-- | src/core/hid/input_converter.cpp | 4 |
4 files changed, 33 insertions, 20 deletions
diff --git a/src/core/hid/emulated_devices.cpp b/src/core/hid/emulated_devices.cpp index 70a494097..874780ec2 100644 --- a/src/core/hid/emulated_devices.cpp +++ b/src/core/hid/emulated_devices.cpp | |||
| @@ -376,9 +376,9 @@ void EmulatedDevices::SetMouseAnalog(Common::Input::CallbackStatus callback, std | |||
| 376 | 376 | ||
| 377 | void EmulatedDevices::SetMouseStick(Common::Input::CallbackStatus callback) { | 377 | void EmulatedDevices::SetMouseStick(Common::Input::CallbackStatus callback) { |
| 378 | std::lock_guard lock{mutex}; | 378 | std::lock_guard lock{mutex}; |
| 379 | const auto stick_value = TransformToStick(callback); | 379 | const auto touch_value = TransformToTouch(callback); |
| 380 | 380 | ||
| 381 | device_status.mouse_stick_value = stick_value; | 381 | device_status.mouse_stick_value = touch_value; |
| 382 | 382 | ||
| 383 | if (is_configuring) { | 383 | if (is_configuring) { |
| 384 | device_status.mouse_position_state = {}; | 384 | device_status.mouse_position_state = {}; |
| @@ -386,8 +386,8 @@ void EmulatedDevices::SetMouseStick(Common::Input::CallbackStatus callback) { | |||
| 386 | return; | 386 | return; |
| 387 | } | 387 | } |
| 388 | 388 | ||
| 389 | device_status.mouse_position_state.x = stick_value.x.value; | 389 | device_status.mouse_position_state.x = touch_value.x.value; |
| 390 | device_status.mouse_position_state.y = stick_value.y.value; | 390 | device_status.mouse_position_state.y = touch_value.y.value; |
| 391 | 391 | ||
| 392 | TriggerOnChange(DeviceTriggerType::Mouse); | 392 | TriggerOnChange(DeviceTriggerType::Mouse); |
| 393 | } | 393 | } |
| @@ -420,7 +420,7 @@ MousePosition EmulatedDevices::GetMousePosition() const { | |||
| 420 | return device_status.mouse_position_state; | 420 | return device_status.mouse_position_state; |
| 421 | } | 421 | } |
| 422 | 422 | ||
| 423 | AnalogStickState EmulatedDevices::GetMouseDeltaWheel() const { | 423 | AnalogStickState EmulatedDevices::GetMouseWheel() const { |
| 424 | return device_status.mouse_wheel_state; | 424 | return device_status.mouse_wheel_state; |
| 425 | } | 425 | } |
| 426 | 426 | ||
diff --git a/src/core/hid/emulated_devices.h b/src/core/hid/emulated_devices.h index 49edfd255..05a945d08 100644 --- a/src/core/hid/emulated_devices.h +++ b/src/core/hid/emulated_devices.h | |||
| @@ -38,7 +38,7 @@ using MouseButtonValues = | |||
| 38 | std::array<Common::Input::ButtonStatus, Settings::NativeMouseButton::NumMouseButtons>; | 38 | std::array<Common::Input::ButtonStatus, Settings::NativeMouseButton::NumMouseButtons>; |
| 39 | using MouseAnalogValues = | 39 | using MouseAnalogValues = |
| 40 | std::array<Common::Input::AnalogStatus, Settings::NativeMouseWheel::NumMouseWheels>; | 40 | std::array<Common::Input::AnalogStatus, Settings::NativeMouseWheel::NumMouseWheels>; |
| 41 | using MouseStickValue = Common::Input::StickStatus; | 41 | using MouseStickValue = Common::Input::TouchStatus; |
| 42 | 42 | ||
| 43 | struct MousePosition { | 43 | struct MousePosition { |
| 44 | f32 x; | 44 | f32 x; |
| @@ -130,7 +130,7 @@ public: | |||
| 130 | MousePosition GetMousePosition() const; | 130 | MousePosition GetMousePosition() const; |
| 131 | 131 | ||
| 132 | /// Returns the latest mouse wheel change | 132 | /// Returns the latest mouse wheel change |
| 133 | AnalogStickState GetMouseDeltaWheel() const; | 133 | AnalogStickState GetMouseWheel() const; |
| 134 | 134 | ||
| 135 | /** | 135 | /** |
| 136 | * Adds a callback to the list of events | 136 | * Adds a callback to the list of events |
diff --git a/src/core/hid/hid_types.h b/src/core/hid/hid_types.h index af95f3aff..8b12f63ad 100644 --- a/src/core/hid/hid_types.h +++ b/src/core/hid/hid_types.h | |||
| @@ -502,21 +502,30 @@ static_assert(sizeof(VibrationDeviceInfo) == 0x8, "VibrationDeviceInfo has incor | |||
| 502 | // This is nn::hid::KeyboardModifier | 502 | // This is nn::hid::KeyboardModifier |
| 503 | struct KeyboardModifier { | 503 | struct KeyboardModifier { |
| 504 | union { | 504 | union { |
| 505 | u64 raw{}; | 505 | u32 raw{}; |
| 506 | BitField<0, 1, u64> control; | 506 | BitField<0, 1, u32> control; |
| 507 | BitField<1, 1, u64> shift; | 507 | BitField<1, 1, u32> shift; |
| 508 | BitField<2, 1, u64> left_alt; | 508 | BitField<2, 1, u32> left_alt; |
| 509 | BitField<3, 1, u64> right_alt; | 509 | BitField<3, 1, u32> right_alt; |
| 510 | BitField<4, 1, u64> gui; | 510 | BitField<4, 1, u32> gui; |
| 511 | BitField<8, 1, u64> caps_lock; | 511 | BitField<8, 1, u32> caps_lock; |
| 512 | BitField<9, 1, u64> scroll_lock; | 512 | BitField<9, 1, u32> scroll_lock; |
| 513 | BitField<10, 1, u64> num_lock; | 513 | BitField<10, 1, u32> num_lock; |
| 514 | BitField<11, 1, u64> katakana; | 514 | BitField<11, 1, u32> katakana; |
| 515 | BitField<12, 1, u64> hiragana; | 515 | BitField<12, 1, u32> hiragana; |
| 516 | BitField<32, 1, u64> unknown; | 516 | }; |
| 517 | }; | ||
| 518 | |||
| 519 | static_assert(sizeof(KeyboardModifier) == 0x4, "KeyboardModifier is an invalid size"); | ||
| 520 | |||
| 521 | // This is nn::hid::KeyboardAttribute | ||
| 522 | struct KeyboardAttribute { | ||
| 523 | union { | ||
| 524 | u32 raw{}; | ||
| 525 | BitField<0, 1, u32> is_connected; | ||
| 517 | }; | 526 | }; |
| 518 | }; | 527 | }; |
| 519 | static_assert(sizeof(KeyboardModifier) == 0x8, "KeyboardModifier is an invalid size"); | 528 | static_assert(sizeof(KeyboardAttribute) == 0x4, "KeyboardAttribute is an invalid size"); |
| 520 | 529 | ||
| 521 | // This is nn::hid::KeyboardKey | 530 | // This is nn::hid::KeyboardKey |
| 522 | struct KeyboardKey { | 531 | struct KeyboardKey { |
diff --git a/src/core/hid/input_converter.cpp b/src/core/hid/input_converter.cpp index c4e653956..f5acff6e0 100644 --- a/src/core/hid/input_converter.cpp +++ b/src/core/hid/input_converter.cpp | |||
| @@ -175,6 +175,10 @@ Common::Input::TouchStatus TransformToTouch(const Common::Input::CallbackStatus& | |||
| 175 | case Common::Input::InputType::Touch: | 175 | case Common::Input::InputType::Touch: |
| 176 | status = callback.touch_status; | 176 | status = callback.touch_status; |
| 177 | break; | 177 | break; |
| 178 | case Common::Input::InputType::Stick: | ||
| 179 | status.x = callback.stick_status.x; | ||
| 180 | status.y = callback.stick_status.y; | ||
| 181 | break; | ||
| 178 | default: | 182 | default: |
| 179 | LOG_ERROR(Input, "Conversion from type {} to touch not implemented", callback.type); | 183 | LOG_ERROR(Input, "Conversion from type {} to touch not implemented", callback.type); |
| 180 | break; | 184 | break; |