Add the possibility to the screen to handle a touch gesture.
A default action is taken if the current screen doesn't handle it.
This commit is contained in:
		
							parent
							
								
									2c55ab20b4
								
							
						
					
					
						commit
						8ed6ffaaf8
					
				@ -242,6 +242,7 @@ set(INCLUDE_FILES
 | 
				
			|||||||
  Logging/NrfLogger.h
 | 
					  Logging/NrfLogger.h
 | 
				
			||||||
  BlinkApp/BlinkApp.h
 | 
					  BlinkApp/BlinkApp.h
 | 
				
			||||||
  DisplayApp/DisplayApp.h
 | 
					  DisplayApp/DisplayApp.h
 | 
				
			||||||
 | 
					  DisplayApp/TouchEvents.h
 | 
				
			||||||
  DisplayApp/Screens/Screen.h
 | 
					  DisplayApp/Screens/Screen.h
 | 
				
			||||||
  DisplayApp/Screens/Clock.h
 | 
					  DisplayApp/Screens/Clock.h
 | 
				
			||||||
  DisplayApp/Screens/Message.h
 | 
					  DisplayApp/Screens/Message.h
 | 
				
			||||||
@ -288,4 +289,4 @@ link_directories(
 | 
				
			|||||||
  ../
 | 
					  ../
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
nRF5x_addExecutable(pinetime-app "${SOURCE_FILES}")
 | 
					nRF5x_addExecutable(pinetime-app "${SOURCE_FILES}" ${INCLUDE_FILES})
 | 
				
			||||||
 | 
				
			|||||||
@ -110,12 +110,13 @@ void DisplayApp::Refresh() {
 | 
				
			|||||||
      case Messages::TouchEvent: {
 | 
					      case Messages::TouchEvent: {
 | 
				
			||||||
        if (state != States::Running) break;
 | 
					        if (state != States::Running) break;
 | 
				
			||||||
        auto gesture = OnTouchEvent();
 | 
					        auto gesture = OnTouchEvent();
 | 
				
			||||||
 | 
					        if(!currentScreen->OnTouchEvent(gesture)) {
 | 
				
			||||||
          switch (gesture) {
 | 
					          switch (gesture) {
 | 
				
			||||||
          case DisplayApp::TouchEvents::SwipeUp:
 | 
					            case TouchEvents::SwipeUp:
 | 
				
			||||||
              currentScreen->OnButtonPushed();
 | 
					              currentScreen->OnButtonPushed();
 | 
				
			||||||
              lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Up);
 | 
					              lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Up);
 | 
				
			||||||
              break;
 | 
					              break;
 | 
				
			||||||
          case DisplayApp::TouchEvents::SwipeDown:
 | 
					            case TouchEvents::SwipeDown:
 | 
				
			||||||
              currentScreen->OnButtonPushed();
 | 
					              currentScreen->OnButtonPushed();
 | 
				
			||||||
              lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Down);
 | 
					              lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Down);
 | 
				
			||||||
              break;
 | 
					              break;
 | 
				
			||||||
@ -123,6 +124,7 @@ void DisplayApp::Refresh() {
 | 
				
			|||||||
              break;
 | 
					              break;
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      case Messages::ButtonPushed:
 | 
					      case Messages::ButtonPushed:
 | 
				
			||||||
        if(onClockApp)
 | 
					        if(onClockApp)
 | 
				
			||||||
@ -189,32 +191,31 @@ void DisplayApp::PushMessage(DisplayApp::Messages msg) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DisplayApp::TouchEvents DisplayApp::OnTouchEvent() {
 | 
					TouchEvents DisplayApp::OnTouchEvent() {
 | 
				
			||||||
  auto info = touchPanel.GetTouchInfo();
 | 
					  auto info = touchPanel.GetTouchInfo();
 | 
				
			||||||
  if(info.isTouch) {
 | 
					  if(info.isTouch) {
 | 
				
			||||||
    switch(info.gesture) {
 | 
					    switch(info.gesture) {
 | 
				
			||||||
      case Pinetime::Drivers::Cst816S::Gestures::SingleTap:
 | 
					      case Pinetime::Drivers::Cst816S::Gestures::SingleTap:
 | 
				
			||||||
        // TODO set x,y to LittleVgl
 | 
					 | 
				
			||||||
        lvgl.SetNewTapEvent(info.x, info.y);
 | 
					        lvgl.SetNewTapEvent(info.x, info.y);
 | 
				
			||||||
        return DisplayApp::TouchEvents::Tap;
 | 
					        return TouchEvents::Tap;
 | 
				
			||||||
      case Pinetime::Drivers::Cst816S::Gestures::LongPress:
 | 
					      case Pinetime::Drivers::Cst816S::Gestures::LongPress:
 | 
				
			||||||
        return DisplayApp::TouchEvents::LongTap;
 | 
					        return TouchEvents::LongTap;
 | 
				
			||||||
      case Pinetime::Drivers::Cst816S::Gestures::DoubleTap:
 | 
					      case Pinetime::Drivers::Cst816S::Gestures::DoubleTap:
 | 
				
			||||||
        return DisplayApp::TouchEvents::DoubleTap;
 | 
					        return TouchEvents::DoubleTap;
 | 
				
			||||||
      case Pinetime::Drivers::Cst816S::Gestures::SlideRight:
 | 
					      case Pinetime::Drivers::Cst816S::Gestures::SlideRight:
 | 
				
			||||||
        return DisplayApp::TouchEvents::SwipeRight;
 | 
					        return TouchEvents::SwipeRight;
 | 
				
			||||||
      case Pinetime::Drivers::Cst816S::Gestures::SlideLeft:
 | 
					      case Pinetime::Drivers::Cst816S::Gestures::SlideLeft:
 | 
				
			||||||
        return DisplayApp::TouchEvents::SwipeLeft;
 | 
					        return TouchEvents::SwipeLeft;
 | 
				
			||||||
      case Pinetime::Drivers::Cst816S::Gestures::SlideDown:
 | 
					      case Pinetime::Drivers::Cst816S::Gestures::SlideDown:
 | 
				
			||||||
        return DisplayApp::TouchEvents::SwipeDown;
 | 
					        return TouchEvents::SwipeDown;
 | 
				
			||||||
      case Pinetime::Drivers::Cst816S::Gestures::SlideUp:
 | 
					      case Pinetime::Drivers::Cst816S::Gestures::SlideUp:
 | 
				
			||||||
        return DisplayApp::TouchEvents::SwipeUp;
 | 
					        return TouchEvents::SwipeUp;
 | 
				
			||||||
      case Pinetime::Drivers::Cst816S::Gestures::None:
 | 
					      case Pinetime::Drivers::Cst816S::Gestures::None:
 | 
				
			||||||
      default:
 | 
					      default:
 | 
				
			||||||
        return DisplayApp::TouchEvents::None;
 | 
					        return TouchEvents::None;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return DisplayApp::TouchEvents::None;
 | 
					  return TouchEvents::None;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void DisplayApp::StartApp(DisplayApp::Apps app) {
 | 
					void DisplayApp::StartApp(DisplayApp::Apps app) {
 | 
				
			||||||
 | 
				
			|||||||
@ -15,6 +15,7 @@
 | 
				
			|||||||
#include "LittleVgl.h"
 | 
					#include "LittleVgl.h"
 | 
				
			||||||
#include <date/date.h>
 | 
					#include <date/date.h>
 | 
				
			||||||
#include <DisplayApp/Screens/Clock.h>
 | 
					#include <DisplayApp/Screens/Clock.h>
 | 
				
			||||||
 | 
					#include "TouchEvents.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Pinetime {
 | 
					namespace Pinetime {
 | 
				
			||||||
@ -26,8 +27,7 @@ namespace Pinetime {
 | 
				
			|||||||
      public:
 | 
					      public:
 | 
				
			||||||
        enum class States {Idle, Running};
 | 
					        enum class States {Idle, Running};
 | 
				
			||||||
        enum class Messages : uint8_t {GoToSleep, GoToRunning, UpdateDateTime, UpdateBleConnection, UpdateBatteryLevel, TouchEvent, SwitchScreen,ButtonPushed} ;
 | 
					        enum class Messages : uint8_t {GoToSleep, GoToRunning, UpdateDateTime, UpdateBleConnection, UpdateBatteryLevel, TouchEvent, SwitchScreen,ButtonPushed} ;
 | 
				
			||||||
        enum class TouchEvents { None, Tap, SwipeLeft, SwipeRight, SwipeUp, SwipeDown, LongTap, DoubleTap
 | 
					
 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        DisplayApp(Pinetime::Drivers::St7789& lcd,
 | 
					        DisplayApp(Pinetime::Drivers::St7789& lcd,
 | 
				
			||||||
                   Pinetime::Components::LittleVgl& lvgl,
 | 
					                   Pinetime::Components::LittleVgl& lvgl,
 | 
				
			||||||
                   Pinetime::Drivers::Cst816S&,
 | 
					                   Pinetime::Drivers::Cst816S&,
 | 
				
			||||||
 | 
				
			|||||||
@ -70,3 +70,23 @@ uint8_t Brightness::LevelToInt(Pinetime::Controllers::BrightnessController::Leve
 | 
				
			|||||||
    default : return 0;
 | 
					    default : return 0;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool Brightness::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
 | 
				
			||||||
 | 
					  switch(event) {
 | 
				
			||||||
 | 
					    case TouchEvents::SwipeLeft:
 | 
				
			||||||
 | 
					      brightness.Lower();
 | 
				
			||||||
 | 
					      SetValue();
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					    case TouchEvents::SwipeRight:
 | 
				
			||||||
 | 
					      brightness.Higher();
 | 
				
			||||||
 | 
					      SetValue();
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					    default:
 | 
				
			||||||
 | 
					      return false;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Brightness::SetValue() {
 | 
				
			||||||
 | 
					  lv_slider_set_value(slider, LevelToInt(brightness.Level()), LV_ANIM_OFF);
 | 
				
			||||||
 | 
					  lv_label_set_text(slider_label, LevelToString(brightness.Level()));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,6 +13,7 @@ namespace Pinetime {
 | 
				
			|||||||
          ~Brightness() override;
 | 
					          ~Brightness() override;
 | 
				
			||||||
          bool Refresh() override;
 | 
					          bool Refresh() override;
 | 
				
			||||||
          bool OnButtonPushed() override;
 | 
					          bool OnButtonPushed() override;
 | 
				
			||||||
 | 
					          bool OnTouchEvent(TouchEvents event) override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          void OnValueChanged();
 | 
					          void OnValueChanged();
 | 
				
			||||||
        private:
 | 
					        private:
 | 
				
			||||||
@ -25,6 +26,7 @@ namespace Pinetime {
 | 
				
			|||||||
          const char* LevelToString(Controllers::BrightnessController::Levels level);
 | 
					          const char* LevelToString(Controllers::BrightnessController::Levels level);
 | 
				
			||||||
          uint8_t LevelToInt(Controllers::BrightnessController::Levels level);
 | 
					          uint8_t LevelToInt(Controllers::BrightnessController::Levels level);
 | 
				
			||||||
          void SetValue(uint8_t value);
 | 
					          void SetValue(uint8_t value);
 | 
				
			||||||
 | 
					          void SetValue();
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,5 @@
 | 
				
			|||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					#include "../TouchEvents.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Pinetime {
 | 
					namespace Pinetime {
 | 
				
			||||||
  namespace Applications {
 | 
					  namespace Applications {
 | 
				
			||||||
@ -15,6 +16,9 @@ namespace Pinetime {
 | 
				
			|||||||
          // Return false if the button hasn't been handled by the app, true if it has been handled
 | 
					          // Return false if the button hasn't been handled by the app, true if it has been handled
 | 
				
			||||||
          virtual bool OnButtonPushed() { return false; }
 | 
					          virtual bool OnButtonPushed() { return false; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          // Return false if the event hasn't been handled by the app, true if it has been handled
 | 
				
			||||||
 | 
					          virtual bool OnTouchEvent(TouchEvents event) { return false; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        protected:
 | 
					        protected:
 | 
				
			||||||
          DisplayApp* app;
 | 
					          DisplayApp* app;
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										8
									
								
								src/DisplayApp/TouchEvents.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/DisplayApp/TouchEvents.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Pinetime {
 | 
				
			||||||
 | 
					  namespace Applications {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    enum class TouchEvents { None, Tap, SwipeLeft, SwipeRight, SwipeUp, SwipeDown, LongTap, DoubleTap};
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user