summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/input/input_rawinput.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/modules/input/input_rawinput.cpp')
-rw-r--r--src/osd/modules/input/input_rawinput.cpp44
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;
};