From 10beda289bf0ccae18c89872e8da48ee44be14ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sun, 22 Jan 2023 13:54:27 +0100 Subject: [PATCH] InfiniTime FOSDEM 2023 special edition Add a background image in Digital and Analog watchface. The content of the image is read from /images/fosdem.bin in external storage. Generate fosdem.bin from fosdem.png and add it in the external resource pack. --- src/displayapp/screens/SystemInfo.cpp | 3 ++- src/displayapp/screens/WatchFaceAnalog.cpp | 11 ++++++++--- src/displayapp/screens/WatchFaceAnalog.h | 4 ++++ src/displayapp/screens/WatchFaceDigital.cpp | 9 +++++++++ src/displayapp/screens/WatchFaceDigital.h | 3 +++ src/resources/images.json | 7 +++++++ src/resources/images/fosdem.png | Bin 0 -> 1495 bytes 7 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 src/resources/images/fosdem.png diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index 01c35195..9bd921bc 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -80,10 +80,11 @@ std::unique_ptr SystemInfo::CreateScreen1() { lv_label_set_text_fmt(label, "#FFFF00 InfiniTime#\n\n" "#808080 Version# %ld.%ld.%ld\n" + "#AB1B94 FOSDEM edition#\n" "#808080 Short Ref# %s\n" "#808080 Build date#\n" "%s\n" - "%s\n\n" + "%s\n" "#808080 Bootloader# %s", Version::Major(), Version::Minor(), diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index 5e5317ee..f9b222e9 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -61,9 +61,8 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, sMinute = 99; sSecond = 99; - lv_obj_t* bg_clock_img = lv_img_create(lv_scr_act(), NULL); - lv_img_set_src(bg_clock_img, &bg_clock); - lv_obj_align(bg_clock_img, NULL, LV_ALIGN_CENTER, 0, 0); + bg = lv_img_create(lv_scr_act(), nullptr); + lv_obj_align(bg, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 0); batteryIcon.Create(lv_scr_act()); lv_obj_align(batteryIcon.GetObject(), nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); @@ -124,6 +123,7 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); Refresh(); + doNotLoadBg = false; } WatchFaceAnalog::~WatchFaceAnalog() { @@ -186,6 +186,11 @@ void WatchFaceAnalog::SetBatteryIcon() { } void WatchFaceAnalog::Refresh() { + if(!bgLoaded && !doNotLoadBg) { + lv_img_set_src(bg, "F:/images/fosdem.bin"); + bgLoaded = true; + } + isCharging = batteryController.IsCharging(); if (isCharging.IsUpdated()) { if (isCharging.Get()) { diff --git a/src/displayapp/screens/WatchFaceAnalog.h b/src/displayapp/screens/WatchFaceAnalog.h index 04d9e711..874ee53d 100644 --- a/src/displayapp/screens/WatchFaceAnalog.h +++ b/src/displayapp/screens/WatchFaceAnalog.h @@ -70,6 +70,10 @@ namespace Pinetime { BatteryIcon batteryIcon; + lv_obj_t* bg; + bool bgLoaded = false; + bool doNotLoadBg = true; + const Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; Controllers::Ble& bleController; diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 47f40dab..aa126a88 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -31,6 +31,9 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, motionController {motionController}, statusIcons(batteryController, bleController) { + bg = lv_img_create(lv_scr_act(), nullptr); + lv_obj_align(bg, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 0); + statusIcons.Create(); notificationIcon = lv_label_create(lv_scr_act(), nullptr); @@ -73,6 +76,7 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); Refresh(); + doNotLoadBg = false; } WatchFaceDigital::~WatchFaceDigital() { @@ -81,6 +85,11 @@ WatchFaceDigital::~WatchFaceDigital() { } void WatchFaceDigital::Refresh() { + if(!bgLoaded && !doNotLoadBg) { + lv_img_set_src(bg, "F:/images/fosdem.bin"); + bgLoaded = true; + } + statusIcons.Update(); notificationState = notificationManager.AreNewNotificationsAvailable(); diff --git a/src/displayapp/screens/WatchFaceDigital.h b/src/displayapp/screens/WatchFaceDigital.h index 60446afa..613ae2c2 100644 --- a/src/displayapp/screens/WatchFaceDigital.h +++ b/src/displayapp/screens/WatchFaceDigital.h @@ -64,6 +64,9 @@ namespace Pinetime { lv_obj_t* stepIcon; lv_obj_t* stepValue; lv_obj_t* notificationIcon; + lv_obj_t* bg; + bool bgLoaded = false; + bool doNotLoadBg = true; Controllers::DateTime& dateTimeController; Controllers::NotificationManager& notificationManager; diff --git a/src/resources/images.json b/src/resources/images.json index db2ccab0..78fd5254 100644 --- a/src/resources/images.json +++ b/src/resources/images.json @@ -5,5 +5,12 @@ "output_format": "bin", "binary_format": "ARGB8565_RBSWAP", "target_path": "/images/" + }, + "fosdem" : { + "sources": "images/fosdem.png", + "color_format": "CF_INDEXED_1_BIT", + "output_format": "bin", + "binary_format": "ARGB8565_RBSWAP", + "target_path": "/images/" } } diff --git a/src/resources/images/fosdem.png b/src/resources/images/fosdem.png new file mode 100644 index 0000000000000000000000000000000000000000..525620b38fb9118ca0adf26a2f60f1a30e8d5f46 GIT binary patch literal 1495 zcmV;|1t|K7P)EX>4Tx04R}tkv&MmP!xqv(@I6F4i*t{$WWc^q9Ts93Pq?8YK2xEOkVm2O&XFE z7e~Rh;NZ_<)xpJCR|i)?5c~mgb#YR3krMAq3N2#2@OU5R-E(;FK0v6KnPvrIfTr7K zDiIem*;O(43Ll2hivap%W*Kvmltjn+x~FccyC~1<-1leosX2=QK9M-a4AUmwAfDN@ z4bJ<-VOEq?;&b8&lP*a7$aTfzH_io@1)do;)2VslFtJ!@W2KE*(bR~ii6g3}Q@)V# zSmnIMSu0mr^Pc>Lp`5<5%yn9$NMI35kRU=q6(y8mBTBnYiiH%N$2<5(T)#vvg#tGnm2Cnp$zfuQgKS{5( zw8#-Kunk;Xw=`uBxZDATpA6ZQUCB>N$mfCgGy0}1Fn9~}ta)>5p5ycZNYkv6H^9Lm zFkYbS^$zduZlBw~Je*gdg22e~?MXVr|0001h=2pl6000SaNLh0L z01ejw01ejxLMWSf00007bV*G`2j>A63nDh_+MF=}00YxWL_t(o!{wRHvD_dGfaM`G zK2idWWa84yEoGz?N}&Xf90<;0^KT^lc9T==nn6gXH^-myNPyzuLFxMOuXVZiWXfaU2Ykggs>a0G{98EmBp48arx-YtoR z!to1nATj(itiOae8V3XX#&Pf+-MB+@gnnu4eoI|`FRP>ylROsdmLmUTa| z?zB>ZO3;{REZUkf+9Bhutw^6^)# z)a3K-wAdH)?Z8jAcf2@I zG?rLl!loBSo-BO6aAl&&LJ0rOS6i z7ystr(P47%7#~|EhaT+6Bpw~OCdW1Guvajrj*4;}9yAmFNgq>@L+$`0M`TOm$?@FN z_@K}Jv&Mp=@uaC?Xgq1CI2zlpcWbCdk|Z(H4ekZwj%)>mt}3S*Xu4MFz5Qlui|Ijo zYbRTOif$a5=WWM-+7W$O;2VtvjW_jnqd4f%QQX-+$7!dUnL zHgVK(mac=rz*_L2^Y3}Y+i-3$8A{X>5A!}g=y}OOOk1u=kB4^$L5v3#vtILc{Q=g2Ul3tFKY{=N002ovPDHLkV1lMnygmQ` literal 0 HcmV?d00001