diff options
Diffstat (limited to 'src/osd/modules/input/input_sdl.cpp')
-rw-r--r-- | src/osd/modules/input/input_sdl.cpp | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/src/osd/modules/input/input_sdl.cpp b/src/osd/modules/input/input_sdl.cpp index ff52fbee478..1eaed99f16b 100644 --- a/src/osd/modules/input/input_sdl.cpp +++ b/src/osd/modules/input/input_sdl.cpp @@ -573,9 +573,9 @@ public: { } - virtual void poll() override + virtual void poll(bool relative_reset) override { - sdl_device::poll(); + sdl_device::poll(relative_reset); #ifdef __APPLE__ if (m_keyboard.state[SDL_SCANCODE_CAPSLOCK] && (std::chrono::steady_clock::now() > (m_capslock_pressed + std::chrono::milliseconds(30)))) @@ -655,22 +655,30 @@ class sdl_mouse_device : public sdl_device public: sdl_mouse_device(std::string &&name, std::string &&id, input_module &module) : sdl_device(std::move(name), std::move(id), module), - m_mouse({0}) + m_mouse({0}), + m_x(0), + m_y(0), + m_v(0), + m_h(0) { } - virtual void poll() override + virtual void poll(bool relative_reset) override { - m_mouse.lX = 0; - m_mouse.lY = 0; - m_mouse.lV = 0; - m_mouse.lH = 0; - sdl_device::poll(); + sdl_device::poll(relative_reset); + if (relative_reset) + { + m_mouse.lX = std::exchange(m_x, 0); + m_mouse.lY = std::exchange(m_y, 0); + m_mouse.lV = std::exchange(m_v, 0); + m_mouse.lH = std::exchange(m_h, 0); + } } virtual void reset() override { memset(&m_mouse, 0, sizeof(m_mouse)); + m_x = m_y = m_v = m_h = 0; } virtual void configure(input_device &device) override @@ -720,8 +728,8 @@ public: switch (event.type) { case SDL_MOUSEMOTION: - m_mouse.lX += event.motion.xrel * input_device::RELATIVE_PER_PIXEL; - m_mouse.lY += event.motion.yrel * input_device::RELATIVE_PER_PIXEL; + m_x += event.motion.xrel * input_device::RELATIVE_PER_PIXEL; + m_y += event.motion.yrel * input_device::RELATIVE_PER_PIXEL; break; case SDL_MOUSEBUTTONDOWN: @@ -734,11 +742,11 @@ public: case SDL_MOUSEWHEEL: #if SDL_VERSION_ATLEAST(2, 0, 18) - m_mouse.lV += event.wheel.preciseY * input_device::RELATIVE_PER_PIXEL; - m_mouse.lH += event.wheel.preciseX * input_device::RELATIVE_PER_PIXEL; + m_v += event.wheel.preciseY * input_device::RELATIVE_PER_PIXEL; + m_h += event.wheel.preciseX * input_device::RELATIVE_PER_PIXEL; #else - m_mouse.lV += event.wheel.y * input_device::RELATIVE_PER_PIXEL; - m_mouse.lH += event.wheel.x * input_device::RELATIVE_PER_PIXEL; + m_v += event.wheel.y * input_device::RELATIVE_PER_PIXEL; + m_h += event.wheel.x * input_device::RELATIVE_PER_PIXEL; #endif break; } @@ -753,6 +761,7 @@ private: }; mouse_state m_mouse; + s32 m_x, m_y, m_v, m_h; }; |