@@ -54,29 +54,26 @@ namespace {
5454 return (SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) != 0 ;
5555 }
5656
57- TouchEvents Convert (Pinetime::Drivers::Cst816S::TouchInfos info) {
58- if (info.isValid ) {
59- switch (info.gesture ) {
60- case Pinetime::Drivers::Cst816S::Gestures::SingleTap:
61- return TouchEvents::Tap;
62- case Pinetime::Drivers::Cst816S::Gestures::LongPress:
63- return TouchEvents::LongTap;
64- case Pinetime::Drivers::Cst816S::Gestures::DoubleTap:
65- return TouchEvents::DoubleTap;
66- case Pinetime::Drivers::Cst816S::Gestures::SlideRight:
67- return TouchEvents::SwipeRight;
68- case Pinetime::Drivers::Cst816S::Gestures::SlideLeft:
69- return TouchEvents::SwipeLeft;
70- case Pinetime::Drivers::Cst816S::Gestures::SlideDown:
71- return TouchEvents::SwipeDown;
72- case Pinetime::Drivers::Cst816S::Gestures::SlideUp:
73- return TouchEvents::SwipeUp;
74- case Pinetime::Drivers::Cst816S::Gestures::None:
75- default :
76- return TouchEvents::None;
77- }
57+ TouchEvents ConvertGesture (Pinetime::Drivers::Cst816S::Gestures gesture) {
58+ switch (gesture) {
59+ case Pinetime::Drivers::Cst816S::Gestures::SingleTap:
60+ return TouchEvents::Tap;
61+ case Pinetime::Drivers::Cst816S::Gestures::LongPress:
62+ return TouchEvents::LongTap;
63+ case Pinetime::Drivers::Cst816S::Gestures::DoubleTap:
64+ return TouchEvents::DoubleTap;
65+ case Pinetime::Drivers::Cst816S::Gestures::SlideRight:
66+ return TouchEvents::SwipeRight;
67+ case Pinetime::Drivers::Cst816S::Gestures::SlideLeft:
68+ return TouchEvents::SwipeLeft;
69+ case Pinetime::Drivers::Cst816S::Gestures::SlideDown:
70+ return TouchEvents::SwipeDown;
71+ case Pinetime::Drivers::Cst816S::Gestures::SlideUp:
72+ return TouchEvents::SwipeUp;
73+ case Pinetime::Drivers::Cst816S::Gestures::None:
74+ default :
75+ return TouchEvents::None;
7876 }
79- return TouchEvents::None;
8077 }
8178}
8279
@@ -92,7 +89,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd,
9289 Controllers::Settings& settingsController,
9390 Pinetime::Controllers::MotorController& motorController,
9491 Pinetime::Controllers::MotionController& motionController,
95- Pinetime::Controllers::TimerController& timerController)
92+ Pinetime::Controllers::TimerController& timerController,
93+ Pinetime::Controllers::TouchHandler& touchHandler)
9694 : lcd {lcd},
9795 lvgl {lvgl},
9896 touchPanel {touchPanel},
@@ -105,7 +103,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd,
105103 settingsController {settingsController},
106104 motorController {motorController},
107105 motionController {motionController},
108- timerController {timerController} {
106+ timerController {timerController},
107+ touchHandler {touchHandler} {
109108}
110109
111110void DisplayApp::Start (System::BootErrors error) {
@@ -218,8 +217,7 @@ void DisplayApp::Refresh() {
218217 if (state != States::Running) {
219218 break ;
220219 }
221- auto info = touchPanel.GetTouchInfo ();
222- auto gesture = Convert (info);
220+ auto gesture = ConvertGesture (touchHandler.GestureGet ());
223221 if (gesture == TouchEvents::None) {
224222 break ;
225223 }
@@ -245,11 +243,9 @@ void DisplayApp::Refresh() {
245243 LoadApp (returnToApp, returnDirection);
246244 brightnessController.Set (settingsController.GetBrightness ());
247245 brightnessController.Backup ();
248- } else if (touchMode == TouchModes::Gestures) {
249- if (gesture == TouchEvents::Tap) {
250- lvgl.SetNewTapEvent (info.x , info.y );
251- }
252246 }
247+ } else {
248+ touchHandler.CancelTap ();
253249 }
254250 } break ;
255251 case Messages::ButtonPushed:
@@ -279,13 +275,8 @@ void DisplayApp::Refresh() {
279275 nextApp = Apps::None;
280276 }
281277
282- if (state != States::Idle && touchMode == TouchModes::Polling) {
283- auto info = touchPanel.GetTouchInfo ();
284- if (info.action == 2 ) { // 2 = contact
285- if (!currentScreen->OnTouchEvent (info.x , info.y )) {
286- lvgl.SetNewTapEvent (info.x , info.y );
287- }
288- }
278+ if (touchHandler.IsTouching ()) {
279+ currentScreen->OnTouchEvent (touchHandler.GetX (), touchHandler.GetY ());
289280 }
290281}
291282
@@ -308,6 +299,7 @@ void DisplayApp::ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction
308299}
309300
310301void DisplayApp::LoadApp (Apps app, DisplayApp::FullRefreshDirections direction) {
302+ touchHandler.CancelTap ();
311303 currentScreen.reset (nullptr );
312304 SetFullRefresh (direction);
313305
@@ -478,10 +470,6 @@ void DisplayApp::SetFullRefresh(DisplayApp::FullRefreshDirections direction) {
478470 }
479471}
480472
481- void DisplayApp::SetTouchMode (DisplayApp::TouchModes mode) {
482- touchMode = mode;
483- }
484-
485473void DisplayApp::PushMessageToSystemTask (Pinetime::System::Messages message) {
486474 if (systemTask != nullptr )
487475 systemTask->PushMessage (message);
0 commit comments