4242#include " displayapp/screens/settings/SettingWakeUp.h"
4343#include " displayapp/screens/settings/SettingDisplay.h"
4444#include " displayapp/screens/settings/SettingSteps.h"
45+ #include " displayapp/screens/settings/SettingPineTimeStyle.h"
4546
4647#include " libs/lv_conf.h"
4748
@@ -53,29 +54,26 @@ namespace {
5354 return (SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) != 0 ;
5455 }
5556
56- TouchEvents Convert (Pinetime::Drivers::Cst816S::TouchInfos info) {
57- if (info.isTouch ) {
58- switch (info.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;
76- }
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;
7776 }
78- return TouchEvents::None;
7977 }
8078}
8179
@@ -91,7 +89,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd,
9189 Controllers::Settings& settingsController,
9290 Pinetime::Controllers::MotorController& motorController,
9391 Pinetime::Controllers::MotionController& motionController,
94- Pinetime::Controllers::TimerController& timerController)
92+ Pinetime::Controllers::TimerController& timerController,
93+ Pinetime::Controllers::TouchHandler& touchHandler)
9594 : lcd {lcd},
9695 lvgl {lvgl},
9796 touchPanel {touchPanel},
@@ -104,7 +103,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd,
104103 settingsController {settingsController},
105104 motorController {motorController},
106105 motionController {motionController},
107- timerController {timerController} {
106+ timerController {timerController},
107+ touchHandler {touchHandler} {
108108}
109109
110110void DisplayApp::Start () {
@@ -212,8 +212,7 @@ void DisplayApp::Refresh() {
212212 if (state != States::Running) {
213213 break ;
214214 }
215- auto info = touchPanel.GetTouchInfo ();
216- auto gesture = Convert (info);
215+ auto gesture = ConvertGesture (touchHandler.GestureGet ());
217216 if (gesture == TouchEvents::None) {
218217 break ;
219218 }
@@ -239,11 +238,9 @@ void DisplayApp::Refresh() {
239238 LoadApp (returnToApp, returnDirection);
240239 brightnessController.Set (settingsController.GetBrightness ());
241240 brightnessController.Backup ();
242- } else if (touchMode == TouchModes::Gestures) {
243- if (gesture == TouchEvents::Tap) {
244- lvgl.SetNewTapEvent (info.x , info.y );
245- }
246241 }
242+ } else {
243+ touchHandler.CancelTap ();
247244 }
248245 } break ;
249246 case Messages::ButtonPushed:
@@ -273,18 +270,13 @@ void DisplayApp::Refresh() {
273270 nextApp = Apps::None;
274271 }
275272
276- if (state != States::Idle && touchMode == TouchModes::Polling) {
277- auto info = touchPanel.GetTouchInfo ();
278- if (info.action == 2 ) { // 2 = contact
279- if (!currentScreen->OnTouchEvent (info.x , info.y )) {
280- lvgl.SetNewTapEvent (info.x , info.y );
281- }
282- }
273+ if (touchHandler.IsTouching ()) {
274+ currentScreen->OnTouchEvent (touchHandler.GetX (), touchHandler.GetY ());
283275 }
284276}
285277
286278void DisplayApp::RunningState () {
287- if (!currentScreen->Refresh ()) {
279+ if (!currentScreen->IsRunning ()) {
288280 LoadApp (returnToApp, returnDirection);
289281 }
290282 lv_task_handler ();
@@ -302,6 +294,7 @@ void DisplayApp::ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction
302294}
303295
304296void DisplayApp::LoadApp (Apps app, DisplayApp::FullRefreshDirections direction) {
297+ touchHandler.CancelTap ();
305298 currentScreen.reset (nullptr );
306299 SetFullRefresh (direction);
307300
@@ -378,6 +371,10 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction)
378371 currentScreen = std::make_unique<Screens::SettingSteps>(this , settingsController);
379372 ReturnApp (Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);
380373 break ;
374+ case Apps::SettingPineTimeStyle:
375+ currentScreen = std::make_unique<Screens::SettingPineTimeStyle>(this , settingsController);
376+ ReturnApp (Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);
377+ break ;
381378 case Apps::BatteryInfo:
382379 currentScreen = std::make_unique<Screens::BatteryInfo>(this , batteryController);
383380 ReturnApp (Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);
@@ -467,10 +464,6 @@ void DisplayApp::SetFullRefresh(DisplayApp::FullRefreshDirections direction) {
467464 }
468465}
469466
470- void DisplayApp::SetTouchMode (DisplayApp::TouchModes mode) {
471- touchMode = mode;
472- }
473-
474467void DisplayApp::PushMessageToSystemTask (Pinetime::System::Messages message) {
475468 if (systemTask != nullptr )
476469 systemTask->PushMessage (message);
0 commit comments