diff options
author | JF002 <JF002@users.noreply.github.com> | 2021-08-28 15:06:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-28 15:06:03 +0200 |
commit | 969de9a8bccfa97da29de2eac61be9325dd2fdaa (patch) | |
tree | 820a3bbe74993ff6ce6b7f430d187a397a46f363 /src/touchhandler/TouchHandler.cpp | |
parent | df8ea7fe523bb9ec0ac3e24f0b1bebe5743d90cc (diff) | |
parent | 85c99797dad39348976d92ecf935536f362ee2c5 (diff) |
Merge pull request #492 from Riksu9000/new_touch_handler
New touch handler
Diffstat (limited to 'src/touchhandler/TouchHandler.cpp')
-rw-r--r-- | src/touchhandler/TouchHandler.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/touchhandler/TouchHandler.cpp b/src/touchhandler/TouchHandler.cpp new file mode 100644 index 00000000..735b311a --- /dev/null +++ b/src/touchhandler/TouchHandler.cpp @@ -0,0 +1,65 @@ +#include "TouchHandler.h" + +using namespace Pinetime::Controllers; + +TouchHandler::TouchHandler(Drivers::Cst816S& touchPanel, Components::LittleVgl& lvgl) : touchPanel {touchPanel}, lvgl {lvgl} { +} + +void TouchHandler::CancelTap() { + if (info.touching) { + isCancelled = true; + lvgl.SetNewTouchPoint(-1, -1, true); + } +} + +Pinetime::Drivers::Cst816S::Gestures TouchHandler::GestureGet() { + auto returnGesture = gesture; + gesture = Drivers::Cst816S::Gestures::None; + return returnGesture; +} + +bool TouchHandler::GetNewTouchInfo() { + info = touchPanel.GetTouchInfo(); + + if (!info.isValid) { + return false; + } + + if (info.gesture != Pinetime::Drivers::Cst816S::Gestures::None) { + if (gestureReleased) { + if (info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideDown || + info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideLeft || + info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideUp || + info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideRight || + info.gesture == Pinetime::Drivers::Cst816S::Gestures::LongPress) { + if (info.touching) { + gesture = info.gesture; + gestureReleased = false; + } + } else { + gesture = info.gesture; + } + } + } + + if (!info.touching) { + gestureReleased = true; + } + + return true; +} + +void TouchHandler::UpdateLvglTouchPoint() { + if (info.touching) { + if (!isCancelled) { + lvgl.SetNewTouchPoint(info.x, info.y, true); + } + } else { + if (isCancelled) { + lvgl.SetNewTouchPoint(-1, -1, false); + isCancelled = false; + } else { + lvgl.SetNewTouchPoint(info.x, info.y, false); + } + } +} |