summaryrefslogtreecommitdiff
path: root/src/DisplayApp/DisplayApp.cpp
diff options
context:
space:
mode:
authorJF <jf@codingfield.com>2020-03-09 21:29:12 +0100
committerJF <jf@codingfield.com>2020-03-09 21:29:12 +0100
commit35e221078bf8e7b1548f5b75c391404d098442a0 (patch)
tree283687c96c5b8a33716229cc77c0fd23cc2ae5dd /src/DisplayApp/DisplayApp.cpp
parent968f18f4727d865242fc67d55f298b196f75b0f8 (diff)
Add support for gestures and integrate it with the vertical scrolling transition.
Diffstat (limited to 'src/DisplayApp/DisplayApp.cpp')
-rw-r--r--src/DisplayApp/DisplayApp.cpp92
1 files changed, 67 insertions, 25 deletions
diff --git a/src/DisplayApp/DisplayApp.cpp b/src/DisplayApp/DisplayApp.cpp
index 3c980dc9..902432ac 100644
--- a/src/DisplayApp/DisplayApp.cpp
+++ b/src/DisplayApp/DisplayApp.cpp
@@ -33,6 +33,7 @@ DisplayApp::DisplayApp(Pinetime::Drivers::St7789& lcd,
currentScreen{new Screens::Clock(this, dateTimeController, batteryController, bleController) },
systemTask{systemTask} {
msgQueue = xQueueCreate(queueSize, itemSize);
+ onClockApp = true;
}
void DisplayApp::Start() {
@@ -112,25 +113,45 @@ void DisplayApp::Refresh() {
case Messages::UpdateBatteryLevel:
// clockScreen.SetBatteryPercentRemaining(batteryController.PercentRemaining());
break;
- case Messages::TouchEvent:
- if(state != States::Running) break;
- OnTouchEvent();
+ case Messages::TouchEvent: {
+ if (state != States::Running) break;
+ auto gesture = OnTouchEvent();
+ switch (gesture) {
+ case DisplayApp::TouchEvents::SwipeUp:
+ currentScreen->OnButtonPushed();
+ lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Up);
+ break;
+ case DisplayApp::TouchEvents::SwipeDown:
+ currentScreen->OnButtonPushed();
+ lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Down);
+ break;
+ default:
+ break;
+ }
+ }
break;
case Messages::ButtonPushed:
-// if(!currentScreen->OnButtonPushed()) {
-// systemTask.PushMessage(System::SystemTask::Messages::GoToSleep);
-// }
- lvgl.SetFullRefresh();
- lv_disp_set_direction(lv_disp_get_default(), 0);
- currentScreen.reset(nullptr);
- if(toggle) {
- currentScreen.reset(new Screens::Tile(this));
- toggle = false;
- } else {
- currentScreen.reset(new Screens::Clock(this, dateTimeController, batteryController, bleController));
- toggle = true;
+ if(onClockApp)
+ systemTask.PushMessage(System::SystemTask::Messages::GoToSleep);
+ else {
+ auto buttonUsedByApp = currentScreen->OnButtonPushed();
+ if (!buttonUsedByApp) {
+ systemTask.PushMessage(System::SystemTask::Messages::GoToSleep);
+ } else {
+ lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Up);
+ }
}
+// lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Down);
+// currentScreen.reset(nullptr);
+// if(toggle) {
+// currentScreen.reset(new Screens::Tile(this));
+// toggle = false;
+// } else {
+// currentScreen.reset(new Screens::Clock(this, dateTimeController, batteryController, bleController));
+// toggle = true;
+// }
+
break;
}
}
@@ -140,12 +161,15 @@ void DisplayApp::RunningState() {
// clockScreen.SetCurrentDateTime(dateTimeController.CurrentDateTime());
if(!currentScreen->Refresh()) {
- lvgl.SetFullRefresh();
currentScreen.reset(nullptr);
+ onClockApp = false;
switch(nextApp) {
case Apps::None:
case Apps::Launcher: currentScreen.reset(new Screens::Tile(this)); break;
- case Apps::Clock: currentScreen.reset(new Screens::Clock(this, dateTimeController, batteryController, bleController)); break;
+ case Apps::Clock:
+ currentScreen.reset(new Screens::Clock(this, dateTimeController, batteryController, bleController));
+ onClockApp = true;
+ break;
case Apps::Test: currentScreen.reset(new Screens::Message(this)); break;
case Apps::Meter: currentScreen.reset(new Screens::Meter(this)); break;
case Apps::Gauge: currentScreen.reset(new Screens::Gauge(this)); break;
@@ -169,14 +193,32 @@ void DisplayApp::PushMessage(DisplayApp::Messages msg) {
}
}
-static uint16_t pointColor = 0x07e0;
-void DisplayApp::OnTouchEvent() {
-// auto info = touchPanel.GetTouchInfo();
-//
-// if(info.isTouch) {
-// lcd.DrawPixel(info.x, info.y, pointColor);
-// pointColor+=10;
-// }
+DisplayApp::TouchEvents DisplayApp::OnTouchEvent() {
+ auto info = touchPanel.GetTouchInfo();
+ if(info.isTouch) {
+ switch(info.gesture) {
+ case Pinetime::Drivers::Cst816S::Gestures::SingleTap:
+ // TODO set x,y to LittleVgl
+ lvgl.SetNewTapEvent(info.x, info.y);
+ return DisplayApp::TouchEvents::Tap;
+ case Pinetime::Drivers::Cst816S::Gestures::LongPress:
+ return DisplayApp::TouchEvents::LongTap;
+ case Pinetime::Drivers::Cst816S::Gestures::DoubleTap:
+ return DisplayApp::TouchEvents::DoubleTap;
+ case Pinetime::Drivers::Cst816S::Gestures::SlideRight:
+ return DisplayApp::TouchEvents::SwipeRight;
+ case Pinetime::Drivers::Cst816S::Gestures::SlideLeft:
+ return DisplayApp::TouchEvents::SwipeLeft;
+ case Pinetime::Drivers::Cst816S::Gestures::SlideDown:
+ return DisplayApp::TouchEvents::SwipeDown;
+ case Pinetime::Drivers::Cst816S::Gestures::SlideUp:
+ return DisplayApp::TouchEvents::SwipeUp;
+ case Pinetime::Drivers::Cst816S::Gestures::None:
+ default:
+ return DisplayApp::TouchEvents::None;
+ }
+ }
+ return DisplayApp::TouchEvents::None;
}
void DisplayApp::StartApp(DisplayApp::Apps app) {