From f6731c1a5ac71204e8656d7712d50d76f87b53b6 Mon Sep 17 00:00:00 2001 From: liamcharger Date: Sun, 31 Mar 2024 04:52:29 +1030 Subject: [PATCH 1/7] Initial commit --- src/CMakeLists.txt | 1 + src/displayapp/apps/Apps.h.in | 1 + src/displayapp/apps/CMakeLists.txt | 1 + src/displayapp/screens/WatchFaceNumerals.cpp | 149 +++++++++++++++++++ src/displayapp/screens/WatchFaceNumerals.h | 81 ++++++++++ src/resources/fonts.json | 24 +++ src/resources/fonts/BloggerSans-Bold.ttf | Bin 0 -> 167768 bytes src/resources/resources.json | 50 +++++++ 8 files changed, 307 insertions(+) create mode 100644 src/displayapp/screens/WatchFaceNumerals.cpp create mode 100644 src/displayapp/screens/WatchFaceNumerals.h create mode 100644 src/resources/fonts/BloggerSans-Bold.ttf create mode 100644 src/resources/resources.json diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fd8ece62..bec98dee 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -426,6 +426,7 @@ list(APPEND SOURCE_FILES displayapp/screens/WatchFaceTerminal.cpp displayapp/screens/WatchFacePineTimeStyle.cpp displayapp/screens/WatchFaceCasioStyleG7710.cpp + displayapp/screens/WatchFaceNumerals.cpp ## diff --git a/src/displayapp/apps/Apps.h.in b/src/displayapp/apps/Apps.h.in index 2104a267..ae142086 100644 --- a/src/displayapp/apps/Apps.h.in +++ b/src/displayapp/apps/Apps.h.in @@ -52,6 +52,7 @@ namespace Pinetime { Terminal, Infineat, CasioStyleG7710, + Numerals, }; template diff --git a/src/displayapp/apps/CMakeLists.txt b/src/displayapp/apps/CMakeLists.txt index d7858760..cc822eea 100644 --- a/src/displayapp/apps/CMakeLists.txt +++ b/src/displayapp/apps/CMakeLists.txt @@ -27,6 +27,7 @@ else() set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::Terminal") set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::Infineat") set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::CasioStyleG7710") + set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::Numerals") set(WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}" CACHE STRING "List of watch faces to build into the firmware") endif() diff --git a/src/displayapp/screens/WatchFaceNumerals.cpp b/src/displayapp/screens/WatchFaceNumerals.cpp new file mode 100644 index 00000000..8fb217e4 --- /dev/null +++ b/src/displayapp/screens/WatchFaceNumerals.cpp @@ -0,0 +1,149 @@ +#include "displayapp/screens/WatchFaceNumerals.h" + +#include +#include +#include "displayapp/screens/Symbols.h" +#include "components/ble/NotificationManager.h" +#include "components/settings/Settings.h" + +using namespace Pinetime::Applications::Screens; + +WatchFaceNumerals::WatchFaceNumerals(Controllers::DateTime& dateTimeController, + Controllers::NotificationManager& notificationManager, + Controllers::Settings& settingsController, + Controllers::FS& filesystem) + : currentDateTime {{}}, + dateTimeController {dateTimeController}, + notificationManager {notificationManager}, + settingsController {settingsController} { + + lfs_file f = {}; + if (filesystem.FileOpen(&f, "/fonts/rounded_large.bin", LFS_O_RDONLY) >= 0) { + filesystem.FileClose(&f); + font_large = lv_font_load("F:/fonts/rounded_large.bin"); + } + + if (filesystem.FileOpen(&f, "/fonts/rounded_small.bin", LFS_O_RDONLY) >= 0) { + filesystem.FileClose(&f); + font_small = lv_font_load("F:/fonts/rounded_small.bin"); + } + + notificationIcon = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(notificationIcon, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); + lv_obj_set_style_local_radius(notificationIcon, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); + lv_obj_set_size(notificationIcon, 18, 18); + lv_obj_align(notificationIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 2, -65); + lv_obj_set_hidden(notificationIcon, true); + + label_time_hour = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(label_time_hour, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_large); + lv_obj_set_style_local_text_color(label_time_hour, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_align(label_time_hour, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -160, -125); + + label_time_minute = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(label_time_minute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_large); + lv_obj_set_style_local_text_color(label_time_minute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); + lv_obj_align(label_time_minute, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -160, 0); + + label_time_ampm = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(label_time_ampm, ""); + lv_obj_set_style_local_text_font(label_time_ampm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); + lv_obj_set_style_local_text_color(label_time_ampm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); + lv_obj_align(label_time_ampm, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 2, -28); + + dateDay = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); + lv_label_set_text(dateDay, "--"); + lv_obj_set_style_local_text_font(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); + lv_obj_align(dateDay, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 0); + + dateDayOfWeek = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); + lv_label_set_text(dateDayOfWeek, "---"); + lv_obj_set_style_local_text_font(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); + lv_obj_align(dateDayOfWeek, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 26); + + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); + Refresh(); +} + +WatchFaceNumerals::~WatchFaceNumerals() { + lv_task_del(taskRefresh); + + if (font_large != nullptr) { + lv_font_free(font_large); + } + if (font_small != nullptr) { + lv_font_free(font_small); + } + + lv_obj_clean(lv_scr_act()); +} + +void WatchFaceNumerals::Refresh() { + notificationState = notificationManager.AreNewNotificationsAvailable(); + if (notificationState.IsUpdated()) { + lv_obj_set_hidden(notificationIcon, !notificationState.Get()); + } + + currentDateTime = dateTimeController.CurrentDateTime(); + if (currentDateTime.IsUpdated()) { + auto hour = dateTimeController.Hours(); + auto minute = dateTimeController.Minutes(); + auto year = dateTimeController.Year(); + auto month = dateTimeController.Month(); + auto dayOfWeek = dateTimeController.DayOfWeek(); + auto day = dateTimeController.Day(); + + if (displayedHour != hour || displayedMinute != minute) { + displayedHour = hour; + displayedMinute = minute; + + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { + char ampmChar[4] = "A\nM"; + if (hour == 0) { + hour = 12; + } else if (hour == 12) { + ampmChar[0] = 'P'; + } else if (hour > 12) { + hour = hour - 12; + ampmChar[0] = 'P'; + } + lv_label_set_text(label_time_ampm, ampmChar); + // Should be padded with blank spaces, but the space character doesn't exist in the font + lv_label_set_text_fmt(label_time_hour, "%02d", hour); + lv_label_set_text_fmt(label_time_minute, "%02d", minute); + } else { + lv_label_set_text_fmt(label_time_hour, "%02d", hour); + lv_label_set_text_fmt(label_time_minute, "%02d", minute); + } + } + + if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { + lv_label_set_text_static(dateDayOfWeek, dateTimeController.DayOfWeekShortToString()); + lv_label_set_text_fmt(dateDay, "%d", day); + lv_obj_realign(dateDay); + + currentYear = year; + currentMonth = month; + currentDayOfWeek = dayOfWeek; + currentDay = day; + } + } +} + +bool WatchFaceNumerals::IsAvailable(Pinetime::Controllers::FS& filesystem) { + lfs_file file = {}; + + if (filesystem.FileOpen(&file, "/fonts/rounded_small.bin", LFS_O_RDONLY) < 0) { + return false; + } + + filesystem.FileClose(&file); + if (filesystem.FileOpen(&file, "/fonts/rounded_large.bin", LFS_O_RDONLY) < 0) { + return false; + } + + filesystem.FileClose(&file); + return true; +} \ No newline at end of file diff --git a/src/displayapp/screens/WatchFaceNumerals.h b/src/displayapp/screens/WatchFaceNumerals.h new file mode 100644 index 00000000..7d24748d --- /dev/null +++ b/src/displayapp/screens/WatchFaceNumerals.h @@ -0,0 +1,81 @@ +#pragma once + +#include +#include +#include +#include +#include +#include "displayapp/screens/Screen.h" +#include "components/datetime/DateTimeController.h" +#include "utility/DirtyValue.h" +#include "displayapp/apps/Apps.h" + +namespace Pinetime { + namespace Controllers { + class Settings; + class NotificationManager; + } + + namespace Applications { + namespace Screens { + + class WatchFaceNumerals : public Screen { + public: + WatchFaceNumerals(Controllers::DateTime& dateTimeController, + Controllers::NotificationManager& notificationManager, + Controllers::Settings& settingsController, + Controllers::FS& fs); + ~WatchFaceNumerals() override; + + void Refresh() override; + + static bool IsAvailable(Pinetime::Controllers::FS& filesystem); + + private: + uint8_t displayedHour = -1; + uint8_t displayedMinute = -1; + + uint16_t currentYear = 1970; + Controllers::DateTime::Months currentMonth = Pinetime::Controllers::DateTime::Months::Unknown; + Controllers::DateTime::Days currentDayOfWeek = Pinetime::Controllers::DateTime::Days::Unknown; + uint8_t currentDay = 0; + Utility::DirtyValue notificationState {}; + Utility::DirtyValue> currentDateTime {}; + + lv_obj_t* label_time_hour; + lv_obj_t* label_time_minute; + lv_obj_t* label_time_ampm; + lv_obj_t* label_date; + lv_obj_t* notificationIcon; + lv_obj_t* dateDay; + lv_obj_t* dateDayOfWeek; + + Controllers::DateTime& dateTimeController; + Controllers::NotificationManager& notificationManager; + Controllers::Settings& settingsController; + + lv_font_t* font_large = nullptr; + lv_font_t* font_small = nullptr; + + lv_task_t* taskRefresh; + }; + } + + template <> + struct WatchFaceTraits { + static constexpr WatchFace watchFace = WatchFace::Numerals; + static constexpr const char* name = "Numeral face"; + + static Screens::Screen* Create(AppControllers& controllers) { + return new Screens::WatchFaceNumerals(controllers.dateTimeController, + controllers.notificationManager, + controllers.settingsController, + controllers.filesystem); + }; + + static bool IsAvailable(Pinetime::Controllers::FS& filesystem) { + return Screens::WatchFaceNumerals::IsAvailable(filesystem); + } + }; + } +} diff --git a/src/resources/fonts.json b/src/resources/fonts.json index c4a63349..ef186257 100644 --- a/src/resources/fonts.json +++ b/src/resources/fonts.json @@ -58,5 +58,29 @@ "size": 115, "format": "bin", "target_path": "/fonts/" + }, + "rounded_large": { + "sources": [ + { + "file": "fonts/BloggerSans-Bold.ttf", + "range": "0x30-0x3a" + } + ], + "bpp": 1, + "size": 150, + "format": "bin", + "target_path": "/fonts/" + }, + "rounded_small": { + "sources": [ + { + "file": "fonts/BloggerSans-Bold.ttf", + "range": "0x20-0x7e, 0x410-0x44f, 0xB0" + } + ], + "bpp": 1, + "size": 30, + "format": "bin", + "target_path": "/fonts/" } } diff --git a/src/resources/fonts/BloggerSans-Bold.ttf b/src/resources/fonts/BloggerSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d287255d9192f973bada4a97ddce3ce3a7d7adfc GIT binary patch literal 167768 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 Date: Sun, 31 Mar 2024 04:57:11 +1030 Subject: [PATCH 2/7] Minor improvements --- src/displayapp/screens/WatchFaceNumerals.cpp | 62 +++++++++++--------- src/displayapp/screens/WatchFaceNumerals.h | 9 +-- src/resources/resources.json | 44 +++++++------- 3 files changed, 61 insertions(+), 54 deletions(-) diff --git a/src/displayapp/screens/WatchFaceNumerals.cpp b/src/displayapp/screens/WatchFaceNumerals.cpp index 8fb217e4..28010d75 100644 --- a/src/displayapp/screens/WatchFaceNumerals.cpp +++ b/src/displayapp/screens/WatchFaceNumerals.cpp @@ -31,37 +31,43 @@ WatchFaceNumerals::WatchFaceNumerals(Controllers::DateTime& dateTimeController, notificationIcon = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(notificationIcon, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); lv_obj_set_style_local_radius(notificationIcon, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); - lv_obj_set_size(notificationIcon, 18, 18); - lv_obj_align(notificationIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 2, -65); + lv_obj_set_size(notificationIcon, 12, 12); + lv_obj_align(notificationIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 6, -65); lv_obj_set_hidden(notificationIcon, true); - label_time_hour = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_font(label_time_hour, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_large); - lv_obj_set_style_local_text_color(label_time_hour, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - lv_obj_align(label_time_hour, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -160, -125); + labelTimeHour = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(labelTimeHour, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_large); + lv_obj_set_style_local_text_color(labelTimeHour, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_align(labelTimeHour, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -160, -125); - label_time_minute = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_font(label_time_minute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_large); - lv_obj_set_style_local_text_color(label_time_minute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_obj_align(label_time_minute, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -160, 0); + labelTimeMinute = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(labelTimeMinute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_large); + lv_obj_set_style_local_text_color(labelTimeMinute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); + lv_obj_align(labelTimeMinute, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -160, 0); - label_time_ampm = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(label_time_ampm, ""); - lv_obj_set_style_local_text_font(label_time_ampm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); - lv_obj_set_style_local_text_color(label_time_ampm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); - lv_obj_align(label_time_ampm, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 2, -28); + labelTimeAMPM1 = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(labelTimeAMPM1, ""); + lv_obj_set_style_local_text_font(labelTimeAMPM1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); + lv_obj_set_style_local_text_color(labelTimeAMPM1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); + lv_obj_align(labelTimeAMPM1, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 2, -28); - dateDay = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - lv_label_set_text(dateDay, "--"); - lv_obj_set_style_local_text_font(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); - lv_obj_align(dateDay, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 0); + labelTimeAMPM2 = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(labelTimeAMPM2, ""); + lv_obj_set_style_local_text_font(labelTimeAMPM2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); + lv_obj_set_style_local_text_color(labelTimeAMPM2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); + lv_obj_align(labelTimeAMPM2, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 2, 0); dateDayOfWeek = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); lv_label_set_text(dateDayOfWeek, "---"); lv_obj_set_style_local_text_font(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); - lv_obj_align(dateDayOfWeek, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 26); + lv_obj_align(dateDayOfWeek, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 0); + + dateDay = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); + lv_label_set_text(dateDay, "--"); + lv_obj_set_style_local_text_font(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); + lv_obj_align(dateDay, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 30); taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); Refresh(); @@ -100,7 +106,7 @@ void WatchFaceNumerals::Refresh() { displayedMinute = minute; if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { - char ampmChar[4] = "A\nM"; + char ampmChar[2] = "A"; if (hour == 0) { hour = 12; } else if (hour == 12) { @@ -109,13 +115,13 @@ void WatchFaceNumerals::Refresh() { hour = hour - 12; ampmChar[0] = 'P'; } - lv_label_set_text(label_time_ampm, ampmChar); - // Should be padded with blank spaces, but the space character doesn't exist in the font - lv_label_set_text_fmt(label_time_hour, "%02d", hour); - lv_label_set_text_fmt(label_time_minute, "%02d", minute); + lv_label_set_text(labelTimeAMPM1, ampmChar); + lv_label_set_text(labelTimeAMPM2, "M"); + lv_label_set_text_fmt(labelTimeHour, "%02d", hour); + lv_label_set_text_fmt(labelTimeMinute, "%02d", minute); } else { - lv_label_set_text_fmt(label_time_hour, "%02d", hour); - lv_label_set_text_fmt(label_time_minute, "%02d", minute); + lv_label_set_text_fmt(labelTimeHour, "%02d", hour); + lv_label_set_text_fmt(labelTimeMinute, "%02d", minute); } } diff --git a/src/displayapp/screens/WatchFaceNumerals.h b/src/displayapp/screens/WatchFaceNumerals.h index 7d24748d..c5711e0a 100644 --- a/src/displayapp/screens/WatchFaceNumerals.h +++ b/src/displayapp/screens/WatchFaceNumerals.h @@ -42,9 +42,10 @@ namespace Pinetime { Utility::DirtyValue notificationState {}; Utility::DirtyValue> currentDateTime {}; - lv_obj_t* label_time_hour; - lv_obj_t* label_time_minute; - lv_obj_t* label_time_ampm; + lv_obj_t* labelTimeHour; + lv_obj_t* labelTimeMinute; + lv_obj_t* labelTimeAMPM1; + lv_obj_t* labelTimeAMPM2; lv_obj_t* label_date; lv_obj_t* notificationIcon; lv_obj_t* dateDay; @@ -64,7 +65,7 @@ namespace Pinetime { template <> struct WatchFaceTraits { static constexpr WatchFace watchFace = WatchFace::Numerals; - static constexpr const char* name = "Numeral face"; + static constexpr const char* name = "Numerals"; static Screens::Screen* Create(AppControllers& controllers) { return new Screens::WatchFaceNumerals(controllers.dateTimeController, diff --git a/src/resources/resources.json b/src/resources/resources.json index 3a66f2fa..3bcea4bb 100644 --- a/src/resources/resources.json +++ b/src/resources/resources.json @@ -1,32 +1,36 @@ { "resources": [ + { + "filename": "teko.bin", + "path": "/fonts/teko.bin" + }, { "filename": "7segments_40.bin", "path": "/fonts/7segments_40.bin" }, - { - "filename": "rounded_large.bin", - "path": "/fonts/rounded_large.bin" - }, - { - "filename": "rounded_small.bin", - "path": "/fonts/rounded_small.bin" - }, - { - "filename": "bebas.bin", - "path": "/fonts/bebas.bin" - }, - { - "filename": "7segments_115.bin", - "path": "/fonts/7segments_115.bin" - }, { "filename": "lv_font_dots_40.bin", "path": "/fonts/lv_font_dots_40.bin" }, { - "filename": "teko.bin", - "path": "/fonts/teko.bin" + "filename": "7segments_115.bin", + "path": "/fonts/7segments_115.bin" + }, + { + "filename": "bebas.bin", + "path": "/fonts/bebas.bin" + }, + { + "filename": "rounded_small.bin", + "path": "/fonts/rounded_small.bin" + }, + { + "filename": "rounded_large.bin", + "path": "/fonts/rounded_large.bin" + }, + { + "filename": "pine_small.bin", + "path": "/images/pine_small.bin" }, { "filename": "navigation1.bin", @@ -35,10 +39,6 @@ { "filename": "navigation0.bin", "path": "/images/navigation0.bin" - }, - { - "filename": "pine_small.bin", - "path": "/images/pine_small.bin" } ], "obsolete_files": [ From 206c88c0da06332a12ab1c540a7d3c25abd05924 Mon Sep 17 00:00:00 2001 From: liamcharger Date: Sun, 31 Mar 2024 05:12:35 +1030 Subject: [PATCH 3/7] Fix workflow error --- src/components/settings/Settings.h | 2 +- src/displayapp/UserApps.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 06312077..55df4dd4 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -286,7 +286,7 @@ namespace Pinetime { private: Pinetime::Controllers::FS& fs; - static constexpr uint32_t settingsVersion = 0x0007; + static constexpr uint32_t settingsVersion = 0x0008; struct SettingsData { uint32_t version = settingsVersion; diff --git a/src/displayapp/UserApps.h b/src/displayapp/UserApps.h index 67bbfa7d..282bb175 100644 --- a/src/displayapp/UserApps.h +++ b/src/displayapp/UserApps.h @@ -14,6 +14,7 @@ #include "displayapp/screens/WatchFaceInfineat.h" #include "displayapp/screens/WatchFacePineTimeStyle.h" #include "displayapp/screens/WatchFaceTerminal.h" +#include "displayapp/screens/WatchFaceNumerals.h" namespace Pinetime { namespace Applications { From e25ca95c47dbcb763b7bb2feb3b736db1da26ac0 Mon Sep 17 00:00:00 2001 From: liamcharger Date: Sun, 31 Mar 2024 07:23:25 +1030 Subject: [PATCH 4/7] Minor improvements --- src/displayapp/screens/WatchFaceNumerals.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/displayapp/screens/WatchFaceNumerals.cpp b/src/displayapp/screens/WatchFaceNumerals.cpp index 28010d75..e5306a65 100644 --- a/src/displayapp/screens/WatchFaceNumerals.cpp +++ b/src/displayapp/screens/WatchFaceNumerals.cpp @@ -49,13 +49,13 @@ WatchFaceNumerals::WatchFaceNumerals(Controllers::DateTime& dateTimeController, lv_label_set_text_static(labelTimeAMPM1, ""); lv_obj_set_style_local_text_font(labelTimeAMPM1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); lv_obj_set_style_local_text_color(labelTimeAMPM1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); - lv_obj_align(labelTimeAMPM1, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 2, -28); + lv_obj_align(labelTimeAMPM1, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, -28); labelTimeAMPM2 = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(labelTimeAMPM2, ""); + lv_label_set_text_static(labelTimeAMPM2, "M"); lv_obj_set_style_local_text_font(labelTimeAMPM2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); lv_obj_set_style_local_text_color(labelTimeAMPM2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); - lv_obj_align(labelTimeAMPM2, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 2, 0); + lv_obj_align(labelTimeAMPM2, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); dateDayOfWeek = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); @@ -116,7 +116,6 @@ void WatchFaceNumerals::Refresh() { ampmChar[0] = 'P'; } lv_label_set_text(labelTimeAMPM1, ampmChar); - lv_label_set_text(labelTimeAMPM2, "M"); lv_label_set_text_fmt(labelTimeHour, "%02d", hour); lv_label_set_text_fmt(labelTimeMinute, "%02d", minute); } else { From 3905b3bafd9fc8b8a9f4af6868d003d3e4937883 Mon Sep 17 00:00:00 2001 From: liamcharger Date: Sun, 31 Mar 2024 12:06:41 +1030 Subject: [PATCH 5/7] Minor improvements to notification icon display --- src/displayapp/screens/WatchFaceNumerals.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/displayapp/screens/WatchFaceNumerals.cpp b/src/displayapp/screens/WatchFaceNumerals.cpp index e5306a65..df8eb931 100644 --- a/src/displayapp/screens/WatchFaceNumerals.cpp +++ b/src/displayapp/screens/WatchFaceNumerals.cpp @@ -31,8 +31,8 @@ WatchFaceNumerals::WatchFaceNumerals(Controllers::DateTime& dateTimeController, notificationIcon = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(notificationIcon, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); lv_obj_set_style_local_radius(notificationIcon, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); - lv_obj_set_size(notificationIcon, 12, 12); - lv_obj_align(notificationIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 6, -65); + lv_obj_set_size(notificationIcon, 14, 14); + lv_obj_align(notificationIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 2, -72); lv_obj_set_hidden(notificationIcon, true); labelTimeHour = lv_label_create(lv_scr_act(), nullptr); @@ -49,7 +49,7 @@ WatchFaceNumerals::WatchFaceNumerals(Controllers::DateTime& dateTimeController, lv_label_set_text_static(labelTimeAMPM1, ""); lv_obj_set_style_local_text_font(labelTimeAMPM1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); lv_obj_set_style_local_text_color(labelTimeAMPM1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); - lv_obj_align(labelTimeAMPM1, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, -28); + lv_obj_align(labelTimeAMPM1, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, -32); labelTimeAMPM2 = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(labelTimeAMPM2, "M"); @@ -67,7 +67,7 @@ WatchFaceNumerals::WatchFaceNumerals(Controllers::DateTime& dateTimeController, lv_obj_set_style_local_text_color(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); lv_label_set_text(dateDay, "--"); lv_obj_set_style_local_text_font(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); - lv_obj_align(dateDay, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 30); + lv_obj_align(dateDay, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 34); taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); Refresh(); From e2e063cb376656dfe26e7ef300ca6836763ab38c Mon Sep 17 00:00:00 2001 From: liamcharger Date: Sun, 31 Mar 2024 13:18:30 +1030 Subject: [PATCH 6/7] Fix 24H display issues --- src/displayapp/screens/WatchFaceNumerals.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/displayapp/screens/WatchFaceNumerals.cpp b/src/displayapp/screens/WatchFaceNumerals.cpp index df8eb931..1afe4f1c 100644 --- a/src/displayapp/screens/WatchFaceNumerals.cpp +++ b/src/displayapp/screens/WatchFaceNumerals.cpp @@ -119,6 +119,7 @@ void WatchFaceNumerals::Refresh() { lv_label_set_text_fmt(labelTimeHour, "%02d", hour); lv_label_set_text_fmt(labelTimeMinute, "%02d", minute); } else { + lv_obj_set_hidden(labelTimeAMPM2, true); lv_label_set_text_fmt(labelTimeHour, "%02d", hour); lv_label_set_text_fmt(labelTimeMinute, "%02d", minute); } From 2d47679212bd8d1acd8cba4f8654a957d0d54d98 Mon Sep 17 00:00:00 2001 From: liamcharger Date: Sat, 6 Apr 2024 07:15:17 +1030 Subject: [PATCH 7/7] Minor improvements --- src/displayapp/screens/WatchFaceNumerals.cpp | 8 ++++---- src/resources/fonts.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/displayapp/screens/WatchFaceNumerals.cpp b/src/displayapp/screens/WatchFaceNumerals.cpp index 1afe4f1c..01e860df 100644 --- a/src/displayapp/screens/WatchFaceNumerals.cpp +++ b/src/displayapp/screens/WatchFaceNumerals.cpp @@ -31,8 +31,8 @@ WatchFaceNumerals::WatchFaceNumerals(Controllers::DateTime& dateTimeController, notificationIcon = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_style_local_bg_color(notificationIcon, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); lv_obj_set_style_local_radius(notificationIcon, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); - lv_obj_set_size(notificationIcon, 14, 14); - lv_obj_align(notificationIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 2, -72); + lv_obj_set_size(notificationIcon, 16, 16); + lv_obj_align(notificationIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 4, -76); lv_obj_set_hidden(notificationIcon, true); labelTimeHour = lv_label_create(lv_scr_act(), nullptr); @@ -49,7 +49,7 @@ WatchFaceNumerals::WatchFaceNumerals(Controllers::DateTime& dateTimeController, lv_label_set_text_static(labelTimeAMPM1, ""); lv_obj_set_style_local_text_font(labelTimeAMPM1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); lv_obj_set_style_local_text_color(labelTimeAMPM1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x999999)); - lv_obj_align(labelTimeAMPM1, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, -32); + lv_obj_align(labelTimeAMPM1, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 2, -34); labelTimeAMPM2 = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(labelTimeAMPM2, "M"); @@ -67,7 +67,7 @@ WatchFaceNumerals::WatchFaceNumerals(Controllers::DateTime& dateTimeController, lv_obj_set_style_local_text_color(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); lv_label_set_text(dateDay, "--"); lv_obj_set_style_local_text_font(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_small); - lv_obj_align(dateDay, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 34); + lv_obj_align(dateDay, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 36); taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); Refresh(); diff --git a/src/resources/fonts.json b/src/resources/fonts.json index ef186257..a1135e88 100644 --- a/src/resources/fonts.json +++ b/src/resources/fonts.json @@ -79,7 +79,7 @@ } ], "bpp": 1, - "size": 30, + "size": 34, "format": "bin", "target_path": "/fonts/" }