From 2bcb549e1e47a216f377bc57588ee32bf221e25e Mon Sep 17 00:00:00 2001 From: Malte Langermann Date: Tue, 28 Feb 2023 21:53:16 +0100 Subject: [PATCH 1/7] chore(ui): adapt lv_conf.h for lvgl 8.3 --- radio/src/lv_conf.h | 117 +++++++++++++++++++++++++++++++++----------- 1 file changed, 89 insertions(+), 28 deletions(-) diff --git a/radio/src/lv_conf.h b/radio/src/lv_conf.h index 549ec06bf80..57d1fa4ba28 100644 --- a/radio/src/lv_conf.h +++ b/radio/src/lv_conf.h @@ -29,9 +29,9 @@ /*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/ #define LV_COLOR_16_SWAP 0 -/*Enable more complex drawing routines to manage screens transparency. - *Can be used if the UI is above another layer, e.g. an OSD menu or video player. - *Requires `LV_COLOR_DEPTH = 32` colors and the screen's `bg_opa` should be set to non LV_OPA_COVER value*/ +/*Enable features to draw on transparent background. + *It's required if opa, and transform_* style properties are used. + *Can be also used if the UI is above another layer, e.g. an OSD menu or video player.*/ #define LV_COLOR_SCREEN_TRANSP 0 /* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. @@ -49,14 +49,14 @@ #define LV_MEM_CUSTOM 1 #if LV_MEM_CUSTOM == 0 /*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/ - #define LV_MEM_SIZE (8U * 1024U) /*[bytes]*/ + #define LV_MEM_SIZE (48U * 1024U) /*[bytes]*/ /*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/ #define LV_MEM_ADR 0 /*0: unused*/ /*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/ #if LV_MEM_ADR == 0 - //#define LV_MEM_POOL_INCLUDE your_alloc_library /* Uncomment if using an external allocator*/ - //#define LV_MEM_POOL_ALLOC your_alloc /* Uncomment if using an external allocator*/ + #undef LV_MEM_POOL_INCLUDE + #undef LV_MEM_POOL_ALLOC #endif #else /*LV_MEM_CUSTOM*/ @@ -89,6 +89,9 @@ #if LV_TICK_CUSTOM #define LV_TICK_CUSTOM_INCLUDE "Arduino.h" /*Header for the system time function*/ #define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current system time in ms*/ + /*If using lvgl as ESP32 component*/ + // #define LV_TICK_CUSTOM_INCLUDE "esp_timer.h" + // #define LV_TICK_CUSTOM_SYS_TIME_EXPR ((esp_timer_get_time() / 1000LL)) #endif /*LV_TICK_CUSTOM*/ /*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings. @@ -126,33 +129,49 @@ #define LV_CIRCLE_CACHE_SIZE 4 #endif /*LV_DRAW_COMPLEX*/ +/** + * "Simple layers" are used when a widget has `style_opa < 255` to buffer the widget into a layer + * and blend it as an image with the given opacity. + * Note that `bg_opa`, `text_opa` etc don't require buffering into layer) + * The widget can be buffered in smaller chunks to avoid using large buffers. + * + * - LV_LAYER_SIMPLE_BUF_SIZE: [bytes] the optimal target buffer size. LVGL will try to allocate it + * - LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE: [bytes] used if `LV_LAYER_SIMPLE_BUF_SIZE` couldn't be allocated. + * + * Both buffer sizes are in bytes. + * "Transformed layers" (where transform_angle/zoom properties are used) use larger buffers + * and can't be drawn in chunks. So these settings affects only widgets with opacity. + */ +#define LV_LAYER_SIMPLE_BUF_SIZE (24 * 1024) +#define LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE (3 * 1024) + /*Default image cache size. Image caching keeps the images opened. *If only the built-in image formats are used there is no real advantage of caching. (I.e. if no new image decoder is added) *With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images. *However the opened images might consume additional RAM. *0: to disable caching*/ -#define LV_IMG_CACHE_DEF_SIZE 0 +#define LV_IMG_CACHE_DEF_SIZE 0 /*Number of stops allowed per gradient. Increase this to allow more stops. *This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/ -#define LV_GRADIENT_MAX_STOPS 2 +#define LV_GRADIENT_MAX_STOPS 2 /*Default gradient buffer size. *When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again. *LV_GRAD_CACHE_DEF_SIZE sets the size of this cache in bytes. *If the cache is too small the map will be allocated only while it's required for the drawing. *0 mean no caching.*/ -#define LV_GRAD_CACHE_DEF_SIZE 0 +#define LV_GRAD_CACHE_DEF_SIZE 0 /*Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display) *LV_DITHER_GRADIENT implies allocating one or two more lines of the object's rendering surface *The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion */ -#define LV_DITHER_GRADIENT 0 +#define LV_DITHER_GRADIENT 0 #if LV_DITHER_GRADIENT /*Add support for error diffusion dithering. *Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing. *The increase in memory consumption is (24 bits * object's width)*/ - #define LV_DITHER_ERROR_DIFFUSION 0 + #define LV_DITHER_ERROR_DIFFUSION 0 #endif /*Maximum buffer size to allocate for rotation. @@ -163,6 +182,9 @@ * GPU *-----------*/ +/*Use Arm's 2D acceleration library Arm-2D */ +#define LV_USE_GPU_ARM2D 0 + /*Use STM32's DMA2D (aka Chrom Art) GPU*/ #if defined(SIMU) #define LV_USE_GPU_STM32_DMA2D 0 @@ -172,7 +194,7 @@ #if LV_USE_GPU_STM32_DMA2D /*Must be defined to include path of CMSIS header of target processor e.g. "stm32f769xx.h" or "stm32f429xx.h"*/ - #define LV_GPU_DMA2D_CMSIS_INCLUDE "stm32f4xx.h" + #define LV_GPU_DMA2D_CMSIS_INCLUDE "thirdparty/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h" #if !defined(DMA2D_NLR_PL_Pos) #define DMA2D_NLR_PL_Pos 16 #endif @@ -190,6 +212,11 @@ #endif #endif +/*Use SWM341's DMA2D GPU*/ +#define LV_USE_GPU_SWM341_DMA2D 0 +#if LV_USE_GPU_SWM341_DMA2D + #define LV_GPU_SWM341_DMA2D_INCLUDE "SWM341.h" +#endif /*Use NXP's PXP GPU iMX RTxxx platforms*/ #define LV_USE_GPU_NXP_PXP 0 #if LV_USE_GPU_NXP_PXP @@ -492,6 +519,9 @@ #define LV_FONT_SUBPX_BGR 0 /*0: RGB; 1:BGR order*/ #endif +/*Enable drawing placeholders when glyph dsc is not found*/ +#define LV_USE_FONT_PLACEHOLDER 1 + /*================= * TEXT SETTINGS *=================*/ @@ -726,7 +756,7 @@ #if LV_USE_FS_STDIO #define LV_FS_STDIO_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ #define LV_FS_STDIO_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ - #define LV_FS_STDIO_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ + #define LV_FS_STDIO_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ #endif /*API for open, read, etc*/ @@ -734,13 +764,13 @@ #if LV_USE_FS_POSIX #define LV_FS_POSIX_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ #define LV_FS_POSIX_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ - #define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ + #define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ #endif /*API for CreateFile, ReadFile, etc*/ #define LV_USE_FS_WIN32 0 #if LV_USE_FS_WIN32 - #define LV_FS_WIN32_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_WIN32_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ #define LV_FS_WIN32_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ #define LV_FS_WIN32_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ #endif @@ -802,10 +832,10 @@ /*FFmpeg library for image decoding and playing videos *Supports all major image formats so do not enable other image decoder with it*/ -#define LV_USE_FFMPEG 0 +#define LV_USE_FFMPEG 0 #if LV_USE_FFMPEG /*Dump input information to stderr*/ - #define LV_FFMPEG_AV_DUMP_FORMAT 0 + #define LV_FFMPEG_DUMP_FORMAT 0 #endif /*----------- @@ -821,6 +851,33 @@ /*1: Enable grid navigation*/ #define LV_USE_GRIDNAV 0 +/*1: Enable lv_obj fragment*/ +#define LV_USE_FRAGMENT 0 + +/*1: Support using images as font in label or span widgets */ +#define LV_USE_IMGFONT 0 + +/*1: Enable a published subscriber based messaging system */ +#define LV_USE_MSG 0 + +/*1: Enable Pinyin input method*/ +/*Requires: lv_keyboard*/ +#define LV_USE_IME_PINYIN 0 +#if LV_USE_IME_PINYIN + /*1: Use default thesaurus*/ + /*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesauruss*/ + #define LV_IME_PINYIN_USE_DEFAULT_DICT 1 + /*Set the maximum number of candidate panels that can be displayed*/ + /*This needs to be adjusted according to the size of the screen*/ + #define LV_IME_PINYIN_CAND_TEXT_NUM 6 + + /*Use 9 key input(k9)*/ + #define LV_IME_PINYIN_USE_K9_MODE 1 + #if LV_IME_PINYIN_USE_K9_MODE == 1 + #define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3 + #endif // LV_IME_PINYIN_USE_K9_MODE +#endif + /*================== * EXAMPLES *==================*/ @@ -833,28 +890,32 @@ ====================*/ /*Show some widget. It might be required to increase `LV_MEM_SIZE` */ -#define LV_USE_DEMO_WIDGETS 0 +#define LV_USE_DEMO_WIDGETS 0 #if LV_USE_DEMO_WIDGETS -#define LV_DEMO_WIDGETS_SLIDESHOW 0 +#define LV_DEMO_WIDGETS_SLIDESHOW 0 #endif /*Demonstrate the usage of encoder and keyboard*/ -#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 +#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 /*Benchmark your system*/ -#define LV_USE_DEMO_BENCHMARK 0 +#define LV_USE_DEMO_BENCHMARK 0 +#if LV_USE_DEMO_BENCHMARK +/*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/ +#define LV_DEMO_BENCHMARK_RGB565A8 0 +#endif /*Stress test for LVGL*/ -#define LV_USE_DEMO_STRESS 0 +#define LV_USE_DEMO_STRESS 0 /*Music player demo*/ -#define LV_USE_DEMO_MUSIC 0 +#define LV_USE_DEMO_MUSIC 0 #if LV_USE_DEMO_MUSIC -# define LV_DEMO_MUSIC_SQUARE 0 -# define LV_DEMO_MUSIC_LANDSCAPE 0 -# define LV_DEMO_MUSIC_ROUND 0 -# define LV_DEMO_MUSIC_LARGE 0 -# define LV_DEMO_MUSIC_AUTO_PLAY 0 + #define LV_DEMO_MUSIC_SQUARE 0 + #define LV_DEMO_MUSIC_LANDSCAPE 0 + #define LV_DEMO_MUSIC_ROUND 0 + #define LV_DEMO_MUSIC_LARGE 0 + #define LV_DEMO_MUSIC_AUTO_PLAY 0 #endif /*--END OF LV_CONF_H--*/ From 045851f19ff19d1a44b2c70f59ef7555693760cc Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Thu, 13 Apr 2023 09:36:10 +1000 Subject: [PATCH 2/7] chore(tests): Update for LVGL 8.3 Also cleanup from #494 --- radio/src/tests/primitives_CN_480x272.png | Bin 9924 -> 0 bytes radio/src/tests/transparency_CN_480x272.png | Bin 9489 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 radio/src/tests/primitives_CN_480x272.png delete mode 100644 radio/src/tests/transparency_CN_480x272.png diff --git a/radio/src/tests/primitives_CN_480x272.png b/radio/src/tests/primitives_CN_480x272.png deleted file mode 100644 index 6e203fd984920d640a73ea229f89201dee0ee809..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9924 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 Xw1%vH(&=UVb{dG96BBkKM4I>S{%w`L diff --git a/radio/src/tests/transparency_CN_480x272.png b/radio/src/tests/transparency_CN_480x272.png deleted file mode 100644 index 8f792854acdcfd8fee5002736147ba071f8f8a93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9489 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 From 1c11189941717c6470b0b1314a24823eeb8a6685 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Tue, 17 Oct 2023 07:23:17 +1000 Subject: [PATCH 3/7] chore: Rebase cleanup --- .gitmodules | 2 +- radio/src/thirdparty/libopenui/thirdparty/CMakeLists.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index da779449f51..e4844a6aeb8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -14,4 +14,4 @@ [submodule "radio/src/thirdparty/libopenui/thirdparty/lvgl"] path = radio/src/thirdparty/libopenui/thirdparty/lvgl url = https://github.com/EdgeTX/lvgl.git - branch = release/v8.2 + branch = v8.3-patched diff --git a/radio/src/thirdparty/libopenui/thirdparty/CMakeLists.txt b/radio/src/thirdparty/libopenui/thirdparty/CMakeLists.txt index 303deb2c809..df5a7d727ec 100644 --- a/radio/src/thirdparty/libopenui/thirdparty/CMakeLists.txt +++ b/radio/src/thirdparty/libopenui/thirdparty/CMakeLists.txt @@ -20,6 +20,7 @@ set(LVGL_SOURCES_MINIMAL draw/sw/lv_draw_sw_gradient.c draw/sw/lv_draw_sw.c draw/sw/lv_draw_sw_blend.c + draw/sw/lv_draw_sw_layer.c draw/sw/lv_draw_sw_letter.c draw/sw/lv_draw_sw_arc.c draw/sw/lv_draw_sw_polygon.c @@ -27,7 +28,10 @@ set(LVGL_SOURCES_MINIMAL draw/sw/lv_draw_sw_line.c draw/sw/lv_draw_sw_dither.c draw/sw/lv_draw_sw_rect.c + draw/sw/lv_draw_sw_transform.c + draw/lv_draw_layer.c draw/lv_draw_line.c + draw/lv_draw_transform.c draw/lv_draw.c draw/lv_img_buf.c draw/lv_draw_rect.c From e3b2bb288fb20bbeb2872e8dcaea5b2a5e3df476 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Fri, 20 Oct 2023 15:25:45 +1000 Subject: [PATCH 4/7] chore: lgvl submodule on correct branch --- radio/src/thirdparty/libopenui/thirdparty/lvgl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/thirdparty/libopenui/thirdparty/lvgl b/radio/src/thirdparty/libopenui/thirdparty/lvgl index 9a414b1d48d..48cf9ec1406 160000 --- a/radio/src/thirdparty/libopenui/thirdparty/lvgl +++ b/radio/src/thirdparty/libopenui/thirdparty/lvgl @@ -1 +1 @@ -Subproject commit 9a414b1d48d2893133b6038ec80d59fb157aade4 +Subproject commit 48cf9ec1406ed3bce8a2a4bdbd84678df3503988 From a094aee29c49396d4cbb5ccf14baf35bdc90f776 Mon Sep 17 00:00:00 2001 From: philmoz Date: Sat, 21 Oct 2023 14:46:29 +1100 Subject: [PATCH 5/7] Rotate display from top down instead of bottom up. --- radio/src/targets/horus/lcd_driver.cpp | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/radio/src/targets/horus/lcd_driver.cpp b/radio/src/targets/horus/lcd_driver.cpp index 0d9949a06c2..6ffa7b16142 100644 --- a/radio/src/targets/horus/lcd_driver.cpp +++ b/radio/src/targets/horus/lcd_driver.cpp @@ -68,11 +68,9 @@ static void _copy_rotate_180(uint16_t* dst, uint16_t* src, const rect_t& copy_ar coord_t x1 = LCD_W - copy_area.w - copy_area.x; coord_t y1 = LCD_H - copy_area.h - copy_area.y; - auto total = copy_area.w * copy_area.h; - uint16_t* px_src = src + total - 2; + src += copy_area.w - 2; + dst += (y1 + copy_area.h - 1) * LCD_W + x1; - dst += y1 * LCD_W + x1; - for (auto line = 0; line < copy_area.h; line++) { // invert line into _line_buffer first (SRAM) @@ -80,27 +78,26 @@ static void _copy_rotate_180(uint16_t* dst, uint16_t* src, const rect_t& copy_ar auto line_end = px_dst + (copy_area.w & ~1); while (px_dst != line_end) { - uint32_t* px2_src = (uint32_t*)px_src; - uint32_t* px2_dst = (uint32_t*)px_dst; + uint32_t* px2_src = (uint32_t*)src; - uint32_t px = ((*px2_src & 0xFFFF0000) >> 16) | ((*px2_src & 0xFFFF) << 16); - *px2_dst = px; + *((uint32_t*)px_dst) = ((*px2_src & 0xFFFF0000) >> 16) | ((*px2_src & 0xFFFF) << 16); - px_src -= 2; + src -= 2; px_dst += 2; } if (copy_area.w & 1) { - *px_dst = *(px_src+1); - px_src--; + *px_dst = *(src+1); + src--; } // ... and DMA back into SDRAM DMACopyBitmap(dst, copy_area.w, 1, 0, 0, _line_buffer, copy_area.w, 1, 0, 0, copy_area.w, 1); - - dst += LCD_W; + + src += copy_area.w * 2; + dst -= LCD_W; } } From 3cad891170f1fea74fd17748d169eb4a2ffc7e00 Mon Sep 17 00:00:00 2001 From: philmoz Date: Tue, 31 Oct 2023 16:45:12 +1100 Subject: [PATCH 6/7] Fixes to work with constant styles in LVGL 8.3. --- .../src/gui/colorlcd/themes/etx_lv_theme.cpp | 83 ++++++++++--------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/radio/src/gui/colorlcd/themes/etx_lv_theme.cpp b/radio/src/gui/colorlcd/themes/etx_lv_theme.cpp index daa0d75d435..1b251e7c25d 100644 --- a/radio/src/gui/colorlcd/themes/etx_lv_theme.cpp +++ b/radio/src/gui/colorlcd/themes/etx_lv_theme.cpp @@ -52,7 +52,6 @@ static lv_theme_t theme; #define LV_STYLE_CONST_SINGLE_INIT(var_name, prop, value) \ const lv_style_t var_name = {.v_p = {.value1 = {.num = value}}, \ .prop1 = prop, \ - .is_const = 0, \ .has_group = 1 << ((prop & 0x1FF) >> 4), \ .prop_cnt = 1} @@ -60,10 +59,9 @@ static lv_theme_t theme; // Copied from lv_style.h and modified to compile with ARM GCC C++ #define LV_STYLE_CONST_MULTI_INIT(var_name, prop_array) \ const lv_style_t var_name = {.v_p = {.const_props = prop_array}, \ - .prop1 = 0, \ - .is_const = 1, \ + .prop1 = LV_STYLE_PROP_ANY, \ .has_group = 0xFF, \ - .prop_cnt = 0} + .prop_cnt = (sizeof(prop_array) / sizeof((prop_array)[0]))} // Opacity LV_STYLE_CONST_SINGLE_INIT(bg_opacity_transparent, LV_STYLE_BG_OPA, @@ -286,33 +284,41 @@ class EdgeTxStyles lv_style_t font_std; lv_style_t font_bold; - EdgeTxStyles() + EdgeTxStyles() {} + + void init() { - // Colors - for (int i = DEFAULT_COLOR_INDEX; i < LCD_COLOR_COUNT; i += 1) { - lv_style_init(&bg_color[i]); - lv_style_init(&txt_color[i]); + if (!initDone) { + initDone = true; + + // Colors + for (int i = DEFAULT_COLOR_INDEX; i < LCD_COLOR_COUNT; i += 1) { + lv_style_init(&bg_color[i]); + lv_style_init(&txt_color[i]); + } + lv_style_init(&border_color_secondary1); + lv_style_init(&border_color_secondary2); + lv_style_init(&border_color_focus); + + lv_style_init(&bg_color_grey); + lv_style_set_bg_color(&bg_color_grey, lv_palette_main(LV_PALETTE_GREY)); + lv_style_init(&bg_color_white); + lv_style_set_bg_color(&bg_color_white, lv_color_white()); + lv_style_init(&bg_color_black); + lv_style_set_bg_color(&bg_color_black, lv_color_black()); + lv_style_init(&fg_color_black); + lv_style_set_text_color(&fg_color_black, lv_color_black()); + lv_style_init(&border_color_black); + lv_style_set_border_color(&border_color_black, lv_color_black()); + + // Fonts + lv_style_init(&font_std); + lv_style_set_text_font(&font_std, getFont(FONT(STD))); + lv_style_init(&font_bold); + lv_style_set_text_font(&font_bold, getFont(FONT(BOLD))); + + applyColors(); } - lv_style_init(&border_color_secondary1); - lv_style_init(&border_color_secondary2); - lv_style_init(&border_color_focus); - - lv_style_init(&bg_color_grey); - lv_style_set_bg_color(&bg_color_grey, lv_palette_main(LV_PALETTE_GREY)); - lv_style_init(&bg_color_white); - lv_style_set_bg_color(&bg_color_white, lv_color_white()); - lv_style_init(&bg_color_black); - lv_style_set_bg_color(&bg_color_black, lv_color_black()); - lv_style_init(&fg_color_black); - lv_style_set_text_color(&fg_color_black, lv_color_black()); - lv_style_init(&border_color_black); - lv_style_set_border_color(&border_color_black, lv_color_black()); - - // Fonts - lv_style_init(&font_std); - lv_style_set_text_font(&font_std, getFont(FONT(STD))); - lv_style_init(&font_bold); - lv_style_set_text_font(&font_bold, getFont(FONT(BOLD))); } void applyColors() @@ -334,11 +340,12 @@ class EdgeTxStyles } protected: + bool initDone = false; }; -static EdgeTxStyles* styles; +static EdgeTxStyles mainStyles; static EdgeTxStyles* previewStyles; -static EdgeTxStyles* mainStyles; +static EdgeTxStyles* styles = &mainStyles; /********************** * GLOBAL FUNCTIONS @@ -355,11 +362,7 @@ lv_theme_t* etx_lv_theme_init(lv_disp_t* disp, lv_color_t color_primary, theme.font_large = font; theme.flags = 0; - if (!styles) { - styles = new EdgeTxStyles(); - mainStyles = styles; - } - styles->applyColors(); + styles->init(); if (disp == NULL || lv_disp_get_theme(disp) == &theme) lv_obj_report_style_change(NULL); @@ -374,7 +377,7 @@ void usePreviewStyle() styles->applyColors(); } -void useMainStyle() { styles = mainStyles; } +void useMainStyle() { styles = &mainStyles; } /********************** * Custom object creation @@ -569,8 +572,7 @@ void etx_switch_constructor(const lv_obj_class_t* class_p, lv_obj_t* obj) void etx_slider_constructor(const lv_obj_class_t* class_p, lv_obj_t* obj) { - etx_add_colors_and_opacity(obj, LV_PART_MAIN, - COLOR_THEME_SECONDARY1_INDEX, + etx_add_colors_and_opacity(obj, LV_PART_MAIN, COLOR_THEME_SECONDARY1_INDEX, COLOR_THEME_PRIMARY2_INDEX); lv_obj_add_style(obj, (lv_style_t*)&circle, LV_PART_MAIN); lv_obj_add_style(obj, &styles->bg_color[COLOR_THEME_FOCUS_INDEX], @@ -586,7 +588,8 @@ void etx_slider_constructor(const lv_obj_class_t* class_p, lv_obj_t* obj) lv_obj_add_style(obj, (lv_style_t*)&bg_opacity_cover, LV_PART_KNOB); lv_obj_add_style(obj, (lv_style_t*)&slider_knob, LV_PART_KNOB); lv_obj_add_style(obj, &styles->border_color_secondary1, LV_PART_KNOB); - lv_obj_add_style(obj, &styles->border_color_focus, LV_PART_KNOB | LV_STATE_FOCUSED); + lv_obj_add_style(obj, &styles->border_color_focus, + LV_PART_KNOB | LV_STATE_FOCUSED); } void etx_btnmatrix_constructor(const lv_obj_class_t* class_p, lv_obj_t* obj) From fc750a7aaf3c58d521c0e8c5f829d064a7766112 Mon Sep 17 00:00:00 2001 From: philmoz Date: Tue, 31 Oct 2023 17:14:54 +1100 Subject: [PATCH 7/7] Update test images. --- radio/src/tests/primitives_EN_320x480.png | Bin 10346 -> 10140 bytes radio/src/tests/primitives_EN_480x272.png | Bin 9717 -> 9498 bytes radio/src/tests/transparency_EN_320x480.png | Bin 9859 -> 9759 bytes radio/src/tests/transparency_EN_480x272.png | Bin 9282 -> 9171 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/radio/src/tests/primitives_EN_320x480.png b/radio/src/tests/primitives_EN_320x480.png index 982541571dcb90a5854371cc5adcdff39340664e..2ef25205ae4d79007254e197c4c2e4b216808266 100644 GIT binary patch delta 5918 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

&^Ju%((k~H< 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 W6#whlIo|-bwQxaF%$X=+vb@7 diff --git a/radio/src/tests/transparency_EN_320x480.png b/radio/src/tests/transparency_EN_320x480.png index 520f04dee6c593e8f890a57b5be52c9941a9eb53..1fcce4de4b0d0fbba66f085bd507db5598673587 100644 GIT binary patch delta 5814 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 Q2Q1&5SqU*GqtJr?0dgAor~m)} delta 5866 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 diff --git a/radio/src/tests/transparency_EN_480x272.png b/radio/src/tests/transparency_EN_480x272.png index 8c78e936e67318d658109dbc9ce49d27623847ad..11f389fc56d82acfa53379f75019c94db8b432d3 100644 GIT binary patch delta 6117 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 J$7E>9{{bzaWXu2n delta 6363 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 M&6tyNA_>+07h%Qb?f?J)