diff options
Diffstat (limited to 'src/osd/modules/input/input_rawinput.cpp')
-rw-r--r-- | src/osd/modules/input/input_rawinput.cpp | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/src/osd/modules/input/input_rawinput.cpp b/src/osd/modules/input/input_rawinput.cpp index ca6522f20e2..3ee8e2d8f7e 100644 --- a/src/osd/modules/input/input_rawinput.cpp +++ b/src/osd/modules/input/input_rawinput.cpp @@ -367,22 +367,28 @@ class rawinput_mouse_device : public rawinput_device public: rawinput_mouse_device(std::string &&name, std::string &&id, input_module &module, HANDLE handle) : rawinput_device(std::move(name), std::move(id), module, handle), - m_mouse({0}) + m_mouse({0}), + m_x(0), + m_y(0), + m_z(0) { } - virtual void poll() override + virtual void poll(bool relative_reset) override { - m_mouse.lX = 0; - m_mouse.lY = 0; - m_mouse.lZ = 0; - - rawinput_device::poll(); + rawinput_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.lZ = std::exchange(m_z, 0); + } } virtual void reset() override { memset(&m_mouse, 0, sizeof(m_mouse)); + m_x = m_y = m_z = 0; } virtual void configure(input_device &device) override @@ -417,12 +423,12 @@ public: if (rawinput.data.mouse.usFlags == MOUSE_MOVE_RELATIVE) { - m_mouse.lX += rawinput.data.mouse.lLastX * input_device::RELATIVE_PER_PIXEL; - m_mouse.lY += rawinput.data.mouse.lLastY * input_device::RELATIVE_PER_PIXEL; + m_x += rawinput.data.mouse.lLastX * input_device::RELATIVE_PER_PIXEL; + m_y += rawinput.data.mouse.lLastY * input_device::RELATIVE_PER_PIXEL; - // update zaxis + // update Z axis (vertical scroll) if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_WHEEL) - m_mouse.lZ += int16_t(rawinput.data.mouse.usButtonData) * input_device::RELATIVE_PER_PIXEL; + m_z += int16_t(rawinput.data.mouse.usButtonData) * input_device::RELATIVE_PER_PIXEL; // update the button states; always update the corresponding mouse buttons if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_BUTTON_1_DOWN) m_mouse.rgbButtons[0] = 0x80; @@ -440,6 +446,7 @@ public: private: mouse_state m_mouse; + LONG m_x, m_y, m_z; }; @@ -452,20 +459,22 @@ class rawinput_lightgun_device : public rawinput_device public: rawinput_lightgun_device(std::string &&name, std::string &&id, input_module &module, HANDLE handle) : rawinput_device(std::move(name), std::move(id), module, handle), - m_lightgun({0}) + m_lightgun({0}), + m_z(0) { } - virtual void poll() override + virtual void poll(bool relative_reset) override { - m_lightgun.lZ = 0; - - rawinput_device::poll(); + rawinput_device::poll(relative_reset); + if (relative_reset) + m_lightgun.lZ = std::exchange(m_z, 0); } virtual void reset() override { memset(&m_lightgun, 0, sizeof(m_lightgun)); + m_z = 0; } virtual void configure(input_device &device) override @@ -513,7 +522,7 @@ public: // update zaxis if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_WHEEL) - m_lightgun.lZ += int16_t(rawinput.data.mouse.usButtonData) * input_device::RELATIVE_PER_PIXEL; + m_z += int16_t(rawinput.data.mouse.usButtonData) * input_device::RELATIVE_PER_PIXEL; // update the button states; always update the corresponding mouse buttons if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_BUTTON_1_DOWN) m_lightgun.rgbButtons[0] = 0x80; @@ -531,6 +540,7 @@ public: private: mouse_state m_lightgun; + LONG m_z; }; |