#pragma once #include #include #include #include #include "displayapp/screens/Screen.h" #include "components/datetime/DateTimeController.h" #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" #include "components/ble/NotificationManager.h" #include "displayapp/screens/BatteryIcon.h" #include "utility/DirtyValue.h" #include "sunset/src/sunset.h" namespace Pinetime { namespace Controllers { class Settings; class Battery; class Ble; class NotificationManager; } namespace Applications { namespace Screens { class WatchFaceAnalog : public Screen { public: WatchFaceAnalog(Controllers::DateTime& dateTimeController, const Controllers::Battery& batteryController, const Controllers::Ble& bleController, Controllers::NotificationManager& notificationManager, Controllers::Settings& settingsController); ~WatchFaceAnalog() override; void Refresh() override; private: uint8_t sHour, sMinute, sSecond; Utility::DirtyValue batteryPercentRemaining {0}; Utility::DirtyValue isCharging {}; Utility::DirtyValue bleState {}; Utility::DirtyValue> currentDateTime; Utility::DirtyValue notificationState {false}; Utility::DirtyValue> currentDate; lv_obj_t* minor_scales; lv_obj_t* major_scales; lv_obj_t* large_scales; lv_obj_t* one; lv_obj_t* twelve; lv_obj_t* axis; lv_obj_t* hour_body; lv_obj_t* hour_body_trace; lv_obj_t* minute_body; lv_obj_t* minute_body_trace; lv_obj_t* second_body; lv_point_t hour_point[2]; lv_point_t hour_point_trace[2]; lv_point_t minute_point[2]; lv_point_t minute_point_trace[2]; lv_point_t second_point[2]; lv_style_t hour_line_style; lv_style_t hour_line_style_trace; lv_style_t minute_line_style; lv_style_t minute_line_style_trace; lv_style_t second_line_style; lv_style_t axis_style; lv_obj_t* label_date_day; lv_obj_t* plugIcon; lv_obj_t* notificationIcon; lv_obj_t* bleIcon; BatteryIcon batteryIcon; Controllers::Settings::Location location; SunSet sun; int16_t minutesSunrise; int16_t minutesSunset; int16_t minutesDaytime; int16_t minutesNighttime; int16_t minutesBeforeSunset; const Controllers::DateTime& dateTimeController; const Controllers::Battery& batteryController; const Controllers::Ble& bleController; Controllers::NotificationManager& notificationManager; Controllers::Settings& settingsController; void drawWatchFaceWadokei(); void UpdateClock(); void SetBatteryIcon(); lv_task_t* taskRefresh; }; } template <> struct WatchFaceTraits { static constexpr WatchFace watchFace = WatchFace::Analog; static constexpr const char* name = "Analog face"; static Screens::Screen* Create(AppControllers& controllers) { return new Screens::WatchFaceAnalog(controllers.dateTimeController, controllers.batteryController, controllers.bleController, controllers.notificationManager, controllers.settingsController); }; static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) { return true; } }; } }