summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/input/input_xinput.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2023-02-25 01:26:54 +1100
committer Vas Crabb <vas@vastheman.com>2023-02-25 01:26:54 +1100
commitd38bf903f513c854a23d9c4bbac447c7a81e0223 (patch)
treeed0a7c39411368efd93171745a89b3557e1c8961 /src/osd/modules/input/input_xinput.cpp
parent65aeb63a2a1f4f65a6fa0dedabba1b852a189f96 (diff)
osd: Fixed a corner case in XInput DJ Hero turntable handling.
Diffstat (limited to 'src/osd/modules/input/input_xinput.cpp')
-rw-r--r--src/osd/modules/input/input_xinput.cpp34
1 files changed, 14 insertions, 20 deletions
diff --git a/src/osd/modules/input/input_xinput.cpp b/src/osd/modules/input/input_xinput.cpp
index ec3f956b909..474ef6fe7ff 100644
--- a/src/osd/modules/input/input_xinput.cpp
+++ b/src/osd/modules/input/input_xinput.cpp
@@ -2354,30 +2354,24 @@ void xinput_turntable_device::poll(bool relative_reset)
// translate axes
m_axes[AXIS_TURNTABLE] = s32(thumb_left_y()) * input_device::RELATIVE_PER_PIXEL * 2;
m_axes[AXIS_CROSSFADE] = normalize_absolute_axis(thumb_right_y(), XINPUT_AXIS_MINVALUE, XINPUT_AXIS_MAXVALUE);
+ }
- // handle effect dial
- if (was_reset)
- {
- // just grab the current count after regaining focus
- m_prev_effect = u16(thumb_right_x());
- }
- else if (relative_reset)
- {
- // convert value to relative displacement
- s32 effect_delta = s32(u32(u16(thumb_right_x()))) - s32(u32(m_prev_effect));
- m_prev_effect = u16(thumb_right_x());
- if (0x8000 < effect_delta)
- effect_delta -= 0x1'0000;
- else if (-0x8000 > effect_delta)
- effect_delta += 0x1'0000;
- m_axes[AXIS_EFFECT] = effect_delta * input_device::RELATIVE_PER_PIXEL / 128;
- }
+ // handle effect dial
+ if (was_reset)
+ {
+ // just grab the current count after regaining focus
+ m_prev_effect = u16(thumb_right_x());
}
- else
+ else if (relative_reset)
{
- // we know nothing changed so we can skip most of the logic
+ // convert value to relative displacement
+ s32 effect_delta = s32(u32(u16(thumb_right_x()))) - s32(u32(m_prev_effect));
m_prev_effect = u16(thumb_right_x());
- m_axes[AXIS_EFFECT] = 0;
+ if (0x8000 < effect_delta)
+ effect_delta -= 0x1'0000;
+ else if (-0x8000 > effect_delta)
+ effect_delta += 0x1'0000;
+ m_axes[AXIS_EFFECT] = effect_delta * input_device::RELATIVE_PER_PIXEL / 128;
}
}