diff options
author | Zach Hilman <zachhilman@gmail.com> | 2018-11-02 03:01:59 +0100 |
---|---|---|
committer | Zach Hilman <zachhilman@gmail.com> | 2018-11-19 05:22:36 +0100 |
commit | 3b25426bd95423f74bca25145c67e350d3745d5a (patch) | |
tree | b7192c733c00a61d35b360efcf5f01b1116cd514 /src/core/hle/service/hid/controllers/mouse.cpp | |
parent | hid: Add keyboard bindings for Keyboard controller (diff) | |
download | yuzu-3b25426bd95423f74bca25145c67e350d3745d5a.tar yuzu-3b25426bd95423f74bca25145c67e350d3745d5a.tar.gz yuzu-3b25426bd95423f74bca25145c67e350d3745d5a.tar.bz2 yuzu-3b25426bd95423f74bca25145c67e350d3745d5a.tar.lz yuzu-3b25426bd95423f74bca25145c67e350d3745d5a.tar.xz yuzu-3b25426bd95423f74bca25145c67e350d3745d5a.tar.zst yuzu-3b25426bd95423f74bca25145c67e350d3745d5a.zip |
Diffstat (limited to 'src/core/hle/service/hid/controllers/mouse.cpp')
-rw-r--r-- | src/core/hle/service/hid/controllers/mouse.cpp | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/src/core/hle/service/hid/controllers/mouse.cpp b/src/core/hle/service/hid/controllers/mouse.cpp index 4e246a57d..63391dbe9 100644 --- a/src/core/hle/service/hid/controllers/mouse.cpp +++ b/src/core/hle/service/hid/controllers/mouse.cpp @@ -5,6 +5,7 @@ #include <cstring> #include "common/common_types.h" #include "core/core_timing.h" +#include "core/frontend/emu_window.h" #include "core/hle/service/hid/controllers/mouse.h" namespace Service::HID { @@ -14,7 +15,6 @@ Controller_Mouse::Controller_Mouse() = default; Controller_Mouse::~Controller_Mouse() = default; void Controller_Mouse::OnInit() {} - void Controller_Mouse::OnRelease() {} void Controller_Mouse::OnUpdate(u8* data, std::size_t size) { @@ -34,10 +34,29 @@ void Controller_Mouse::OnUpdate(u8* data, std::size_t size) { cur_entry.sampling_number = last_entry.sampling_number + 1; cur_entry.sampling_number2 = cur_entry.sampling_number; - // TODO(ogniK): Update mouse states + + if (Settings::values.mouse_enabled) { + const auto [px, py, sx, sy] = mouse_device->GetStatus(); + const auto x = static_cast<s32>(px * Layout::ScreenUndocked::Width); + const auto y = static_cast<s32>(py * Layout::ScreenUndocked::Height); + cur_entry.x = x; + cur_entry.y = y; + cur_entry.delta_x = x - last_entry.x; + cur_entry.delta_y = y - last_entry.y; + cur_entry.mouse_wheel_x = sx; + cur_entry.mouse_wheel_y = sy; + + for (std::size_t i = 0; i < mouse_button_devices.size(); ++i) { + cur_entry.button |= (mouse_button_devices[i]->GetStatus() << i); + } + } std::memcpy(data + SHARED_MEMORY_OFFSET, &shared_memory, sizeof(SharedMemory)); } -void Controller_Mouse::OnLoadInputDevices() {} +void Controller_Mouse::OnLoadInputDevices() { + mouse_device = Input::CreateDevice<Input::MouseDevice>(Settings::values.mouse_device); + std::transform(Settings::values.mouse_buttons.begin(), Settings::values.mouse_buttons.end(), + mouse_button_devices.begin(), Input::CreateDevice<Input::ButtonDevice>); +} } // namespace Service::HID |