From 67c651577de8b25bec75696e260c742740ab35ae Mon Sep 17 00:00:00 2001 From: Ken Van Hoeylandt Date: Fri, 13 Feb 2026 00:20:42 +0100 Subject: [PATCH 1/5] Add custom icon fonts to lvgl-module --- Buildscripts/module.cmake | 8 + Data/system/app_icon_chat_dark_mode.png | Bin 518 -> 0 bytes Data/system/app_icon_fallback_dark_mode.png | Bin 239 -> 0 bytes Data/system/app_icon_gpio_dark_mode.png | Bin 412 -> 0 bytes Data/system/app_icon_i2c_dark_mode.png | Bin 417 -> 0 bytes Data/system/app_icon_notes_dark_mode.png | Bin 489 -> 0 bytes Modules/lvgl-module/Assets/generate-all.py | 134 ++++++ Modules/lvgl-module/CMakeLists.txt | 4 + .../Include/tactility/lvgl_fonts.h | 27 ++ .../Include/tactility/lvgl_module.h | 2 +- .../Include/tactility/lvgl_symbols_shared.h | 34 ++ .../tactility/lvgl_symbols_statusbar.h | 19 + .../tactility/material_symbols_shared_16.c | 394 ++++++++++++++++++ .../tactility/material_symbols_statusbar_20.c | 306 ++++++++++++++ THIRD-PARTY-NOTICES.md | 7 +- Tactility/Include/Tactility/Assets.h | 4 - Tactility/Source/app/addgps/AddGps.cpp | 3 +- Tactility/Source/app/apphub/AppHubApp.cpp | 2 + Tactility/Source/app/applist/AppList.cpp | 9 +- Tactility/Source/app/chat/ChatApp.cpp | 4 +- .../Source/app/i2cscanner/I2cScanner.cpp | 5 +- Tactility/Source/app/notes/Notes.cpp | 4 +- .../Source/app/screenshot/Screenshot.cpp | 4 +- .../Source/app/systeminfo/SystemInfo.cpp | 3 +- .../webserversettings/WebServerSettings.cpp | 3 +- .../Source/app/wifimanage/WifiManage.cpp | 4 +- 26 files changed, 959 insertions(+), 21 deletions(-) delete mode 100644 Data/system/app_icon_chat_dark_mode.png delete mode 100644 Data/system/app_icon_fallback_dark_mode.png delete mode 100644 Data/system/app_icon_gpio_dark_mode.png delete mode 100644 Data/system/app_icon_i2c_dark_mode.png delete mode 100644 Data/system/app_icon_notes_dark_mode.png create mode 100644 Modules/lvgl-module/Assets/generate-all.py create mode 100644 Modules/lvgl-module/Include/tactility/lvgl_fonts.h create mode 100644 Modules/lvgl-module/Include/tactility/lvgl_symbols_shared.h create mode 100644 Modules/lvgl-module/Include/tactility/lvgl_symbols_statusbar.h create mode 100644 Modules/lvgl-module/Source/tactility/material_symbols_shared_16.c create mode 100644 Modules/lvgl-module/Source/tactility/material_symbols_statusbar_20.c diff --git a/Buildscripts/module.cmake b/Buildscripts/module.cmake index 276ea1bd8..9c148b3a7 100644 --- a/Buildscripts/module.cmake +++ b/Buildscripts/module.cmake @@ -2,6 +2,14 @@ if (COMMAND tactility_add_module) return() endif() +macro(tactility_get_module_name NAME OUT_NAME) + if (DEFINED ENV{ESP_IDF_VERSION}) + set(${OUT_NAME} ${COMPONENT_LIB}) + else () + set(${OUT_NAME} ${NAME}) + endif () +endmacro() + macro(tactility_add_module NAME) set(options) set(oneValueArgs) diff --git a/Data/system/app_icon_chat_dark_mode.png b/Data/system/app_icon_chat_dark_mode.png deleted file mode 100644 index 89e68726bec1df50d83fe5999ba7cc0c69710e85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP)Px$z)3_wR5(wi(LHDsK@@UG}p2$XHrVbB+rHrUJU>O^pG43I`M)GP1;qGva>#LkFvpXWv1Mpfz9@cgJHqY}l zGdon*^{+h7S7MAmN%lerPc{K<#-b>Wsp?GtrvU8UPzgyc0yv?nOU}7VBY`%6q{J8x zrj+&$K8oxEuplBw0jzrOr*{Oln_|D;KO-Vt@BNj30=B|`0UEx(5kVT1#{d8T07*qo IM6N<$g7hxmM*si- diff --git a/Data/system/app_icon_fallback_dark_mode.png b/Data/system/app_icon_fallback_dark_mode.png deleted file mode 100644 index 45aa4963c225e8225bfb2aeb4b82673f6ac879fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#X!0Ygc<#+)i{6*$r9Iy zlHmNblJdl&REF~Ma=pyF?Be9af>gcyqV(DCY@~pSYCK&WLo9mVURLB|3gl^dSbsvz zyQz9k%KL^!?#5X5hjtNvr2LG|3p$8y)(B~2VM$)~%XH?FO?TaoLgTe~DWM4fS07YT diff --git a/Data/system/app_icon_gpio_dark_mode.png b/Data/system/app_icon_gpio_dark_mode.png deleted file mode 100644 index e7536da290aedfb64375cb676739b6d3344101b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmV;N0b~A&P)Px$R!KxbR5(wilg};#Q543%bKjsnlP<-EMI$UMSV)BM2&iBs_I464z}CuwHL8z5 z{8@^HM4}OqSXfTaeF54}Z__r~=?vlSX6D@AobP`@JEvMBb0JU0e zN<@xSb==Ha7gcq|%w9;YMNxGB9o7Sg<9O0Jw*z2_LroVDS_CixpscE;K>#y50k8_-QB@~;0O7&R zDgdae%PD}w_f`kq`?W@+u@y8owO)szr2xv!*~|rrB61kq83ee>l0b4H0qFeg&l1}D z-vA6ZWt?Y7I0X;}{G_U5{Vq%c*d{sugN>IY527f#OSs^@A0l}SU@;{~7XUU@^*s@! z&WpY%pS7c0GP7rr8<|n=w=OIbfX{qB-vSLfncMiAP5%Nz!Kx8%^dkNM0000E!c#c**5nxYyItbxpLT17~=K=YjKkIAUguGpVuMe-V)OeSa~EqLG8dIrj>!L`*Ic5 zx(AI`tEFaEF|$g$-F5&22EATy%J=>J5O?QPbtYjjs4on|MjXeLA;_-)M~O%QldAeC zBKyO3*YEcm-EQ~U%;wXc=gk6nfFKCoe=`R`@RZGFmlG}j|Czo4rP{=pLkSLM00000 LNkvXXu0mjfeD|z~ diff --git a/Data/system/app_icon_notes_dark_mode.png b/Data/system/app_icon_notes_dark_mode.png deleted file mode 100644 index 628c4a3afb6f9b2c27104859ccc51849d5edbb68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 489 zcmVPx$qe(S zSG8IlY&04drBdlS4W)kKqbPbwMB4zaa=F}eKA%^20Il_?F@|>o`o90W*=!aWV~5VU zF971!UKT=(-vX3UuK@f2@Us)(oKx1?vgdha080Qq0XPBhj&nZN2D|~VB7}I~35er( z*ch|xoLiJq?rE(ToO5fw?@tCnQ0oa$N(})xAflyKww)-7W{GIs7&8-w;rU$?l~NO# zf)8y4X}8mw0jx?Xf7R>tNo(zfF=pz43mM?^{Svg+`v5jM=ijsYZ;Y|G*4nvNvI`-^ zZNIvfP^nY~f*|-Or3`De+H24Awuor1P$>LWN__=z)Dw{TeViIZMD-*|=EE>N%N%zjaU8!$k|eG9&ttPeL?cA>k#m0V-!S!>g%0Rdu~= 2: + name, cp = parts[0].lower(), parts[1] + codepoints[name] = cp + if len(codepoints) == 0: + raise ValueError(f"Code points map is empty or wasn't found at {file_path}") + return codepoints + + +def get_code_points(codepoints, names: list) -> list: + result = [] + for name in names: + safe_name = name.lower() + if not safe_name in codepoints: + raise ValueError(f"Code point '{safe_name}' not found in map") + result.append(f"0x{codepoints[safe_name].upper()}") + return result + +def generate_icon_fonts(font_file, font_sizes, symbols, output): + for size in font_sizes: + generate(2, size, font_file, symbols, output) + +def generate_icon_names(codepoint_map: dict, codepoint_names: list, filename: str): + print(f"Generating {filename}") + output_path = os.path.join(base_dir, "..", "Include", "tactility", filename) + with open(output_path, 'w') as f: + f.write("#pragma once\n\n") + for name in codepoint_names: + safe_name = name.lower() + if safe_name in codepoint_map: + hex_val = codepoint_map[safe_name] + # Convert hex to int + val = int(hex_val, 16) + # Convert to UTF-8 escaped string + utf8_bytes = chr(val).encode('utf-8') + escaped_str = "".join(f"\\x{b:02X}" for b in utf8_bytes) + + f.write(f'#define LVGL_SYMBOL_{safe_name.upper()} "{escaped_str}"\n') + else: + print(f"Warning: {safe_name} not found in codepoint map") + +# --------------- Symbol Fonts --------------- + +shared_symbol_code_point_names = [ + "mail", + "toolbar", # Apps without custom icon + "forum", # Chat app + "device_hub", # I2C + "display_settings", # Display Settings app + "download", + "gamepad", + "lightbulb", + "network_manage", # Wifi Settings app + "settings", + "monitoring", # System Info app + "close", + "note_add", + "edit_note", + "delete", + "folder", + "hub", # App Hub + "image", # Screenshot app + "keyboard_arrow_up", + "search", + "cloud", # Web server + "app_registration", # App Settings app + "devices", # Developer app + "navigation", # GPS (settings) app + "keyboard_alt", # Keyboard (settings) app + "electric_bolt", # Power (settings) app + "usb", # Power (settings) app + "wifi", # WiFi (settings) app + "refresh", # e.g. App Hub reload button + "lists", # Chat app toolbar + "help", # Diceware help + "power_settings_new", # Power off for T-Lora Pager +] + +statusbar_symbol_code_point_names = [ + # Location tracking + "location_on", + # Development server + "cloud", + # SD Card + "sd_card", + "sd_card_alert", + # Wi-Fi + "signal_wifi_0_bar", + "network_wifi_1_bar", + "network_wifi_2_bar", + "network_wifi_3_bar", + "signal_wifi_4_bar", + "signal_wifi_off", + # Battery + "battery_android_frame_1", + "battery_android_frame_2", + "battery_android_frame_3", + "battery_android_frame_4", + "battery_android_frame_5", + "battery_android_frame_6", + "battery_android_frame_bolt" +] + +shared_symbol_font_sizes = [ + 16 # Fits with montserrat 14 in lv_list as icon with text +] + +# Resolve file path relative to this script so it can be executed from any CWD +base_dir = os.path.dirname(__file__) +codepoints_map_path = os.path.join(base_dir, "MaterialSymbolsRounded[FILL,GRAD,opsz,wght].codepoints") +codepoints_map = read_code_points_map(codepoints_map_path) + +# Shared symbols +shared_symbol_code_points = get_code_points(codepoints_map, shared_symbol_code_point_names) +generate_icon_fonts("MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf", shared_symbol_font_sizes, shared_symbol_code_points, "material_symbols_shared") +generate_icon_names(codepoints_map, shared_symbol_code_point_names, "lvgl_symbols_shared.h") + +# Statusbar symbols +statusbar_symbol_code_points = get_code_points(codepoints_map, statusbar_symbol_code_point_names) +generate_icon_fonts("MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf", [20], statusbar_symbol_code_points, "material_symbols_statusbar") +generate_icon_names(codepoints_map, statusbar_symbol_code_point_names, "lvgl_symbols_statusbar.h") diff --git a/Modules/lvgl-module/CMakeLists.txt b/Modules/lvgl-module/CMakeLists.txt index d259d1277..b60f4908a 100644 --- a/Modules/lvgl-module/CMakeLists.txt +++ b/Modules/lvgl-module/CMakeLists.txt @@ -20,3 +20,7 @@ tactility_add_module(lvgl-module INCLUDE_DIRS Include/ REQUIRES ${REQUIRES_LIST} ) + +tactility_get_module_name("lvgl-module" MODULE_NAME) + +target_compile_definitions(${MODULE_NAME} PUBLIC "-DLV_LVGL_H_INCLUDE_SIMPLE") diff --git a/Modules/lvgl-module/Include/tactility/lvgl_fonts.h b/Modules/lvgl-module/Include/tactility/lvgl_fonts.h new file mode 100644 index 000000000..c3fafc9dc --- /dev/null +++ b/Modules/lvgl-module/Include/tactility/lvgl_fonts.h @@ -0,0 +1,27 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern const lv_font_t material_symbols_statusbar_20; + +extern const lv_font_t material_symbols_shared_16; + +//#define lvgl_get_text_font_smaller() &lv_font_montserrat_12 +// TODO: Make function so it's easier to use this cross-platform +#define LVGL_TEXT_FONT_DEFAULT &lv_font_montserrat_14 +#define LVGL_TEXT_FONT_LARGER &lv_font_montserrat_18 + +// TODO: Make function so it's easier to use this cross-platform +#define LVGL_SYMBOL_FONT_DEFAULT &material_symbols_shared_16 + +// TODO: Make function so it's easier to use this cross-platform +#define LVGL_TOPBAR_FONT &material_symbols_statusbar_20 +#define LVGL_TOPBAR_ICON_HEIGHT 20 + +#ifdef __cplusplus +} +#endif diff --git a/Modules/lvgl-module/Include/tactility/lvgl_module.h b/Modules/lvgl-module/Include/tactility/lvgl_module.h index e18e3a530..381aaa52f 100644 --- a/Modules/lvgl-module/Include/tactility/lvgl_module.h +++ b/Modules/lvgl-module/Include/tactility/lvgl_module.h @@ -84,7 +84,7 @@ void lvgl_unlock(void); * * @return true if running, false otherwise. */ -bool lvgl_is_running(); +bool lvgl_is_running(void); #ifdef __cplusplus } diff --git a/Modules/lvgl-module/Include/tactility/lvgl_symbols_shared.h b/Modules/lvgl-module/Include/tactility/lvgl_symbols_shared.h new file mode 100644 index 000000000..a7af4e983 --- /dev/null +++ b/Modules/lvgl-module/Include/tactility/lvgl_symbols_shared.h @@ -0,0 +1,34 @@ +#pragma once + +#define LVGL_SYMBOL_MAIL "\xEE\x85\x99" +#define LVGL_SYMBOL_TOOLBAR "\xEE\xA7\xB7" +#define LVGL_SYMBOL_FORUM "\xEE\xA2\xAF" +#define LVGL_SYMBOL_DEVICE_HUB "\xEE\x8C\xB5" +#define LVGL_SYMBOL_DISPLAY_SETTINGS "\xEE\xAE\x97" +#define LVGL_SYMBOL_DOWNLOAD "\xEF\x82\x90" +#define LVGL_SYMBOL_GAMEPAD "\xEE\x8C\x8F" +#define LVGL_SYMBOL_LIGHTBULB "\xEE\xA4\x8F" +#define LVGL_SYMBOL_NETWORK_MANAGE "\xEF\x9E\xAB" +#define LVGL_SYMBOL_SETTINGS "\xEE\xA2\xB8" +#define LVGL_SYMBOL_MONITORING "\xEF\x86\x90" +#define LVGL_SYMBOL_CLOSE "\xEE\x97\x8D" +#define LVGL_SYMBOL_NOTE_ADD "\xEE\xA2\x9C" +#define LVGL_SYMBOL_EDIT_NOTE "\xEE\x9D\x85" +#define LVGL_SYMBOL_DELETE "\xEE\xA4\xAE" +#define LVGL_SYMBOL_FOLDER "\xEE\x8B\x87" +#define LVGL_SYMBOL_HUB "\xEE\xA7\xB4" +#define LVGL_SYMBOL_IMAGE "\xEE\x8F\xB4" +#define LVGL_SYMBOL_KEYBOARD_ARROW_UP "\xEE\x8C\x96" +#define LVGL_SYMBOL_SEARCH "\xEE\xA2\xB6" +#define LVGL_SYMBOL_CLOUD "\xEF\x85\x9C" +#define LVGL_SYMBOL_APP_REGISTRATION "\xEE\xBD\x80" +#define LVGL_SYMBOL_DEVICES "\xEE\x8C\xA6" +#define LVGL_SYMBOL_NAVIGATION "\xEE\x95\x9D" +#define LVGL_SYMBOL_KEYBOARD_ALT "\xEF\x80\xA8" +#define LVGL_SYMBOL_ELECTRIC_BOLT "\xEE\xB0\x9C" +#define LVGL_SYMBOL_USB "\xEE\x87\xA0" +#define LVGL_SYMBOL_WIFI "\xEE\x98\xBE" +#define LVGL_SYMBOL_REFRESH "\xEE\x97\x95" +#define LVGL_SYMBOL_LISTS "\xEE\xA6\xB9" +#define LVGL_SYMBOL_HELP "\xEE\xA3\xBD" +#define LVGL_SYMBOL_POWER_SETTINGS_NEW "\xEF\xA3\x87" diff --git a/Modules/lvgl-module/Include/tactility/lvgl_symbols_statusbar.h b/Modules/lvgl-module/Include/tactility/lvgl_symbols_statusbar.h new file mode 100644 index 000000000..d062faea8 --- /dev/null +++ b/Modules/lvgl-module/Include/tactility/lvgl_symbols_statusbar.h @@ -0,0 +1,19 @@ +#pragma once + +#define LVGL_SYMBOL_LOCATION_ON "\xEF\x87\x9B" +#define LVGL_SYMBOL_CLOUD "\xEF\x85\x9C" +#define LVGL_SYMBOL_SD_CARD "\xEE\x98\xA3" +#define LVGL_SYMBOL_SD_CARD_ALERT "\xEF\x81\x97" +#define LVGL_SYMBOL_SIGNAL_WIFI_0_BAR "\xEF\x82\xB0" +#define LVGL_SYMBOL_NETWORK_WIFI_1_BAR "\xEE\xAF\xA4" +#define LVGL_SYMBOL_NETWORK_WIFI_2_BAR "\xEE\xAF\x96" +#define LVGL_SYMBOL_NETWORK_WIFI_3_BAR "\xEE\xAF\xA1" +#define LVGL_SYMBOL_SIGNAL_WIFI_4_BAR "\xEF\x81\xA5" +#define LVGL_SYMBOL_SIGNAL_WIFI_OFF "\xEE\x87\x9A" +#define LVGL_SYMBOL_BATTERY_ANDROID_FRAME_1 "\xEF\x89\x97" +#define LVGL_SYMBOL_BATTERY_ANDROID_FRAME_2 "\xEF\x89\x96" +#define LVGL_SYMBOL_BATTERY_ANDROID_FRAME_3 "\xEF\x89\x95" +#define LVGL_SYMBOL_BATTERY_ANDROID_FRAME_4 "\xEF\x89\x94" +#define LVGL_SYMBOL_BATTERY_ANDROID_FRAME_5 "\xEF\x89\x93" +#define LVGL_SYMBOL_BATTERY_ANDROID_FRAME_6 "\xEF\x89\x92" +#define LVGL_SYMBOL_BATTERY_ANDROID_FRAME_BOLT "\xEF\x89\x90" diff --git a/Modules/lvgl-module/Source/tactility/material_symbols_shared_16.c b/Modules/lvgl-module/Source/tactility/material_symbols_shared_16.c new file mode 100644 index 000000000..9b6c1dd48 --- /dev/null +++ b/Modules/lvgl-module/Source/tactility/material_symbols_shared_16.c @@ -0,0 +1,394 @@ +/******************************************************************************* + * Size: 16 px + * Bpp: 2 + * Opts: --no-compress --no-prefilter --bpp 2 --size 16 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xE159,0xE9F7,0xE8AF,0xE335,0xEB97,0xF090,0xE30F,0xE90F,0xF7AB,0xE8B8,0xF190,0xE5CD,0xE89C,0xE745,0xE92E,0xE2C7,0xE9F4,0xE3F4,0xE316,0xE8B6,0xF15C,0xEF40,0xE326,0xE55D,0xF028,0xEC1C,0xE1E0,0xE63E,0xE5D5,0xE9B9,0xE8FD,0xF8C7 --format lvgl -o /home/ken/Projects/Tactility/Modules/lvgl-module/Assets/../Source/tactility/material_symbols_shared_16.c --force-fast-kern-format + ******************************************************************************/ + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include "lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef MATERIAL_SYMBOLS_SHARED_16 +#define MATERIAL_SYMBOLS_SHARED_16 1 +#endif + +#if MATERIAL_SYMBOLS_SHARED_16 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+E159 "" */ + 0x15, 0x55, 0x55, 0xb, 0xff, 0xff, 0xfd, 0xf4, + 0x0, 0x2, 0xde, 0xe0, 0x1, 0xed, 0xd2, 0xd0, + 0xf4, 0xdd, 0x7, 0xf8, 0xd, 0xd0, 0x4, 0x0, + 0xdd, 0x0, 0x0, 0xd, 0xd0, 0x0, 0x0, 0xdd, + 0x0, 0x0, 0xd, 0xbf, 0xff, 0xff, 0xd1, 0x55, + 0x55, 0x50, + + /* U+E1E0 "" */ + 0x0, 0x0, 0x0, 0xe, 0x0, 0x2, 0xf0, 0x0, + 0xe, 0x0, 0x10, 0xd1, 0x5b, 0xcd, 0x3e, 0x78, + 0xd3, 0xe3, 0x4d, 0x1c, 0x39, 0xe6, 0xc2, 0xff, + 0xf4, 0x0, 0xd0, 0x0, 0xe, 0x0, 0x1, 0xf0, + 0x0, 0xe, 0x0, + + /* U+E2C7 "" */ + 0x15, 0x40, 0x0, 0xb, 0xff, 0x40, 0x0, 0xd0, + 0x2f, 0xff, 0xcd, 0x0, 0x55, 0x5d, 0xd0, 0x0, + 0x0, 0xdd, 0x0, 0x0, 0xd, 0xd0, 0x0, 0x0, + 0xdd, 0x0, 0x0, 0xd, 0xd0, 0x0, 0x0, 0xdd, + 0x0, 0x0, 0xd, 0xbf, 0xff, 0xff, 0xd1, 0x55, + 0x55, 0x50, + + /* U+E30F "" */ + 0x0, 0x15, 0x40, 0x0, 0x3, 0xfc, 0x0, 0x0, + 0x31, 0xc0, 0x0, 0x3, 0x2c, 0x0, 0x0, 0x3f, + 0x80, 0xf, 0xf4, 0xe2, 0xfd, 0xe6, 0xd0, 0xb5, + 0xde, 0x6d, 0xb, 0x5d, 0xff, 0x44, 0x2f, 0xd0, + 0x2, 0xf0, 0x0, 0x0, 0x36, 0xc0, 0x0, 0x3, + 0x1c, 0x0, 0x0, 0x3a, 0xc0, 0x0, 0x3, 0xf8, + 0x0, + + /* U+E316 "" */ + 0x0, 0x0, 0x7, 0xc0, 0x1e, 0xb0, 0x78, 0x2c, + 0xa0, 0xa, + + /* U+E326 "" */ + 0x5, 0x55, 0x55, 0x3, 0xff, 0xff, 0xfc, 0x34, + 0x0, 0x0, 0x3, 0x40, 0x1, 0x54, 0x34, 0x0, + 0xff, 0xd3, 0x40, 0xd, 0x4d, 0x34, 0x0, 0xd0, + 0xd3, 0x40, 0xd, 0xd, 0x3f, 0xfc, 0xd0, 0xd0, + 0x55, 0xd, 0xd, 0xbf, 0xfc, 0xff, 0xd1, 0x55, + 0x1, 0x54, + + /* U+E335 "" */ + 0x0, 0x7d, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, + 0x0, 0x0, 0x7d, 0x0, 0x0, 0x28, 0x0, 0x0, + 0x28, 0x0, 0x0, 0x3c, 0x0, 0x0, 0xff, 0x0, + 0x17, 0xc3, 0xd4, 0xff, 0x0, 0xff, 0xfd, 0x0, + 0x7f, 0xfc, 0x0, 0x3f, + + /* U+E3F4 "" */ + 0xbf, 0xff, 0xfe, 0xe5, 0x55, 0x5b, 0xd0, 0x0, + 0x7, 0xd0, 0x0, 0x7, 0xd0, 0x0, 0x7, 0xd0, + 0x0, 0x7, 0xd0, 0x2, 0x7, 0xd2, 0x8b, 0x87, + 0xd7, 0xef, 0xd7, 0xd1, 0x55, 0x47, 0xe5, 0x55, + 0x5b, 0xbf, 0xff, 0xfe, + + /* U+E55D "" */ + 0x0, 0x14, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x7d, + 0x0, 0x0, 0xeb, 0x0, 0x1, 0xc3, 0x40, 0x2, + 0x82, 0x80, 0x3, 0x41, 0xc0, 0xb, 0x0, 0xe0, + 0xd, 0x14, 0x70, 0x2d, 0xff, 0x78, 0x3f, 0x82, + 0xfc, 0x34, 0x0, 0x1c, + + /* U+E5CD "" */ + 0x20, 0x0, 0x43, 0xc0, 0x1d, 0xf, 0x7, 0x40, + 0x3e, 0xd0, 0x0, 0xf4, 0x0, 0x1f, 0xc0, 0x7, + 0x4f, 0x1, 0xd0, 0x3c, 0x34, 0x0, 0xd0, 0x0, + 0x0, + + /* U+E5D5 "" */ + 0x0, 0x14, 0x0, 0x2, 0xff, 0x8d, 0xf, 0x41, + 0xfd, 0x2c, 0x0, 0x3d, 0x34, 0x3, 0xfd, 0x70, + 0x1, 0x54, 0x70, 0x0, 0x0, 0x34, 0x0, 0x4, + 0x2c, 0x0, 0x38, 0xf, 0x41, 0xf0, 0x2, 0xff, + 0x80, 0x0, 0x14, 0x0, + + /* U+E63E "" */ + 0x0, 0x0, 0x0, 0x0, 0x1, 0xbf, 0xfe, 0x0, + 0xf, 0xff, 0xff, 0xe0, 0x7f, 0x40, 0x6, 0xfc, + 0xb8, 0x0, 0x0, 0x3d, 0x0, 0x7f, 0xf8, 0x0, + 0x2, 0xff, 0xff, 0x40, 0x2, 0xd0, 0xb, 0x40, + 0x0, 0x1, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, + 0x0, 0xf, 0xd0, 0x0, 0x0, 0x7, 0xc0, 0x0, + + /* U+E745 "" */ + 0x15, 0x55, 0x0, 0xf, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x55, 0x54, 0x0, 0x3f, 0xff, 0x0, + 0x0, 0x0, 0x1, 0x43, 0xfd, 0x1, 0xf8, 0x55, + 0x1, 0xfe, 0x0, 0x1, 0xce, 0x0, 0x0, 0xce, + 0x0, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x0, + + /* U+E89C "" */ + 0x15, 0x54, 0x0, 0x3f, 0xff, 0x40, 0x70, 0x7, + 0xd0, 0x70, 0x7, 0xf4, 0x70, 0x7, 0xfc, 0x70, + 0x0, 0xd, 0x70, 0x28, 0xd, 0x70, 0x28, 0xd, + 0x72, 0xff, 0x8d, 0x70, 0x28, 0xd, 0x70, 0x28, + 0xd, 0x70, 0x0, 0xd, 0x75, 0x55, 0x5d, 0x2f, + 0xff, 0xf8, + + /* U+E8AF "" */ + 0x15, 0x55, 0x40, 0xf, 0xff, 0xff, 0x0, 0xd0, + 0x0, 0x30, 0xd, 0x0, 0x3, 0x28, 0xd0, 0x0, + 0x33, 0xcd, 0x0, 0x3, 0x3c, 0xd5, 0x55, 0xb3, + 0xcf, 0xff, 0xfe, 0x3c, 0xf0, 0x0, 0x3, 0xc0, + 0x7f, 0xff, 0xfc, 0x3, 0xff, 0xff, 0xc0, 0x0, + 0x0, 0x3c, 0x0, 0x0, 0x0, 0x80, + + /* U+E8B6 "" */ + 0xb, 0xf4, 0x0, 0x3d, 0x6d, 0x0, 0xb0, 0x7, + 0x0, 0xe0, 0x3, 0x40, 0xd0, 0x3, 0x80, 0xe0, + 0x3, 0x40, 0xb0, 0xb, 0x0, 0x3e, 0xbf, 0x0, + 0x7, 0xe2, 0xc0, 0x0, 0x0, 0xb0, 0x0, 0x0, + 0x2c, 0x0, 0x0, 0x9, + + /* U+E8B8 "" */ + 0x0, 0x5, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x4, + 0x35, 0xc1, 0x2, 0xff, 0xf, 0xf8, 0x35, 0x40, + 0x15, 0xc3, 0x81, 0xf4, 0x2c, 0x1d, 0x3f, 0xc7, + 0x40, 0xd3, 0xfd, 0x70, 0x3c, 0x3f, 0xc3, 0xc7, + 0x0, 0x50, 0xd, 0x3f, 0xd0, 0x7f, 0xc0, 0xeb, + 0xe, 0xb0, 0x0, 0x3a, 0xc0, 0x0, 0x2, 0xf8, + 0x0, + + /* U+E8FD "" */ + 0x0, 0x15, 0x40, 0x0, 0x2f, 0xff, 0x40, 0xb, + 0x40, 0x2e, 0x2, 0xc1, 0xa4, 0x74, 0x34, 0x20, + 0xc1, 0xcb, 0x0, 0x1c, 0xd, 0xa0, 0x3, 0x40, + 0xea, 0x0, 0xa0, 0xe, 0xa0, 0x0, 0x0, 0xd7, + 0x0, 0x90, 0x1c, 0x38, 0xe, 0x3, 0x80, 0xe0, + 0x0, 0xf0, 0x3, 0xea, 0xbc, 0x0, 0x6, 0xf9, + 0x0, + + /* U+E90F "" */ + 0x0, 0x50, 0x0, 0xff, 0xf0, 0x3c, 0x3, 0xcb, + 0x0, 0xe, 0xd0, 0x0, 0x7d, 0x0, 0x7, 0xd0, + 0x0, 0x7b, 0x0, 0xe, 0x39, 0x57, 0xc0, 0xff, + 0xf0, 0x1, 0x54, 0x0, 0xbf, 0xd0, 0x0, 0x50, + 0x0, 0xe, 0x0, + + /* U+E92E "" */ + 0x15, 0xff, 0x54, 0x3f, 0xff, 0xfd, 0x28, 0x0, + 0x28, 0x28, 0x82, 0x28, 0x28, 0xd7, 0x28, 0x28, + 0xd7, 0x28, 0x28, 0xd7, 0x28, 0x28, 0xd7, 0x28, + 0x28, 0xd7, 0x28, 0x28, 0x0, 0x28, 0x2d, 0x55, + 0x68, 0x1f, 0xff, 0xf4, + + /* U+E9B9 "" */ + 0x10, 0x1a, 0xaa, 0x4b, 0xcb, 0xff, 0xfd, 0x78, + 0x7f, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x10, 0x1a, + 0xaa, 0x4b, 0xcb, 0xff, 0xfd, 0x78, 0x7f, 0xff, + 0xd0, 0x0, 0x0, 0x0, 0x10, 0x1a, 0xaa, 0x4b, + 0xcb, 0xff, 0xfd, 0x78, 0x7f, 0xff, 0xd0, 0x0, + 0x0, 0x0, + + /* U+E9F4 "" */ + 0x0, 0x7, 0xd0, 0x0, 0x0, 0xe, 0xb0, 0x0, + 0x0, 0xe, 0xb0, 0x0, 0x0, 0x7, 0xd0, 0x0, + 0x28, 0x2, 0x80, 0x28, 0xff, 0x3, 0xc0, 0xff, + 0xd7, 0x5f, 0xf5, 0xd7, 0xbe, 0xb8, 0x2e, 0xbe, + 0x0, 0x34, 0x1c, 0x0, 0x0, 0x3c, 0x3c, 0x0, + 0x0, 0x1f, 0xf4, 0x0, 0x1, 0x75, 0x5d, 0x40, + 0xb, 0xf0, 0xf, 0xe0, 0xd, 0x70, 0xd, 0x70, + 0xb, 0xe0, 0xb, 0xe0, 0x0, 0x0, 0x0, 0x0, + + /* U+E9F7 "" */ + 0xbf, 0xff, 0xfe, 0xe5, 0x55, 0x5b, 0xd0, 0x0, + 0x7, 0xe5, 0x55, 0x5b, 0xff, 0xff, 0xff, 0xd0, + 0x0, 0x7, 0xd0, 0x0, 0x7, 0xd0, 0x0, 0x7, + 0xd0, 0x0, 0x7, 0xd0, 0x0, 0x7, 0xe5, 0x55, + 0x5b, 0xbf, 0xff, 0xfe, + + /* U+EB97 "" */ + 0x7f, 0xff, 0xff, 0xce, 0x55, 0x55, 0x5d, 0xd0, + 0x0, 0x0, 0xdd, 0x15, 0x53, 0x4d, 0xd1, 0x55, + 0x30, 0xdd, 0x8, 0x0, 0xd, 0xd3, 0xdf, 0xf8, + 0xdd, 0x1c, 0x55, 0xd, 0xd0, 0x0, 0x0, 0xde, + 0x55, 0x55, 0x5d, 0x7f, 0xff, 0xff, 0xc0, 0xf, + 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+EC1C "" */ + 0x0, 0x0, 0x80, 0x0, 0x7, 0x80, 0x0, 0x1f, + 0x0, 0x0, 0x7e, 0x0, 0x1, 0xfc, 0x0, 0x7, + 0xbe, 0x50, 0x1e, 0x2b, 0xfc, 0x3f, 0xe8, 0x74, + 0x5, 0xbe, 0xd0, 0x0, 0x3f, 0x40, 0x0, 0xbd, + 0x0, 0x0, 0xf4, 0x0, 0x2, 0xd0, 0x0, 0x2, + 0x0, 0x0, + + /* U+EF40 "" */ + 0x14, 0x14, 0x14, 0xf, 0x4f, 0x4f, 0x43, 0xc3, + 0xc3, 0xc0, 0x0, 0x0, 0x0, 0x14, 0x14, 0x0, + 0xf, 0x4f, 0x42, 0x83, 0xc3, 0xc2, 0xf8, 0x0, + 0x2, 0xfd, 0x14, 0x2, 0x8d, 0xf, 0x40, 0xcd, + 0x3, 0xc0, 0x3d, 0x0, 0x0, 0x0, 0x0, + + /* U+F028 "" */ + 0x5, 0x55, 0x55, 0x50, 0x3f, 0xff, 0xff, 0xfc, + 0x70, 0x0, 0x0, 0xd, 0x71, 0x48, 0x11, 0x4d, + 0x71, 0x48, 0x21, 0x4d, 0x70, 0x0, 0x0, 0xd, + 0x72, 0x8c, 0x72, 0x8d, 0x70, 0x0, 0x0, 0xd, + 0x70, 0x2f, 0xf8, 0xd, 0x70, 0x5, 0x50, 0xd, + 0x3f, 0xff, 0xff, 0xfc, 0x5, 0x55, 0x55, 0x50, + + /* U+F090 "" */ + 0x0, 0x0, 0x0, 0x0, 0x34, 0x0, 0x0, 0x34, + 0x0, 0x0, 0x34, 0x0, 0x0, 0x34, 0x0, 0x3, + 0xbb, 0x80, 0x1, 0xff, 0x0, 0x0, 0xbc, 0x0, + 0x30, 0x10, 0xc, 0x70, 0x0, 0xd, 0x3f, 0xff, + 0xfc, 0x5, 0x55, 0x50, + + /* U+F15C "" */ + 0x0, 0x1, 0x40, 0x0, 0x0, 0x2f, 0xf4, 0x0, + 0x0, 0xb4, 0x2d, 0x0, 0x1, 0xc0, 0xb, 0x0, + 0x7, 0xc0, 0x3, 0x40, 0x2e, 0x0, 0x3, 0xd0, + 0x34, 0x0, 0x2, 0xb8, 0x70, 0x0, 0x0, 0x1c, + 0x30, 0x0, 0x0, 0xd, 0x3c, 0x0, 0x0, 0x2c, + 0xf, 0xff, 0xff, 0xf4, 0x0, 0x55, 0x55, 0x40, + + /* U+F190 "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0x0, 0x40, + 0x2d, 0x3, 0xf0, 0xb4, 0xf, 0x3e, 0xd0, 0x3c, + 0xb, 0x47, 0xb0, 0x0, 0x7, 0x43, 0x0, 0x87, + 0x7, 0x10, 0xd7, 0x7, 0x34, 0xd7, 0xc7, 0x34, + 0xd7, 0xc3, 0x34, 0xc3, + + /* U+F7AB "" */ + 0x0, 0x0, 0x0, 0x0, 0x1, 0xbf, 0xfd, 0x0, + 0xf, 0xff, 0xff, 0xe0, 0x7f, 0x40, 0x6, 0xfc, + 0xb8, 0x0, 0x0, 0x3d, 0x0, 0x6f, 0xd0, 0x0, + 0x2, 0xff, 0xd0, 0x0, 0x2, 0xd0, 0x3, 0x80, + 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x7, 0x38, 0x34, + 0x0, 0x7, 0x38, 0x34, 0x0, 0x0, 0x3f, 0xf8, + 0x0, 0x0, 0x3, 0x80, 0x0, 0x0, 0x0, 0x0, + + /* U+F8C7 "" */ + 0x0, 0x4, 0x0, 0x0, 0x0, 0xd0, 0x0, 0x0, + 0xd, 0x0, 0x2, 0xc0, 0xd0, 0x70, 0x34, 0xd, + 0x3, 0x8b, 0x0, 0xd0, 0x1c, 0xa0, 0xd, 0x0, + 0xca, 0x0, 0x80, 0xc, 0xa0, 0x0, 0x0, 0xc7, + 0x0, 0x0, 0x2c, 0x38, 0x0, 0x3, 0x40, 0xe0, + 0x1, 0xe0, 0x3, 0xea, 0xf8, 0x0, 0x6, 0xf8, + 0x0 +}; + + +/*--------------------- + * 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 = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 42, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 3, .ofs_y = 1}, + {.bitmap_index = 77, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 119, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 168, .adv_w = 256, .box_w = 8, .box_h = 5, .ofs_x = 4, .ofs_y = 6}, + {.bitmap_index = 178, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 220, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 256, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 292, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 328, .adv_w = 256, .box_w = 10, .box_h = 10, .ofs_x = 3, .ofs_y = 3}, + {.bitmap_index = 353, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 389, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 437, .adv_w = 256, .box_w = 13, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 476, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 1}, + {.bitmap_index = 518, .adv_w = 256, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 564, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 600, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 649, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 698, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 3, .ofs_y = 1}, + {.bitmap_index = 733, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 769, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 811, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 875, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 911, .adv_w = 256, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 957, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 1}, + {.bitmap_index = 999, .adv_w = 256, .box_w = 13, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 1038, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1086, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 1122, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1170, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 1206, .adv_w = 256, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1262, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_0[] = { + 0x0, 0x87, 0x16e, 0x1b6, 0x1bd, 0x1cd, 0x1dc, 0x29b, + 0x404, 0x474, 0x47c, 0x4e5, 0x5ec, 0x743, 0x756, 0x75d, + 0x75f, 0x7a4, 0x7b6, 0x7d5, 0x860, 0x89b, 0x89e, 0xa3e, + 0xac3, 0xde7, 0xecf, 0xf37, 0x1003, 0x1037, 0x1652, 0x176e +}; + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 57689, .range_length = 5999, .glyph_id_start = 1, + .unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 32, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LVGL_VERSION_MAJOR == 8 +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +#endif + +#if LVGL_VERSION_MAJOR >= 8 +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 = 2, + .kern_classes = 0, + .bitmap_format = 0, +#if LVGL_VERSION_MAJOR == 8 + .cache = &cache +#endif +}; + + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LVGL_VERSION_MAJOR >= 8 +const lv_font_t material_symbols_shared_16 = { +#else +lv_font_t material_symbols_shared_16 = { +#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 = 16, /*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 = 0, + .underline_thickness = 0, +#endif + .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 + .fallback = NULL, +#endif + .user_data = NULL, +}; + + + +#endif /*#if MATERIAL_SYMBOLS_SHARED_16*/ + diff --git a/Modules/lvgl-module/Source/tactility/material_symbols_statusbar_20.c b/Modules/lvgl-module/Source/tactility/material_symbols_statusbar_20.c new file mode 100644 index 000000000..9f2462833 --- /dev/null +++ b/Modules/lvgl-module/Source/tactility/material_symbols_statusbar_20.c @@ -0,0 +1,306 @@ +/******************************************************************************* + * Size: 20 px + * Bpp: 2 + * Opts: --no-compress --no-prefilter --bpp 2 --size 20 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xF1DB,0xF15C,0xE623,0xF057,0xF0B0,0xEBE4,0xEBD6,0xEBE1,0xF065,0xE1DA,0xF257,0xF256,0xF255,0xF254,0xF253,0xF252,0xF250 --format lvgl -o /home/ken/Projects/Tactility/Modules/lvgl-module/Assets/../Source/tactility/material_symbols_statusbar_20.c --force-fast-kern-format + ******************************************************************************/ + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include "lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef MATERIAL_SYMBOLS_STATUSBAR_20 +#define MATERIAL_SYMBOLS_STATUSBAR_20 1 +#endif + +#if MATERIAL_SYMBOLS_STATUSBAR_20 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+E1DA "" */ + 0x34, 0x0, 0x0, 0x0, 0x0, 0x3d, 0x1, 0xaa, + 0x40, 0x0, 0xf, 0x47, 0xff, 0xfd, 0x0, 0xb, + 0xd0, 0x0, 0x6f, 0xd0, 0x3e, 0xf4, 0x0, 0x1, + 0xf8, 0xb8, 0x3d, 0x0, 0x0, 0x3d, 0x3d, 0xf, + 0x40, 0x0, 0xbc, 0xf, 0x43, 0xd0, 0x2, 0xf0, + 0x3, 0xd0, 0xf4, 0xb, 0xc0, 0x0, 0xf4, 0x3d, + 0xf, 0x0, 0x0, 0x3d, 0xf, 0x40, 0x0, 0x0, + 0xf, 0x43, 0xd0, 0x0, 0x0, 0x3, 0xd7, 0xf4, + 0x0, 0x0, 0x0, 0xff, 0x3d, 0x0, 0x0, 0x0, + 0x3c, 0xf, 0x40, 0x0, 0x0, 0x0, 0x3, 0xd0, + 0x0, 0x0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, + + /* U+E623 "" */ + 0x0, 0x1a, 0xaa, 0x40, 0xb, 0xff, 0xfd, 0x2, + 0xe0, 0x0, 0xe0, 0xb8, 0x0, 0xe, 0x2e, 0x10, + 0x4, 0xe7, 0x87, 0x3c, 0xce, 0xb0, 0x73, 0xdc, + 0xeb, 0x7, 0x3c, 0xce, 0xb0, 0x0, 0x0, 0xeb, + 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0xeb, 0x0, + 0x0, 0xe, 0xb0, 0x0, 0x0, 0xeb, 0x0, 0x0, + 0xe, 0xb0, 0x0, 0x0, 0xeb, 0x55, 0x55, 0x5e, + 0x7f, 0xff, 0xff, 0xd0, 0x55, 0x55, 0x50, + + /* U+EBD6 "" */ + 0x0, 0x1, 0xaa, 0x40, 0x0, 0x0, 0xbf, 0xff, + 0xfe, 0x0, 0x7, 0xf9, 0x0, 0x6f, 0xd0, 0x2f, + 0x40, 0x0, 0x1, 0xf8, 0x38, 0x0, 0x0, 0x0, + 0x2c, 0x3d, 0x0, 0x0, 0x0, 0x7c, 0xf, 0x40, + 0x0, 0x1, 0xf0, 0x3, 0xd1, 0xbe, 0x47, 0xc0, + 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x3f, 0xff, + 0xfc, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, + 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x28, 0x0, 0x0, + + /* U+EBE1 "" */ + 0x0, 0x1, 0xaa, 0x40, 0x0, 0x0, 0xbf, 0xff, + 0xfe, 0x0, 0x7, 0xf9, 0x0, 0x6f, 0xd0, 0x2f, + 0x40, 0x0, 0x1, 0xf8, 0x38, 0x0, 0x0, 0x0, + 0x2c, 0x3d, 0x1, 0xaa, 0x40, 0x7c, 0xf, 0x5f, + 0xff, 0xf5, 0xf0, 0x3, 0xff, 0xff, 0xff, 0xc0, + 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x3f, 0xff, + 0xfc, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, + 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x28, 0x0, 0x0, + + /* U+EBE4 "" */ + 0x0, 0x1, 0xaa, 0x40, 0x0, 0x0, 0xbf, 0xff, + 0xfe, 0x0, 0x7, 0xf9, 0x0, 0x6f, 0xd0, 0x2f, + 0x40, 0x0, 0x1, 0xf8, 0x38, 0x0, 0x0, 0x0, + 0x2c, 0x3d, 0x0, 0x0, 0x0, 0x7c, 0xf, 0x40, + 0x0, 0x1, 0xf0, 0x3, 0xd0, 0x0, 0x7, 0xc0, + 0x0, 0xf4, 0x0, 0x1f, 0x0, 0x0, 0x3e, 0xff, + 0xbc, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, + 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x28, 0x0, 0x0, + + /* U+F057 "" */ + 0x0, 0x1a, 0xaa, 0x40, 0xb, 0xff, 0xfd, 0x2, + 0xe0, 0x0, 0xe0, 0xb8, 0x0, 0xe, 0x2e, 0x0, + 0x0, 0xe7, 0x80, 0x50, 0xe, 0xb0, 0xf, 0x0, + 0xeb, 0x0, 0xf0, 0xe, 0xb0, 0xf, 0x0, 0xeb, + 0x0, 0xa0, 0xe, 0xb0, 0x0, 0x0, 0xeb, 0x0, + 0x0, 0xe, 0xb0, 0xa, 0x0, 0xeb, 0x0, 0x0, + 0xe, 0xb0, 0x0, 0x0, 0xeb, 0x55, 0x55, 0x5e, + 0x7f, 0xff, 0xff, 0xd0, 0x55, 0x55, 0x50, + + /* U+F065 "" */ + 0x0, 0x1, 0x69, 0x40, 0x0, 0x0, 0x7f, 0xff, + 0xfd, 0x0, 0x7, 0xff, 0xff, 0xff, 0xd0, 0x2f, + 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, + 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0xf, 0xff, + 0xff, 0xff, 0xf0, 0x3, 0xff, 0xff, 0xff, 0xc0, + 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x3f, 0xff, + 0xfc, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, + 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x28, 0x0, 0x0, + + /* U+F0B0 "" */ + 0x0, 0x1, 0xaa, 0x40, 0x0, 0x0, 0xbf, 0xff, + 0xfe, 0x0, 0x7, 0xf9, 0x0, 0x6f, 0xd0, 0x2f, + 0x40, 0x0, 0x1, 0xf8, 0x38, 0x0, 0x0, 0x0, + 0x2c, 0x3d, 0x0, 0x0, 0x0, 0x7c, 0xf, 0x40, + 0x0, 0x1, 0xf0, 0x3, 0xd0, 0x0, 0x7, 0xc0, + 0x0, 0xf4, 0x0, 0x1f, 0x0, 0x0, 0x3d, 0x0, + 0x7c, 0x0, 0x0, 0xf, 0x41, 0xf0, 0x0, 0x0, + 0x3, 0xd7, 0xc0, 0x0, 0x0, 0x0, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x28, 0x0, 0x0, + + /* U+F15C "" */ + 0x0, 0x0, 0x69, 0x0, 0x0, 0x0, 0xb, 0xff, + 0xd0, 0x0, 0x0, 0x2f, 0x41, 0xf4, 0x0, 0x0, + 0x3c, 0x0, 0x3c, 0x0, 0x0, 0xb0, 0x0, 0x1d, + 0x0, 0x7, 0xf0, 0x0, 0xe, 0x0, 0x1f, 0x40, + 0x0, 0xf, 0x80, 0x3c, 0x0, 0x0, 0xf, 0xf0, + 0x38, 0x0, 0x0, 0x0, 0x3c, 0x38, 0x0, 0x0, + 0x0, 0x2c, 0x3c, 0x0, 0x0, 0x0, 0x2c, 0x1e, + 0x0, 0x0, 0x0, 0x7c, 0xb, 0xff, 0xff, 0xff, + 0xf0, 0x0, 0xaa, 0xaa, 0xaa, 0x80, + + /* U+F1DB "" */ + 0x0, 0x15, 0x40, 0x0, 0x1f, 0xff, 0x40, 0xb, + 0xd0, 0x7e, 0x2, 0xe0, 0x0, 0xb8, 0x3c, 0x0, + 0x3, 0xc7, 0x40, 0x50, 0x1d, 0xb0, 0x1f, 0x40, + 0xeb, 0x2, 0xf8, 0xe, 0xb0, 0xf, 0x0, 0xe7, + 0x80, 0x0, 0x2c, 0x3c, 0x0, 0x3, 0xc1, 0xf0, + 0x0, 0xf4, 0xb, 0x80, 0x2e, 0x0, 0x3e, 0xb, + 0xc0, 0x0, 0xfa, 0xf0, 0x0, 0x3, 0xfc, 0x0, + 0x0, 0xa, 0x0, 0x0, + + /* U+F250 "" */ + 0xf, 0xff, 0xff, 0xe0, 0x0, 0xfa, 0xaa, 0xaa, + 0x43, 0x3, 0x86, 0xaa, 0x90, 0x28, 0xe, 0xbf, + 0xff, 0xc2, 0xe0, 0x3a, 0xff, 0xfe, 0x1f, 0xf8, + 0xeb, 0xff, 0xe0, 0xbf, 0xc3, 0xaf, 0xff, 0x0, + 0x2d, 0xe, 0x1a, 0x90, 0x0, 0xe0, 0x3e, 0xaa, + 0xaa, 0x43, 0x0, 0x3f, 0xff, 0xff, 0x0, 0x0, + + /* U+F252 "" */ + 0xf, 0xff, 0xff, 0xff, 0x0, 0x3e, 0xaa, 0xaa, + 0xab, 0xc0, 0x38, 0x6a, 0xaa, 0x42, 0xc0, 0x3a, + 0xff, 0xff, 0xd2, 0xcc, 0x3a, 0xff, 0xff, 0xd2, + 0xcc, 0x3a, 0xff, 0xff, 0xd2, 0xcc, 0x3a, 0xff, + 0xff, 0xd2, 0xcc, 0x38, 0x6a, 0xaa, 0x42, 0xc0, + 0x3e, 0xaa, 0xaa, 0xab, 0xc0, 0xf, 0xff, 0xff, + 0xff, 0x0, + + /* U+F253 "" */ + 0xf, 0xff, 0xff, 0xff, 0x0, 0x3e, 0xaa, 0xaa, + 0xab, 0xc0, 0x38, 0x6a, 0xa4, 0x2, 0xc0, 0x3a, + 0xff, 0xfe, 0x2, 0xcc, 0x3a, 0xff, 0xfe, 0x2, + 0xcc, 0x3a, 0xff, 0xfe, 0x2, 0xcc, 0x3a, 0xff, + 0xfe, 0x2, 0xcc, 0x38, 0x6a, 0xa4, 0x2, 0xc0, + 0x3e, 0xaa, 0xaa, 0xab, 0xc0, 0xf, 0xff, 0xff, + 0xff, 0x0, + + /* U+F254 "" */ + 0xf, 0xff, 0xff, 0xff, 0x0, 0x3e, 0xaa, 0xaa, + 0xab, 0xc0, 0x38, 0x6a, 0x90, 0x2, 0xc0, 0x3a, + 0xff, 0xf0, 0x2, 0xcc, 0x3a, 0xff, 0xf0, 0x2, + 0xcc, 0x3a, 0xff, 0xf0, 0x2, 0xcc, 0x3a, 0xff, + 0xf0, 0x2, 0xcc, 0x38, 0x6a, 0x90, 0x2, 0xc0, + 0x3e, 0xaa, 0xaa, 0xab, 0xc0, 0xf, 0xff, 0xff, + 0xff, 0x0, + + /* U+F255 "" */ + 0xf, 0xff, 0xff, 0xff, 0x0, 0x3e, 0xaa, 0xaa, + 0xab, 0xc0, 0x38, 0x69, 0x0, 0x2, 0xc0, 0x3a, + 0xff, 0x40, 0x2, 0xcc, 0x3a, 0xff, 0x40, 0x2, + 0xcc, 0x3a, 0xff, 0x40, 0x2, 0xcc, 0x3a, 0xff, + 0x40, 0x2, 0xcc, 0x38, 0x69, 0x0, 0x2, 0xc0, + 0x3e, 0xaa, 0xaa, 0xab, 0xc0, 0xf, 0xff, 0xff, + 0xff, 0x0, + + /* U+F256 "" */ + 0xf, 0xff, 0xff, 0xff, 0x0, 0x3e, 0xaa, 0xaa, + 0xab, 0xc0, 0x38, 0x50, 0x0, 0x2, 0xc0, 0x3a, + 0xf8, 0x0, 0x2, 0xcc, 0x3a, 0xf8, 0x0, 0x2, + 0xcc, 0x3a, 0xf8, 0x0, 0x2, 0xcc, 0x3a, 0xf8, + 0x0, 0x2, 0xcc, 0x38, 0x50, 0x0, 0x2, 0xc0, + 0x3e, 0xaa, 0xaa, 0xab, 0xc0, 0xf, 0xff, 0xff, + 0xff, 0x0, + + /* U+F257 "" */ + 0xf, 0xff, 0xff, 0xff, 0x0, 0x3e, 0xaa, 0xaa, + 0xab, 0xc0, 0x38, 0x40, 0x0, 0x2, 0xc0, 0x3a, + 0xc0, 0x0, 0x2, 0xcc, 0x3a, 0xc0, 0x0, 0x2, + 0xcc, 0x3a, 0xc0, 0x0, 0x2, 0xcc, 0x3a, 0xc0, + 0x0, 0x2, 0xcc, 0x38, 0x40, 0x0, 0x2, 0xc0, + 0x3e, 0xaa, 0xaa, 0xab, 0xc0, 0xf, 0xff, 0xff, + 0xff, 0x0 +}; + + +/*--------------------- + * 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 = 320, .box_w = 20, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 90, .adv_w = 320, .box_w = 14, .box_h = 18, .ofs_x = 3, .ofs_y = 1}, + {.bitmap_index = 153, .adv_w = 320, .box_w = 20, .box_h = 14, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 223, .adv_w = 320, .box_w = 20, .box_h = 14, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 293, .adv_w = 320, .box_w = 20, .box_h = 14, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 363, .adv_w = 320, .box_w = 14, .box_h = 18, .ofs_x = 3, .ofs_y = 1}, + {.bitmap_index = 426, .adv_w = 320, .box_w = 20, .box_h = 14, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 496, .adv_w = 320, .box_w = 20, .box_h = 14, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 566, .adv_w = 320, .box_w = 20, .box_h = 14, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 636, .adv_w = 320, .box_w = 14, .box_h = 17, .ofs_x = 3, .ofs_y = 2}, + {.bitmap_index = 696, .adv_w = 320, .box_w = 19, .box_h = 10, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 744, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 794, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 844, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 894, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 944, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 994, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 5} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_0[] = { + 0x0, 0x449, 0x9fc, 0xa07, 0xa0a, 0xe7d, 0xe8b, 0xed6, + 0xf82, 0x1001, 0x1076, 0x1078, 0x1079, 0x107a, 0x107b, 0x107c, + 0x107d +}; + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 57818, .range_length = 4222, .glyph_id_start = 1, + .unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 17, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LVGL_VERSION_MAJOR == 8 +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +#endif + +#if LVGL_VERSION_MAJOR >= 8 +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 = 2, + .kern_classes = 0, + .bitmap_format = 0, +#if LVGL_VERSION_MAJOR == 8 + .cache = &cache +#endif +}; + + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LVGL_VERSION_MAJOR >= 8 +const lv_font_t material_symbols_statusbar_20 = { +#else +lv_font_t material_symbols_statusbar_20 = { +#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 = 19, /*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 = 0, + .underline_thickness = 0, +#endif + .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 + .fallback = NULL, +#endif + .user_data = NULL, +}; + + + +#endif /*#if MATERIAL_SYMBOLS_STATUSBAR_20*/ + diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 8c94fb9e3..8f97c9f98 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -17,9 +17,12 @@ Website: https://github.com/flipperdevices/flipperzero-firmware/ License: [GPL v3.0](https://github.com/flipperdevices/flipperzero-firmware/blob/dev/LICENSE) -### Google Fonts +### Google Fonts & Material Design Icons -Website: https://fonts.google.com/icons +Websites: + +- https://fonts.google.com/icons +- https://github.com/google/material-design-icons License: [Apache License, version 2.0](https://fonts.google.com/attribution) diff --git a/Tactility/Include/Tactility/Assets.h b/Tactility/Include/Tactility/Assets.h index 6e7a865f4..7752f64b9 100644 --- a/Tactility/Include/Tactility/Assets.h +++ b/Tactility/Include/Tactility/Assets.h @@ -17,11 +17,7 @@ #define TT_ASSETS_APP_ICON_FILES TT_ASSET("app_icon_files_dark_mode.png") #define TT_ASSETS_APP_ICON_DISPLAY_SETTINGS TT_ASSET("app_icon_display_settings_dark_mode.png") #define TT_ASSETS_APP_ICON_POWER_SETTINGS TT_ASSET("app_icon_power_settings_dark_mode.png") -#define TT_ASSETS_APP_ICON_I2C_SETTINGS TT_ASSET("app_icon_i2c_dark_mode.png") #define TT_ASSETS_APP_ICON_SETTINGS TT_ASSET("app_icon_settings_dark_mode.png") #define TT_ASSETS_APP_ICON_SYSTEM_INFO TT_ASSET("app_icon_system_info_dark_mode.png") #define TT_ASSETS_APP_ICON_TIME_DATE_SETTINGS TT_ASSET("app_icon_time_date_settings_dark_mode.png") -#define TT_ASSETS_APP_ICON_CALCULATOR TT_ASSET("app_icon_calculator_dark_mode.png") #define TT_ASSETS_APP_ICON_NOTES TT_ASSET("app_icon_notes_dark_mode.png") -#define TT_ASSETS_APP_ICON_CHAT TT_ASSET("app_icon_chat_dark_mode.png") -#define TT_ASSETS_APP_ICON_GPIO TT_ASSET("app_icon_gpio_dark_mode.png") diff --git a/Tactility/Source/app/addgps/AddGps.cpp b/Tactility/Source/app/addgps/AddGps.cpp index 8bf12e165..783e97855 100644 --- a/Tactility/Source/app/addgps/AddGps.cpp +++ b/Tactility/Source/app/addgps/AddGps.cpp @@ -10,6 +10,7 @@ #include "tactility/drivers/uart_controller.h" #include #include +#include namespace tt::app::addgps { @@ -193,7 +194,7 @@ class AddGpsApp final : public App { extern const AppManifest manifest = { .appId = "AddGps", .appName = "Add GPS", - .appIcon = LV_SYMBOL_GPS, + .appIcon = LVGL_SYMBOL_NAVIGATION, .appCategory = Category::System, .appFlags = AppManifest::Flags::Hidden, .createApp = create diff --git a/Tactility/Source/app/apphub/AppHubApp.cpp b/Tactility/Source/app/apphub/AppHubApp.cpp index bed3fa2d9..f151986d8 100644 --- a/Tactility/Source/app/apphub/AppHubApp.cpp +++ b/Tactility/Source/app/apphub/AppHubApp.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -178,6 +179,7 @@ class AppHubApp final : public App { extern const AppManifest manifest = { .appId = "AppHub", .appName = "App Hub", + .appIcon = LVGL_SYMBOL_HUB, .appCategory = Category::System, .createApp = create, }; diff --git a/Tactility/Source/app/applist/AppList.cpp b/Tactility/Source/app/applist/AppList.cpp index bc7ea7714..8d36d9a32 100644 --- a/Tactility/Source/app/applist/AppList.cpp +++ b/Tactility/Source/app/applist/AppList.cpp @@ -2,11 +2,12 @@ #include #include -#include - #include #include +#include +#include + namespace tt::app::applist { class AppListApp final : public App { @@ -17,8 +18,10 @@ class AppListApp final : public App { } static void createAppWidget(const std::shared_ptr& manifest, lv_obj_t* list) { - const void* icon = !manifest->appIcon.empty() ? manifest->appIcon.c_str() : TT_ASSETS_APP_ICON_FALLBACK; + const void* icon = !manifest->appIcon.empty() ? manifest->appIcon.c_str() : LVGL_SYMBOL_TOOLBAR; lv_obj_t* btn = lv_list_add_button(list, icon, manifest->appName.c_str()); + lv_obj_t* image = lv_obj_get_child(btn, 0); + lv_obj_set_style_text_font(image, LVGL_SYMBOL_FONT_DEFAULT, LV_PART_MAIN); lv_obj_add_event_cb(btn, &onAppPressed, LV_EVENT_SHORT_CLICKED, manifest.get()); } diff --git a/Tactility/Source/app/chat/ChatApp.cpp b/Tactility/Source/app/chat/ChatApp.cpp index 20355c419..25a3d0f77 100644 --- a/Tactility/Source/app/chat/ChatApp.cpp +++ b/Tactility/Source/app/chat/ChatApp.cpp @@ -8,13 +8,13 @@ #include #include -#include #include #include #include #include #include +#include #include namespace tt::app::chat { @@ -181,7 +181,7 @@ void ChatApp::switchChannel(const std::string& chatChannel) { extern const AppManifest manifest = { .appId = "Chat", .appName = "Chat", - .appIcon = TT_ASSETS_APP_ICON_CHAT, + .appIcon = LVGL_SYMBOL_FORUM, .createApp = create }; diff --git a/Tactility/Source/app/i2cscanner/I2cScanner.cpp b/Tactility/Source/app/i2cscanner/I2cScanner.cpp index e1156edec..d32da04d4 100644 --- a/Tactility/Source/app/i2cscanner/I2cScanner.cpp +++ b/Tactility/Source/app/i2cscanner/I2cScanner.cpp @@ -11,11 +11,12 @@ #include #include #include -#include #include #include +#include + namespace tt::app::i2cscanner { extern const AppManifest manifest; @@ -410,7 +411,7 @@ void I2cScannerApp::onScanTimerFinished() { extern const AppManifest manifest = { .appId = "I2cScanner", .appName = "I2C Scanner", - .appIcon = TT_ASSETS_APP_ICON_I2C_SETTINGS, + .appIcon = LVGL_SYMBOL_DEVICE_HUB, .appCategory = Category::System, .createApp = create }; diff --git a/Tactility/Source/app/notes/Notes.cpp b/Tactility/Source/app/notes/Notes.cpp index bd3068c02..217ec7c1d 100644 --- a/Tactility/Source/app/notes/Notes.cpp +++ b/Tactility/Source/app/notes/Notes.cpp @@ -3,12 +3,12 @@ #include #include #include -#include #include #include #include +#include namespace tt::app::notes { @@ -209,7 +209,7 @@ class NotesApp final : public App { extern const AppManifest manifest = { .appId = "Notes", .appName = "Notes", - .appIcon = TT_ASSETS_APP_ICON_NOTES, + .appIcon = LVGL_SYMBOL_EDIT_NOTE, .createApp = create }; diff --git a/Tactility/Source/app/screenshot/Screenshot.cpp b/Tactility/Source/app/screenshot/Screenshot.cpp index d5db25b81..c91b2c5d2 100644 --- a/Tactility/Source/app/screenshot/Screenshot.cpp +++ b/Tactility/Source/app/screenshot/Screenshot.cpp @@ -15,6 +15,8 @@ #include #include +#include + namespace tt::app::screenshot { static const auto LOGGER = Logger("Screenshot"); @@ -283,7 +285,7 @@ void ScreenshotApp::onShow(AppContext& appContext, lv_obj_t* parent) { extern const AppManifest manifest = { .appId = "Screenshot", .appName = "Screenshot", - .appIcon = LV_SYMBOL_IMAGE, + .appIcon = LVGL_SYMBOL_IMAGE, .appCategory = Category::System, .createApp = create }; diff --git a/Tactility/Source/app/systeminfo/SystemInfo.cpp b/Tactility/Source/app/systeminfo/SystemInfo.cpp index 771c1cd3d..8fdaa1a7b 100644 --- a/Tactility/Source/app/systeminfo/SystemInfo.cpp +++ b/Tactility/Source/app/systeminfo/SystemInfo.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -701,7 +702,7 @@ class SystemInfoApp final : public App { extern const AppManifest manifest = { .appId = "SystemInfo", .appName = "System Info", - .appIcon = TT_ASSETS_APP_ICON_SYSTEM_INFO, + .appIcon = LVGL_SYMBOL_MONITORING, .appCategory = Category::System, .createApp = create }; diff --git a/Tactility/Source/app/webserversettings/WebServerSettings.cpp b/Tactility/Source/app/webserversettings/WebServerSettings.cpp index aaf36e303..fda795543 100644 --- a/Tactility/Source/app/webserversettings/WebServerSettings.cpp +++ b/Tactility/Source/app/webserversettings/WebServerSettings.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -417,7 +418,7 @@ class WebServerSettingsApp final : public App { extern const AppManifest manifest = { .appId = "WebServerSettings", .appName = "Web Server", - .appIcon = TT_ASSETS_APP_ICON_SETTINGS, + .appIcon = LVGL_SYMBOL_CLOUD, .appCategory = Category::System, .createApp = create }; diff --git a/Tactility/Source/app/wifimanage/WifiManage.cpp b/Tactility/Source/app/wifimanage/WifiManage.cpp index 9b035afcd..24faa0d2a 100644 --- a/Tactility/Source/app/wifimanage/WifiManage.cpp +++ b/Tactility/Source/app/wifimanage/WifiManage.cpp @@ -9,6 +9,8 @@ #include #include +#include + namespace tt::app::wifimanage { static const auto LOGGER = Logger("WifiManage"); @@ -142,7 +144,7 @@ void WifiManage::onHide(AppContext& app) { extern const AppManifest manifest = { .appId = "WifiManage", .appName = "Wi-Fi", - .appIcon = LV_SYMBOL_WIFI, + .appIcon = LVGL_SYMBOL_NETWORK_MANAGE, .appCategory = Category::Settings, .createApp = create }; From b6f49c5c1a57ba7327db61cb45bc65564a8bfd49 Mon Sep 17 00:00:00 2001 From: Ken Van Hoeylandt Date: Fri, 13 Feb 2026 00:42:06 +0100 Subject: [PATCH 2/5] Launcher using font icon --- Data/system/app/Launcher/assets/icon_apps.png | Bin 1430 -> 0 bytes .../system/app/Launcher/assets/icon_files.png | Bin 421 -> 0 bytes .../app/Launcher/assets/icon_settings.png | Bin 1812 -> 0 bytes Modules/lvgl-module/Assets/generate-all.py | 13 +- .../Include/tactility/lvgl_fonts.h | 4 + .../Include/tactility/lvgl_symbols_launcher.h | 5 + .../fonts/material_symbols_launcher_36.c | 194 ++++++++++++++++++ .../material_symbols_shared_16.c | 2 +- .../material_symbols_statusbar_20.c | 2 +- Tactility/Include/Tactility/Assets.h | 2 - Tactility/Source/app/launcher/Launcher.cpp | 22 +- 11 files changed, 227 insertions(+), 17 deletions(-) delete mode 100644 Data/system/app/Launcher/assets/icon_apps.png delete mode 100644 Data/system/app/Launcher/assets/icon_files.png delete mode 100644 Data/system/app/Launcher/assets/icon_settings.png create mode 100644 Modules/lvgl-module/Include/tactility/lvgl_symbols_launcher.h create mode 100644 Modules/lvgl-module/Source/fonts/material_symbols_launcher_36.c rename Modules/lvgl-module/Source/{tactility => fonts}/material_symbols_shared_16.c (99%) rename Modules/lvgl-module/Source/{tactility => fonts}/material_symbols_statusbar_20.c (98%) diff --git a/Data/system/app/Launcher/assets/icon_apps.png b/Data/system/app/Launcher/assets/icon_apps.png deleted file mode 100644 index d750027683a4553f8b222512bb42275f73f52701..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1430 zcmV;H1!?+;P)y5%#sp1Vs0*W(he)6W6XY7YQtln@Eh|uZ@BCfd>Fds!nHyNhf-kw7@0{=a zzs{L+&UdDwssLQOc5P)1*&!-D2pN<~Q90zg*8jM+a^iY~TK@JZuW?+p~K020ay)$7h4ygF7^K#_YB@C=1!4vx!R-1AfoG0GKfwpawyzN z5>YN!pH^WfuqLF=iZbH5x$n}nSN-ZH1AVHjLa3o~64ia4mpjQ^+-gLo_hSzJG0({j z#1%-0ObWWkbMpJ*wbNsu{g$RWu+4LFN2OezUK0?UwuXTaqPo>}^B*uKJai1^FPZCQuVK>x>c%B$;bekzID4oeAauB#6-pc76deD#3u!R$>oy z{|-x{4%4+_8NXO$DezDWb=R7-ppa6%1#R>sxYgBiO*I0)wa{_mLAYh%Q?-gj`h;U$ zXrb;|Bbd?ff)fi7dB@5tBPlbW66lCsYv&hWMpO=%@M^d{T-r8_x`ph=wuZ(&r+Z>d zHg1Go{s+4@|6xK@s{yaNZgyfWER;%>$7nNy;T<9aG9elqjLUNiQ7%`W3`BMb`Uv5) zN}wZg<`!$KcsXm@CAT#XKQYY+JM`Ql3BQ%>2G)h=>t#j9I-LA_NtY((5B{A%cSuc&>PWbiB*B#YN*|bh&@Mnx ze#HcPy+YwQ^Kq*(1oBqQAjgt!b_tP*l&EG(e)SXJ1$(m$c}{j%{wh~D81%=aRHA5q zhm((7w6FTrO#+|C>1dob&%18!%VxghS6&AhO^~XnY%m6WEhRExkUl$)m0w)Nt|ey7 zg&h>_HOSn16JG=#2qRK6QnjeAZl=Nou_9F~bQ?4|D1->Qx}s;b!b}TAB7HhLJL_o+ zuQ9&P7!^Iyg2B_)#3Ry*cHF|vpqxn)8aQFvG}sT^Oz5YG?6tPkbvPjf0o2r}{rk2F z>|@U32AbJ#9LKqg1e;?_sv<*PA^VMOgz##(EhbOSC~TWeB@u0*a2#YPCaT>)f)`!) zzCY(SYTx%))WyvH8={?n34w#In@gR>a{2nhD#1Xw$pf4bl>@GujeNX}YNsDpv=_r_ klo>(Ch2UMsaf$%{0og@*$Gey0F8}}l07*qoM6N<$f+hB<(*OVf diff --git a/Data/system/app/Launcher/assets/icon_files.png b/Data/system/app/Launcher/assets/icon_files.png deleted file mode 100644 index e0919072a35cb5def399f14b18354fd573b739b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 421 zcmV;W0b2fvP)Z!r5x=1mm~nK1)#M6v=)HY0?=9jS_?pH0cb4%t;Gm0K)T-e^-s`t!gBI5z%sNf1jy4EvVu=axR%r#W`>blx?%V3^!D9?p!jF@J4Mc0IhuhrKV!Argf*m P00000NkvXXu0mjf{Bg3X diff --git a/Data/system/app/Launcher/assets/icon_settings.png b/Data/system/app/Launcher/assets/icon_settings.png deleted file mode 100644 index ba33da9f31d361256bc0f14e1dfa5185ad72ea4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1812 zcmV+v2kZEWP)opo!ciS6AvJnU|m zogLe|P9^?N^Zn2H&iT(b-{pKGs>*8MhqcE+@9EL~amTiHttO9IO{XT3(VksZdiTxX z3Iz6%RP_HLkbaVGSZxwn%^aMXnjJ03rgw2}yj?okNPg)#+Ho40vEG#TFipGy>Tm3MeXogxrU=YN=*u!5-bAA{f0Pn9<6LMH#SXI>+y|N!M=Q_{nxC#4B3&aW!ug!(J%sXDUWgX1!wl>N9=I&2{or{s zqoBK&>70iEm`Lj8>8v5Cn`eNDmQO$UMpH{hAcf>$X2?B7_U6tnxTq?7lKT7x$F{~@ zcj#Q!!F7kuIkq*P)aN&};#|y$a}H!5;H9{=EiKTVgI*MURMfnX>HH7t zWyiKQiSNgEtLTvq^{~ygt*3fP>Undv6c)!pw*v13Er5Ad;3R4ut5mKz-BX+}zEj{A zX--sjiWgL;0XO@yDze=zmyRzRG^*Vps!syf%>M<{hzXJ>`5p+ycf3>7I0AWy&!+sbqRcaOdu=a=wCvwD18Dv{?k$7{q z6c&C4jO7IRL!-cFuC=UJ+e944>lYh3nGVL1zarNRn9|VD&`hs+xWa<<%|`Aq-zCtmRzI9|j-sfX3DtG9tptHu zYV-)ha5&>q4}y5}aso{d#Sf6kbJ@bN0UaI1aH3ydk)rU5zO|SnwQ{*Uy;9OVOi$02MH=gJ3f#PM z>-Uareb4|6m1I2at>`8{jJLO%g&?SY(vRZjrNQ4CYJTg*@vVJ}t5)A-ii^LKLUP&< ztH->swxvDq{4n005tpdZUCqVcI!U}ReoEleDJKtP0`x06e-SP!azN{szB@89^2V~l zrl;R3#kKbcx*vE;#(YMR?+ZGfUIzkCRBUSp>7&l`W=5ru{4?h&xEuoDs5Z=@>}PAm z8*g1ND}BVAH8gIrZQCQgv|9-dF59&m6=0VXlTT$0#w2&P?#2CxLscGWi=%7rNfy7I zQ@ql;xc>yyS1EZ_3`l5a||(WCi|kabe&_$F?RawzVUv54;UzAIkavb!qIr;RfbA z-?O{i5K@%^9ot&Jnmkuh zu=Z0Eo?UH{D-fu?3smX5z-{9S1e)HHN*^zi!G8gK+~WJfZ-^@Z0000f diff --git a/Modules/lvgl-module/Assets/generate-all.py b/Modules/lvgl-module/Assets/generate-all.py index 6706c8b54..4028539cb 100644 --- a/Modules/lvgl-module/Assets/generate-all.py +++ b/Modules/lvgl-module/Assets/generate-all.py @@ -2,7 +2,7 @@ def generate(bpp, size, font_file: str, symbols: list, output: str): output_file_name = f"{output}_{size}.c" - output_path = os.path.join(base_dir, "..", "Source", "tactility", output_file_name) + output_path = os.path.join(base_dir, "..", "Source", "fonts", output_file_name) print(f"Generating {output_file_name}") cmd = "lv_font_conv --no-compress --no-prefilter --bpp {} --size {} --font {} -r {} --format lvgl -o {} --force-fast-kern-format".format(bpp, size, font_file, ",".join(symbols), output_path) os.system(cmd) @@ -114,6 +114,11 @@ def generate_icon_names(codepoint_map: dict, codepoint_names: list, filename: st "battery_android_frame_bolt" ] +launcher_symbol_code_point_names = [ + "apps", + "folder", + "settings" +] shared_symbol_font_sizes = [ 16 # Fits with montserrat 14 in lv_list as icon with text ] @@ -132,3 +137,9 @@ def generate_icon_names(codepoint_map: dict, codepoint_names: list, filename: st statusbar_symbol_code_points = get_code_points(codepoints_map, statusbar_symbol_code_point_names) generate_icon_fonts("MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf", [20], statusbar_symbol_code_points, "material_symbols_statusbar") generate_icon_names(codepoints_map, statusbar_symbol_code_point_names, "lvgl_symbols_statusbar.h") + +# Launcher symbols +launcher_symbol_code_points = get_code_points(codepoints_map, launcher_symbol_code_point_names) +generate_icon_fonts("MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf", [36], launcher_symbol_code_points, "material_symbols_launcher") +generate_icon_names(codepoints_map, launcher_symbol_code_point_names, "lvgl_symbols_launcher.h") + diff --git a/Modules/lvgl-module/Include/tactility/lvgl_fonts.h b/Modules/lvgl-module/Include/tactility/lvgl_fonts.h index c3fafc9dc..6874dcbda 100644 --- a/Modules/lvgl-module/Include/tactility/lvgl_fonts.h +++ b/Modules/lvgl-module/Include/tactility/lvgl_fonts.h @@ -10,6 +10,8 @@ extern const lv_font_t material_symbols_statusbar_20; extern const lv_font_t material_symbols_shared_16; +extern const lv_font_t material_symbols_launcher_36; + //#define lvgl_get_text_font_smaller() &lv_font_montserrat_12 // TODO: Make function so it's easier to use this cross-platform #define LVGL_TEXT_FONT_DEFAULT &lv_font_montserrat_14 @@ -18,6 +20,8 @@ extern const lv_font_t material_symbols_shared_16; // TODO: Make function so it's easier to use this cross-platform #define LVGL_SYMBOL_FONT_DEFAULT &material_symbols_shared_16 +#define LVGL_SYMBOL_FONT_LAUNCHER &material_symbols_launcher_36 + // TODO: Make function so it's easier to use this cross-platform #define LVGL_TOPBAR_FONT &material_symbols_statusbar_20 #define LVGL_TOPBAR_ICON_HEIGHT 20 diff --git a/Modules/lvgl-module/Include/tactility/lvgl_symbols_launcher.h b/Modules/lvgl-module/Include/tactility/lvgl_symbols_launcher.h new file mode 100644 index 000000000..686ac2c2a --- /dev/null +++ b/Modules/lvgl-module/Include/tactility/lvgl_symbols_launcher.h @@ -0,0 +1,5 @@ +#pragma once + +#define LVGL_SYMBOL_APPS "\xEE\x97\x83" +#define LVGL_SYMBOL_FOLDER "\xEE\x8B\x87" +#define LVGL_SYMBOL_SETTINGS "\xEE\xA2\xB8" diff --git a/Modules/lvgl-module/Source/fonts/material_symbols_launcher_36.c b/Modules/lvgl-module/Source/fonts/material_symbols_launcher_36.c new file mode 100644 index 000000000..47c8a8027 --- /dev/null +++ b/Modules/lvgl-module/Source/fonts/material_symbols_launcher_36.c @@ -0,0 +1,194 @@ +/******************************************************************************* + * Size: 36 px + * Bpp: 2 + * Opts: --no-compress --no-prefilter --bpp 2 --size 36 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xE5C3,0xE2C7,0xE8B8 --format lvgl -o /home/ken/Projects/Tactility/Modules/lvgl-module/Assets/../Source/fonts/material_symbols_launcher_36.c --force-fast-kern-format + ******************************************************************************/ + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include "lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + +#ifndef MATERIAL_SYMBOLS_LAUNCHER_36 +#define MATERIAL_SYMBOLS_LAUNCHER_36 1 +#endif + +#if MATERIAL_SYMBOLS_LAUNCHER_36 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+E2C7 "" */ + 0x2f, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0xb, + 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xf, 0xc0, + 0x0, 0x2f, 0xff, 0xff, 0xff, 0xf8, 0xfc, 0x0, + 0x0, 0xbf, 0xff, 0xff, 0xff, 0xef, 0xc0, 0x0, + 0x2, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe2, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, + + /* U+E5C3 "" */ + 0x2f, 0x80, 0xb, 0xe0, 0x2, 0xf8, 0xbf, 0xe0, + 0x2f, 0xf8, 0xb, 0xfe, 0xff, 0xf0, 0x3f, 0xfc, + 0xf, 0xff, 0xff, 0xf0, 0x3f, 0xfc, 0xf, 0xff, + 0xbf, 0xe0, 0x2f, 0xf8, 0xb, 0xfe, 0x2f, 0x80, + 0xb, 0xe0, 0x2, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x80, + 0xb, 0xe0, 0x2, 0xf8, 0xbf, 0xe0, 0x2f, 0xf8, + 0xb, 0xfe, 0xff, 0xf0, 0x3f, 0xfc, 0xf, 0xff, + 0xff, 0xf0, 0x3f, 0xfc, 0xf, 0xff, 0xbf, 0xe0, + 0x2f, 0xf8, 0xb, 0xfe, 0x2f, 0x80, 0xb, 0xe0, + 0x2, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2f, 0x80, 0xb, 0xe0, + 0x2, 0xf8, 0xbf, 0xe0, 0x2f, 0xf8, 0xb, 0xfe, + 0xff, 0xf0, 0x3f, 0xfc, 0xf, 0xff, 0xff, 0xf0, + 0x3f, 0xfc, 0xf, 0xff, 0xbf, 0xe0, 0x2f, 0xf8, + 0xb, 0xfe, 0x2f, 0x80, 0xb, 0xe0, 0x2, 0xf8, + + /* U+E8B8 "" */ + 0x0, 0x0, 0x1, 0xff, 0xf4, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xbd, 0x7, 0xe0, 0x0, 0x0, 0x0, 0x10, + 0xb, 0xd0, 0x7e, 0x0, 0x40, 0x0, 0x2f, 0xe7, + 0xfc, 0x3, 0xfd, 0xbf, 0x80, 0x7, 0xff, 0xff, + 0xc0, 0x3f, 0xff, 0xfd, 0x0, 0xff, 0xff, 0xe0, + 0x0, 0xbf, 0xff, 0xf0, 0x2f, 0xc2, 0xf0, 0x0, + 0x0, 0xf8, 0x3f, 0x83, 0xf4, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xfc, 0x3f, 0x40, 0x0, 0xbf, 0xe0, + 0x0, 0xf, 0xc3, 0xfe, 0x0, 0x3f, 0xff, 0xc0, + 0x7, 0xfc, 0xf, 0xfc, 0xb, 0xff, 0xfe, 0x2, + 0xff, 0x0, 0x2f, 0xc0, 0xff, 0xff, 0xf0, 0x3f, + 0xc0, 0x0, 0xfc, 0xf, 0xff, 0xff, 0x43, 0xf4, + 0x0, 0xf, 0xc0, 0xff, 0xff, 0xf4, 0x3f, 0x0, + 0x2, 0xfc, 0xf, 0xff, 0xff, 0x3, 0xf8, 0x0, + 0xff, 0x80, 0xbf, 0xff, 0xe0, 0x2f, 0xf0, 0x3f, + 0xd0, 0x3, 0xff, 0xfc, 0x0, 0x7f, 0xc3, 0xf4, + 0x0, 0xb, 0xfe, 0x0, 0x0, 0xfc, 0x3f, 0x40, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xc2, 0xfc, 0x2f, + 0x0, 0x0, 0xf, 0x83, 0xf8, 0xf, 0xff, 0xfe, + 0x0, 0xb, 0xff, 0xff, 0x0, 0x7f, 0xff, 0xfc, + 0x3, 0xff, 0xff, 0xd0, 0x2, 0xfe, 0x7f, 0xc0, + 0x3f, 0xdb, 0xf8, 0x0, 0x5, 0x0, 0xbd, 0x7, + 0xe0, 0x4, 0x0, 0x0, 0x0, 0xb, 0xd0, 0x7e, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xd0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x40, 0x0, + 0x0 +}; + + +/*--------------------- + * 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 = 576, .box_w = 30, .box_h = 24, .ofs_x = 3, .ofs_y = 6}, + {.bitmap_index = 180, .adv_w = 576, .box_w = 24, .box_h = 24, .ofs_x = 6, .ofs_y = 6}, + {.bitmap_index = 324, .adv_w = 576, .box_w = 30, .box_h = 30, .ofs_x = 3, .ofs_y = 3} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_0[] = { + 0x0, 0x2fc, 0x5f1 +}; + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 58055, .range_length = 1522, .glyph_id_start = 1, + .unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 3, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LVGL_VERSION_MAJOR == 8 +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +#endif + +#if LVGL_VERSION_MAJOR >= 8 +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 = 2, + .kern_classes = 0, + .bitmap_format = 0, +#if LVGL_VERSION_MAJOR == 8 + .cache = &cache +#endif +}; + + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LVGL_VERSION_MAJOR >= 8 +const lv_font_t material_symbols_launcher_36 = { +#else +lv_font_t material_symbols_launcher_36 = { +#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 = -3, /*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 = 0, + .underline_thickness = 0, +#endif + .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 + .fallback = NULL, +#endif + .user_data = NULL, +}; + + + +#endif /*#if MATERIAL_SYMBOLS_LAUNCHER_36*/ + diff --git a/Modules/lvgl-module/Source/tactility/material_symbols_shared_16.c b/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c similarity index 99% rename from Modules/lvgl-module/Source/tactility/material_symbols_shared_16.c rename to Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c index 9b6c1dd48..ea0210420 100644 --- a/Modules/lvgl-module/Source/tactility/material_symbols_shared_16.c +++ b/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c @@ -1,7 +1,7 @@ /******************************************************************************* * Size: 16 px * Bpp: 2 - * Opts: --no-compress --no-prefilter --bpp 2 --size 16 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xE159,0xE9F7,0xE8AF,0xE335,0xEB97,0xF090,0xE30F,0xE90F,0xF7AB,0xE8B8,0xF190,0xE5CD,0xE89C,0xE745,0xE92E,0xE2C7,0xE9F4,0xE3F4,0xE316,0xE8B6,0xF15C,0xEF40,0xE326,0xE55D,0xF028,0xEC1C,0xE1E0,0xE63E,0xE5D5,0xE9B9,0xE8FD,0xF8C7 --format lvgl -o /home/ken/Projects/Tactility/Modules/lvgl-module/Assets/../Source/tactility/material_symbols_shared_16.c --force-fast-kern-format + * Opts: --no-compress --no-prefilter --bpp 2 --size 16 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xE159,0xE9F7,0xE8AF,0xE335,0xEB97,0xF090,0xE30F,0xE90F,0xF7AB,0xE8B8,0xF190,0xE5CD,0xE89C,0xE745,0xE92E,0xE2C7,0xE9F4,0xE3F4,0xE316,0xE8B6,0xF15C,0xEF40,0xE326,0xE55D,0xF028,0xEC1C,0xE1E0,0xE63E,0xE5D5,0xE9B9,0xE8FD,0xF8C7 --format lvgl -o /home/ken/Projects/Tactility/Modules/lvgl-module/Assets/../Source/fonts/material_symbols_shared_16.c --force-fast-kern-format ******************************************************************************/ #ifdef LV_LVGL_H_INCLUDE_SIMPLE diff --git a/Modules/lvgl-module/Source/tactility/material_symbols_statusbar_20.c b/Modules/lvgl-module/Source/fonts/material_symbols_statusbar_20.c similarity index 98% rename from Modules/lvgl-module/Source/tactility/material_symbols_statusbar_20.c rename to Modules/lvgl-module/Source/fonts/material_symbols_statusbar_20.c index 9f2462833..03946f7ea 100644 --- a/Modules/lvgl-module/Source/tactility/material_symbols_statusbar_20.c +++ b/Modules/lvgl-module/Source/fonts/material_symbols_statusbar_20.c @@ -1,7 +1,7 @@ /******************************************************************************* * Size: 20 px * Bpp: 2 - * Opts: --no-compress --no-prefilter --bpp 2 --size 20 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xF1DB,0xF15C,0xE623,0xF057,0xF0B0,0xEBE4,0xEBD6,0xEBE1,0xF065,0xE1DA,0xF257,0xF256,0xF255,0xF254,0xF253,0xF252,0xF250 --format lvgl -o /home/ken/Projects/Tactility/Modules/lvgl-module/Assets/../Source/tactility/material_symbols_statusbar_20.c --force-fast-kern-format + * Opts: --no-compress --no-prefilter --bpp 2 --size 20 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xF1DB,0xF15C,0xE623,0xF057,0xF0B0,0xEBE4,0xEBD6,0xEBE1,0xF065,0xE1DA,0xF257,0xF256,0xF255,0xF254,0xF253,0xF252,0xF250 --format lvgl -o /home/ken/Projects/Tactility/Modules/lvgl-module/Assets/../Source/fonts/material_symbols_statusbar_20.c --force-fast-kern-format ******************************************************************************/ #ifdef LV_LVGL_H_INCLUDE_SIMPLE diff --git a/Tactility/Include/Tactility/Assets.h b/Tactility/Include/Tactility/Assets.h index 7752f64b9..87d63a860 100644 --- a/Tactility/Include/Tactility/Assets.h +++ b/Tactility/Include/Tactility/Assets.h @@ -18,6 +18,4 @@ #define TT_ASSETS_APP_ICON_DISPLAY_SETTINGS TT_ASSET("app_icon_display_settings_dark_mode.png") #define TT_ASSETS_APP_ICON_POWER_SETTINGS TT_ASSET("app_icon_power_settings_dark_mode.png") #define TT_ASSETS_APP_ICON_SETTINGS TT_ASSET("app_icon_settings_dark_mode.png") -#define TT_ASSETS_APP_ICON_SYSTEM_INFO TT_ASSET("app_icon_system_info_dark_mode.png") #define TT_ASSETS_APP_ICON_TIME_DATE_SETTINGS TT_ASSET("app_icon_time_date_settings_dark_mode.png") -#define TT_ASSETS_APP_ICON_NOTES TT_ASSET("app_icon_notes_dark_mode.png") diff --git a/Tactility/Source/app/launcher/Launcher.cpp b/Tactility/Source/app/launcher/Launcher.cpp index 7ff7bdf74..640c5e912 100644 --- a/Tactility/Source/app/launcher/Launcher.cpp +++ b/Tactility/Source/app/launcher/Launcher.cpp @@ -4,22 +4,24 @@ #include #include #include -#include #include #include #include #include +#include +#include + namespace tt::app::launcher { static const auto LOGGER = Logger("Launcher"); static int getButtonSize(hal::UiScale scale) { if (scale == hal::UiScale::Smallest) { - return 40; + return 36; // icon size } else { - return 64; + return 56; } } @@ -41,7 +43,9 @@ class LauncherApp final : public App { // create the image first auto* button_image = lv_image_create(apps_button); + lv_obj_set_style_text_font(button_image, LVGL_SYMBOL_FONT_LAUNCHER, LV_STATE_DEFAULT); lv_image_set_src(button_image, imageFile); + lv_obj_set_style_text_color(button_image, lv_theme_get_color_primary(button_image), LV_STATE_DEFAULT); // Recolor handling: // For color builds use theme primary color @@ -119,7 +123,6 @@ class LauncherApp final : public App { auto button_size = getButtonSize(ui_scale); lv_obj_align(buttons_wrapper, LV_ALIGN_CENTER, 0, 0); - // lv_obj_set_style_pad_all(buttons_wrapper, 0, LV_STATE_DEFAULT); lv_obj_set_size(buttons_wrapper, LV_SIZE_CONTENT, LV_SIZE_CONTENT); lv_obj_set_style_border_width(buttons_wrapper, 0, LV_STATE_DEFAULT); lv_obj_set_flex_grow(buttons_wrapper, 1); @@ -150,14 +153,9 @@ class LauncherApp final : public App { margin = std::min(available_height / 16, button_size); } - const auto paths = app.getPaths(); - const auto apps_icon_path = lvgl::PATH_PREFIX + paths->getAssetsPath("icon_apps.png"); - const auto files_icon_path = lvgl::PATH_PREFIX + paths->getAssetsPath("icon_files.png"); - const auto settings_icon_path = lvgl::PATH_PREFIX + paths->getAssetsPath("icon_settings.png"); - - createAppButton(buttons_wrapper, ui_scale, apps_icon_path.c_str(), "AppList", margin, is_landscape_display); - createAppButton(buttons_wrapper, ui_scale, files_icon_path.c_str(), "Files", margin, is_landscape_display); - createAppButton(buttons_wrapper, ui_scale, settings_icon_path.c_str(), "Settings", margin, is_landscape_display); + createAppButton(buttons_wrapper, ui_scale, LVGL_SYMBOL_APPS, "AppList", margin, is_landscape_display); + createAppButton(buttons_wrapper, ui_scale, LVGL_SYMBOL_FOLDER, "Files", margin, is_landscape_display); + createAppButton(buttons_wrapper, ui_scale, LVGL_SYMBOL_SETTINGS, "Settings", margin, is_landscape_display); if (shouldShowPowerButton()) { auto* power_button = lv_btn_create(parent); From ae6aef9824f92548a9f23142a35b79dbdd5c481d Mon Sep 17 00:00:00 2001 From: Ken Van Hoeylandt Date: Fri, 13 Feb 2026 00:43:55 +0100 Subject: [PATCH 3/5] Cleanup filenames --- Modules/lvgl-module/Assets/generate-all.py | 4 ++-- .../lvgl-module/Source/fonts/material_symbols_launcher_36.c | 2 +- Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c | 2 +- .../lvgl-module/Source/fonts/material_symbols_statusbar_20.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Modules/lvgl-module/Assets/generate-all.py b/Modules/lvgl-module/Assets/generate-all.py index 4028539cb..21164b32c 100644 --- a/Modules/lvgl-module/Assets/generate-all.py +++ b/Modules/lvgl-module/Assets/generate-all.py @@ -2,7 +2,7 @@ def generate(bpp, size, font_file: str, symbols: list, output: str): output_file_name = f"{output}_{size}.c" - output_path = os.path.join(base_dir, "..", "Source", "fonts", output_file_name) + output_path = os.path.join("..", "Source", "fonts", output_file_name) print(f"Generating {output_file_name}") cmd = "lv_font_conv --no-compress --no-prefilter --bpp {} --size {} --font {} -r {} --format lvgl -o {} --force-fast-kern-format".format(bpp, size, font_file, ",".join(symbols), output_path) os.system(cmd) @@ -35,7 +35,7 @@ def generate_icon_fonts(font_file, font_sizes, symbols, output): def generate_icon_names(codepoint_map: dict, codepoint_names: list, filename: str): print(f"Generating {filename}") - output_path = os.path.join(base_dir, "..", "Include", "tactility", filename) + output_path = os.path.join("..", "Include", "tactility", filename) with open(output_path, 'w') as f: f.write("#pragma once\n\n") for name in codepoint_names: diff --git a/Modules/lvgl-module/Source/fonts/material_symbols_launcher_36.c b/Modules/lvgl-module/Source/fonts/material_symbols_launcher_36.c index 47c8a8027..241c505b3 100644 --- a/Modules/lvgl-module/Source/fonts/material_symbols_launcher_36.c +++ b/Modules/lvgl-module/Source/fonts/material_symbols_launcher_36.c @@ -1,7 +1,7 @@ /******************************************************************************* * Size: 36 px * Bpp: 2 - * Opts: --no-compress --no-prefilter --bpp 2 --size 36 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xE5C3,0xE2C7,0xE8B8 --format lvgl -o /home/ken/Projects/Tactility/Modules/lvgl-module/Assets/../Source/fonts/material_symbols_launcher_36.c --force-fast-kern-format + * Opts: --no-compress --no-prefilter --bpp 2 --size 36 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xE5C3,0xE2C7,0xE8B8 --format lvgl -o ../Source/fonts/material_symbols_launcher_36.c --force-fast-kern-format ******************************************************************************/ #ifdef LV_LVGL_H_INCLUDE_SIMPLE diff --git a/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c b/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c index ea0210420..220e1cfef 100644 --- a/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c +++ b/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c @@ -1,7 +1,7 @@ /******************************************************************************* * Size: 16 px * Bpp: 2 - * Opts: --no-compress --no-prefilter --bpp 2 --size 16 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xE159,0xE9F7,0xE8AF,0xE335,0xEB97,0xF090,0xE30F,0xE90F,0xF7AB,0xE8B8,0xF190,0xE5CD,0xE89C,0xE745,0xE92E,0xE2C7,0xE9F4,0xE3F4,0xE316,0xE8B6,0xF15C,0xEF40,0xE326,0xE55D,0xF028,0xEC1C,0xE1E0,0xE63E,0xE5D5,0xE9B9,0xE8FD,0xF8C7 --format lvgl -o /home/ken/Projects/Tactility/Modules/lvgl-module/Assets/../Source/fonts/material_symbols_shared_16.c --force-fast-kern-format + * Opts: --no-compress --no-prefilter --bpp 2 --size 16 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xE159,0xE9F7,0xE8AF,0xE335,0xEB97,0xF090,0xE30F,0xE90F,0xF7AB,0xE8B8,0xF190,0xE5CD,0xE89C,0xE745,0xE92E,0xE2C7,0xE9F4,0xE3F4,0xE316,0xE8B6,0xF15C,0xEF40,0xE326,0xE55D,0xF028,0xEC1C,0xE1E0,0xE63E,0xE5D5,0xE9B9,0xE8FD,0xF8C7 --format lvgl -o ../Source/fonts/material_symbols_shared_16.c --force-fast-kern-format ******************************************************************************/ #ifdef LV_LVGL_H_INCLUDE_SIMPLE diff --git a/Modules/lvgl-module/Source/fonts/material_symbols_statusbar_20.c b/Modules/lvgl-module/Source/fonts/material_symbols_statusbar_20.c index 03946f7ea..15f869330 100644 --- a/Modules/lvgl-module/Source/fonts/material_symbols_statusbar_20.c +++ b/Modules/lvgl-module/Source/fonts/material_symbols_statusbar_20.c @@ -1,7 +1,7 @@ /******************************************************************************* * Size: 20 px * Bpp: 2 - * Opts: --no-compress --no-prefilter --bpp 2 --size 20 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xF1DB,0xF15C,0xE623,0xF057,0xF0B0,0xEBE4,0xEBD6,0xEBE1,0xF065,0xE1DA,0xF257,0xF256,0xF255,0xF254,0xF253,0xF252,0xF250 --format lvgl -o /home/ken/Projects/Tactility/Modules/lvgl-module/Assets/../Source/fonts/material_symbols_statusbar_20.c --force-fast-kern-format + * Opts: --no-compress --no-prefilter --bpp 2 --size 20 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xF1DB,0xF15C,0xE623,0xF057,0xF0B0,0xEBE4,0xEBD6,0xEBE1,0xF065,0xE1DA,0xF257,0xF256,0xF255,0xF254,0xF253,0xF252,0xF250 --format lvgl -o ../Source/fonts/material_symbols_statusbar_20.c --force-fast-kern-format ******************************************************************************/ #ifdef LV_LVGL_H_INCLUDE_SIMPLE From 6f3c0f604eba692a6bd9689d7f3629da586a8340 Mon Sep 17 00:00:00 2001 From: Ken Van Hoeylandt Date: Fri, 13 Feb 2026 18:23:13 +0100 Subject: [PATCH 4/5] Icon updates --- .../app_icon_display_settings_dark_mode.png | Bin 308 -> 0 bytes Data/system/app_icon_files_dark_mode.png | Bin 287 -> 0 bytes .../app_icon_power_settings_dark_mode.png | Bin 290 -> 0 bytes Data/system/app_icon_settings_dark_mode.png | Bin 498 -> 0 bytes .../system/app_icon_system_info_dark_mode.png | Bin 448 -> 0 bytes .../app_icon_time_date_settings_dark_mode.png | Bin 530 -> 0 bytes Documentation/ideas.md | 1 + Modules/lvgl-module/Assets/generate-all.py | 52 +++-- .../Include/tactility/lvgl_symbols_shared.h | 52 +++-- .../Source/fonts/material_symbols_shared_16.c | 201 ++++++++++++------ Tactility/Include/Tactility/Assets.h | 8 - .../Source/app/appsettings/AppSettings.cpp | 14 +- .../Source/app/development/Development.cpp | 3 + Tactility/Source/app/display/Display.cpp | 10 +- Tactility/Source/app/files/FilesApp.cpp | 1 - .../app/fileselection/FileSelection.cpp | 1 - .../Source/app/gpssettings/GpsSettings.cpp | 4 +- .../Source/app/i2cscanner/I2cScanner.cpp | 2 +- .../Source/app/keyboard/KeyboardSettings.cpp | 5 +- .../app/localesettings/LocaleSettings.cpp | 8 +- Tactility/Source/app/power/Power.cpp | 5 +- Tactility/Source/app/settings/Settings.cpp | 12 +- .../Source/app/systeminfo/SystemInfo.cpp | 2 +- .../app/timedatesettings/TimeDateSettings.cpp | 5 +- .../app/trackball/TrackballSettings.cpp | 5 +- .../Source/app/usbsettings/UsbSettings.cpp | 12 +- .../Source/app/wifimanage/WifiManage.cpp | 2 +- 27 files changed, 256 insertions(+), 149 deletions(-) delete mode 100644 Data/system/app_icon_display_settings_dark_mode.png delete mode 100644 Data/system/app_icon_files_dark_mode.png delete mode 100644 Data/system/app_icon_power_settings_dark_mode.png delete mode 100644 Data/system/app_icon_settings_dark_mode.png delete mode 100644 Data/system/app_icon_system_info_dark_mode.png delete mode 100644 Data/system/app_icon_time_date_settings_dark_mode.png diff --git a/Data/system/app_icon_display_settings_dark_mode.png b/Data/system/app_icon_display_settings_dark_mode.png deleted file mode 100644 index 5f81d152877d9406be26e5557649565ad2446ff5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#X!0Ygc<#+)i{6*$r9Iy zlHmNblJdl&REF~Ma=pyF?Be9af>gcyqV(DCY@~pS4tlychFJ72oovf@$biRfeZ zJDWE!2v2Wf<=m)fAk-f`yGE)(T)?ZBa<)7OWFzAffC^M+wf+RO{=6Y|b{6^i>Cp&Y6!B^;V7U$%Ei z(W)+v?W?7?B&6jp_`xcdy->6CR7S>vRjDk2SD)zol2ZB0RmPi@@ObZhnS}6<6SCOn zG|uhNDduTVFPL;CT}nD3i#u}qjG#?TGPR7iSlze8c1?c=^bCWitDnm{r-UW|kT-F! diff --git a/Data/system/app_icon_files_dark_mode.png b/Data/system/app_icon_files_dark_mode.png deleted file mode 100644 index 2d7b0eaf4bda884a52284207e229c6305e107a95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#X!0Ygc<#+)i{6*$r9Iy zlHmNblJdl&REF~Ma=pyF?Be9af>gcyqV(DCY@~pS)_A%&hFJ8zoovW;C_upFzK6~h z!9(_4OM4fXe_(5>)w;cetBGCUy;223|EB%dIU=Q7O)h$HNiUysv+}G_QTeZo3#)lm z43Ei9U_6}m;GHXn;(wM2GeZwZTA2RP-0+HN;>?{(Y-ddPp~jYj6*W!3E8JiQ~@ z1gcyqV(DCY@~pS)_b}*hFJ6-oovW;C_um^eIKV; z*lgn^9;#t-2jZgnA3W8uXl&x4sQ0!P4H-X_Lwz>uCy54M= z^JX>%2=0DQ(jhQv5zZw&0S>ag9YWXxuCyll5o3H9s;U}?5I(nq|A_OH(%o2=f@(tNCQn%r@*2&DknMFQPM}?1UN}49rp2l0oBhrrG~NI!vFvP07*qoM6N<$f>43omjD0& diff --git a/Data/system/app_icon_system_info_dark_mode.png b/Data/system/app_icon_system_info_dark_mode.png deleted file mode 100644 index 67f62bbe32a2d64a1a9138ff2f9bf1d8918eaaa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmV;x0YCnUP)opL6p?Ff_^3x^z_N+P$D;>L8B&16?~5hvKFLY)UC~6G4B0&Mp;= zQYalS1)kyVJ$J85V$gzblVzH(;i!1Ko~CKT-P`xxL51!TXtP4= z&A^k~^$L${Zz>Re0+Ya5pg41;7uju3Qnlu8KPa@-Qf;F^SQbnOUKwoX{64H&^W?^7 z9V@ec^e@a~gC~J}At&qzt(~j(wrcw;!shz|wEv4xvV*4y`T-Px4%l={bLp^{A;#E? zG1mVU+M4?Xd~0}~S}KTGD>f>KSWPp@+=*Z@pypkh42(fTE<7IRop-)_Ff+^yRozw9H*>vsilR8I zs#8_H-t>G?6o;ZHx-24Vz_2XKEgIvTTQajmL@uf7&ooVUfnNZksvm&0W~gmMSh;WnVq;3fL5p%|?OkIF7GO zr_%?(t@>@r%%0Z^t^t*p*`Bg2PlpipH2@(^)7Jp1dQ(Jh07rq3W_CAC(`NvG0BJe7 Uv^Y@I761SM07*qoM6N<$f*?NUKmY&$ diff --git a/Documentation/ideas.md b/Documentation/ideas.md index ed7fed5bb..f53ac29ca 100644 --- a/Documentation/ideas.md +++ b/Documentation/ideas.md @@ -2,6 +2,7 @@ ## Before release +- Remove incubating flag from various devices - Add `// SPDX-License-Identifier: GPL-3.0-only` and `// SPDX-License-Identifier: Apache-2.0` to individual files in the project - Elecrow Basic & Advance 3.5" memory issue: not enough memory for App Hub - App Hub crashes if you close it while an app is being installed diff --git a/Modules/lvgl-module/Assets/generate-all.py b/Modules/lvgl-module/Assets/generate-all.py index 21164b32c..24917d31b 100644 --- a/Modules/lvgl-module/Assets/generate-all.py +++ b/Modules/lvgl-module/Assets/generate-all.py @@ -55,38 +55,48 @@ def generate_icon_names(codepoint_map: dict, codepoint_names: list, filename: st # --------------- Symbol Fonts --------------- shared_symbol_code_point_names = [ - "mail", - "toolbar", # Apps without custom icon - "forum", # Chat app - "device_hub", # I2C - "display_settings", # Display Settings app - "download", - "gamepad", - "lightbulb", - "network_manage", # Wifi Settings app - "settings", - "monitoring", # System Info app + "add", + "apps", + "area_chart", # System Info + "app_registration", # App Settings app + "calendar_month", + "cable", + "circle", "close", - "note_add", - "edit_note", + "cloud", # Web server + "check", "delete", + "devices", # Developer app + "display_settings", # Display Settings app + "edit_note", + "electric_bolt", # Power (settings) app "folder", + "deployed_code", # 3D cube + "download", + "forum", # Chat app + "gamepad", + "help", # Diceware help "hub", # App Hub "image", # Screenshot app "keyboard_arrow_up", + "lightbulb", + "language", # Globe + "lists", # Chat app toolbar + "mail", + "menu", + "mop", + "more_vert", + "music_note", + "note_add", + "power_settings_new", # Power off for T-Lora Pager + "refresh", # e.g. App Hub reload button "search", - "cloud", # Web server - "app_registration", # App Settings app - "devices", # Developer app + "settings", + "toolbar", # Apps without custom icon "navigation", # GPS (settings) app "keyboard_alt", # Keyboard (settings) app - "electric_bolt", # Power (settings) app "usb", # Power (settings) app "wifi", # WiFi (settings) app - "refresh", # e.g. App Hub reload button - "lists", # Chat app toolbar - "help", # Diceware help - "power_settings_new", # Power off for T-Lora Pager ] statusbar_symbol_code_point_names = [ diff --git a/Modules/lvgl-module/Include/tactility/lvgl_symbols_shared.h b/Modules/lvgl-module/Include/tactility/lvgl_symbols_shared.h index a7af4e983..cac48dfc7 100644 --- a/Modules/lvgl-module/Include/tactility/lvgl_symbols_shared.h +++ b/Modules/lvgl-module/Include/tactility/lvgl_symbols_shared.h @@ -1,34 +1,44 @@ #pragma once -#define LVGL_SYMBOL_MAIL "\xEE\x85\x99" -#define LVGL_SYMBOL_TOOLBAR "\xEE\xA7\xB7" -#define LVGL_SYMBOL_FORUM "\xEE\xA2\xAF" -#define LVGL_SYMBOL_DEVICE_HUB "\xEE\x8C\xB5" -#define LVGL_SYMBOL_DISPLAY_SETTINGS "\xEE\xAE\x97" -#define LVGL_SYMBOL_DOWNLOAD "\xEF\x82\x90" -#define LVGL_SYMBOL_GAMEPAD "\xEE\x8C\x8F" -#define LVGL_SYMBOL_LIGHTBULB "\xEE\xA4\x8F" -#define LVGL_SYMBOL_NETWORK_MANAGE "\xEF\x9E\xAB" -#define LVGL_SYMBOL_SETTINGS "\xEE\xA2\xB8" -#define LVGL_SYMBOL_MONITORING "\xEF\x86\x90" +#define LVGL_SYMBOL_ADD "\xEE\x85\x85" +#define LVGL_SYMBOL_APPS "\xEE\x97\x83" +#define LVGL_SYMBOL_AREA_CHART "\xEE\x9D\xB0" +#define LVGL_SYMBOL_APP_REGISTRATION "\xEE\xBD\x80" +#define LVGL_SYMBOL_CALENDAR_MONTH "\xEE\xAF\x8C" +#define LVGL_SYMBOL_CABLE "\xEE\xBF\xA6" +#define LVGL_SYMBOL_CIRCLE "\xEE\xBD\x8A" #define LVGL_SYMBOL_CLOSE "\xEE\x97\x8D" -#define LVGL_SYMBOL_NOTE_ADD "\xEE\xA2\x9C" -#define LVGL_SYMBOL_EDIT_NOTE "\xEE\x9D\x85" +#define LVGL_SYMBOL_CLOUD "\xEF\x85\x9C" +#define LVGL_SYMBOL_CHECK "\xEE\x97\x8A" #define LVGL_SYMBOL_DELETE "\xEE\xA4\xAE" +#define LVGL_SYMBOL_DEVICES "\xEE\x8C\xA6" +#define LVGL_SYMBOL_DISPLAY_SETTINGS "\xEE\xAE\x97" +#define LVGL_SYMBOL_EDIT_NOTE "\xEE\x9D\x85" +#define LVGL_SYMBOL_ELECTRIC_BOLT "\xEE\xB0\x9C" #define LVGL_SYMBOL_FOLDER "\xEE\x8B\x87" +#define LVGL_SYMBOL_DEPLOYED_CODE "\xEF\x9C\xA0" +#define LVGL_SYMBOL_DOWNLOAD "\xEF\x82\x90" +#define LVGL_SYMBOL_FORUM "\xEE\xA2\xAF" +#define LVGL_SYMBOL_GAMEPAD "\xEE\x8C\x8F" +#define LVGL_SYMBOL_HELP "\xEE\xA3\xBD" #define LVGL_SYMBOL_HUB "\xEE\xA7\xB4" #define LVGL_SYMBOL_IMAGE "\xEE\x8F\xB4" #define LVGL_SYMBOL_KEYBOARD_ARROW_UP "\xEE\x8C\x96" +#define LVGL_SYMBOL_LIGHTBULB "\xEE\xA4\x8F" +#define LVGL_SYMBOL_LANGUAGE "\xEE\xA2\x94" +#define LVGL_SYMBOL_LISTS "\xEE\xA6\xB9" +#define LVGL_SYMBOL_MAIL "\xEE\x85\x99" +#define LVGL_SYMBOL_MENU "\xEE\x97\x92" +#define LVGL_SYMBOL_MOP "\xEE\x8A\x8D" +#define LVGL_SYMBOL_MORE_VERT "\xEE\x97\x94" +#define LVGL_SYMBOL_MUSIC_NOTE "\xEE\x90\x85" +#define LVGL_SYMBOL_NOTE_ADD "\xEE\xA2\x9C" +#define LVGL_SYMBOL_POWER_SETTINGS_NEW "\xEF\xA3\x87" +#define LVGL_SYMBOL_REFRESH "\xEE\x97\x95" #define LVGL_SYMBOL_SEARCH "\xEE\xA2\xB6" -#define LVGL_SYMBOL_CLOUD "\xEF\x85\x9C" -#define LVGL_SYMBOL_APP_REGISTRATION "\xEE\xBD\x80" -#define LVGL_SYMBOL_DEVICES "\xEE\x8C\xA6" +#define LVGL_SYMBOL_SETTINGS "\xEE\xA2\xB8" +#define LVGL_SYMBOL_TOOLBAR "\xEE\xA7\xB7" #define LVGL_SYMBOL_NAVIGATION "\xEE\x95\x9D" #define LVGL_SYMBOL_KEYBOARD_ALT "\xEF\x80\xA8" -#define LVGL_SYMBOL_ELECTRIC_BOLT "\xEE\xB0\x9C" #define LVGL_SYMBOL_USB "\xEE\x87\xA0" #define LVGL_SYMBOL_WIFI "\xEE\x98\xBE" -#define LVGL_SYMBOL_REFRESH "\xEE\x97\x95" -#define LVGL_SYMBOL_LISTS "\xEE\xA6\xB9" -#define LVGL_SYMBOL_HELP "\xEE\xA3\xBD" -#define LVGL_SYMBOL_POWER_SETTINGS_NEW "\xEF\xA3\x87" diff --git a/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c b/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c index 220e1cfef..c429fe831 100644 --- a/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c +++ b/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c @@ -1,7 +1,7 @@ /******************************************************************************* * Size: 16 px * Bpp: 2 - * Opts: --no-compress --no-prefilter --bpp 2 --size 16 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xE159,0xE9F7,0xE8AF,0xE335,0xEB97,0xF090,0xE30F,0xE90F,0xF7AB,0xE8B8,0xF190,0xE5CD,0xE89C,0xE745,0xE92E,0xE2C7,0xE9F4,0xE3F4,0xE316,0xE8B6,0xF15C,0xEF40,0xE326,0xE55D,0xF028,0xEC1C,0xE1E0,0xE63E,0xE5D5,0xE9B9,0xE8FD,0xF8C7 --format lvgl -o ../Source/fonts/material_symbols_shared_16.c --force-fast-kern-format + * Opts: --no-compress --no-prefilter --bpp 2 --size 16 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xE145,0xE5C3,0xE770,0xEF40,0xEBCC,0xEFE6,0xEF4A,0xE5CD,0xF15C,0xE5CA,0xE92E,0xE326,0xEB97,0xE745,0xEC1C,0xE2C7,0xF720,0xF090,0xE8AF,0xE30F,0xE8FD,0xE9F4,0xE3F4,0xE316,0xE90F,0xE894,0xE9B9,0xE159,0xE5D2,0xE28D,0xE5D4,0xE405,0xE89C,0xF8C7,0xE5D5,0xE8B6,0xE8B8,0xE9F7,0xE55D,0xF028,0xE1E0,0xE63E --format lvgl -o ../Source/fonts/material_symbols_shared_16.c --force-fast-kern-format ******************************************************************************/ #ifdef LV_LVGL_H_INCLUDE_SIMPLE @@ -22,6 +22,12 @@ /*Store the image of the glyphs*/ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+E145 "" */ + 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0xe0, 0x0, + 0xe, 0x0, 0x15, 0xf5, 0x4b, 0xff, 0xfd, 0x0, + 0xe0, 0x0, 0xe, 0x0, 0x0, 0xe0, 0x0, 0x9, + 0x0, + /* U+E159 "" */ 0x15, 0x55, 0x55, 0xb, 0xff, 0xff, 0xfd, 0xf4, 0x0, 0x2, 0xde, 0xe0, 0x1, 0xed, 0xd2, 0xd0, @@ -37,6 +43,16 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xf4, 0x0, 0xd0, 0x0, 0xe, 0x0, 0x1, 0xf0, 0x0, 0xe, 0x0, + /* U+E28D "" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xe0, 0x0, + 0x0, 0xd, 0x70, 0x0, 0x0, 0xd, 0x70, 0x0, + 0x0, 0xd, 0x70, 0x0, 0x0, 0xd, 0x70, 0x0, + 0x0, 0xd, 0x70, 0x0, 0x6, 0xaf, 0xfa, 0x90, + 0xf, 0xaa, 0xaa, 0xf0, 0xd, 0x0, 0x0, 0x70, + 0xf, 0xff, 0xff, 0xf0, 0x1d, 0x55, 0x55, 0x74, + 0x28, 0xc2, 0x83, 0x28, 0x34, 0xd2, 0x87, 0x1c, + 0x3f, 0xff, 0xff, 0xfc, 0x5, 0x55, 0x55, 0x50, + /* U+E2C7 "" */ 0x15, 0x40, 0x0, 0xb, 0xff, 0x40, 0x0, 0xd0, 0x2f, 0xff, 0xcd, 0x0, 0x55, 0x5d, 0xd0, 0x0, @@ -66,13 +82,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x55, 0xd, 0xd, 0xbf, 0xfc, 0xff, 0xd1, 0x55, 0x1, 0x54, - /* U+E335 "" */ - 0x0, 0x7d, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, - 0x0, 0x0, 0x7d, 0x0, 0x0, 0x28, 0x0, 0x0, - 0x28, 0x0, 0x0, 0x3c, 0x0, 0x0, 0xff, 0x0, - 0x17, 0xc3, 0xd4, 0xff, 0x0, 0xff, 0xfd, 0x0, - 0x7f, 0xfc, 0x0, 0x3f, - /* U+E3F4 "" */ 0xbf, 0xff, 0xfe, 0xe5, 0x55, 0x5b, 0xd0, 0x0, 0x7, 0xd0, 0x0, 0x7, 0xd0, 0x0, 0x7, 0xd0, @@ -80,6 +89,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xd7, 0xef, 0xd7, 0xd1, 0x55, 0x47, 0xe5, 0x55, 0x5b, 0xbf, 0xff, 0xfe, + /* U+E405 "" */ + 0x0, 0xff, 0x0, 0xff, 0x0, 0xfa, 0x0, 0xd0, + 0x0, 0xd0, 0x0, 0xd0, 0x4, 0xd0, 0x3f, 0xd0, + 0xff, 0xd0, 0xff, 0xd0, 0xbf, 0xc0, 0x2f, 0x0, + /* U+E55D "" */ 0x0, 0x14, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x7d, 0x0, 0x0, 0xeb, 0x0, 0x1, 0xc3, 0x40, 0x2, @@ -87,12 +101,33 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xd, 0x14, 0x70, 0x2d, 0xff, 0x78, 0x3f, 0x82, 0xfc, 0x34, 0x0, 0x1c, + /* U+E5C3 "" */ + 0x14, 0x14, 0x14, 0x3d, 0x3d, 0x3d, 0x3c, 0x3c, + 0x3c, 0x0, 0x0, 0x0, 0x14, 0x14, 0x14, 0x3d, + 0x3d, 0x3d, 0x3c, 0x3c, 0x3c, 0x0, 0x0, 0x0, + 0x14, 0x14, 0x14, 0x3d, 0x3d, 0x3d, 0x3c, 0x3c, + 0x3c, 0x0, 0x0, 0x0, + + /* U+E5CA "" */ + 0x0, 0x0, 0x8, 0x0, 0x0, 0x3c, 0x0, 0x0, + 0xf0, 0x10, 0x3, 0xc0, 0x38, 0xf, 0x0, 0xe, + 0x3c, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x80, 0x0, + /* U+E5CD "" */ 0x20, 0x0, 0x43, 0xc0, 0x1d, 0xf, 0x7, 0x40, 0x3e, 0xd0, 0x0, 0xf4, 0x0, 0x1f, 0xc0, 0x7, 0x4f, 0x1, 0xd0, 0x3c, 0x34, 0x0, 0xd0, 0x0, 0x0, + /* U+E5D2 "" */ + 0xff, 0xff, 0xff, 0x15, 0x55, 0x54, 0x0, 0x0, + 0x0, 0x55, 0x55, 0x55, 0xff, 0xff, 0xfe, 0x0, + 0x0, 0x0, 0x15, 0x55, 0x54, 0xff, 0xff, 0xff, + + /* U+E5D4 "" */ + 0x14, 0x3d, 0x3c, 0x0, 0x14, 0x3d, 0x3c, 0x0, + 0x14, 0x3d, 0x3c, 0x0, + /* U+E5D5 "" */ 0x0, 0x14, 0x0, 0x2, 0xff, 0x8d, 0xf, 0x41, 0xfd, 0x2c, 0x0, 0x3d, 0x34, 0x3, 0xfd, 0x70, @@ -115,6 +150,22 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x1, 0xfe, 0x0, 0x1, 0xce, 0x0, 0x0, 0xce, 0x0, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x0, + /* U+E770 "" */ + 0x0, 0x4, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xf3, + 0xd4, 0x82, 0xc0, 0xbf, 0xfb, 0x40, 0x7, 0xee, + 0x0, 0x7, 0xd0, 0x2c, 0x7, 0xd0, 0x7f, 0x47, + 0xf4, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x55, 0x55, 0x55, + + /* U+E894 "" */ + 0x0, 0x15, 0x0, 0x0, 0x1f, 0xff, 0x40, 0xb, + 0xba, 0xee, 0x2, 0xc7, 0xc, 0x74, 0x39, 0xf5, + 0xe7, 0xcb, 0xff, 0xff, 0xfd, 0xa0, 0xd0, 0x70, + 0xea, 0xc, 0x7, 0xe, 0xb5, 0xe5, 0xb5, 0xd7, + 0xff, 0xff, 0xfc, 0x3c, 0xb0, 0xd3, 0x80, 0xe7, + 0x5c, 0xf0, 0x3, 0xff, 0xfc, 0x0, 0x6, 0xf9, + 0x0, + /* U+E89C "" */ 0x15, 0x54, 0x0, 0x3f, 0xff, 0x40, 0x70, 0x7, 0xd0, 0x70, 0x7, 0xf4, 0x70, 0x7, 0xfc, 0x70, @@ -203,6 +254,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x55, 0x55, 0x5d, 0x7f, 0xff, 0xff, 0xc0, 0xf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+EBCC "" */ + 0x8, 0x0, 0x20, 0x1e, 0x55, 0xb4, 0xff, 0xff, + 0xff, 0xd0, 0x0, 0x7, 0xe5, 0x55, 0x5b, 0xff, + 0xff, 0xff, 0xd0, 0x0, 0x7, 0xd3, 0x24, 0xc7, + 0xd0, 0x0, 0x7, 0xd0, 0x0, 0x7, 0xd3, 0x24, + 0xc7, 0xd0, 0x0, 0x7, 0xe5, 0x55, 0x5b, 0xbf, + 0xff, 0xfe, + /* U+EC1C "" */ 0x0, 0x0, 0x80, 0x0, 0x7, 0x80, 0x0, 0x1f, 0x0, 0x0, 0x7e, 0x0, 0x1, 0xfc, 0x0, 0x7, @@ -218,6 +277,22 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x2, 0xfd, 0x14, 0x2, 0x8d, 0xf, 0x40, 0xcd, 0x3, 0xc0, 0x3d, 0x0, 0x0, 0x0, 0x0, + /* U+EF4A "" */ + 0x0, 0x15, 0x40, 0x0, 0x2f, 0xff, 0x40, 0xb, + 0x40, 0x2e, 0x2, 0xc0, 0x0, 0x74, 0x34, 0x0, + 0x1, 0xcb, 0x0, 0x0, 0xd, 0xa0, 0x0, 0x0, + 0xea, 0x0, 0x0, 0xe, 0xa0, 0x0, 0x0, 0xd7, + 0x0, 0x0, 0x1c, 0x38, 0x0, 0x3, 0x80, 0xe0, + 0x0, 0xf0, 0x3, 0xea, 0xbc, 0x0, 0x6, 0xf9, + 0x0, + + /* U+EFE6 "" */ + 0xb, 0xd0, 0x3c, 0x1d, 0xb0, 0xbe, 0x28, 0x34, + 0xff, 0x28, 0x34, 0xff, 0x28, 0x34, 0xbe, 0x28, + 0x34, 0x28, 0x28, 0x34, 0x28, 0xbe, 0x34, 0x28, + 0xff, 0x34, 0x28, 0xff, 0x38, 0x28, 0xbe, 0x2d, + 0xb4, 0x3c, 0xb, 0xd0, + /* U+F028 "" */ 0x5, 0x55, 0x55, 0x50, 0x3f, 0xff, 0xff, 0xfc, 0x70, 0x0, 0x0, 0xd, 0x71, 0x48, 0x11, 0x4d, @@ -241,21 +316,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x30, 0x0, 0x0, 0xd, 0x3c, 0x0, 0x0, 0x2c, 0xf, 0xff, 0xff, 0xf4, 0x0, 0x55, 0x55, 0x40, - /* U+F190 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0x0, 0x40, - 0x2d, 0x3, 0xf0, 0xb4, 0xf, 0x3e, 0xd0, 0x3c, - 0xb, 0x47, 0xb0, 0x0, 0x7, 0x43, 0x0, 0x87, - 0x7, 0x10, 0xd7, 0x7, 0x34, 0xd7, 0xc7, 0x34, - 0xd7, 0xc3, 0x34, 0xc3, - - /* U+F7AB "" */ - 0x0, 0x0, 0x0, 0x0, 0x1, 0xbf, 0xfd, 0x0, - 0xf, 0xff, 0xff, 0xe0, 0x7f, 0x40, 0x6, 0xfc, - 0xb8, 0x0, 0x0, 0x3d, 0x0, 0x6f, 0xd0, 0x0, - 0x2, 0xff, 0xd0, 0x0, 0x2, 0xd0, 0x3, 0x80, - 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x7, 0x38, 0x34, - 0x0, 0x7, 0x38, 0x34, 0x0, 0x0, 0x3f, 0xf8, - 0x0, 0x0, 0x3, 0x80, 0x0, 0x0, 0x0, 0x0, + /* U+F720 "" */ + 0x0, 0x10, 0x0, 0x1, 0xfe, 0x0, 0xb, 0x87, + 0xd0, 0x7c, 0x0, 0xbc, 0xf8, 0x0, 0x3e, 0xef, + 0x42, 0xee, 0xd2, 0xff, 0x4e, 0xd0, 0x38, 0xe, + 0xd0, 0x34, 0xe, 0xd0, 0x34, 0xe, 0xb4, 0x34, + 0x2d, 0x2f, 0x36, 0xf0, 0x2, 0xff, 0x40, 0x0, + 0x78, 0x0, /* U+F8C7 "" */ 0x0, 0x4, 0x0, 0x0, 0x0, 0xd0, 0x0, 0x0, @@ -274,38 +341,48 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 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 = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2}, - {.bitmap_index = 42, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 3, .ofs_y = 1}, - {.bitmap_index = 77, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2}, - {.bitmap_index = 119, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 168, .adv_w = 256, .box_w = 8, .box_h = 5, .ofs_x = 4, .ofs_y = 6}, - {.bitmap_index = 178, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2}, - {.bitmap_index = 220, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, - {.bitmap_index = 256, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, - {.bitmap_index = 292, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, - {.bitmap_index = 328, .adv_w = 256, .box_w = 10, .box_h = 10, .ofs_x = 3, .ofs_y = 3}, - {.bitmap_index = 353, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, - {.bitmap_index = 389, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 2}, - {.bitmap_index = 437, .adv_w = 256, .box_w = 13, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, - {.bitmap_index = 476, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 1}, - {.bitmap_index = 518, .adv_w = 256, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = 2}, - {.bitmap_index = 564, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, - {.bitmap_index = 600, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 649, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 698, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 3, .ofs_y = 1}, - {.bitmap_index = 733, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, - {.bitmap_index = 769, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2}, - {.bitmap_index = 811, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 875, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, - {.bitmap_index = 911, .adv_w = 256, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 957, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 1}, - {.bitmap_index = 999, .adv_w = 256, .box_w = 13, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, - {.bitmap_index = 1038, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 2}, - {.bitmap_index = 1086, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, - {.bitmap_index = 1122, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 2}, - {.bitmap_index = 1170, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, - {.bitmap_index = 1206, .adv_w = 256, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1262, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1} + {.bitmap_index = 0, .adv_w = 256, .box_w = 10, .box_h = 10, .ofs_x = 3, .ofs_y = 3}, + {.bitmap_index = 25, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 67, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 3, .ofs_y = 1}, + {.bitmap_index = 102, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 166, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 208, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 257, .adv_w = 256, .box_w = 8, .box_h = 5, .ofs_x = 4, .ofs_y = 6}, + {.bitmap_index = 267, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 309, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 345, .adv_w = 256, .box_w = 8, .box_h = 12, .ofs_x = 4, .ofs_y = 2}, + {.bitmap_index = 369, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 405, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 441, .adv_w = 256, .box_w = 12, .box_h = 8, .ofs_x = 2, .ofs_y = 4}, + {.bitmap_index = 465, .adv_w = 256, .box_w = 10, .box_h = 10, .ofs_x = 3, .ofs_y = 3}, + {.bitmap_index = 490, .adv_w = 256, .box_w = 12, .box_h = 8, .ofs_x = 2, .ofs_y = 4}, + {.bitmap_index = 514, .adv_w = 256, .box_w = 4, .box_h = 12, .ofs_x = 6, .ofs_y = 2}, + {.bitmap_index = 526, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 562, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 610, .adv_w = 256, .box_w = 13, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 649, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 685, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 734, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 1}, + {.bitmap_index = 776, .adv_w = 256, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 822, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 858, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 907, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 956, .adv_w = 256, .box_w = 10, .box_h = 14, .ofs_x = 3, .ofs_y = 1}, + {.bitmap_index = 991, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 1027, .adv_w = 256, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 1069, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1133, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 1169, .adv_w = 256, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 1215, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 1}, + {.bitmap_index = 1257, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 1}, + {.bitmap_index = 1299, .adv_w = 256, .box_w = 13, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 1338, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 1387, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 1423, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1471, .adv_w = 256, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = 2}, + {.bitmap_index = 1507, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1555, .adv_w = 256, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = 1}, + {.bitmap_index = 1597, .adv_w = 256, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 1} }; /*--------------------- @@ -313,18 +390,20 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { *--------------------*/ static const uint16_t unicode_list_0[] = { - 0x0, 0x87, 0x16e, 0x1b6, 0x1bd, 0x1cd, 0x1dc, 0x29b, - 0x404, 0x474, 0x47c, 0x4e5, 0x5ec, 0x743, 0x756, 0x75d, - 0x75f, 0x7a4, 0x7b6, 0x7d5, 0x860, 0x89b, 0x89e, 0xa3e, - 0xac3, 0xde7, 0xecf, 0xf37, 0x1003, 0x1037, 0x1652, 0x176e + 0x0, 0x14, 0x9b, 0x148, 0x182, 0x1ca, 0x1d1, 0x1e1, + 0x2af, 0x2c0, 0x418, 0x47e, 0x485, 0x488, 0x48d, 0x48f, + 0x490, 0x4f9, 0x600, 0x62b, 0x74f, 0x757, 0x76a, 0x771, + 0x773, 0x7b8, 0x7ca, 0x7e9, 0x874, 0x8af, 0x8b2, 0xa52, + 0xa87, 0xad7, 0xdfb, 0xe05, 0xea1, 0xee3, 0xf4b, 0x1017, + 0x15db, 0x1782 }; /*Collect the unicode lists and glyph_id offsets*/ static const lv_font_fmt_txt_cmap_t cmaps[] = { { - .range_start = 57689, .range_length = 5999, .glyph_id_start = 1, - .unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 32, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + .range_start = 57669, .range_length = 6019, .glyph_id_start = 1, + .unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 42, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY } }; diff --git a/Tactility/Include/Tactility/Assets.h b/Tactility/Include/Tactility/Assets.h index 87d63a860..b0ef42eec 100644 --- a/Tactility/Include/Tactility/Assets.h +++ b/Tactility/Include/Tactility/Assets.h @@ -11,11 +11,3 @@ // UI #define TT_ASSETS_UI_SPINNER TT_ASSET("spinner.png") #define TT_ASSETS_UI_CURSOR TT_ASSET("cursor.png") - -// App icons -#define TT_ASSETS_APP_ICON_FALLBACK TT_ASSET("app_icon_fallback_dark_mode.png") -#define TT_ASSETS_APP_ICON_FILES TT_ASSET("app_icon_files_dark_mode.png") -#define TT_ASSETS_APP_ICON_DISPLAY_SETTINGS TT_ASSET("app_icon_display_settings_dark_mode.png") -#define TT_ASSETS_APP_ICON_POWER_SETTINGS TT_ASSET("app_icon_power_settings_dark_mode.png") -#define TT_ASSETS_APP_ICON_SETTINGS TT_ASSET("app_icon_settings_dark_mode.png") -#define TT_ASSETS_APP_ICON_TIME_DATE_SETTINGS TT_ASSET("app_icon_time_date_settings_dark_mode.png") diff --git a/Tactility/Source/app/appsettings/AppSettings.cpp b/Tactility/Source/app/appsettings/AppSettings.cpp index c55621e0f..1fc2a440a 100644 --- a/Tactility/Source/app/appsettings/AppSettings.cpp +++ b/Tactility/Source/app/appsettings/AppSettings.cpp @@ -1,9 +1,10 @@ -#include +#include +#include + #include -#include +#include #include - -#include +#include #include #include @@ -18,8 +19,10 @@ class AppSettingsApp final : public App { } static void createAppWidget(const std::shared_ptr& manifest, lv_obj_t* list) { - const void* icon = !manifest->appIcon.empty() ? manifest->appIcon.c_str() : TT_ASSETS_APP_ICON_FALLBACK; + const void* icon = !manifest->appIcon.empty() ? manifest->appIcon.c_str() : LVGL_SYMBOL_TOOLBAR; lv_obj_t* btn = lv_list_add_button(list, icon, manifest->appName.c_str()); + lv_obj_t* image = lv_obj_get_child(btn, 0); + lv_obj_set_style_text_font(image, LVGL_SYMBOL_FONT_DEFAULT, LV_PART_MAIN); lv_obj_add_event_cb(btn, &onAppPressed, LV_EVENT_SHORT_CLICKED, manifest.get()); } @@ -59,6 +62,7 @@ class AppSettingsApp final : public App { extern const AppManifest manifest = { .appId = "AppSettings", .appName = "Apps", + .appIcon = LVGL_SYMBOL_APPS, .appCategory = Category::Settings, .createApp = create, }; diff --git a/Tactility/Source/app/development/Development.cpp b/Tactility/Source/app/development/Development.cpp index d2ddf5d48..21b9c71bd 100644 --- a/Tactility/Source/app/development/Development.cpp +++ b/Tactility/Source/app/development/Development.cpp @@ -13,6 +13,8 @@ #include #include +#include + #include #include @@ -163,6 +165,7 @@ class DevelopmentApp final : public App { extern const AppManifest manifest = { .appId = "Development", .appName = "Development", + .appIcon = LVGL_SYMBOL_DEVICES, .appCategory = Category::Settings, .createApp = create }; diff --git a/Tactility/Source/app/display/Display.cpp b/Tactility/Source/app/display/Display.cpp index efc97e298..f5938c683 100644 --- a/Tactility/Source/app/display/Display.cpp +++ b/Tactility/Source/app/display/Display.cpp @@ -1,13 +1,15 @@ #include +#include + #ifdef ESP_PLATFORM #include #endif -#include -#include -#include + #include +#include #include +#include #include @@ -304,7 +306,7 @@ class DisplayApp final : public App { extern const AppManifest manifest = { .appId = "Display", .appName = "Display", - .appIcon = TT_ASSETS_APP_ICON_DISPLAY_SETTINGS, + .appIcon = LVGL_SYMBOL_DISPLAY_SETTINGS, .appCategory = Category::Settings, .createApp = create }; diff --git a/Tactility/Source/app/files/FilesApp.cpp b/Tactility/Source/app/files/FilesApp.cpp index 586f8b703..ee2637744 100644 --- a/Tactility/Source/app/files/FilesApp.cpp +++ b/Tactility/Source/app/files/FilesApp.cpp @@ -39,7 +39,6 @@ class FilesApp final : public App { extern const AppManifest manifest = { .appId = "Files", .appName = "Files", - .appIcon = TT_ASSETS_APP_ICON_FILES, .appCategory = Category::System, .appFlags = AppManifest::Flags::Hidden, .createApp = create diff --git a/Tactility/Source/app/fileselection/FileSelection.cpp b/Tactility/Source/app/fileselection/FileSelection.cpp index 6237b6e44..acf2dcf2f 100644 --- a/Tactility/Source/app/fileselection/FileSelection.cpp +++ b/Tactility/Source/app/fileselection/FileSelection.cpp @@ -58,7 +58,6 @@ class FileSelection : public App { extern const AppManifest manifest = { .appId = "FileSelection", .appName = "File Selection", - .appIcon = TT_ASSETS_APP_ICON_FILES, .appCategory = Category::System, .appFlags = AppManifest::Flags::Hidden, .createApp = create diff --git a/Tactility/Source/app/gpssettings/GpsSettings.cpp b/Tactility/Source/app/gpssettings/GpsSettings.cpp index c0ef599d3..396acbdc3 100644 --- a/Tactility/Source/app/gpssettings/GpsSettings.cpp +++ b/Tactility/Source/app/gpssettings/GpsSettings.cpp @@ -10,6 +10,8 @@ #include #include +#include + #include #include #include @@ -453,7 +455,7 @@ class GpsSettingsApp final : public App { extern const AppManifest manifest = { .appId = "GpsSettings", .appName = "GPS", - .appIcon = LV_SYMBOL_GPS, + .appIcon = LVGL_SYMBOL_NAVIGATION, .appCategory = Category::Settings, .createApp = create }; diff --git a/Tactility/Source/app/i2cscanner/I2cScanner.cpp b/Tactility/Source/app/i2cscanner/I2cScanner.cpp index d32da04d4..52d0d92ec 100644 --- a/Tactility/Source/app/i2cscanner/I2cScanner.cpp +++ b/Tactility/Source/app/i2cscanner/I2cScanner.cpp @@ -411,7 +411,7 @@ void I2cScannerApp::onScanTimerFinished() { extern const AppManifest manifest = { .appId = "I2cScanner", .appName = "I2C Scanner", - .appIcon = LVGL_SYMBOL_DEVICE_HUB, + .appIcon = LVGL_SYMBOL_SEARCH, .appCategory = Category::System, .createApp = create }; diff --git a/Tactility/Source/app/keyboard/KeyboardSettings.cpp b/Tactility/Source/app/keyboard/KeyboardSettings.cpp index 5706f4c59..a343a89be 100644 --- a/Tactility/Source/app/keyboard/KeyboardSettings.cpp +++ b/Tactility/Source/app/keyboard/KeyboardSettings.cpp @@ -3,9 +3,10 @@ #include #include -#include #include +#include + #include // Forward declare driver functions @@ -182,7 +183,7 @@ class KeyboardSettingsApp final : public App { extern const AppManifest manifest = { .appId = "KeyboardSettings", .appName = "Keyboard", - .appIcon = TT_ASSETS_APP_ICON_SETTINGS, + .appIcon = LVGL_SYMBOL_KEYBOARD_ALT, .appCategory = Category::Settings, .createApp = create }; diff --git a/Tactility/Source/app/localesettings/LocaleSettings.cpp b/Tactility/Source/app/localesettings/LocaleSettings.cpp index 93b2858b9..334f95e0b 100644 --- a/Tactility/Source/app/localesettings/LocaleSettings.cpp +++ b/Tactility/Source/app/localesettings/LocaleSettings.cpp @@ -1,18 +1,16 @@ -#include #include -#include #include #include -#include #include #include #include #include #include +#include + #include #include -#include namespace tt::app::localesettings { @@ -163,7 +161,7 @@ class LocaleSettingsApp final : public App { extern const AppManifest manifest = { .appId = "LocaleSettings", .appName = "Region & Language", - .appIcon = TT_ASSETS_APP_ICON_TIME_DATE_SETTINGS, + .appIcon = LVGL_SYMBOL_LANGUAGE, .appCategory = Category::Settings, .createApp = create }; diff --git a/Tactility/Source/app/power/Power.cpp b/Tactility/Source/app/power/Power.cpp index 7bf50b12c..a08135535 100644 --- a/Tactility/Source/app/power/Power.cpp +++ b/Tactility/Source/app/power/Power.cpp @@ -6,8 +6,9 @@ #include #include -#include + #include +#include #include @@ -191,7 +192,7 @@ class PowerApp : public App { extern const AppManifest manifest = { .appId = "Power", .appName = "Power", - .appIcon = TT_ASSETS_APP_ICON_POWER_SETTINGS, + .appIcon = LVGL_SYMBOL_ELECTRIC_BOLT, .appCategory = Category::Settings, .createApp = create }; diff --git a/Tactility/Source/app/settings/Settings.cpp b/Tactility/Source/app/settings/Settings.cpp index 8f6e93615..f1c5662e3 100644 --- a/Tactility/Source/app/settings/Settings.cpp +++ b/Tactility/Source/app/settings/Settings.cpp @@ -2,8 +2,10 @@ #include #include -#include #include +#include +#include + #include #include @@ -17,9 +19,11 @@ static void onAppPressed(lv_event_t* e) { static void createWidget(const std::shared_ptr& manifest, void* parent) { check(parent); - auto* list = (lv_obj_t*)parent; - const void* icon = !manifest->appIcon.empty() ? manifest->appIcon.c_str() : TT_ASSETS_APP_ICON_FALLBACK; + auto* list = static_cast(parent); + const void* icon = !manifest->appIcon.empty() ? manifest->appIcon.c_str() : LVGL_SYMBOL_TOOLBAR; auto* btn = lv_list_add_button(list, icon, manifest->appName.c_str()); + lv_obj_t* image = lv_obj_get_child(btn, 0); + lv_obj_set_style_text_font(image, LVGL_SYMBOL_FONT_DEFAULT, LV_PART_MAIN); lv_obj_add_event_cb(btn, &onAppPressed, LV_EVENT_SHORT_CLICKED, (void*)manifest.get()); } @@ -48,7 +52,7 @@ class SettingsApp final : public App { extern const AppManifest manifest = { .appId = "Settings", .appName = "Settings", - .appIcon = TT_ASSETS_APP_ICON_SETTINGS, + .appIcon = LVGL_SYMBOL_SETTINGS, .appCategory = Category::System, .appFlags = AppManifest::Flags::Hidden, .createApp = create diff --git a/Tactility/Source/app/systeminfo/SystemInfo.cpp b/Tactility/Source/app/systeminfo/SystemInfo.cpp index 8fdaa1a7b..53c50e74b 100644 --- a/Tactility/Source/app/systeminfo/SystemInfo.cpp +++ b/Tactility/Source/app/systeminfo/SystemInfo.cpp @@ -702,7 +702,7 @@ class SystemInfoApp final : public App { extern const AppManifest manifest = { .appId = "SystemInfo", .appName = "System Info", - .appIcon = LVGL_SYMBOL_MONITORING, + .appIcon = LVGL_SYMBOL_AREA_CHART, .appCategory = Category::System, .createApp = create }; diff --git a/Tactility/Source/app/timedatesettings/TimeDateSettings.cpp b/Tactility/Source/app/timedatesettings/TimeDateSettings.cpp index b52bccf7d..b9d520358 100644 --- a/Tactility/Source/app/timedatesettings/TimeDateSettings.cpp +++ b/Tactility/Source/app/timedatesettings/TimeDateSettings.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -11,6 +10,8 @@ #include +#include + namespace tt::app::timedatesettings { static const auto LOGGER = Logger("TimeDate"); @@ -154,7 +155,7 @@ class TimeDateSettingsApp final : public App { extern const AppManifest manifest = { .appId = "TimeDateSettings", .appName = "Time & Date", - .appIcon = TT_ASSETS_APP_ICON_TIME_DATE_SETTINGS, + .appIcon = LVGL_SYMBOL_CALENDAR_MONTH, .appCategory = Category::Settings, .createApp = create }; diff --git a/Tactility/Source/app/trackball/TrackballSettings.cpp b/Tactility/Source/app/trackball/TrackballSettings.cpp index 2cc3e3943..4c46ecad5 100644 --- a/Tactility/Source/app/trackball/TrackballSettings.cpp +++ b/Tactility/Source/app/trackball/TrackballSettings.cpp @@ -3,11 +3,12 @@ #include #include -#include #include #include +#include + // Forward declare driver functions namespace trackball { void setEnabled(bool enabled); @@ -209,7 +210,7 @@ class TrackballSettingsApp final : public App { extern const AppManifest manifest = { .appId = "TrackballSettings", .appName = "Trackball", - .appIcon = TT_ASSETS_APP_ICON_SETTINGS, + .appIcon = LVGL_SYMBOL_CIRCLE, .appCategory = Category::Settings, .createApp = create }; diff --git a/Tactility/Source/app/usbsettings/UsbSettings.cpp b/Tactility/Source/app/usbsettings/UsbSettings.cpp index 9d8f05217..c16109b35 100644 --- a/Tactility/Source/app/usbsettings/UsbSettings.cpp +++ b/Tactility/Source/app/usbsettings/UsbSettings.cpp @@ -1,12 +1,12 @@ -#include "Tactility/app/App.h" -#include "Tactility/app/AppManifest.h" -#include "Tactility/lvgl/Toolbar.h" - -#include +#include +#include #include +#include #include +#include + #define TAG "usb_settings" namespace tt::app::usbsettings { @@ -62,7 +62,7 @@ class UsbSettingsApp : public App { extern const AppManifest manifest = { .appId = "UsbSettings", .appName = "USB", - .appIcon = LV_SYMBOL_USB, + .appIcon = LVGL_SYMBOL_USB, .appCategory = Category::Settings, .createApp = create }; diff --git a/Tactility/Source/app/wifimanage/WifiManage.cpp b/Tactility/Source/app/wifimanage/WifiManage.cpp index 24faa0d2a..a890fbf12 100644 --- a/Tactility/Source/app/wifimanage/WifiManage.cpp +++ b/Tactility/Source/app/wifimanage/WifiManage.cpp @@ -144,7 +144,7 @@ void WifiManage::onHide(AppContext& app) { extern const AppManifest manifest = { .appId = "WifiManage", .appName = "Wi-Fi", - .appIcon = LVGL_SYMBOL_NETWORK_MANAGE, + .appIcon = LVGL_SYMBOL_WIFI, .appCategory = Category::Settings, .createApp = create }; From bd573a6979cd5c2177dba1b96646da8839eb49e4 Mon Sep 17 00:00:00 2001 From: Ken Van Hoeylandt Date: Fri, 13 Feb 2026 20:19:07 +0100 Subject: [PATCH 5/5] Update code generation script to download font --- Modules/lvgl-module/Assets/.gitignore | 2 ++ Modules/lvgl-module/Assets/generate-all.py | 30 +++++++++++++++---- .../fonts/material_symbols_launcher_36.c | 2 +- .../Source/fonts/material_symbols_shared_16.c | 2 +- .../fonts/material_symbols_statusbar_20.c | 2 +- 5 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 Modules/lvgl-module/Assets/.gitignore diff --git a/Modules/lvgl-module/Assets/.gitignore b/Modules/lvgl-module/Assets/.gitignore new file mode 100644 index 000000000..7a87f94db --- /dev/null +++ b/Modules/lvgl-module/Assets/.gitignore @@ -0,0 +1,2 @@ +*.ttf +*.codepoints \ No newline at end of file diff --git a/Modules/lvgl-module/Assets/generate-all.py b/Modules/lvgl-module/Assets/generate-all.py index 24917d31b..ecd3bdba1 100644 --- a/Modules/lvgl-module/Assets/generate-all.py +++ b/Modules/lvgl-module/Assets/generate-all.py @@ -1,4 +1,12 @@ -import os; +import os +import urllib.request + +def download_file(url: str, filename: str): + if not os.path.exists(filename): + print(f"Downloading {filename} from {url}") + urllib.request.urlretrieve(url, filename) + else: + print(f"{filename} already exists, skipping download.") def generate(bpp, size, font_file: str, symbols: list, output: str): output_file_name = f"{output}_{size}.c" @@ -135,21 +143,33 @@ def generate_icon_names(codepoint_map: dict, codepoint_names: list, filename: st # Resolve file path relative to this script so it can be executed from any CWD base_dir = os.path.dirname(__file__) -codepoints_map_path = os.path.join(base_dir, "MaterialSymbolsRounded[FILL,GRAD,opsz,wght].codepoints") +if base_dir: + os.chdir(base_dir) + +codepoints_url = "https://github.com/google/material-design-icons/raw/refs/heads/master/variablefont/MaterialSymbolsRounded%5BFILL,GRAD,opsz,wght%5D.codepoints" +ttf_url = "https://github.com/google/material-design-icons/raw/refs/heads/master/variablefont/MaterialSymbolsRounded%5BFILL,GRAD,opsz,wght%5D.ttf" + +codepoints_filename = "MaterialSymbolsRounded.codepoints" +ttf_filename = "MaterialSymbolsRounded.ttf" + +download_file(codepoints_url, codepoints_filename) +download_file(ttf_url, ttf_filename) + +codepoints_map_path = codepoints_filename codepoints_map = read_code_points_map(codepoints_map_path) # Shared symbols shared_symbol_code_points = get_code_points(codepoints_map, shared_symbol_code_point_names) -generate_icon_fonts("MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf", shared_symbol_font_sizes, shared_symbol_code_points, "material_symbols_shared") +generate_icon_fonts(ttf_filename, shared_symbol_font_sizes, shared_symbol_code_points, "material_symbols_shared") generate_icon_names(codepoints_map, shared_symbol_code_point_names, "lvgl_symbols_shared.h") # Statusbar symbols statusbar_symbol_code_points = get_code_points(codepoints_map, statusbar_symbol_code_point_names) -generate_icon_fonts("MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf", [20], statusbar_symbol_code_points, "material_symbols_statusbar") +generate_icon_fonts(ttf_filename, [20], statusbar_symbol_code_points, "material_symbols_statusbar") generate_icon_names(codepoints_map, statusbar_symbol_code_point_names, "lvgl_symbols_statusbar.h") # Launcher symbols launcher_symbol_code_points = get_code_points(codepoints_map, launcher_symbol_code_point_names) -generate_icon_fonts("MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf", [36], launcher_symbol_code_points, "material_symbols_launcher") +generate_icon_fonts(ttf_filename, [36], launcher_symbol_code_points, "material_symbols_launcher") generate_icon_names(codepoints_map, launcher_symbol_code_point_names, "lvgl_symbols_launcher.h") diff --git a/Modules/lvgl-module/Source/fonts/material_symbols_launcher_36.c b/Modules/lvgl-module/Source/fonts/material_symbols_launcher_36.c index 241c505b3..bee625475 100644 --- a/Modules/lvgl-module/Source/fonts/material_symbols_launcher_36.c +++ b/Modules/lvgl-module/Source/fonts/material_symbols_launcher_36.c @@ -1,7 +1,7 @@ /******************************************************************************* * Size: 36 px * Bpp: 2 - * Opts: --no-compress --no-prefilter --bpp 2 --size 36 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xE5C3,0xE2C7,0xE8B8 --format lvgl -o ../Source/fonts/material_symbols_launcher_36.c --force-fast-kern-format + * Opts: --no-compress --no-prefilter --bpp 2 --size 36 --font MaterialSymbolsRounded.ttf -r 0xE5C3,0xE2C7,0xE8B8 --format lvgl -o ../Source/fonts/material_symbols_launcher_36.c --force-fast-kern-format ******************************************************************************/ #ifdef LV_LVGL_H_INCLUDE_SIMPLE diff --git a/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c b/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c index c429fe831..36b521c0b 100644 --- a/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c +++ b/Modules/lvgl-module/Source/fonts/material_symbols_shared_16.c @@ -1,7 +1,7 @@ /******************************************************************************* * Size: 16 px * Bpp: 2 - * Opts: --no-compress --no-prefilter --bpp 2 --size 16 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xE145,0xE5C3,0xE770,0xEF40,0xEBCC,0xEFE6,0xEF4A,0xE5CD,0xF15C,0xE5CA,0xE92E,0xE326,0xEB97,0xE745,0xEC1C,0xE2C7,0xF720,0xF090,0xE8AF,0xE30F,0xE8FD,0xE9F4,0xE3F4,0xE316,0xE90F,0xE894,0xE9B9,0xE159,0xE5D2,0xE28D,0xE5D4,0xE405,0xE89C,0xF8C7,0xE5D5,0xE8B6,0xE8B8,0xE9F7,0xE55D,0xF028,0xE1E0,0xE63E --format lvgl -o ../Source/fonts/material_symbols_shared_16.c --force-fast-kern-format + * Opts: --no-compress --no-prefilter --bpp 2 --size 16 --font MaterialSymbolsRounded.ttf -r 0xE145,0xE5C3,0xE770,0xEF40,0xEBCC,0xEFE6,0xEF4A,0xE5CD,0xF15C,0xE5CA,0xE92E,0xE326,0xEB97,0xE745,0xEC1C,0xE2C7,0xF720,0xF090,0xE8AF,0xE30F,0xE8FD,0xE9F4,0xE3F4,0xE316,0xE90F,0xE894,0xE9B9,0xE159,0xE5D2,0xE28D,0xE5D4,0xE405,0xE89C,0xF8C7,0xE5D5,0xE8B6,0xE8B8,0xE9F7,0xE55D,0xF028,0xE1E0,0xE63E --format lvgl -o ../Source/fonts/material_symbols_shared_16.c --force-fast-kern-format ******************************************************************************/ #ifdef LV_LVGL_H_INCLUDE_SIMPLE diff --git a/Modules/lvgl-module/Source/fonts/material_symbols_statusbar_20.c b/Modules/lvgl-module/Source/fonts/material_symbols_statusbar_20.c index 15f869330..0e1360b0b 100644 --- a/Modules/lvgl-module/Source/fonts/material_symbols_statusbar_20.c +++ b/Modules/lvgl-module/Source/fonts/material_symbols_statusbar_20.c @@ -1,7 +1,7 @@ /******************************************************************************* * Size: 20 px * Bpp: 2 - * Opts: --no-compress --no-prefilter --bpp 2 --size 20 --font MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf -r 0xF1DB,0xF15C,0xE623,0xF057,0xF0B0,0xEBE4,0xEBD6,0xEBE1,0xF065,0xE1DA,0xF257,0xF256,0xF255,0xF254,0xF253,0xF252,0xF250 --format lvgl -o ../Source/fonts/material_symbols_statusbar_20.c --force-fast-kern-format + * Opts: --no-compress --no-prefilter --bpp 2 --size 20 --font MaterialSymbolsRounded.ttf -r 0xF1DB,0xF15C,0xE623,0xF057,0xF0B0,0xEBE4,0xEBD6,0xEBE1,0xF065,0xE1DA,0xF257,0xF256,0xF255,0xF254,0xF253,0xF252,0xF250 --format lvgl -o ../Source/fonts/material_symbols_statusbar_20.c --force-fast-kern-format ******************************************************************************/ #ifdef LV_LVGL_H_INCLUDE_SIMPLE