From 319dfd23e7dd1ecfedea113e49dfe30b5a814c67 Mon Sep 17 00:00:00 2001 From: ITCactus Date: Mon, 9 May 2022 17:45:53 +0200 Subject: [new watchface] watchface inspired by G7710, with day of year and week number info --- src/CMakeLists.txt | 3 + src/components/settings/Settings.h | 12 +- src/displayapp/fonts/7segment.woff | Bin 0 -> 2124 bytes src/displayapp/fonts/lv_font_7segment_115.c | 735 +++++++++++++++++++++ src/displayapp/fonts/lv_font_7segment_40.c | 228 +++++++ src/displayapp/fonts/lv_font_dots_40.c | 410 ++++++++++++ src/displayapp/fonts/repetitionscrolling.ttf | Bin 0 -> 42872 bytes src/displayapp/screens/CheckboxList.cpp | 115 ++++ src/displayapp/screens/CheckboxList.h | 49 ++ src/displayapp/screens/Clock.cpp | 15 + src/displayapp/screens/Clock.h | 1 + .../screens/WatchFaceCasioStyleG7710.cpp | 297 +++++++++ src/displayapp/screens/WatchFaceCasioStyleG7710.h | 91 +++ src/displayapp/screens/settings/SettingWatchFace.h | 13 +- src/libs/lv_conf.h | 3 + 15 files changed, 1967 insertions(+), 5 deletions(-) create mode 100644 src/displayapp/fonts/7segment.woff create mode 100644 src/displayapp/fonts/lv_font_7segment_115.c create mode 100644 src/displayapp/fonts/lv_font_7segment_40.c create mode 100644 src/displayapp/fonts/lv_font_dots_40.c create mode 100644 src/displayapp/fonts/repetitionscrolling.ttf create mode 100644 src/displayapp/screens/CheckboxList.cpp create mode 100644 src/displayapp/screens/CheckboxList.h create mode 100644 src/displayapp/screens/WatchFaceCasioStyleG7710.cpp create mode 100644 src/displayapp/screens/WatchFaceCasioStyleG7710.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3b7503fd..59119c49 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -396,6 +396,7 @@ list(APPEND SOURCE_FILES displayapp/screens/Motion.cpp displayapp/screens/FlashLight.cpp displayapp/screens/List.cpp + displayapp/screens/CheckboxList.cpp displayapp/screens/BatteryInfo.cpp displayapp/screens/Steps.cpp displayapp/screens/Timer.cpp @@ -426,6 +427,7 @@ list(APPEND SOURCE_FILES displayapp/screens/WatchFaceDigital.cpp displayapp/screens/WatchFaceTerminal.cpp displayapp/screens/WatchFacePineTimeStyle.cpp + displayapp/screens/WatchFaceCasioStyleG7710.cpp ## @@ -600,6 +602,7 @@ set(INCLUDE_FILES displayapp/screens/FirmwareUpdate.h displayapp/screens/FirmwareValidation.h displayapp/screens/ApplicationList.h + displayapp/screens/CheckboxList.h displayapp/Apps.h displayapp/screens/Notifications.h displayapp/screens/HeartRate.h diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 3b113ead..83987b77 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -102,6 +102,14 @@ namespace Pinetime { return appMenu; }; + void SetWatchfacesMenu(uint8_t menu) { + watchFacesMenu = menu; + }; + + uint8_t GetWatchfacesMenu() const { + return watchFacesMenu; + }; + void SetSettingsMenu(uint8_t menu) { settingsMenu = menu; }; @@ -212,7 +220,7 @@ namespace Pinetime { private: Pinetime::Controllers::FS& fs; - static constexpr uint32_t settingsVersion = 0x0003; + static constexpr uint32_t settingsVersion = 0x0004; struct SettingsData { uint32_t version = settingsVersion; uint32_t stepsGoal = 10000; @@ -236,6 +244,8 @@ namespace Pinetime { uint8_t appMenu = 0; uint8_t settingsMenu = 0; + uint8_t watchFacesMenu = 0; + /* ble state is intentionally not saved with the other watch settings and initialized * to off (false) on every boot because we always want ble to be enabled on startup */ diff --git a/src/displayapp/fonts/7segment.woff b/src/displayapp/fonts/7segment.woff new file mode 100644 index 00000000..79ed9249 Binary files /dev/null and b/src/displayapp/fonts/7segment.woff differ diff --git a/src/displayapp/fonts/lv_font_7segment_115.c b/src/displayapp/fonts/lv_font_7segment_115.c new file mode 100644 index 00000000..1d509403 --- /dev/null +++ b/src/displayapp/fonts/lv_font_7segment_115.c @@ -0,0 +1,735 @@ +/******************************************************************************* + * Size: 115 px + * Bpp: 1 + * Opts: + ******************************************************************************/ + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include "lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef LV_FONT_7SEGMENT_115 +#define LV_FONT_7SEGMENT_115 1 +#endif + +#if LV_FONT_7SEGMENT_115 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0020 " " */ + 0x0, + + /* U+0030 "0" */ + 0x0, 0xf, 0xff, 0xff, 0xff, 0x80, 0x0, 0x1f, + 0xff, 0xff, 0xff, 0x88, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0xcf, 0x0, 0x7, 0xff, 0xff, 0xff, 0xc7, + 0xc0, 0x11, 0xff, 0xff, 0xff, 0xe7, 0xe0, 0x1c, + 0x7f, 0xff, 0xff, 0xf3, 0xf8, 0x1f, 0x1f, 0xff, + 0xff, 0xf3, 0xfc, 0xf, 0xc7, 0xff, 0xff, 0xf9, + 0xff, 0x7, 0xf1, 0xff, 0xff, 0xf9, 0xff, 0x83, + 0xfc, 0x7f, 0xff, 0xfc, 0xff, 0xc3, 0xff, 0x0, + 0x0, 0x0, 0x7f, 0xe1, 0xff, 0xc0, 0x0, 0x0, + 0x7f, 0xf0, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xf8, + 0x7f, 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x3f, 0xf8, + 0x0, 0x0, 0xf, 0xfe, 0x1f, 0xfc, 0x0, 0x0, + 0x7, 0xff, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, + 0x87, 0xff, 0x0, 0x0, 0x1, 0xff, 0x83, 0xff, + 0x80, 0x0, 0x0, 0xff, 0xc1, 0xff, 0xc0, 0x0, + 0x0, 0xff, 0xe0, 0xff, 0xe0, 0x0, 0x0, 0x7f, + 0xf0, 0x7f, 0xe0, 0x0, 0x0, 0x3f, 0xf8, 0x3f, + 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x1f, 0xf8, 0x0, + 0x0, 0xf, 0xfe, 0xf, 0xfc, 0x0, 0x0, 0x7, + 0xff, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, 0x87, + 0xff, 0x0, 0x0, 0x1, 0xff, 0xc3, 0xff, 0x80, + 0x0, 0x0, 0xff, 0xe1, 0xff, 0xc0, 0x0, 0x0, + 0x7f, 0xf0, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xf8, + 0x7f, 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x3f, 0xf8, + 0x0, 0x0, 0xf, 0xfe, 0x1f, 0xfc, 0x0, 0x0, + 0x7, 0xff, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, + 0x7, 0xff, 0x0, 0x0, 0x1, 0xff, 0x83, 0xff, + 0x80, 0x0, 0x1, 0xff, 0xc1, 0xff, 0x80, 0x0, + 0x0, 0x7f, 0xe0, 0xff, 0x80, 0x0, 0x0, 0x1f, + 0xf0, 0x7f, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x1f, + 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7, 0x0, 0x0, + 0x0, 0x0, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, + 0x1, 0x80, 0x7c, 0x0, 0x0, 0x0, 0x1, 0xe0, + 0x7f, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x3f, 0xe0, + 0x0, 0x0, 0x3, 0xfe, 0x1f, 0xf8, 0x0, 0x0, + 0x7, 0xfe, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, + 0x7, 0xff, 0x0, 0x0, 0x1, 0xff, 0x83, 0xff, + 0x80, 0x0, 0x1, 0xff, 0xc1, 0xff, 0xc0, 0x0, + 0x0, 0xff, 0xe0, 0xff, 0xc0, 0x0, 0x0, 0x7f, + 0xf0, 0x7f, 0xe0, 0x0, 0x0, 0x3f, 0xf8, 0x3f, + 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x3f, 0xf8, 0x0, + 0x0, 0xf, 0xfe, 0x1f, 0xfc, 0x0, 0x0, 0x7, + 0xff, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, 0x87, + 0xff, 0x0, 0x0, 0x1, 0xff, 0xc3, 0xff, 0x80, + 0x0, 0x0, 0xff, 0xe1, 0xff, 0xc0, 0x0, 0x0, + 0x7f, 0xf0, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xf8, + 0x7f, 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x3f, 0xf8, + 0x0, 0x0, 0xf, 0xfc, 0x1f, 0xfc, 0x0, 0x0, + 0x7, 0xfe, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, + 0x7, 0xff, 0x0, 0x0, 0x3, 0xff, 0x83, 0xff, + 0x80, 0x0, 0x1, 0xff, 0xc1, 0xff, 0x80, 0x0, + 0x0, 0xff, 0xe0, 0xff, 0xc0, 0x0, 0x0, 0x7f, + 0xf0, 0x7f, 0xe0, 0x0, 0x0, 0x3f, 0xf8, 0x3f, + 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x3f, 0xf8, 0x0, + 0x0, 0xf, 0xfe, 0x1f, 0xf8, 0x0, 0x0, 0x7, + 0xff, 0xf, 0xf8, 0xff, 0xff, 0xf9, 0xff, 0x87, + 0xf8, 0xff, 0xff, 0xfc, 0xff, 0xc3, 0xf8, 0xff, + 0xff, 0xfe, 0x7f, 0xc0, 0xf8, 0xff, 0xff, 0xff, + 0x9f, 0xe0, 0x70, 0xff, 0xff, 0xff, 0xcf, 0xe0, + 0x11, 0xff, 0xff, 0xff, 0xe7, 0xf0, 0x1, 0xff, + 0xff, 0xff, 0xf1, 0xf0, 0x1, 0xff, 0xff, 0xff, + 0xfc, 0xf0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x60, + 0x0, 0xf, 0xff, 0xff, 0xff, 0x0, 0x0, + + /* U+0031 "1" */ + 0x0, 0x40, 0x1, 0xc0, 0x3, 0xe0, 0xf, 0xc0, + 0x1f, 0xc0, 0x3f, 0x80, 0xff, 0x81, 0xff, 0x7, + 0xfe, 0xf, 0xfc, 0x3f, 0xf8, 0x7f, 0xf0, 0xff, + 0xe1, 0xff, 0xc3, 0xff, 0x87, 0xff, 0xf, 0xfc, + 0x1f, 0xf8, 0x3f, 0xf0, 0xff, 0xe1, 0xff, 0xc3, + 0xff, 0x87, 0xff, 0xf, 0xfe, 0x1f, 0xfc, 0x3f, + 0xf8, 0x7f, 0xf0, 0xff, 0xe1, 0xff, 0xc3, 0xff, + 0x87, 0xff, 0xf, 0xfe, 0x1f, 0xf8, 0x3f, 0xf0, + 0xff, 0xe0, 0xff, 0xc0, 0xff, 0x80, 0xff, 0x0, + 0x7c, 0x0, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xc, 0x0, 0x7c, 0x1, 0xfe, + 0x7, 0xfc, 0x3f, 0xf0, 0x7f, 0xe0, 0xff, 0xc3, + 0xff, 0x87, 0xff, 0xf, 0xfe, 0x1f, 0xfc, 0x3f, + 0xf8, 0x7f, 0xf0, 0xff, 0xe1, 0xff, 0xc3, 0xff, + 0x87, 0xff, 0xf, 0xfe, 0x1f, 0xfc, 0x3f, 0xf8, + 0x7f, 0xe0, 0xff, 0xc3, 0xff, 0x87, 0xff, 0xf, + 0xfe, 0x1f, 0xfc, 0x3f, 0xf8, 0x7f, 0xf0, 0xff, + 0xe1, 0xff, 0xc1, 0xff, 0x83, 0xff, 0x7, 0xfe, + 0x7, 0xf8, 0xf, 0xf0, 0x1f, 0xc0, 0x1f, 0x80, + 0x3e, 0x0, 0x78, 0x0, 0xc0, 0x0, + + /* U+0032 "2" */ + 0x0, 0xf, 0xff, 0xff, 0xff, 0x80, 0x0, 0x1f, + 0xff, 0xff, 0xff, 0x88, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0xcf, 0x0, 0x7, 0xff, 0xff, 0xff, 0xc7, + 0xc0, 0x1, 0xff, 0xff, 0xff, 0xe7, 0xe0, 0x0, + 0x7f, 0xff, 0xff, 0xf3, 0xf8, 0x0, 0x1f, 0xff, + 0xff, 0xf3, 0xfc, 0x0, 0x7, 0xff, 0xff, 0xf9, + 0xff, 0x0, 0x1, 0xff, 0xff, 0xf9, 0xff, 0x80, + 0x0, 0x7f, 0xff, 0xfc, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xf0, 0x0, 0xf, 0xff, 0xff, 0xc7, 0xf8, 0x0, + 0xf, 0xff, 0xff, 0xf1, 0xf8, 0x0, 0x1f, 0xff, + 0xff, 0xfc, 0x38, 0x0, 0x1f, 0xff, 0xff, 0xff, + 0x88, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xe0, 0x0, + 0x1f, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x3, 0xff, + 0xff, 0xff, 0xe0, 0x0, 0x70, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0x7e, 0x3f, 0xff, 0xff, 0xc0, 0x0, + 0x7f, 0x87, 0xff, 0xff, 0xc0, 0x0, 0x3f, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf8, 0xff, 0xff, 0xf8, 0x0, 0x7, + 0xf8, 0xff, 0xff, 0xfc, 0x0, 0x3, 0xf8, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0xf8, 0xff, 0xff, 0xff, + 0x80, 0x0, 0x70, 0xff, 0xff, 0xff, 0xc0, 0x0, + 0x11, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xf0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xfc, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, + 0x0, 0xf, 0xff, 0xff, 0xff, 0x0, 0x0, + + /* U+0033 "3" */ + 0x0, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x1f, 0xff, + 0xff, 0xff, 0x88, 0x1, 0xff, 0xff, 0xff, 0xfc, + 0xf0, 0x7, 0xff, 0xff, 0xff, 0xc7, 0xc0, 0x1f, + 0xff, 0xff, 0xfe, 0x7e, 0x0, 0x7f, 0xff, 0xff, + 0xf3, 0xf8, 0x1, 0xff, 0xff, 0xff, 0x3f, 0xc0, + 0x7, 0xff, 0xff, 0xf9, 0xff, 0x0, 0x1f, 0xff, + 0xff, 0x9f, 0xf8, 0x0, 0x7f, 0xff, 0xfc, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x3, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, + 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, + 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, + 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xe0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xc0, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x0, + 0x3, 0xff, 0x80, 0x0, 0x0, 0x0, 0x1f, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xf8, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, + 0x1, 0xff, 0xc0, 0x0, 0x0, 0x0, 0xf, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0xff, + 0xff, 0xfc, 0x7f, 0x80, 0xf, 0xff, 0xff, 0xf1, + 0xf8, 0x1, 0xff, 0xff, 0xff, 0xc3, 0x80, 0x1f, + 0xff, 0xff, 0xff, 0x88, 0x3, 0xff, 0xff, 0xff, + 0xfe, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xf0, 0x0, + 0x3f, 0xff, 0xff, 0xfe, 0x0, 0x0, 0xff, 0xff, + 0xff, 0xe1, 0x80, 0x3, 0xff, 0xff, 0xfc, 0x3f, + 0x0, 0x7, 0xff, 0xff, 0xc3, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x7, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x1f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x3, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, + 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xc0, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x0, + 0x3, 0xff, 0x80, 0x0, 0x0, 0x0, 0x1f, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x7, 0xff, 0x0, 0xf, 0xff, 0xff, 0x9f, + 0xf8, 0x0, 0xff, 0xff, 0xfc, 0xff, 0xc0, 0xf, + 0xff, 0xff, 0xe7, 0xfc, 0x0, 0xff, 0xff, 0xff, + 0x9f, 0xe0, 0xf, 0xff, 0xff, 0xfc, 0xfe, 0x1, + 0xff, 0xff, 0xff, 0xe7, 0xf0, 0x1f, 0xff, 0xff, + 0xff, 0x1f, 0x1, 0xff, 0xff, 0xff, 0xfc, 0xf0, + 0x7, 0xff, 0xff, 0xff, 0xe6, 0x0, 0xf, 0xff, + 0xff, 0xff, 0x0, 0x0, + + /* U+0034 "4" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7c, 0x18, + 0x0, 0x0, 0x0, 0x3, 0xf8, 0x70, 0x0, 0x0, + 0x0, 0xf, 0xe3, 0xe0, 0x0, 0x0, 0x0, 0x7f, + 0xcf, 0xc0, 0x0, 0x0, 0x1, 0xff, 0x3f, 0x80, + 0x0, 0x0, 0xf, 0xfd, 0xff, 0x0, 0x0, 0x0, + 0x3f, 0xf7, 0xfe, 0x0, 0x0, 0x0, 0xff, 0xdf, + 0xfc, 0x0, 0x0, 0x7, 0xff, 0x7f, 0xf0, 0x0, + 0x0, 0x1f, 0xfd, 0xff, 0xc0, 0x0, 0x0, 0x7f, + 0xf7, 0xff, 0x0, 0x0, 0x1, 0xff, 0xdf, 0xfc, + 0x0, 0x0, 0x7, 0xff, 0x7f, 0xf0, 0x0, 0x0, + 0x1f, 0xfd, 0xff, 0xc0, 0x0, 0x0, 0x7f, 0xe7, + 0xff, 0x0, 0x0, 0x1, 0xff, 0x9f, 0xfc, 0x0, + 0x0, 0xf, 0xfe, 0x7f, 0xf0, 0x0, 0x0, 0x3f, + 0xf9, 0xff, 0x80, 0x0, 0x0, 0xff, 0xe7, 0xfe, + 0x0, 0x0, 0x3, 0xff, 0x9f, 0xf8, 0x0, 0x0, + 0xf, 0xfe, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xfb, + 0xff, 0x80, 0x0, 0x0, 0xff, 0xef, 0xfe, 0x0, + 0x0, 0x3, 0xff, 0xbf, 0xf8, 0x0, 0x0, 0xf, + 0xfe, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xfb, 0xff, + 0x80, 0x0, 0x0, 0xff, 0xef, 0xfe, 0x0, 0x0, + 0x3, 0xff, 0xbf, 0xf8, 0x0, 0x0, 0xf, 0xfe, + 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xf3, 0xff, 0x80, + 0x0, 0x0, 0xff, 0xcf, 0xfe, 0x0, 0x0, 0x7, + 0xff, 0x3f, 0xf8, 0x0, 0x0, 0x1f, 0xfc, 0xff, + 0x80, 0x0, 0x0, 0x1f, 0xf3, 0xfc, 0x7f, 0xff, + 0xfe, 0x3f, 0xcf, 0xc3, 0xff, 0xff, 0xfc, 0x7e, + 0xe, 0x3f, 0xff, 0xff, 0xf8, 0x70, 0x1, 0xff, + 0xff, 0xff, 0xf8, 0x80, 0x1f, 0xff, 0xff, 0xff, + 0xf0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x0, + 0x7f, 0xff, 0xff, 0xfc, 0x0, 0x0, 0xff, 0xff, + 0xff, 0xe1, 0x80, 0x1, 0xff, 0xff, 0xfe, 0x1f, + 0x80, 0x1, 0xff, 0xff, 0xf0, 0xff, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, + 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, 0x0, + 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x1, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x3e, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, + + /* U+0035 "5" */ + 0x0, 0x7f, 0xff, 0xff, 0xfc, 0x0, 0x1f, 0xff, + 0xff, 0xff, 0x80, 0x3, 0xff, 0xff, 0xff, 0xf8, + 0x0, 0x1f, 0xff, 0xff, 0xff, 0x0, 0x8, 0xff, + 0xff, 0xff, 0xf0, 0x1, 0xc7, 0xff, 0xff, 0xff, + 0x0, 0x3e, 0x3f, 0xff, 0xff, 0xe0, 0x3, 0xf1, + 0xff, 0xff, 0xfe, 0x0, 0x3f, 0x8f, 0xff, 0xff, + 0xc0, 0x3, 0xfc, 0x7f, 0xff, 0xfc, 0x0, 0x7f, + 0xe0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x0, + 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x0, + 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf0, + 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x7, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, + 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xe0, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, 0xf, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xe0, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, + 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x1f, 0xff, 0xff, 0x80, 0xf, 0xc3, + 0xff, 0xff, 0xfc, 0x0, 0x38, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x80, 0x7, + 0xff, 0xff, 0xff, 0xfc, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xc0, 0x1, 0xff, 0xff, 0xff, 0xf0, 0x0, + 0xf, 0xff, 0xff, 0xfe, 0x18, 0x0, 0x7f, 0xff, + 0xff, 0x87, 0xe0, 0x1, 0xff, 0xff, 0xf0, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, + 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xe0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, 0xf, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xe0, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, + 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, 0xf, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x1f, + 0xfc, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xc0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x1f, 0xfc, 0x0, 0x7f, 0xff, 0xfc, 0xff, 0xc0, + 0xf, 0xff, 0xff, 0xcf, 0xfc, 0x1, 0xff, 0xff, + 0xfc, 0xff, 0x80, 0x3f, 0xff, 0xff, 0xe7, 0xf8, + 0x7, 0xff, 0xff, 0xfe, 0x7f, 0x1, 0xff, 0xff, + 0xff, 0xe7, 0xf0, 0x3f, 0xff, 0xff, 0xfe, 0x3e, + 0x7, 0xff, 0xff, 0xff, 0xf3, 0xc0, 0x3f, 0xff, + 0xff, 0xff, 0x30, 0x0, 0xff, 0xff, 0xff, 0xf0, + 0x0, + + /* U+0036 "6" */ + 0x0, 0xf, 0xff, 0xff, 0xff, 0x80, 0x0, 0x7f, + 0xff, 0xff, 0xfe, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xfc, 0x0, 0x1, 0xff, 0xff, 0xff, 0xf0, 0x0, + 0x11, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x71, 0xff, + 0xff, 0xff, 0xc0, 0x1, 0xf1, 0xff, 0xff, 0xff, + 0x0, 0x3, 0xf1, 0xff, 0xff, 0xfe, 0x0, 0x7, + 0xf1, 0xff, 0xff, 0xf8, 0x0, 0xf, 0xf1, 0xff, + 0xff, 0xf0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xe0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xe0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xf8, 0xff, 0xff, 0xfc, 0x0, 0xf, 0xc3, 0xff, + 0xff, 0xfc, 0x0, 0x7, 0x1f, 0xff, 0xff, 0xfc, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x0, 0x3, + 0xff, 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, + 0xff, 0xfc, 0x0, 0x3, 0xff, 0xff, 0xff, 0xe0, + 0x1, 0xc3, 0xff, 0xff, 0xff, 0x86, 0x7, 0xe3, + 0xff, 0xff, 0xfc, 0x3f, 0x1f, 0xe1, 0xff, 0xff, + 0xf0, 0xff, 0x3f, 0xe0, 0x0, 0x0, 0x7, 0xfc, + 0x7f, 0xf0, 0x0, 0x0, 0x1f, 0xf8, 0xff, 0xe0, + 0x0, 0x0, 0x3f, 0xf1, 0xff, 0xc0, 0x0, 0x0, + 0x7f, 0xe3, 0xff, 0x80, 0x0, 0x1, 0xff, 0xc7, + 0xff, 0x0, 0x0, 0x3, 0xff, 0x8f, 0xfc, 0x0, + 0x0, 0x7, 0xff, 0x1f, 0xf8, 0x0, 0x0, 0xf, + 0xfe, 0x3f, 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0xff, + 0xe0, 0x0, 0x0, 0x3f, 0xf9, 0xff, 0xc0, 0x0, + 0x0, 0x7f, 0xf3, 0xff, 0x80, 0x0, 0x0, 0xff, + 0xe7, 0xff, 0x0, 0x0, 0x1, 0xff, 0xcf, 0xfe, + 0x0, 0x0, 0x3, 0xff, 0x9f, 0xfc, 0x0, 0x0, + 0x7, 0xff, 0x3f, 0xf8, 0x0, 0x0, 0xf, 0xfe, + 0x7f, 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0xff, 0xe0, + 0x0, 0x0, 0x3f, 0xf1, 0xff, 0xc0, 0x0, 0x0, + 0x7f, 0xe3, 0xff, 0x80, 0x0, 0x0, 0xff, 0xc7, + 0xff, 0x0, 0x0, 0x3, 0xff, 0x8f, 0xfe, 0x0, + 0x0, 0x7, 0xff, 0x1f, 0xf8, 0x0, 0x0, 0xf, + 0xfe, 0x3f, 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x7f, + 0xe0, 0x0, 0x0, 0x3f, 0xf8, 0xff, 0xc0, 0x0, + 0x0, 0x7f, 0xf3, 0xff, 0x80, 0x0, 0x0, 0xff, + 0xe7, 0xfe, 0x0, 0x0, 0x1, 0xff, 0xcf, 0xf8, + 0xff, 0xff, 0xf9, 0xff, 0x9f, 0xe3, 0xff, 0xff, + 0xf3, 0xff, 0x3f, 0x8f, 0xff, 0xff, 0xe7, 0xfc, + 0x3e, 0x3f, 0xff, 0xff, 0xe7, 0xf8, 0x70, 0xff, + 0xff, 0xff, 0xcf, 0xe0, 0x47, 0xff, 0xff, 0xff, + 0x9f, 0xc0, 0x1f, 0xff, 0xff, 0xff, 0x1f, 0x0, + 0x7f, 0xff, 0xff, 0xff, 0x3c, 0x0, 0x7f, 0xff, + 0xff, 0xfe, 0x60, 0x0, 0x3f, 0xff, 0xff, 0xfc, + 0x0, 0x0, + + /* U+0037 "7" */ + 0x1f, 0xff, 0xff, 0xff, 0x0, 0x7f, 0xff, 0xff, + 0xfe, 0x20, 0xff, 0xff, 0xff, 0xfe, 0x78, 0x7f, + 0xff, 0xff, 0xfc, 0x7c, 0x3f, 0xff, 0xff, 0xfc, + 0xfe, 0x1f, 0xff, 0xff, 0xfc, 0xfe, 0xf, 0xff, + 0xff, 0xf9, 0xfe, 0x7, 0xff, 0xff, 0xf9, 0xff, + 0x3, 0xff, 0xff, 0xf3, 0xff, 0x1, 0xff, 0xff, + 0xf3, 0xff, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, + 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0x7, + 0xff, 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, + 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0x7, 0xff, + 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, + 0x7, 0xfe, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0xf, + 0xfe, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, + 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0xf, 0xfe, + 0x0, 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, + 0xf, 0xfe, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0xf, + 0xfe, 0x0, 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, + 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0xf, 0xfe, + 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, + 0xf, 0xfc, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, + 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x7, + 0xfc, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, + 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x60, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x0, 0x0, + 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7, 0xf8, + 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, + 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, + 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x3f, + 0xf8, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, + 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x3f, 0xf8, + 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, + 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, + 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x3f, + 0xf8, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, + 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x3f, 0xf8, + 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, + 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x0, + 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x7f, + 0xf0, 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, + 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x7f, 0xf0, + 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, 0x0, + 0x7f, 0xf0, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, + 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x3f, + 0xf0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, + 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x1f, 0xc0, + 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, + 0xf, 0x80, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, + 0x0, 0x0, 0xc, 0x0, + + /* U+0038 "8" */ + 0x0, 0xf, 0xff, 0xff, 0xff, 0x80, 0x0, 0x1f, + 0xff, 0xff, 0xff, 0x88, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0xcf, 0x0, 0x7, 0xff, 0xff, 0xff, 0xc7, + 0xc0, 0x11, 0xff, 0xff, 0xff, 0xe7, 0xe0, 0x1c, + 0x7f, 0xff, 0xff, 0xf3, 0xf8, 0x1f, 0x1f, 0xff, + 0xff, 0xf3, 0xfc, 0xf, 0xc7, 0xff, 0xff, 0xf9, + 0xff, 0x7, 0xf1, 0xff, 0xff, 0xf9, 0xff, 0x83, + 0xfc, 0x7f, 0xff, 0xfc, 0xff, 0xc3, 0xff, 0x0, + 0x0, 0x0, 0x7f, 0xe1, 0xff, 0xc0, 0x0, 0x0, + 0x7f, 0xf0, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xf8, + 0x7f, 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x3f, 0xf8, + 0x0, 0x0, 0xf, 0xfe, 0x1f, 0xfc, 0x0, 0x0, + 0x7, 0xff, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, + 0x87, 0xff, 0x0, 0x0, 0x1, 0xff, 0x83, 0xff, + 0x80, 0x0, 0x0, 0xff, 0xc1, 0xff, 0xc0, 0x0, + 0x0, 0x7f, 0xe0, 0xff, 0xe0, 0x0, 0x0, 0x7f, + 0xf0, 0x7f, 0xf0, 0x0, 0x0, 0x3f, 0xf8, 0x3f, + 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x1f, 0xf8, 0x0, + 0x0, 0xf, 0xfe, 0xf, 0xfc, 0x0, 0x0, 0x7, + 0xff, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, 0x87, + 0xff, 0x0, 0x0, 0x1, 0xff, 0xc3, 0xff, 0x80, + 0x0, 0x0, 0xff, 0xe1, 0xff, 0xc0, 0x0, 0x0, + 0x7f, 0xf0, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xf8, + 0x7f, 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x3f, 0xf8, + 0x0, 0x0, 0xf, 0xfe, 0x1f, 0xfc, 0x0, 0x0, + 0x7, 0xff, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, + 0x7, 0xff, 0x0, 0x0, 0x1, 0xff, 0x83, 0xff, + 0x80, 0x0, 0x1, 0xff, 0xc1, 0xff, 0xc0, 0x0, + 0x0, 0xff, 0xe0, 0xff, 0x80, 0x0, 0x0, 0x1f, + 0xf0, 0x7f, 0x8f, 0xff, 0xff, 0xc7, 0xf8, 0x3f, + 0xf, 0xff, 0xff, 0xf1, 0xf8, 0x7, 0x1f, 0xff, + 0xff, 0xfc, 0x38, 0x0, 0x1f, 0xff, 0xff, 0xff, + 0x88, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xe0, 0x0, + 0x1f, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x3, 0xff, + 0xff, 0xff, 0xe0, 0x0, 0x70, 0xff, 0xff, 0xff, + 0xe1, 0x80, 0x7e, 0x3f, 0xff, 0xff, 0xc3, 0xf0, + 0x7f, 0x87, 0xff, 0xff, 0xc3, 0xfc, 0x3f, 0xe0, + 0x0, 0x0, 0x7, 0xfc, 0x1f, 0xfc, 0x0, 0x0, + 0x7, 0xfe, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, + 0x7, 0xff, 0x0, 0x0, 0x1, 0xff, 0x83, 0xff, + 0x80, 0x0, 0x1, 0xff, 0xc1, 0xff, 0xc0, 0x0, + 0x0, 0xff, 0xe0, 0xff, 0xc0, 0x0, 0x0, 0x7f, + 0xf0, 0x7f, 0xe0, 0x0, 0x0, 0x3f, 0xf8, 0x3f, + 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x3f, 0xf8, 0x0, + 0x0, 0xf, 0xfe, 0x1f, 0xfc, 0x0, 0x0, 0x7, + 0xff, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, 0x87, + 0xff, 0x0, 0x0, 0x1, 0xff, 0xc3, 0xff, 0x80, + 0x0, 0x0, 0xff, 0xe1, 0xff, 0xc0, 0x0, 0x0, + 0x7f, 0xf0, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xf8, + 0x7f, 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x3f, 0xf8, + 0x0, 0x0, 0xf, 0xfc, 0x1f, 0xfc, 0x0, 0x0, + 0x7, 0xfe, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, + 0x7, 0xff, 0x0, 0x0, 0x3, 0xff, 0x83, 0xff, + 0x80, 0x0, 0x1, 0xff, 0xc1, 0xff, 0x80, 0x0, + 0x0, 0xff, 0xe0, 0xff, 0xc0, 0x0, 0x0, 0x7f, + 0xf0, 0x7f, 0xe0, 0x0, 0x0, 0x3f, 0xf8, 0x3f, + 0xf0, 0x0, 0x0, 0x1f, 0xfc, 0x3f, 0xf8, 0x0, + 0x0, 0xf, 0xfe, 0x1f, 0xf8, 0x0, 0x0, 0x7, + 0xff, 0xf, 0xf8, 0xff, 0xff, 0xf9, 0xff, 0x87, + 0xf8, 0xff, 0xff, 0xfc, 0xff, 0xc3, 0xf8, 0xff, + 0xff, 0xfe, 0x7f, 0xc0, 0xf8, 0xff, 0xff, 0xff, + 0x9f, 0xe0, 0x70, 0xff, 0xff, 0xff, 0xcf, 0xe0, + 0x11, 0xff, 0xff, 0xff, 0xe7, 0xf0, 0x1, 0xff, + 0xff, 0xff, 0xf1, 0xf0, 0x1, 0xff, 0xff, 0xff, + 0xfc, 0xf0, 0x0, 0x7f, 0xff, 0xff, 0xfe, 0x60, + 0x0, 0xf, 0xff, 0xff, 0xff, 0x0, 0x0, + + /* U+0039 "9" */ + 0x0, 0x7f, 0xff, 0xff, 0xfc, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xe2, 0x0, 0x3f, 0xff, 0xff, 0xff, + 0x9e, 0x0, 0x7f, 0xff, 0xff, 0xfc, 0x7c, 0x8, + 0xff, 0xff, 0xff, 0xf3, 0xf0, 0x71, 0xff, 0xff, + 0xff, 0xcf, 0xe3, 0xe3, 0xff, 0xff, 0xfe, 0x7f, + 0x8f, 0xc7, 0xff, 0xff, 0xf9, 0xff, 0x3f, 0x8f, + 0xff, 0xff, 0xcf, 0xfc, 0xff, 0x1f, 0xff, 0xff, + 0x3f, 0xf7, 0xfe, 0x0, 0x0, 0x0, 0xff, 0xdf, + 0xfc, 0x0, 0x0, 0x7, 0xff, 0x7f, 0xf0, 0x0, + 0x0, 0x1f, 0xfd, 0xff, 0xc0, 0x0, 0x0, 0x7f, + 0xf7, 0xff, 0x0, 0x0, 0x1, 0xff, 0xdf, 0xfc, + 0x0, 0x0, 0x7, 0xff, 0x7f, 0xf0, 0x0, 0x0, + 0x1f, 0xfd, 0xff, 0xc0, 0x0, 0x0, 0x7f, 0xe7, + 0xff, 0x0, 0x0, 0x1, 0xff, 0x9f, 0xfc, 0x0, + 0x0, 0x7, 0xfe, 0x7f, 0xf0, 0x0, 0x0, 0x3f, + 0xf9, 0xff, 0xc0, 0x0, 0x0, 0xff, 0xe7, 0xfe, + 0x0, 0x0, 0x3, 0xff, 0x9f, 0xf8, 0x0, 0x0, + 0xf, 0xfe, 0x7f, 0xe0, 0x0, 0x0, 0x3f, 0xfb, + 0xff, 0x80, 0x0, 0x0, 0xff, 0xef, 0xfe, 0x0, + 0x0, 0x3, 0xff, 0xbf, 0xf8, 0x0, 0x0, 0xf, + 0xfe, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xfb, 0xff, + 0x80, 0x0, 0x0, 0xff, 0xef, 0xfe, 0x0, 0x0, + 0x3, 0xff, 0xbf, 0xf8, 0x0, 0x0, 0xf, 0xfe, + 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xfb, 0xff, 0x80, + 0x0, 0x0, 0xff, 0xcf, 0xfe, 0x0, 0x0, 0x3, + 0xff, 0x3f, 0xf8, 0x0, 0x0, 0x1f, 0xfc, 0xff, + 0xe0, 0x0, 0x0, 0x7f, 0xf3, 0xfe, 0x0, 0x0, + 0x0, 0x7f, 0xcf, 0xf1, 0xff, 0xff, 0xf8, 0xff, + 0x3f, 0xf, 0xff, 0xff, 0xf1, 0xf8, 0x38, 0xff, + 0xff, 0xff, 0xe1, 0xc0, 0x7, 0xff, 0xff, 0xff, + 0xe2, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x1, + 0xff, 0xff, 0xff, 0xff, 0x0, 0x1, 0xff, 0xff, + 0xff, 0xf0, 0x0, 0x3, 0xff, 0xff, 0xff, 0x86, + 0x0, 0x7, 0xff, 0xff, 0xf8, 0x7e, 0x0, 0x7, + 0xff, 0xff, 0xc3, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, + 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, + 0x0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, 0x0, + 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, + 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x7f, 0xff, + 0xfc, 0xff, 0xc0, 0x3, 0xff, 0xff, 0xf3, 0xff, + 0x0, 0x1f, 0xff, 0xff, 0xcf, 0xf8, 0x0, 0xff, + 0xff, 0xff, 0x9f, 0xe0, 0x7, 0xff, 0xff, 0xfe, + 0x7f, 0x0, 0x7f, 0xff, 0xff, 0xf9, 0xfc, 0x3, + 0xff, 0xff, 0xff, 0xe3, 0xe0, 0x1f, 0xff, 0xff, + 0xff, 0xcf, 0x0, 0x3f, 0xff, 0xff, 0xff, 0x30, + 0x0, 0x3f, 0xff, 0xff, 0xfc, 0x0, 0x0, + + /* U+003A ":" */ + 0x3f, 0xf9, 0xff, 0xcf, 0xfe, 0x7f, 0xf3, 0xff, + 0x9f, 0xfc, 0xff, 0xe7, 0xff, 0x3f, 0xf9, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x9f, + 0xfc, 0xff, 0xe7, 0xff, 0x3f, 0xf9, 0xff, 0xcf, + 0xfe, 0x7f, 0xf3, 0xff, 0x9f, 0xfc +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 863, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1, .adv_w = 863, .box_w = 49, .box_h = 86, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 528, .adv_w = 863, .box_w = 15, .box_h = 84, .ofs_x = 39, .ofs_y = 1}, + {.bitmap_index = 686, .adv_w = 863, .box_w = 49, .box_h = 86, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 1213, .adv_w = 863, .box_w = 45, .box_h = 86, .ofs_x = 9, .ofs_y = 0}, + {.bitmap_index = 1697, .adv_w = 863, .box_w = 46, .box_h = 84, .ofs_x = 8, .ofs_y = 1}, + {.bitmap_index = 2180, .adv_w = 863, .box_w = 44, .box_h = 86, .ofs_x = 8, .ofs_y = 0}, + {.bitmap_index = 2653, .adv_w = 863, .box_w = 47, .box_h = 86, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 3159, .adv_w = 863, .box_w = 40, .box_h = 84, .ofs_x = 14, .ofs_y = 2}, + {.bitmap_index = 3579, .adv_w = 863, .box_w = 49, .box_h = 86, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 4106, .adv_w = 863, .box_w = 46, .box_h = 86, .ofs_x = 8, .ofs_y = 0}, + {.bitmap_index = 4601, .adv_w = 323, .box_w = 13, .box_h = 48, .ofs_x = 6, .ofs_y = 19} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + + + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 32, .range_length = 1, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + }, + { + .range_start = 48, .range_length = 11, .glyph_id_start = 2, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LV_VERSION_CHECK(8, 0, 0) +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = NULL, + .kern_scale = 0, + .cmap_num = 2, + .bpp = 1, + .kern_classes = 0, + .bitmap_format = 0, +#if LV_VERSION_CHECK(8, 0, 0) + .cache = &cache +#endif +}; + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LV_VERSION_CHECK(8, 0, 0) +const lv_font_t lv_font_7segment_115 = { +#else +lv_font_t lv_font_7segment_115 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 86, /*The maximum line height required by the font*/ + .base_line = 0, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 + .underline_position = -7, + .underline_thickness = 4, +#endif + .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +}; + + + +#endif /*#if LV_FONT_7SEGMENT_115*/ + diff --git a/src/displayapp/fonts/lv_font_7segment_40.c b/src/displayapp/fonts/lv_font_7segment_40.c new file mode 100644 index 00000000..ebcb1424 --- /dev/null +++ b/src/displayapp/fonts/lv_font_7segment_40.c @@ -0,0 +1,228 @@ +/******************************************************************************* + * Size: 40 px + * Bpp: 1 + * Opts: + ******************************************************************************/ + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include "lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef LV_FONT_7SEGMENT_40 +#define LV_FONT_7SEGMENT_40 1 +#endif + +#if LV_FONT_7SEGMENT_40 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0020 " " */ + 0x0, + + /* U+002D "-" */ + 0x3f, 0xc7, 0xff, 0x7f, 0xf3, 0xfc, + + /* U+0030 "0" */ + 0x1f, 0xfc, 0x1f, 0xfb, 0x6f, 0xff, 0x77, 0xf7, + 0x78, 0xf, 0x78, 0xf, 0x78, 0xf, 0x78, 0xf, + 0x78, 0xf, 0x78, 0xf, 0x78, 0xf, 0x78, 0xf, + 0x78, 0xf, 0x70, 0x7, 0x0, 0x0, 0x0, 0x0, + 0xe0, 0x7, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, + 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, + 0xf0, 0xf, 0xf0, 0xf, 0xef, 0xef, 0xdf, 0xef, + 0xbf, 0xfe, 0x3f, 0xf8, + + /* U+0031 "1" */ + 0x11, 0xce, 0xf7, 0xbd, 0xef, 0x7b, 0xde, 0xf7, + 0x9c, 0x0, 0x77, 0xbd, 0xef, 0x7b, 0xde, 0xf7, + 0xbc, 0xe6, 0x20, + + /* U+0032 "2" */ + 0x1f, 0xf8, 0x1f, 0xfa, 0xf, 0xf7, 0x7, 0xf7, + 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, + 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, + 0x0, 0xf, 0xf, 0xf7, 0x1f, 0xf8, 0x1f, 0xf8, + 0xef, 0xf0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, + 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, 0xf0, 0x0, + 0xf0, 0x0, 0xf0, 0x0, 0xef, 0xe0, 0xdf, 0xe0, + 0x3f, 0xe0, 0x7f, 0xe0, + + /* U+0033 "3" */ + 0x1f, 0xf8, 0x3f, 0xfe, 0x1f, 0xf7, 0xf, 0xf7, + 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, + 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, 0x0, 0xf, + 0x0, 0xf, 0x1f, 0xf7, 0x3f, 0xf8, 0x3f, 0xf8, + 0x1f, 0xe6, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, + 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, + 0x0, 0x1e, 0x0, 0x1e, 0x1f, 0xde, 0x3f, 0xee, + 0x7f, 0xec, 0x7f, 0xe8, + + /* U+0034 "4" */ + 0x0, 0x2, 0x40, 0x7, 0xe0, 0x7, 0xe0, 0xf, + 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, + 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, + 0xf0, 0xf, 0xcf, 0xf7, 0x3f, 0xf8, 0x3f, 0xf8, + 0x1f, 0xe6, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, + 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, + 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, + 0x0, 0xc, 0x0, 0x8, + + /* U+0035 "5" */ + 0x1f, 0xf8, 0x7f, 0xf3, 0x7f, 0xc7, 0x7f, 0x8f, + 0x0, 0x1e, 0x0, 0x3c, 0x0, 0x78, 0x0, 0xf0, + 0x1, 0xe0, 0x3, 0xc0, 0x7, 0x80, 0xf, 0x0, + 0x19, 0xfe, 0xf, 0xfe, 0x1f, 0xfc, 0x1f, 0xe6, + 0x0, 0x3c, 0x0, 0x78, 0x0, 0xf0, 0x1, 0xe0, + 0x3, 0xc0, 0x7, 0x80, 0xf, 0x0, 0x1e, 0x0, + 0x3c, 0x7f, 0x79, 0xff, 0x77, 0xfe, 0xcf, 0xfd, + 0x0, + + /* U+0036 "6" */ + 0x1f, 0xfc, 0x1f, 0xfc, 0x6f, 0xf8, 0x77, 0xf8, + 0x78, 0x0, 0x78, 0x0, 0x78, 0x0, 0x78, 0x0, + 0x78, 0x0, 0x78, 0x0, 0x78, 0x0, 0x78, 0x0, + 0x78, 0x0, 0x67, 0xf8, 0x1f, 0xfc, 0x1f, 0xfc, + 0xef, 0xf3, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, + 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, + 0xf0, 0xf, 0xf0, 0xf, 0xef, 0xef, 0xdf, 0xf7, + 0xbf, 0xf6, 0x3f, 0xf4, + + /* U+0037 "7" */ + 0x7f, 0xe3, 0xff, 0xa7, 0xfd, 0xcf, 0xf7, 0x0, + 0x3c, 0x0, 0xf0, 0x3, 0xc0, 0xf, 0x0, 0x3c, + 0x0, 0xf0, 0x3, 0xc0, 0xf, 0x0, 0x3c, 0x0, + 0x70, 0x0, 0x80, 0x0, 0x0, 0x18, 0x0, 0xe0, + 0x7, 0x80, 0x1e, 0x0, 0x78, 0x1, 0xe0, 0x7, + 0x80, 0x1e, 0x0, 0x78, 0x1, 0xe0, 0x7, 0x80, + 0x1e, 0x0, 0x38, 0x0, 0xc0, + + /* U+0038 "8" */ + 0x1f, 0xfc, 0x1f, 0xfb, 0x6f, 0xff, 0x77, 0xf7, + 0x78, 0xf, 0x78, 0xf, 0x78, 0xf, 0x78, 0xf, + 0x78, 0xf, 0x78, 0xf, 0x78, 0xf, 0x78, 0xf, + 0x78, 0xf, 0x67, 0xff, 0x1f, 0xfc, 0x1f, 0xfc, + 0xef, 0xf7, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, + 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, + 0xf0, 0xf, 0xf0, 0xf, 0xef, 0xef, 0xdf, 0xef, + 0xbf, 0xfe, 0x3f, 0xf8, + + /* U+0039 "9" */ + 0x1f, 0xf8, 0x3f, 0xfe, 0xdf, 0xf7, 0xef, 0xf7, + 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, + 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, + 0xf0, 0xf, 0xcf, 0xf7, 0x3f, 0xf8, 0x3f, 0xf8, + 0x1f, 0xe6, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, + 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, 0x0, 0x1e, + 0x0, 0x1e, 0x0, 0x1e, 0x1f, 0xde, 0x3f, 0xee, + 0x7f, 0xec, 0x7f, 0xe8, + + /* U+003A ":" */ + 0x7b, 0xde, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7b, 0xde, 0xf0 +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 300, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1, .adv_w = 300, .box_w = 12, .box_h = 4, .ofs_x = 4, .ofs_y = 13}, + {.bitmap_index = 7, .adv_w = 300, .box_w = 16, .box_h = 30, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 67, .adv_w = 300, .box_w = 5, .box_h = 30, .ofs_x = 14, .ofs_y = 0}, + {.bitmap_index = 86, .adv_w = 300, .box_w = 16, .box_h = 30, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 146, .adv_w = 300, .box_w = 16, .box_h = 30, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 206, .adv_w = 300, .box_w = 16, .box_h = 30, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 266, .adv_w = 300, .box_w = 15, .box_h = 30, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 323, .adv_w = 300, .box_w = 16, .box_h = 30, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 383, .adv_w = 300, .box_w = 14, .box_h = 30, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 436, .adv_w = 300, .box_w = 16, .box_h = 30, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 496, .adv_w = 300, .box_w = 16, .box_h = 30, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 556, .adv_w = 113, .box_w = 5, .box_h = 17, .ofs_x = 2, .ofs_y = 7} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_0[] = { + 0x0, 0xd +}; + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 32, .range_length = 14, .glyph_id_start = 1, + .unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 2, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + }, + { + .range_start = 48, .range_length = 11, .glyph_id_start = 3, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LV_VERSION_CHECK(8, 0, 0) +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = NULL, + .kern_scale = 0, + .cmap_num = 2, + .bpp = 1, + .kern_classes = 0, + .bitmap_format = 0, +#if LV_VERSION_CHECK(8, 0, 0) + .cache = &cache +#endif +}; + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LV_VERSION_CHECK(8, 0, 0) +const lv_font_t lv_font_7segment_40 = { +#else +lv_font_t lv_font_7segment_40 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 30, /*The maximum line height required by the font*/ + .base_line = 0, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 + .underline_position = -2, + .underline_thickness = 1, +#endif + .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +}; + + + +#endif /*#if LV_FONT_7SEGMENT_40*/ + diff --git a/src/displayapp/fonts/lv_font_dots_40.c b/src/displayapp/fonts/lv_font_dots_40.c new file mode 100644 index 00000000..921ff085 --- /dev/null +++ b/src/displayapp/fonts/lv_font_dots_40.c @@ -0,0 +1,410 @@ +/******************************************************************************* + * Size: 40 px + * Bpp: 1 + * Opts: + ******************************************************************************/ + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include "lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef LV_FONT_DOTS_40 +#define LV_FONT_DOTS_40 1 +#endif + +#if LV_FONT_DOTS_40 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0020 " " */ + 0x0, + + /* U+002D "-" */ + 0xee, 0xfd, 0xdf, 0xbb, 0x80, + + /* U+0030 "0" */ + 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, 0x0, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, + 0x80, 0x3, 0x80, 0x0, 0xe, 0x0, 0xf, 0xc0, + 0x1, 0xf8, 0x0, 0x38, 0x0, 0x0, 0xe0, 0x0, + 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, + 0x0, + + /* U+0031 "1" */ + 0xe, 0x1, 0xc0, 0x38, 0x0, 0xe, 0xe1, 0xdc, + 0x3b, 0x80, 0x0, 0xe, 0x1, 0xc0, 0x38, 0x0, + 0x0, 0xe0, 0x1c, 0x3, 0x80, 0x0, 0xe, 0x1, + 0xc0, 0x38, 0x0, 0x0, 0xe0, 0x1c, 0x3, 0x80, + 0x0, 0xee, 0xfd, 0xdf, 0xbb, 0x80, + + /* U+0032 "2" */ + 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, 0x0, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x0, 0x1c, + 0x0, 0x3, 0x80, 0x0, 0x0, 0x0, 0xe0, 0x0, + 0x1c, 0x0, 0x3, 0x80, 0x0, 0x0, 0x0, 0xe0, + 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, 0x0, 0x0, + 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, 0x0, + 0x0, 0xee, 0xee, 0xfd, 0xdd, 0xdf, 0xbb, 0xbb, + 0x80, + + /* U+0033 "3" */ + 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, 0x0, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x0, 0x1c, + 0x0, 0x3, 0x80, 0x0, 0x0, 0xee, 0xe0, 0x1d, + 0xdc, 0x3, 0xbb, 0x80, 0x0, 0x0, 0x0, 0x0, + 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, + 0x0, + + /* U+0034 "4" */ + 0x0, 0xe, 0x0, 0x1, 0xc0, 0x0, 0x38, 0x0, + 0x0, 0x0, 0xe, 0xe0, 0x1, 0xdc, 0x0, 0x3b, + 0x80, 0x0, 0x0, 0xe, 0xe, 0x1, 0xc1, 0xc0, + 0x38, 0x38, 0x0, 0x0, 0xe, 0x0, 0xe1, 0xc0, + 0x1c, 0x38, 0x3, 0x80, 0x0, 0x0, 0xee, 0xee, + 0xfd, 0xdd, 0xdf, 0xbb, 0xbb, 0x80, 0x0, 0x0, + 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, + 0x0, 0x0, 0xe, 0x0, 0x1, 0xc0, 0x0, 0x38, + 0x0, + + /* U+0035 "5" */ + 0xee, 0xee, 0xfd, 0xdd, 0xdf, 0xbb, 0xbb, 0x80, + 0x0, 0xe, 0x0, 0x1, 0xc0, 0x0, 0x38, 0x0, + 0x0, 0x0, 0x0, 0xee, 0xee, 0x1d, 0xdd, 0xc3, + 0xbb, 0xb8, 0x0, 0x0, 0x0, 0x0, 0xe, 0x0, + 0x1, 0xc0, 0x0, 0x38, 0x0, 0x0, 0x0, 0x0, + 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, + 0x0, + + /* U+0036 "6" */ + 0x0, 0xee, 0x0, 0x1d, 0xc0, 0x3, 0xb8, 0x0, + 0x0, 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, + 0x0, 0x0, 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, + 0x80, 0x0, 0x0, 0x0, 0xe, 0xee, 0xe1, 0xdd, + 0xdc, 0x3b, 0xbb, 0x80, 0x0, 0x0, 0xe0, 0x0, + 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, + 0x0, + + /* U+0037 "7" */ + 0xee, 0xee, 0xfd, 0xdd, 0xdf, 0xbb, 0xbb, 0x80, + 0x0, 0x0, 0x0, 0xe, 0x0, 0x1, 0xc0, 0x0, + 0x38, 0x0, 0x0, 0x0, 0xe, 0x0, 0x1, 0xc0, + 0x0, 0x38, 0x0, 0x0, 0x0, 0xe, 0x0, 0x1, + 0xc0, 0x0, 0x38, 0x0, 0x0, 0x0, 0xe, 0x0, + 0x1, 0xc0, 0x0, 0x38, 0x0, 0x0, 0x0, 0xe, + 0x0, 0x1, 0xc0, 0x0, 0x38, 0x0, 0x0, 0x0, + 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, + 0x0, + + /* U+0038 "8" */ + 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, 0x0, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, + 0x80, 0x3, 0x80, 0x0, 0x0, 0xee, 0xe0, 0x1d, + 0xdc, 0x3, 0xbb, 0x80, 0x0, 0x0, 0xe0, 0x0, + 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, + 0x0, + + /* U+0039 "9" */ + 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, 0x0, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, + 0x80, 0x3, 0x80, 0x0, 0x0, 0xee, 0xee, 0x1d, + 0xdd, 0xc3, 0xbb, 0xb8, 0x0, 0x0, 0x0, 0x0, + 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, 0x0, + 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, + 0x0, 0xe, 0xe0, 0x1, 0xdc, 0x0, 0x3b, 0x80, + 0x0, + + /* U+0041 "A" */ + 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, 0x0, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, + 0x80, 0x3, 0x80, 0x0, 0xe, 0xee, 0xef, 0xdd, + 0xdd, 0xfb, 0xbb, 0xb8, 0x0, 0x0, 0xe0, 0x0, + 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, + 0x80, + + /* U+0044 "D" */ + 0xee, 0xee, 0x1d, 0xdd, 0xc3, 0xbb, 0xb8, 0x0, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, + 0x80, 0x3, 0x80, 0x0, 0xe, 0x0, 0xf, 0xc0, + 0x1, 0xf8, 0x0, 0x38, 0x0, 0x0, 0xe0, 0x0, + 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xee, 0xee, 0x1d, 0xdd, 0xc3, 0xbb, 0xb8, + 0x0, + + /* U+0045 "E" */ + 0xee, 0xee, 0xfd, 0xdd, 0xdf, 0xbb, 0xbb, 0x80, + 0x0, 0xe, 0x0, 0x1, 0xc0, 0x0, 0x38, 0x0, + 0x0, 0x0, 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, + 0x80, 0x0, 0x0, 0x0, 0xe, 0xee, 0xef, 0xdd, + 0xdd, 0xfb, 0xbb, 0xb8, 0x0, 0x0, 0xe0, 0x0, + 0x1c, 0x0, 0x3, 0x80, 0x0, 0x0, 0x0, 0xe, + 0x0, 0x1, 0xc0, 0x0, 0x38, 0x0, 0x0, 0x0, + 0x0, 0xee, 0xee, 0xfd, 0xdd, 0xdf, 0xbb, 0xbb, + 0x80, + + /* U+0046 "F" */ + 0xee, 0xee, 0xfd, 0xdd, 0xdf, 0xbb, 0xbb, 0x80, + 0x0, 0xe, 0x0, 0x1, 0xc0, 0x0, 0x38, 0x0, + 0x0, 0x0, 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, + 0x80, 0x0, 0x0, 0x0, 0xe, 0xee, 0xef, 0xdd, + 0xdd, 0xfb, 0xbb, 0xb8, 0x0, 0x0, 0xe0, 0x0, + 0x1c, 0x0, 0x3, 0x80, 0x0, 0x0, 0x0, 0xe, + 0x0, 0x1, 0xc0, 0x0, 0x38, 0x0, 0x0, 0x0, + 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, + 0x0, + + /* U+0048 "H" */ + 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, + 0x80, 0x3, 0x80, 0x0, 0xe, 0xee, 0xef, 0xdd, + 0xdd, 0xfb, 0xbb, 0xb8, 0x0, 0x0, 0xe0, 0x0, + 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, + 0x80, + + /* U+0049 "I" */ + 0xee, 0xfd, 0xdf, 0xbb, 0x80, 0x0, 0xe0, 0x1c, + 0x3, 0x80, 0x0, 0xe, 0x1, 0xc0, 0x38, 0x0, + 0x0, 0xe0, 0x1c, 0x3, 0x80, 0x0, 0xe, 0x1, + 0xc0, 0x38, 0x0, 0x0, 0xe0, 0x1c, 0x3, 0x80, + 0x0, 0xee, 0xfd, 0xdf, 0xbb, 0x80, + + /* U+004B "K" */ + 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, + 0x0, 0xe, 0x0, 0xe1, 0xc0, 0x1c, 0x38, 0x3, + 0x80, 0x0, 0x0, 0xe0, 0xe0, 0x1c, 0x1c, 0x3, + 0x83, 0x80, 0x0, 0x0, 0xe, 0xe0, 0x1, 0xdc, + 0x0, 0x3b, 0x80, 0x0, 0x0, 0x0, 0xe0, 0xe0, + 0x1c, 0x1c, 0x3, 0x83, 0x80, 0x0, 0x0, 0xe, + 0x0, 0xe1, 0xc0, 0x1c, 0x38, 0x3, 0x80, 0x0, + 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, + 0x80, + + /* U+004D "M" */ + 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, + 0x0, 0xe, 0xe0, 0xef, 0xdc, 0x1d, 0xfb, 0x83, + 0xb8, 0x0, 0x0, 0xe0, 0xe0, 0xfc, 0x1c, 0x1f, + 0x83, 0x83, 0x80, 0x0, 0xe, 0xe, 0xf, 0xc1, + 0xc1, 0xf8, 0x38, 0x38, 0x0, 0x0, 0xe0, 0x0, + 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, + 0x80, + + /* U+004E "N" */ + 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, + 0x0, 0xe, 0xe0, 0xf, 0xdc, 0x1, 0xfb, 0x80, + 0x38, 0x0, 0x0, 0xe0, 0xe0, 0xfc, 0x1c, 0x1f, + 0x83, 0x83, 0x80, 0x0, 0xe, 0x0, 0xef, 0xc0, + 0x1d, 0xf8, 0x3, 0xb8, 0x0, 0x0, 0xe0, 0x0, + 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, + 0x80, + + /* U+004F "O" */ + 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, 0x0, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, + 0x80, 0x3, 0x80, 0x0, 0xe, 0x0, 0xf, 0xc0, + 0x1, 0xf8, 0x0, 0x38, 0x0, 0x0, 0xe0, 0x0, + 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, + 0x0, + + /* U+0052 "R" */ + 0xee, 0xee, 0x1d, 0xdd, 0xc3, 0xbb, 0xb8, 0x0, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, + 0x80, 0x3, 0x80, 0x0, 0xe, 0xee, 0xe1, 0xdd, + 0xdc, 0x3b, 0xbb, 0x80, 0x0, 0x0, 0xe0, 0x0, + 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, + 0x80, + + /* U+0053 "S" */ + 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, 0x0, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, + 0x80, 0x0, 0x0, 0x0, 0x0, 0xee, 0xe0, 0x1d, + 0xdc, 0x3, 0xbb, 0x80, 0x0, 0x0, 0x0, 0x0, + 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, + 0x0, + + /* U+0054 "T" */ + 0xee, 0xee, 0xfd, 0xdd, 0xdf, 0xbb, 0xbb, 0x80, + 0x0, 0x0, 0xe, 0x0, 0x1, 0xc0, 0x0, 0x38, + 0x0, 0x0, 0x0, 0x0, 0xe0, 0x0, 0x1c, 0x0, + 0x3, 0x80, 0x0, 0x0, 0x0, 0xe, 0x0, 0x1, + 0xc0, 0x0, 0x38, 0x0, 0x0, 0x0, 0x0, 0xe0, + 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, 0x0, 0x0, + 0xe, 0x0, 0x1, 0xc0, 0x0, 0x38, 0x0, 0x0, + 0x0, 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, + 0x0, + + /* U+0055 "U" */ + 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, + 0x80, 0x3, 0x80, 0x0, 0xe, 0x0, 0xf, 0xc0, + 0x1, 0xf8, 0x0, 0x38, 0x0, 0x0, 0xe0, 0x0, + 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, 0x0, 0xe, + 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, 0x38, 0x0, + 0x0, 0xe, 0xee, 0x1, 0xdd, 0xc0, 0x3b, 0xb8, + 0x0, + + /* U+0057 "W" */ + 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, 0x80, + 0x0, 0xe, 0x0, 0xf, 0xc0, 0x1, 0xf8, 0x0, + 0x38, 0x0, 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, + 0x80, 0x3, 0x80, 0x0, 0xe, 0xe, 0xf, 0xc1, + 0xc1, 0xf8, 0x38, 0x38, 0x0, 0x0, 0xe0, 0xe0, + 0xfc, 0x1c, 0x1f, 0x83, 0x83, 0x80, 0x0, 0xe, + 0xe0, 0xef, 0xdc, 0x1d, 0xfb, 0x83, 0xb8, 0x0, + 0x0, 0xe0, 0x0, 0xfc, 0x0, 0x1f, 0x80, 0x3, + 0x80 +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 353, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1, .adv_w = 353, .box_w = 11, .box_h = 3, .ofs_x = 5, .ofs_y = 8}, + {.bitmap_index = 6, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 71, .adv_w = 353, .box_w = 11, .box_h = 27, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 109, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 174, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 239, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 304, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 369, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 434, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 499, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 564, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 629, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 694, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 759, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 824, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 889, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 954, .adv_w = 353, .box_w = 11, .box_h = 27, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 992, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1057, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1122, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1187, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1252, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1317, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1382, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1447, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1512, .adv_w = 353, .box_w = 19, .box_h = 27, .ofs_x = 1, .ofs_y = 0} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_0[] = { + 0x0, 0xd, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x21, 0x24, 0x25, 0x26, + 0x28, 0x29, 0x2b, 0x2d, 0x2e, 0x2f, 0x32, 0x33, + 0x34, 0x35, 0x37 +}; + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 32, .range_length = 56, .glyph_id_start = 1, + .unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 27, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LV_VERSION_CHECK(8, 0, 0) +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = NULL, + .kern_scale = 0, + .cmap_num = 1, + .bpp = 1, + .kern_classes = 0, + .bitmap_format = 0, +#if LV_VERSION_CHECK(8, 0, 0) + .cache = &cache +#endif +}; + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LV_VERSION_CHECK(8, 0, 0) +const lv_font_t lv_font_dots_40 = { +#else +lv_font_t lv_font_dots_40 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 27, /*The maximum line height required by the font*/ + .base_line = 0, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 + .underline_position = -5, + .underline_thickness = 1, +#endif + .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +}; + + + +#endif /*#if LV_FONT_DOTS_40*/ + diff --git a/src/displayapp/fonts/repetitionscrolling.ttf b/src/displayapp/fonts/repetitionscrolling.ttf new file mode 100644 index 00000000..dc124164 Binary files /dev/null and b/src/displayapp/fonts/repetitionscrolling.ttf differ diff --git a/src/displayapp/screens/CheckboxList.cpp b/src/displayapp/screens/CheckboxList.cpp new file mode 100644 index 00000000..7667946a --- /dev/null +++ b/src/displayapp/screens/CheckboxList.cpp @@ -0,0 +1,115 @@ +#include "displayapp/screens/CheckboxList.h" +#include "displayapp/DisplayApp.h" +#include "displayapp/screens/Styles.h" +#include "displayapp/screens/Symbols.h" + +using namespace Pinetime::Applications::Screens; + +namespace { + static void event_handler(lv_obj_t* obj, lv_event_t event) { + CheckboxList* screen = static_cast(obj->user_data); + screen->UpdateSelected(obj, event); + } + +} + +CheckboxList::CheckboxList(const uint8_t screenID, + const uint8_t numScreens, + DisplayApp* app, + Controllers::Settings& settingsController, + const char* optionsTitle, + const char* optionsSymbol, + void (Controllers::Settings::*SetOptionIndex)(uint8_t), + uint8_t (Controllers::Settings::*GetOptionIndex )() const, + std::array options) + : Screen(app), screenID {screenID}, settingsController {settingsController}, + SetOptionIndex {SetOptionIndex}, GetOptionIndex {GetOptionIndex}, + options {options} { + + settingsController.SetWatchfacesMenu(screenID); + + // Set the background to Black + lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + + if (numScreens > 1) { + pageIndicatorBasePoints[0].x = LV_HOR_RES - 1; + pageIndicatorBasePoints[0].y = 0; + pageIndicatorBasePoints[1].x = LV_HOR_RES - 1; + pageIndicatorBasePoints[1].y = LV_VER_RES; + + pageIndicatorBase = lv_line_create(lv_scr_act(), NULL); + lv_obj_set_style_local_line_width(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_line_color(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); + lv_line_set_points(pageIndicatorBase, pageIndicatorBasePoints, 2); + + const uint16_t indicatorSize = LV_VER_RES / numScreens; + const uint16_t indicatorPos = indicatorSize * screenID; + + pageIndicatorPoints[0].x = LV_HOR_RES - 1; + pageIndicatorPoints[0].y = indicatorPos; + pageIndicatorPoints[1].x = LV_HOR_RES - 1; + pageIndicatorPoints[1].y = indicatorPos + indicatorSize; + + pageIndicator = lv_line_create(lv_scr_act(), NULL); + lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); + } + + lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); + + lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); + lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); + lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); + lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); + + lv_obj_set_pos(container1, 10, 60); + lv_obj_set_width(container1, LV_HOR_RES - 20); + lv_obj_set_height(container1, LV_VER_RES - 50); + lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); + + lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(title, optionsTitle); + lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); + lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 10, 15); + + lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); + lv_label_set_text_static(icon, optionsSymbol); + lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); + lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); + + for (unsigned int i = 0; i < options.size(); i++) { + if (strcmp(options[i], "")) { + cbOption[i] = lv_checkbox_create(container1, nullptr); + lv_checkbox_set_text(cbOption[i], options[i]); + cbOption[i]->user_data = this; + lv_obj_set_event_cb(cbOption[i], event_handler); + SetRadioButtonStyle(cbOption[i]); + + if (static_cast((settingsController.*GetOptionIndex)() - MAXLISTITEMS*screenID) == i) { + lv_checkbox_set_checked(cbOption[i], true); + } + } + } +} + +CheckboxList::~CheckboxList() { + lv_obj_clean(lv_scr_act()); + settingsController.SaveSettings(); +} + +void CheckboxList::UpdateSelected(lv_obj_t* object, lv_event_t event) { + if (event == LV_EVENT_VALUE_CHANGED) { + for (unsigned int i = 0; i < options.size(); i++) { + if (strcmp(options[i], "")) { + if (object == cbOption[i]) { + lv_checkbox_set_checked(cbOption[i], true); + (settingsController.*SetOptionIndex)(MAXLISTITEMS*screenID + i); + } else { + lv_checkbox_set_checked(cbOption[i], false); + } + } + } + } +} \ No newline at end of file diff --git a/src/displayapp/screens/CheckboxList.h b/src/displayapp/screens/CheckboxList.h new file mode 100644 index 00000000..e90dcd30 --- /dev/null +++ b/src/displayapp/screens/CheckboxList.h @@ -0,0 +1,49 @@ +#pragma once + +#include +#include +#include +#include "displayapp/screens/Screen.h" +#include "displayapp/Apps.h" +#include "components/settings/Settings.h" + +#define MAXLISTITEMS 4 + +namespace Pinetime { + namespace Applications { + namespace Screens { + class CheckboxList : public Screen { + public: + CheckboxList(const uint8_t screenID, + const uint8_t numScreens, + DisplayApp* app, + Controllers::Settings& settingsController, + const char* optionsTitle, + const char* optionsSymbol, + void (Controllers::Settings::*SetOptionIndex)(uint8_t), + uint8_t (Controllers::Settings::*GetOptionIndex)() const, + std::array options); + + ~CheckboxList() override; + + void UpdateSelected(lv_obj_t* object, lv_event_t event); + + private: + const uint8_t screenID; + Controllers::Settings& settingsController; + const char* optionsTitle; + const char* optionsSymbol; + void (Controllers::Settings::*SetOptionIndex)(uint8_t); + uint8_t (Controllers::Settings::*GetOptionIndex)() const; + std::array options; + + lv_obj_t* cbOption[MAXLISTITEMS]; + + lv_point_t pageIndicatorBasePoints[2]; + lv_point_t pageIndicatorPoints[2]; + lv_obj_t* pageIndicatorBase; + lv_obj_t* pageIndicator; + }; + } + } +} \ No newline at end of file diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index 1687dccf..4e76af18 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -12,6 +12,7 @@ #include "displayapp/screens/WatchFaceTerminal.h" #include "displayapp/screens/WatchFaceAnalog.h" #include "displayapp/screens/WatchFacePineTimeStyle.h" +#include "displayapp/screens/WatchFaceCasioStyleG7710.h" using namespace Pinetime::Applications::Screens; @@ -45,6 +46,9 @@ Clock::Clock(DisplayApp* app, case 3: return WatchFaceTerminalScreen(); break; + case 4: + return WatchFaceCasioStyleG7710(); + break; } return WatchFaceDigitalScreen(); }()} { @@ -103,3 +107,14 @@ std::unique_ptr Clock::WatchFaceTerminalScreen() { heartRateController, motionController); } + +std::unique_ptr Clock::WatchFaceCasioStyleG7710() { + return std::make_unique(app, + dateTimeController, + batteryController, + bleController, + notificatioManager, + settingsController, + heartRateController, + motionController); +} diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h index 1ba752c7..5446a11b 100644 --- a/src/displayapp/screens/Clock.h +++ b/src/displayapp/screens/Clock.h @@ -48,6 +48,7 @@ namespace Pinetime { std::unique_ptr WatchFaceAnalogScreen(); std::unique_ptr WatchFacePineTimeStyleScreen(); std::unique_ptr WatchFaceTerminalScreen(); + std::unique_ptr WatchFaceCasioStyleG7710(); }; } } diff --git a/src/displayapp/screens/WatchFaceCasioStyleG7710.cpp b/src/displayapp/screens/WatchFaceCasioStyleG7710.cpp new file mode 100644 index 00000000..8f730d52 --- /dev/null +++ b/src/displayapp/screens/WatchFaceCasioStyleG7710.cpp @@ -0,0 +1,297 @@ +#include "displayapp/screens/WatchFaceCasioStyleG7710.h" + +#include +#include +#include +#include "displayapp/screens/BatteryIcon.h" +#include "displayapp/screens/BleIcon.h" +#include "displayapp/screens/NotificationIcon.h" +#include "displayapp/screens/Symbols.h" +#include "components/battery/BatteryController.h" +#include "components/ble/BleController.h" +#include "components/ble/NotificationManager.h" +#include "components/heartrate/HeartRateController.h" +#include "components/motion/MotionController.h" +#include "components/settings/Settings.h" +using namespace Pinetime::Applications::Screens; + + +WatchFaceCasioStyleG7710::WatchFaceCasioStyleG7710(DisplayApp* app, + Controllers::DateTime& dateTimeController, + Controllers::Battery& batteryController, + Controllers::Ble& bleController, + Controllers::NotificationManager& notificatioManager, + Controllers::Settings& settingsController, + Controllers::HeartRateController& heartRateController, + Controllers::MotionController& motionController) + : Screen(app), + currentDateTime {{}}, + dateTimeController {dateTimeController}, + batteryController {batteryController}, + bleController {bleController}, + notificatioManager {notificatioManager}, + settingsController {settingsController}, + heartRateController {heartRateController}, + motionController {motionController} { + + batteryIcon = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(batteryIcon, Symbols::batteryFull); + lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_obj_align(batteryIcon, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, -5, 0); + + batteryPlug = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(batteryPlug, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_label_set_text_static(batteryPlug, Symbols::plug); + lv_obj_align(batteryPlug, batteryIcon, LV_ALIGN_OUT_LEFT_MID, -5, 0); + + bleIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(bleIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_label_set_text_static(bleIcon, Symbols::bluetooth); + lv_obj_align(bleIcon, batteryPlug, LV_ALIGN_OUT_LEFT_MID, -5, 0); + + notificationIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(notificationIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_label_set_text_static(notificationIcon, NotificationIcon::GetIcon(false)); + lv_obj_align(notificationIcon, nullptr, LV_ALIGN_IN_TOP_LEFT, 5, 0); + + + label_day_of_week = lv_label_create(lv_scr_act(), nullptr); + lv_obj_align(label_day_of_week, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 10, 64); + lv_obj_set_style_local_text_color(label_day_of_week, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_obj_set_style_local_text_font(label_day_of_week, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_dots_40); + lv_label_set_text_static(label_day_of_week, "SUN"); + + label_week_number = lv_label_create(lv_scr_act(), nullptr); + lv_obj_align(label_week_number, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 5, 34); + lv_obj_set_style_local_text_color(label_week_number, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_obj_set_style_local_text_font(label_week_number, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_dots_40); + lv_label_set_text_static(label_week_number, "WK26"); + + label_day_of_year = lv_label_create(lv_scr_act(), nullptr); + lv_obj_align(label_day_of_year, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 100, 25); + lv_obj_set_style_local_text_color(label_day_of_year, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_obj_set_style_local_text_font(label_day_of_year, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_7segment_40); + lv_label_set_text_static(label_day_of_year, "181-184"); + + static lv_style_t style_line; + lv_style_init(&style_line); + lv_style_set_line_width(&style_line, LV_STATE_DEFAULT, 2); + lv_style_set_line_color(&style_line, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_style_set_line_rounded(&style_line, LV_STATE_DEFAULT, true); + + static lv_style_t style_border; + lv_style_init(&style_border); + lv_style_set_line_width(&style_border, LV_STATE_DEFAULT, 6); + lv_style_set_line_color(&style_border, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_style_set_line_rounded(&style_border, LV_STATE_DEFAULT, true); + + line_day_of_week_number = lv_line_create(lv_scr_act(), nullptr); + static lv_point_t line_day_of_week_number_points[] = {{0, 0}, {100, 0}, {94, 70}, {0, 70}}; + lv_line_set_points(line_day_of_week_number, line_day_of_week_number_points, 4); + lv_obj_add_style(line_day_of_week_number, LV_LINE_PART_MAIN, &style_border); + lv_obj_align(line_day_of_week_number, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 28); + + line_day_of_year = lv_line_create(lv_scr_act(), nullptr); + static lv_point_t line_day_of_year_points[] = {{0, 5}, {130, 5}, {135, 0}}; + lv_line_set_points(line_day_of_year, line_day_of_year_points, 3); + lv_obj_add_style(line_day_of_year, LV_LINE_PART_MAIN, &style_line); + lv_obj_align(line_day_of_year, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 55); + + label_date = lv_label_create(lv_scr_act(), nullptr); + lv_obj_align(label_date, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 100, 65); + lv_obj_set_style_local_text_color(label_date, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_obj_set_style_local_text_font(label_date, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_7segment_40); + lv_label_set_text_static(label_date, "6-30"); + + line_date = lv_line_create(lv_scr_act(), nullptr); + static lv_point_t line_date_points[] = {{0, 5}, {135, 5}, {140, 0}}; + lv_line_set_points(line_date, line_date_points, 3); + lv_obj_add_style(line_date, LV_LINE_PART_MAIN, &style_line); + lv_obj_align(line_date, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 95); + + label_time = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(label_time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_obj_set_style_local_text_font(label_time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_7segment_115); + lv_obj_align(label_time, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); + + line_time = lv_line_create(lv_scr_act(), nullptr); + static lv_point_t line_time_points[] = {{0, 0}, {230, 0}, {235, 5}}; + lv_line_set_points(line_time, line_time_points, 3); + lv_obj_add_style(line_time, LV_LINE_PART_MAIN, &style_line); + lv_obj_align(line_time, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, 0, -35); + + label_time_ampm = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(label_time_ampm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_label_set_text_static(label_time_ampm, ""); + lv_obj_align(label_time_ampm, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 5, -5); + + backgroundLabel = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_click(backgroundLabel, true); + lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); + lv_obj_set_size(backgroundLabel, 240, 240); + lv_obj_set_pos(backgroundLabel, 0, 0); + lv_label_set_text_static(backgroundLabel, ""); + + heartbeatIcon = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(heartbeatIcon, Symbols::heartBeat); + lv_obj_set_style_local_text_color(heartbeatIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_obj_align(heartbeatIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 5, -2); + + heartbeatValue = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(heartbeatValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_label_set_text_static(heartbeatValue, ""); + lv_obj_align(heartbeatValue, heartbeatIcon, LV_ALIGN_OUT_RIGHT_MID, 5, 0); + + stepValue = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_label_set_text_static(stepValue, "0"); + lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -5, -2); + + stepIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(stepIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_label_set_text_static(stepIcon, Symbols::shoe); + lv_obj_align(stepIcon, stepValue, LV_ALIGN_OUT_LEFT_MID, -5, 0); + + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); + Refresh(); +} + +WatchFaceCasioStyleG7710::~WatchFaceCasioStyleG7710() { + lv_task_del(taskRefresh); + lv_obj_clean(lv_scr_act()); +} + +void WatchFaceCasioStyleG7710::Refresh() { + powerPresent = batteryController.IsPowerPresent(); + if (powerPresent.IsUpdated()) { + lv_label_set_text_static(batteryPlug, BatteryIcon::GetPlugIcon(powerPresent.Get())); + } + + batteryPercentRemaining = batteryController.PercentRemaining(); + if (batteryPercentRemaining.IsUpdated()) { + auto batteryPercent = batteryPercentRemaining.Get(); + lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); + } + + bleState = bleController.IsConnected(); + bleRadioEnabled = bleController.IsRadioEnabled(); + if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) { + lv_label_set_text_static(bleIcon, BleIcon::GetIcon(bleState.Get())); + } + lv_obj_realign(batteryPlug); + lv_obj_realign(bleIcon); + + notificationState = notificatioManager.AreNewNotificationsAvailable(); + if (notificationState.IsUpdated()) { + lv_label_set_text_static(notificationIcon, NotificationIcon::GetIcon(notificationState.Get())); + } + + currentDateTime = dateTimeController.CurrentDateTime(); + + if (currentDateTime.IsUpdated()) { + auto newDateTime = currentDateTime.Get(); + + auto dp = date::floor(newDateTime); + auto time = date::make_time(newDateTime - dp); + auto yearMonthDay = date::year_month_day(dp); + + auto year = static_cast(yearMonthDay.year()); + auto month = static_cast(static_cast(yearMonthDay.month())); + auto day = static_cast(yearMonthDay.day()); + auto dayOfWeek = static_cast(date::weekday(yearMonthDay).iso_encoding()); + + uint8_t hour = time.hours().count(); + uint8_t minute = time.minutes().count(); + auto weekNumberFormat = "%V"; + + if (displayedHour != hour || displayedMinute != minute) { + displayedHour = hour; + displayedMinute = minute; + + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { + char ampmChar[2] = "A"; + 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); + lv_label_set_text_fmt(label_time, "%2d:%02d", hour, minute); + lv_obj_align(label_time, lv_scr_act(), LV_ALIGN_CENTER, 0, 30); + } else { + lv_label_set_text_fmt(label_time, "%02d:%02d", hour, minute); + lv_obj_align(label_time, lv_scr_act(), LV_ALIGN_CENTER, 0, 30); + } + } + + if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) { + // 24h mode: ddmmyyyy, first DOW=Monday; + lv_label_set_text_fmt( + label_date, "%3d-%2d", day, month); + weekNumberFormat = "%V"; // Replaced by the week number of the year (Monday as the first day of the week) as a decimal number [01,53]. If the week containing 1 January has four or more days in the new year, then it is considered week 1. Otherwise, it is the last week of the previous year, and the next week is week 1. Both January 4th and the first Thursday of January are always in week 1. [ tm_year, tm_wday, tm_yday] + } else { + // 12h mode: mmddyyyy, first DOW=Sunday; + lv_label_set_text_fmt( + label_date, "%3d-%2d", month, day); + weekNumberFormat = "%U"; // Replaced by the week number of the year as a decimal number [00,53]. The first Sunday of January is the first day of week 1; days in the new year before this are in week 0. [ tm_year, tm_wday, tm_yday] + } + + uint8_t weekNumber; + uint16_t dayOfYearNumber, daysTillEndOfYearNumber; + + std::tm date = {}; + date.tm_year = year - 1900; + date.tm_mon = static_cast(yearMonthDay.month()) - 1; + date.tm_mday = day + 1; + std::mktime( &date ); + + dayOfYearNumber = date.tm_yday; + daysTillEndOfYearNumber = yearMonthDay.year().is_leap() ? 366 : 365 - dayOfYearNumber; + + char buffer[8]; + strftime(buffer, 8, weekNumberFormat, &date); + weekNumber = atoi(buffer); + + lv_label_set_text_fmt(label_day_of_week, "%s", dateTimeController.DayOfWeekShortToString()); + lv_label_set_text_fmt(label_day_of_year, "%3d-%3d", dayOfYearNumber, daysTillEndOfYearNumber); + lv_label_set_text_fmt(label_week_number, "WK%02d", weekNumber); + + lv_obj_realign(label_day_of_week); + lv_obj_realign(label_day_of_year); + lv_obj_realign(label_week_number); + lv_obj_realign(label_date); + + currentYear = year; + currentMonth = month; + currentDayOfWeek = dayOfWeek; + currentDay = day; + } + } + + heartbeat = heartRateController.HeartRate(); + heartbeatRunning = heartRateController.State() != Controllers::HeartRateController::States::Stopped; + if (heartbeat.IsUpdated() || heartbeatRunning.IsUpdated()) { + if (heartbeatRunning.Get()) { + lv_obj_set_style_local_text_color(heartbeatIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x98B69A)); + lv_label_set_text_fmt(heartbeatValue, "%d", heartbeat.Get()); + } else { + lv_obj_set_style_local_text_color(heartbeatIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x1B1B1B)); + lv_label_set_text_static(heartbeatValue, ""); + } + + lv_obj_realign(heartbeatIcon); + lv_obj_realign(heartbeatValue); + } + + stepCount = motionController.NbSteps(); + motionSensorOk = motionController.IsSensorOk(); + if (stepCount.IsUpdated() || motionSensorOk.IsUpdated()) { + lv_label_set_text_fmt(stepValue, "%lu", stepCount.Get()); + lv_obj_realign(stepValue); + lv_obj_realign(stepIcon); + } +} diff --git a/src/displayapp/screens/WatchFaceCasioStyleG7710.h b/src/displayapp/screens/WatchFaceCasioStyleG7710.h new file mode 100644 index 00000000..0cf7bbbf --- /dev/null +++ b/src/displayapp/screens/WatchFaceCasioStyleG7710.h @@ -0,0 +1,91 @@ +#pragma once + +#include +#include +#include +#include +#include +#include "displayapp/screens/Screen.h" +#include "components/datetime/DateTimeController.h" +#include "components/ble/BleController.h" + +namespace Pinetime { + namespace Controllers { + class Settings; + class Battery; + class Ble; + class NotificationManager; + class HeartRateController; + class MotionController; + } + + namespace Applications { + namespace Screens { + + class WatchFaceCasioStyleG7710 : public Screen { + public: + WatchFaceCasioStyleG7710(DisplayApp* app, + Controllers::DateTime& dateTimeController, + Controllers::Battery& batteryController, + Controllers::Ble& bleController, + Controllers::NotificationManager& notificatioManager, + Controllers::Settings& settingsController, + Controllers::HeartRateController& heartRateController, + Controllers::MotionController& motionController); + ~WatchFaceCasioStyleG7710() override; + + void Refresh() override; + + 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; + + DirtyValue batteryPercentRemaining {}; + DirtyValue powerPresent {}; + DirtyValue bleState {}; + DirtyValue bleRadioEnabled {}; + DirtyValue> currentDateTime {}; + DirtyValue motionSensorOk {}; + DirtyValue stepCount {}; + DirtyValue heartbeat {}; + DirtyValue heartbeatRunning {}; + DirtyValue notificationState {}; + + lv_obj_t* label_time; + lv_obj_t* line_time; + lv_obj_t* label_time_ampm; + lv_obj_t* label_date; + lv_obj_t* line_date; + lv_obj_t* label_day_of_week; + lv_obj_t* label_week_number; + lv_obj_t* line_day_of_week_number; + lv_obj_t* label_day_of_year; + lv_obj_t* line_day_of_year; + lv_obj_t* backgroundLabel; + lv_obj_t* bleIcon; + lv_obj_t* batteryPlug; + lv_obj_t* heartbeatIcon; + lv_obj_t* heartbeatValue; + lv_obj_t* stepIcon; + lv_obj_t* stepValue; + lv_obj_t* notificationIcon; + lv_obj_t* batteryIcon; + + Controllers::DateTime& dateTimeController; + Controllers::Battery& batteryController; + Controllers::Ble& bleController; + Controllers::NotificationManager& notificatioManager; + Controllers::Settings& settingsController; + Controllers::HeartRateController& heartRateController; + Controllers::MotionController& motionController; + + lv_task_t* taskRefresh; + }; + } + } +} diff --git a/src/displayapp/screens/settings/SettingWatchFace.h b/src/displayapp/screens/settings/SettingWatchFace.h index 62427b4f..801dcd73 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.h +++ b/src/displayapp/screens/settings/SettingWatchFace.h @@ -4,8 +4,10 @@ #include #include +#include "displayapp/screens/ScreenList.h" #include "components/settings/Settings.h" #include "displayapp/screens/Screen.h" +#include "displayapp/screens/Symbols.h" namespace Pinetime { @@ -17,14 +19,17 @@ namespace Pinetime { SettingWatchFace(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); ~SettingWatchFace() override; - void UpdateSelected(lv_obj_t* object, lv_event_t event); + bool OnTouchEvent(TouchEvents event) override; private: - static constexpr std::array options = {" Digital face", " Analog face", " PineTimeStyle", " Terminal"}; Controllers::Settings& settingsController; + ScreenList<2> screens; - lv_obj_t* cbOption[options.size()]; + static constexpr const char* title = "Watch face"; + static constexpr const char* symbol = Symbols::home; + std::unique_ptr CreateScreen1(); + std::unique_ptr CreateScreen2(); }; } } -} +} \ No newline at end of file diff --git a/src/libs/lv_conf.h b/src/libs/lv_conf.h index 73109c5a..3dfe9d7c 100644 --- a/src/libs/lv_conf.h +++ b/src/libs/lv_conf.h @@ -418,6 +418,9 @@ typedef void* lv_indev_drv_user_data_t; /*Type of user data in the in LV_FONT_DECLARE(jetbrains_mono_42) \ LV_FONT_DECLARE(jetbrains_mono_76) \ LV_FONT_DECLARE(open_sans_light) \ + LV_FONT_DECLARE(lv_font_7segment_115) \ + LV_FONT_DECLARE(lv_font_7segment_40) \ + LV_FONT_DECLARE(lv_font_dots_40) \ LV_FONT_DECLARE(lv_font_sys_48) /* Enable it if you have fonts with a lot of characters. -- cgit v1.2.3