diff options
author | 2023-02-25 01:26:54 +1100 | |
---|---|---|
committer | 2023-02-25 01:26:54 +1100 | |
commit | d38bf903f513c854a23d9c4bbac447c7a81e0223 (patch) | |
tree | ed0a7c39411368efd93171745a89b3557e1c8961 /src/osd/modules/input/input_xinput.cpp | |
parent | 65aeb63a2a1f4f65a6fa0dedabba1b852a189f96 (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.cpp | 34 |
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; } } |