diff options
Diffstat (limited to 'src/input/input_touch_dpad.cpp')
| -rw-r--r-- | src/input/input_touch_dpad.cpp | 67 |
1 files changed, 23 insertions, 44 deletions
diff --git a/src/input/input_touch_dpad.cpp b/src/input/input_touch_dpad.cpp index 828d6b59..32ca1ac1 100644 --- a/src/input/input_touch_dpad.cpp +++ b/src/input/input_touch_dpad.cpp @@ -13,63 +13,42 @@ #include "event_queue.hpp" #include "haptics.hpp" #include "input_device.hpp" +#include "input_hook_actions.hpp" #include "input_touch_dpad.hpp" #include "touchwheel.hpp" namespace input { -static inline auto IsAngleWithin(int16_t wheel_angle, - int16_t target_angle, - int threshold) -> bool { - int16_t difference = (wheel_angle - target_angle + 127 + 255) % 255 - 127; - return difference <= threshold && difference >= -threshold; -} - -TouchDPad::TouchDPad(drivers::TouchWheel& wheel) : wheel_(wheel) {} +TouchDPad::TouchDPad(drivers::TouchWheel& wheel) + : wheel_(wheel), + centre_(actions::select, {}, {}), + up_(actions::scrollUp), + right_({}, {}, {}), + down_(actions::scrollDown), + left_(actions::goBack) {} auto TouchDPad::read(lv_indev_data_t* data) -> void { wheel_.Update(); auto wheel_data = wheel_.GetTouchWheelData(); - if (wheel_data.is_button_touched) { - data->state = LV_INDEV_STATE_PRESSED; - } else { - data->state = LV_INDEV_STATE_RELEASED; - } + centre_.update(wheel_data.is_button_touched, data); - switch (up_.update( - wheel_data.is_wheel_touched && - drivers::TouchWheel::isAngleWithin(wheel_data.wheel_position, 0, 32))) { - case Trigger::State::kNone: - break; - default: - data->enc_diff = -1; - break; - } - switch (right_.update( - wheel_data.is_wheel_touched && - drivers::TouchWheel::isAngleWithin(wheel_data.wheel_position, 192, 32))) { - default: - break; - } - switch (down_.update( + up_.update( wheel_data.is_wheel_touched && - drivers::TouchWheel::isAngleWithin(wheel_data.wheel_position, 128, 32))) { - case Trigger::State::kNone: - break; - default: - data->enc_diff = 1; - break; - } - switch (left_.update( + drivers::TouchWheel::isAngleWithin(wheel_data.wheel_position, 0, 32), + data); + right_.update( + wheel_data.is_wheel_touched && drivers::TouchWheel::isAngleWithin( + wheel_data.wheel_position, 192, 32), + data); + down_.update( + wheel_data.is_wheel_touched && drivers::TouchWheel::isAngleWithin( + wheel_data.wheel_position, 128, 32), + data); + left_.update( wheel_data.is_wheel_touched && - drivers::TouchWheel::isAngleWithin(wheel_data.wheel_position, 64, 32))) { - case Trigger::State::kLongPress: - events::Ui().Dispatch(ui::internal::BackPressed{}); - break; - default: - break; - } + drivers::TouchWheel::isAngleWithin(wheel_data.wheel_position, 64, 32), + data); } } // namespace input |
