summaryrefslogtreecommitdiff
path: root/src/input/input_touch_dpad.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/input_touch_dpad.cpp')
-rw-r--r--src/input/input_touch_dpad.cpp67
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