diff --git a/Kconfig b/Kconfig
index 3c660a878a..3348a94f9d 100644
--- a/Kconfig
+++ b/Kconfig
@@ -1,4 +1,4 @@
-# Kconfig file for LVGL v9.3.0-dev
+# Kconfig file for LVGL v9.3.0
menu "LVGL configuration"
diff --git a/env_support/cmsis-pack/LVGL.lvgl.9.3.0-dev2.pack b/env_support/cmsis-pack/LVGL.lvgl.9.3.0.pack
similarity index 61%
rename from env_support/cmsis-pack/LVGL.lvgl.9.3.0-dev2.pack
rename to env_support/cmsis-pack/LVGL.lvgl.9.3.0.pack
index 6446a9db22..ed983a50cd 100644
Binary files a/env_support/cmsis-pack/LVGL.lvgl.9.3.0-dev2.pack and b/env_support/cmsis-pack/LVGL.lvgl.9.3.0.pack differ
diff --git a/env_support/cmsis-pack/LVGL.lvgl.pdsc b/env_support/cmsis-pack/LVGL.lvgl.pdsc
index 1249d535cd..442533222c 100644
--- a/env_support/cmsis-pack/LVGL.lvgl.pdsc
+++ b/env_support/cmsis-pack/LVGL.lvgl.pdsc
@@ -36,8 +36,8 @@
https://github.com/lvgl/lvgl.git
-
- - LVGL 9.3.0-dev
+
+ - LVGL 9.3.0
- See Change Log
@@ -280,6 +280,7 @@
+
@@ -293,6 +294,7 @@
+
@@ -306,6 +308,21 @@
+
+
+
+
+
+
+
+
+
+
+ Condition for NXP-G2D
+
+
+
+
@@ -319,6 +336,7 @@
+
@@ -332,6 +350,7 @@
+
@@ -345,6 +364,7 @@
+
@@ -358,6 +378,7 @@
+
@@ -368,7 +389,7 @@
-
+
LVGL (Light and Versatile Graphics Library) is a free and open-source graphics library providing everything you need to create an embedded GUI with easy-to-use graphical elements, beautiful visual effects and a low memory footprint.
@@ -429,12 +450,23 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -448,11 +480,12 @@
+
-
+
@@ -465,10 +498,12 @@
+
+
@@ -485,6 +520,7 @@
+
@@ -511,6 +547,7 @@
+
@@ -530,6 +567,7 @@
+
@@ -551,11 +589,12 @@
-
+
+
-
-
+
+
@@ -570,6 +609,7 @@
+
@@ -618,6 +658,7 @@
+
@@ -627,10 +668,13 @@
+
+
+
@@ -642,11 +686,12 @@
-
+
+
-
+
@@ -730,6 +775,19 @@
+
+ Add the display driver for FT81X
+
+
+
+
+
+/* use display driver for FT81X */
+#define LV_USE_FT81X 1
+
+
+
+
Add the display driver for ILI9341
@@ -892,6 +950,20 @@
+
+ Add the support for SDL2 OS APIs
+
+
+
+
+
+
+#define LV_USE_OS LV_OS_SDL2
+
+
+
+
+
Add a user customized (RT)OS support
@@ -963,6 +1035,24 @@
+
+ An hardware acceleration from NXP's G2D
+
+
+
+
+
+
+
+
+
+
+
+/*! \brief Use NXP's G2D on MPU platforms. */
+#define LV_USE_DRAW_G2D 1
+
+
+
An hardware acceleration from NXP-PXP
@@ -1079,11 +1169,13 @@
TSi's aka (Think Silicon) NemaGFX
+
+
-
+
@@ -1092,7 +1184,7 @@
-
+
@@ -1108,11 +1200,13 @@
TSi's aka (Think Silicon) NemaGFX
+
+
-
+
@@ -1121,7 +1215,7 @@
-
+
@@ -1136,11 +1230,13 @@
TSi's aka (Think Silicon) NemaGFX
+
+
-
+
@@ -1149,7 +1245,7 @@
-
+
@@ -1169,7 +1265,7 @@
-
+
@@ -1178,7 +1274,7 @@
-
+
@@ -1269,6 +1365,7 @@
+
@@ -1587,22 +1684,20 @@
-
-
-
+
@@ -1625,6 +1720,7 @@
+
@@ -1646,6 +1742,63 @@
+
+
+ Add XML UIs runtime
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/** Enable loading XML UIs runtime */
+#define LV_USE_XML 1
+
+
+
+
+
+
+
Add Built-in TTF decoder
@@ -1761,7 +1914,6 @@
-
@@ -1810,52 +1962,13 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -1908,9 +2021,6 @@
-
-
-
@@ -1918,40 +2028,15 @@
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1970,26 +2055,6 @@
#define LV_USE_DEMO_BENCHMARK 1
-
-
-
- Add the Flex layout demo
-
-
-
-
-
-
-
-
-
-
-
-
-/*! \brief enable the Flex layout demo */
-#define LV_USE_DEMO_FLEX_LAYOUT 1
-
-
@@ -2009,22 +2074,7 @@
-
- Add the Smart-phone like multi-language demo.
-
-
-
-
-
-
-
-/*! \brief enable the Smart-phone like multi-language demo */
-#define LV_USE_DEMO_MULTILANG 1
-
-
-
-
-
+
Add the music player demo
@@ -2040,21 +2090,6 @@
#define LV_USE_DEMO_MUSIC 1
-
-
-
- Add the demonstration for scroll settings
-
-
-
-
-
-
-
-/*! \brief enable the demonstration for scroll settings */
-#define LV_USE_DEMO_SCROLL 1
-
-
@@ -2070,24 +2105,9 @@
#define LV_USE_DEMO_STRESS 1
-
-
-
- Add the Widget transformation demo
-
-
-
-
-
-
-
-/*! \brief enable the Widget transformation demo */
-#define LV_USE_DEMO_TRANSFORM 1
-
-
-
+
Add the Vector graphic demo
@@ -2133,25 +2153,6 @@
-
- E-bike demo with Lottie animations
-
-
-
-
-
-
-
-
-
-
-
-/*! \brief E-bike demo with Lottie animations*/
-#define LV_USE_DEMO_EBIKE 1
-
-
-
-
diff --git a/env_support/cmsis-pack/LVGL.pidx b/env_support/cmsis-pack/LVGL.pidx
index 596cc5dc0f..7ea76ac1a4 100644
--- a/env_support/cmsis-pack/LVGL.pidx
+++ b/env_support/cmsis-pack/LVGL.pidx
@@ -2,8 +2,8 @@
LVGL
https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/
- 2024-10-31
+ 2025-06-02
-
+
diff --git a/env_support/cmsis-pack/README.md b/env_support/cmsis-pack/README.md
index 6b98762bee..660b3221a7 100644
--- a/env_support/cmsis-pack/README.md
+++ b/env_support/cmsis-pack/README.md
@@ -34,7 +34,9 @@ remove the misleading guide above this code segment.
#ifndef LV_CONF_H
#define LV_CONF_H
+#if defined(_RTE_)
#include "RTE_Components.h"
+#endif
...
```
4. Remove macro definitions for
@@ -56,6 +58,8 @@ remove the misleading guide above this code segment.
- LV_USE_DEMO_SCROLL
- LV_USE_DEMO_VECTOR_GRAPHIC
- LV_USE_DEMO_EBIKE
+ - LV_USE_DEMO_HIGH_RES
+ - LV_USE_DEMO_SMARTWATCH
- LV_USE_DRAW_VGLITE
- LV_USE_DRAW_VG_LITE
- LV_USE_PXP
@@ -78,6 +82,7 @@ remove the misleading guide above this code segment.
- LV_USE_ST7789
- LV_USE_ST7796
- LV_USE_ST_LTDC
+ - LV_USE_FT81X
- LV_USE_ILI9341
- LV_USE_RENESAS_GLCDC
- LV_USE_NEMA_GFX
@@ -85,7 +90,7 @@ remove the misleading guide above this code segment.
5. Update `LV_LOG_PRINTF` to `1` and `LV_LOG_LEVEL` to `LV_LOG_LEVEL_USER`
-6. Set `LV_FONT_MONTSERRAT_12`, ``LV_FONT_MONTSERRAT_20`, `LV_FONT_MONTSERRAT_24`, `LV_FONT_MONTSERRAT_26` and `LV_FONT_MONTSERRAT_16` to `1` (So Widgets and Benchmark can be compiled correctly, this is for improving the out of box experience.)
+6. Set `LV_FONT_MONTSERRAT_12`, `LV_FONT_MONTSERRAT_20`, `LV_FONT_MONTSERRAT_24`, `LV_FONT_MONTSERRAT_26` and `LV_FONT_MONTSERRAT_16` to `1` (So Widgets and Benchmark can be compiled correctly, this is for improving the out of box experience.)
7. Update macro `LV_ATTRIBUTE_MEM_ALIGN` and `LV_ATTRIBUTE_MEM_ALIGN_SIZE` to force a WORD alignment.
@@ -102,16 +107,16 @@ Make sure `LV_MEM_SIZE` is no less than `(128*1024U)`.
- \#define LV_USE_FS_POSIX 0
- \#define LV_USE_FS_WIN32 0
- \#define LV_USE_FS_FATFS 0
- - #define LV_USE_FS_LITTLEFS 0
- - #define LV_USE_FS_ARDUINO_ESP_LITTLEFS 0
- - #define LV_USE_FS_ARDUINO_SD 0
- - #define LV_USE_FS_MEMFS 0
+ - \#define LV_USE_FS_LITTLEFS 0
+ - \#define LV_USE_FS_ARDUINO_ESP_LITTLEFS 0
+ - \#define LV_USE_FS_ARDUINO_SD 0
+ - \#define LV_USE_FS_MEMFS 0
- \#define LV_USE_LODEPNG 0
- - #define LV_USE_LIBPNG 0
+ - \#define LV_USE_LIBPNG 0
- \#define LV_USE_BMP 0
- \#define LV_USE_RLE 0
- - #define LV_USE_TJPGD 0
- - #define LV_USE_LIBJPEG_TURBO 0
+ - \#define LV_USE_TJPGD 0
+ - \#define LV_USE_LIBJPEG_TURBO 0
- \#define LV_USE_GIF 0
- \#define LV_USE_BARCODE 0
- \#define LV_USE_QRCODE 0
@@ -119,7 +124,8 @@ Make sure `LV_MEM_SIZE` is no less than `(128*1024U)`.
- \#define LV_USE_TINY_TTF 0
- \#define LV_USE_RLOTTIE 0
- \#define LV_USE_FFMPEG 0
- - #define LV_USE_FONT_MANAGER 0
+ - \#define LV_USE_FONT_MANAGER 0
+ - \#define LV_USE_XML 0
9. update the definition of following macros: `LV_USE_VECTOR_GRAPHIC`, `LV_USE_THORVE_INTERNAL` and `LV_USE_THORVE_EXTERNAL` as
diff --git a/env_support/cmsis-pack/gen_pack.sh b/env_support/cmsis-pack/gen_pack.sh
index e62438703d..7b246af300 100755
--- a/env_support/cmsis-pack/gen_pack.sh
+++ b/env_support/cmsis-pack/gen_pack.sh
@@ -46,6 +46,7 @@ PACK_DIRS="
../../src
../../libs
../../demos
+ ../../xmls
../../env_support/pikascript
"
@@ -56,6 +57,7 @@ PACK_BASE_FILES="
../../README.md
../../lvgl.h
../../lv_version.h
+ ../../lvgl_private.h
lv_conf_cmsis.h
lv_cmsis_pack.txt
"
diff --git a/env_support/cmsis-pack/lv_conf_cmsis.h b/env_support/cmsis-pack/lv_conf_cmsis.h
index c31971e46b..8e5c400f4e 100644
--- a/env_support/cmsis-pack/lv_conf_cmsis.h
+++ b/env_support/cmsis-pack/lv_conf_cmsis.h
@@ -1,6 +1,6 @@
/**
* @file lv_conf.h
- * Configuration file for v9.3.0-dev
+ * Configuration file for v9.3.0
*/
/* clang-format off */
@@ -9,7 +9,9 @@
#ifndef LV_CONF_H
#define LV_CONF_H
+#if defined(_RTE_)
#include "RTE_Components.h"
+#endif
/* If you need to include anything here, do it inside the `__ASSEMBLY__` guard */
#if 0 && defined(__ASSEMBLY__)
@@ -104,26 +106,17 @@
/*=================
* OPERATING SYSTEM
*=================*/
-/** Select operating system to use. Possible options:
- * - LV_OS_NONE
- * - LV_OS_PTHREAD
- * - LV_OS_FREERTOS
- * - LV_OS_CMSIS_RTOS2
- * - LV_OS_RTTHREAD
- * - LV_OS_WINDOWS
- * - LV_OS_MQX
- * - LV_OS_CUSTOM */
#if LV_USE_OS == LV_OS_CUSTOM
#define LV_OS_CUSTOM_INCLUDE
#endif
#if LV_USE_OS == LV_OS_FREERTOS
- /*
- * Unblocking an RTOS task with a direct notification is 45% faster and uses less RAM
- * than unblocking a task using an intermediary object such as a binary semaphore.
- * RTOS task notifications can only be used when there is only one task that can be the recipient of the event.
- */
- #define LV_USE_FREERTOS_TASK_NOTIFY 1
+ /*
+ * Unblocking an RTOS task with a direct notification is 45% faster and uses less RAM
+ * than unblocking a task using an intermediary object such as a binary semaphore.
+ * RTOS task notifications can only be used when there is only one task that can be the recipient of the event.
+ */
+ #define LV_USE_FREERTOS_TASK_NOTIFY 1
#endif
/*========================
@@ -150,11 +143,26 @@
/** The target buffer size for simple layer chunks. */
#define LV_DRAW_LAYER_SIMPLE_BUF_SIZE (24 * 1024) /**< [bytes]*/
+/* Limit the max allocated memory for simple and transformed layers.
+ * It should be at least `LV_DRAW_LAYER_SIMPLE_BUF_SIZE` sized but if transformed layers are also used
+ * it should be enough to store the largest widget too (width x height x 4 area).
+ * Set it to 0 to have no limit. */
+#define LV_DRAW_LAYER_MAX_MEMORY 0 /**< No limit by default [bytes]*/
+
/** Stack size of drawing thread.
* NOTE: If FreeType or ThorVG is enabled, it is recommended to set it to 32KB or more.
*/
#define LV_DRAW_THREAD_STACK_SIZE (8 * 1024) /**< [bytes]*/
+/** Thread priority of the drawing task.
+ * Higher values mean higher priority.
+ * Can use values from lv_thread_prio_t enum in lv_os.h: LV_THREAD_PRIO_LOWEST,
+ * LV_THREAD_PRIO_LOW, LV_THREAD_PRIO_MID, LV_THREAD_PRIO_HIGH, LV_THREAD_PRIO_HIGHEST
+ * Make sure the priority value aligns with the OS-specific priority levels.
+ * On systems with limited priority levels (e.g., FreeRTOS), a higher value can improve
+ * rendering performance but might cause other tasks to starve. */
+#define LV_DRAW_THREAD_PRIO LV_THREAD_PRIO_HIGH
+
#define LV_USE_DRAW_SW 1
#if LV_USE_DRAW_SW == 1
/*
@@ -164,15 +172,21 @@
* - bitmaps with transparency may use ARGB8888
*/
#define LV_DRAW_SW_SUPPORT_RGB565 1
+ #define LV_DRAW_SW_SUPPORT_RGB565_SWAPPED 1
#define LV_DRAW_SW_SUPPORT_RGB565A8 1
#define LV_DRAW_SW_SUPPORT_RGB888 1
#define LV_DRAW_SW_SUPPORT_XRGB8888 1
#define LV_DRAW_SW_SUPPORT_ARGB8888 1
+ #define LV_DRAW_SW_SUPPORT_ARGB8888_PREMULTIPLIED 1
#define LV_DRAW_SW_SUPPORT_L8 1
#define LV_DRAW_SW_SUPPORT_AL88 1
#define LV_DRAW_SW_SUPPORT_A8 1
#define LV_DRAW_SW_SUPPORT_I1 1
+ /* The threshold of the luminance to consider a pixel as
+ * active in indexed color format */
+ #define LV_DRAW_SW_I1_LUM_THRESHOLD 127
+
/** Set number of draw units.
* - > 1 requires operating system to be enabled in `LV_USE_OS`.
* - > 1 means multiple threads will render the screen in parallel. */
@@ -217,15 +231,21 @@
/** Enable drawing complex gradients in software: linear at an angle, radial or conical */
#define LV_USE_DRAW_SW_COMPLEX_GRADIENTS 0
+
#endif
/*Use TSi's aka (Think Silicon) NemaGFX */
#if LV_USE_NEMA_GFX
- #define LV_NEMA_GFX_HAL_INCLUDE
+ /** Select which NemaGFX HAL to use. Possible options:
+ * - LV_NEMA_HAL_CUSTOM
+ * - LV_NEMA_HAL_STM32 */
+ #define LV_USE_NEMA_HAL LV_NEMA_HAL_CUSTOM
+ #if LV_USE_NEMA_HAL == LV_NEMA_HAL_STM32
+ #define LV_NEMA_STM32_HAL_INCLUDE
+ #endif
/*Enable Vector Graphics Operations. Available only if NemaVG library is present*/
#define LV_USE_NEMA_VG 0
-
#if LV_USE_NEMA_VG
/*Define application's resolution used for VG related buffer allocation */
#define LV_NEMA_GFX_MAX_RESX 800
@@ -250,11 +270,12 @@
/** Enable VGLite asserts. */
#define LV_USE_VGLITE_ASSERT 0
+
+ /** Enable VGLite error checks. */
+ #define LV_USE_VGLITE_CHECK_ERROR 0
#endif
/** Use NXP's PXP on iMX RTxxx platforms. */
-#define LV_USE_PXP 0
-
#if LV_USE_PXP
/** Use PXP for drawing.*/
#define LV_USE_DRAW_PXP 1
@@ -271,6 +292,21 @@
#define LV_USE_PXP_ASSERT 0
#endif
+/** Use NXP's G2D on MPU platforms. */
+#if LV_USE_DRAW_G2D
+ /** Maximum number of buffers that can be stored for G2D draw unit.
+ * Includes the frame buffers and assets. */
+ #define LV_G2D_HASH_TABLE_SIZE 50
+
+ #if LV_USE_OS
+ /** Use additional draw thread for G2D processing.*/
+ #define LV_USE_G2D_DRAW_THREAD 1
+ #endif
+
+ /** Enable G2D asserts. */
+ #define LV_USE_G2D_ASSERT 0
+#endif
+
/** Use VG-Lite GPU. */
#if LV_USE_DRAW_VG_LITE
/** Enable VG-Lite custom external 'gpu_init()' function */
@@ -428,6 +464,9 @@
/** Add `id` field to `lv_obj_t` */
#define LV_USE_OBJ_ID 0
+/** Enable support widget names*/
+#define LV_USE_OBJ_NAME 0
+
/** Automatically assign an ID when obj is created */
#define LV_OBJ_ID_AUTO_ASSIGN LV_USE_OBJ_ID
@@ -469,6 +508,10 @@
#define LV_VG_LITE_THORVG_THREAD_RENDER 0
#endif
+/* Enable the multi-touch gesture recognition feature */
+/* Gesture recognition requires the use of floats */
+#define LV_USE_GESTURE_RECOGNITION 0
+
/*=====================
* COMPILER SETTINGS
*====================*/
@@ -517,7 +560,9 @@
#define LV_USE_MATRIX 0
/** Include `lvgl_private.h` in `lvgl.h` to access internal data and functions by default */
-#define LV_USE_PRIVATE_API 0
+#ifndef LV_USE_PRIVATE_API
+ #define LV_USE_PRIVATE_API 0
+#endif
/*==================
* FONT USAGE
@@ -550,8 +595,10 @@
/* Demonstrate special features */
#define LV_FONT_MONTSERRAT_28_COMPRESSED 0 /**< bpp = 3 */
#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /**< Hebrew, Arabic, Persian letters and all their forms */
-#define LV_FONT_SOURCE_HAN_SANS_SC_14_CJK 0 /**< 1000 most common CJK radicals */
-#define LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 0 /**< 1000 most common CJK radicals */
+#define LV_FONT_SIMSUN_14_CJK 0 /**< 1000 most common CJK radicals */
+#define LV_FONT_SIMSUN_16_CJK 0 /**< 1000 most common CJK radicals */
+#define LV_FONT_SOURCE_HAN_SANS_SC_14_CJK 0 /**< 1338 most common CJK radicals */
+#define LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 0 /**< 1338 most common CJK radicals */
/** Pixel perfect monospaced fonts */
#define LV_FONT_UNSCII_8 0
@@ -631,7 +678,7 @@
/*==================
* WIDGETS
*================*/
-/* Documentation for widgets can be found here: https://docs.lvgl.io/latest/en/html/widgets/index.html . */
+/* Documentation for widgets can be found here: https://docs.lvgl.io/master/details/widgets/index.html . */
/** 1: Causes these widgets to be given default values at creation time.
* - lv_buttonmatrix_t: Get default maps: {"Btn1", "Btn2", "Btn3", "\n", "Btn4", "Btn5", ""}, else map not set.
@@ -731,10 +778,12 @@
#define LV_USE_WIN 1
+#define LV_USE_3DTEXTURE 0
+
/*==================
* THEMES
*==================*/
-/* Documentation for themes can be found here: https://docs.lvgl.io/master/overview/style.html#themes . */
+/* Documentation for themes can be found here: https://docs.lvgl.io/master/details/common-widget-features/styles/style.html#themes . */
/** A simple, impressive and very complete theme */
#define LV_USE_THEME_DEFAULT 1
@@ -758,7 +807,7 @@
/*==================
* LAYOUTS
*==================*/
-/* Documentation for layouts can be found here: https://docs.lvgl.io/master/layouts/index.html . */
+/* Documentation for layouts can be found here: https://docs.lvgl.io/master/details/common-widget-features/layouts/index.html . */
/** A layout similar to Flexbox in CSS. */
#define LV_USE_FLEX 1
@@ -769,58 +818,70 @@
/*====================
* 3RD PARTS LIBRARIES
*====================*/
-/* Documentation for libraries can be found here: https://docs.lvgl.io/master/libs/index.html . */
+/* Documentation for libraries can be found here: https://docs.lvgl.io/master/details/libs/index.html . */
/* File system interfaces for common APIs */
-/** Setting a default driver letter allows skipping the driver prefix in filepaths. */
+/** Setting a default driver letter allows skipping the driver prefix in filepaths.
+ * Documentation about how to use the below driver-identifier letters can be found at
+ * https://docs.lvgl.io/master/details/main-modules/fs.html#lv-fs-identifier-letters . */
#define LV_FS_DEFAULT_DRIVER_LETTER '\0'
/** API for fopen, fread, etc. */
#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_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (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() */
#endif
/** API for open, read, etc. */
#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_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (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() */
#endif
/** API for CreateFile, ReadFile, etc. */
#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-case driver-identifier letter for this driver (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
/** API for FATFS (needs to be added separately). Uses f_open, f_read, etc. */
#if LV_USE_FS_FATFS
- #define LV_FS_FATFS_LETTER '\0' /**< Set an upper cased letter on which the drive will accessible (e.g. 'A') */
+ #define LV_FS_FATFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */
+ #define LV_FS_FATFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */
#define LV_FS_FATFS_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */
#endif
/** API for memory-mapped file access. */
#if LV_USE_FS_MEMFS
- #define LV_FS_MEMFS_LETTER '\0' /**< Set an upper cased letter on which the drive will accessible (e.g. 'A') */
+ #define LV_FS_MEMFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */
#endif
/** API for LittleFs. */
#if LV_USE_FS_LITTLEFS
- #define LV_FS_LITTLEFS_LETTER '\0' /**< Set an upper cased letter on which the drive will accessible (e.g. 'A') */
+ #define LV_FS_LITTLEFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */
+ #define LV_FS_LITTLEFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */
#endif
/** API for Arduino LittleFs. */
#if LV_USE_FS_ARDUINO_ESP_LITTLEFS
- #define LV_FS_ARDUINO_ESP_LITTLEFS_LETTER '\0' /**< Set an upper cased letter on which the drive will accessible (e.g. 'A') */
+ #define LV_FS_ARDUINO_ESP_LITTLEFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */
+ #define LV_FS_ARDUINO_ESP_LITTLEFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */
#endif
/** API for Arduino Sd. */
#if LV_USE_FS_ARDUINO_SD
- #define LV_FS_ARDUINO_SD_LETTER '\0' /**< Set an upper cased letter on which the drive will accessible (e.g. 'A') */
+ #define LV_FS_ARDUINO_SD_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */
+ #define LV_FS_ARDUINO_SD_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */
+#endif
+
+/** API for UEFI */
+#define LV_USE_FS_UEFI 0
+#if LV_USE_FS_UEFI
+ #define LV_FS_UEFI_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */
#endif
/** GIF decoder library */
@@ -851,7 +912,6 @@
/** Enable Vector Graphic APIs
* - Requires `LV_USE_MATRIX = 1` */
-/*Enable Vector Graphic APIs*/
#ifndef LV_USE_VECTOR_GRAPHIC
# define LV_USE_VECTOR_GRAPHIC 0
@@ -883,21 +943,22 @@
#if LV_USE_FFMPEG
/** Dump input information to stderr */
#define LV_FFMPEG_DUMP_FORMAT 0
+ /** Use lvgl file path in FFmpeg Player widget
+ * You won't be able to open URLs after enabling this feature.
+ * Note that FFmpeg image decoder will always use lvgl file system. */
+ #define LV_FFMPEG_PLAYER_USE_LV_FS 0
#endif
/*==================
* OTHERS
*==================*/
-/* Documentation for several of the below items can be found here: https://docs.lvgl.io/master/others/index.html . */
-
-/** 1: Enable API to take snapshot for object */
-#define LV_USE_SNAPSHOT 0
+/* Documentation for several of the below items can be found here: https://docs.lvgl.io/master/details/auxiliary-modules/index.html . */
/** 1: Enable system monitor component */
#define LV_USE_SYSMON 0
#if LV_USE_SYSMON
/** Get the idle percentage. E.g. uint32_t my_get_idle(void); */
- #define LV_SYSMON_GET_IDLE lv_timer_get_idle
+ #define LV_SYSMON_GET_IDLE lv_os_get_idle_percent
/** 1: Show CPU usage and FPS count.
* - Requires `LV_USE_SYSMON = 1` */
@@ -926,6 +987,7 @@
#if LV_USE_PROFILER_BUILTIN
/** Default profiler trace buffer size */
#define LV_PROFILER_BUILTIN_BUF_SIZE (16 * 1024) /**< [bytes] */
+ #define LV_PROFILER_BUILTIN_DEFAULT_ENABLE 1
#endif
/** Header to include for profiler */
@@ -972,6 +1034,9 @@
/*Enable cache profiler*/
#define LV_PROFILER_CACHE 1
+
+ /*Enable event profiler*/
+ #define LV_PROFILER_EVENT 1
#endif
/** 1: Enable an observer pattern implementation */
@@ -1004,15 +1069,25 @@
#define LV_FILE_EXPLORER_QUICK_ACCESS 1
#endif
-/** 1: Enable Font manager
- * - Requires: LV_USE_FREETYPE */
+/** 1: Enable Font manager */
#if LV_USE_FONT_MANAGER
-/*Font manager name max length*/
+/**Font manager name max length*/
#define LV_FONT_MANAGER_NAME_MAX_LEN 32
#endif
+/** Enable emulated input devices, time emulation, and screenshot compares. */
+#define LV_USE_TEST 0
+#if LV_USE_TEST
+
+/** Enable `lv_test_screenshot_compare`.
+ * Requires libpng and a few MB of extra RAM. */
+#define LV_USE_TEST_SCREENSHOT_COMPARE 0
+#endif /*LV_USE_TEST*/
+
+/*1: Enable color filter style*/
+#define LV_USE_COLOR_FILTER 0
/*==================
* DEVICES
*==================*/
@@ -1053,6 +1128,7 @@
#define LV_LINUX_FBDEV_RENDER_MODE LV_DISPLAY_RENDER_MODE_PARTIAL
#define LV_LINUX_FBDEV_BUFFER_COUNT 0
#define LV_LINUX_FBDEV_BUFFER_SIZE 60
+ #define LV_LINUX_FBDEV_MMAP 1
#endif
/** Use Nuttx to open window and handle touchscreen */
@@ -1061,6 +1137,9 @@
#if LV_USE_NUTTX
#define LV_USE_NUTTX_INDEPENDENT_IMAGE_HEAP 0
+ /** Use independent image heap for default draw buffer */
+ #define LV_NUTTX_DEFAULT_DRAW_BUF_USE_INDEPENDENT_IMAGE_HEAP 0
+
#define LV_USE_NUTTX_LIBUV 0
/** Use Nuttx custom init API to open window and handle touchscreen */
@@ -1075,8 +1154,22 @@
/** Driver for /dev/input */
#define LV_USE_NUTTX_TOUCHSCREEN 0
+
+ /*Touchscreen cursor size in pixels(<=0: disable cursor)*/
+ #define LV_NUTTX_TOUCHSCREEN_CURSOR_SIZE 0
#endif
+/** Driver for /dev/dri/card */
+#if LV_USE_LINUX_DRM
+
+ /* Use the MESA GBM library to allocate DMA buffers that can be
+ * shared across sub-systems and libraries using the Linux DMA-BUF API.
+ * The GBM library aims to provide a platform independent memory management system
+ * it supports the major GPU vendors - This option requires linking with libgbm */
+ #define LV_LINUX_DRM_GBM_BUFFERS 0
+#endif
+
+
/** Driver for evdev input devices */
#define LV_USE_EVDEV 0
@@ -1094,9 +1187,11 @@
#endif
#endif
-/* Drivers for LCD devices connected via SPI/parallel port */
-#define LV_USE_GENERIC_MIPI (LV_USE_ST7735 | LV_USE_ST7789 | LV_USE_ST7796 | LV_USE_ILI9341)
-
+#if (LV_USE_ST7735 | LV_USE_ST7789 | LV_USE_ST7796 | LV_USE_ILI9341)
+ #define LV_USE_GENERIC_MIPI 1
+#else
+ #define LV_USE_GENERIC_MIPI 0
+#endif
/** Driver for ST LTDC */
#if LV_USE_ST_LTDC
@@ -1104,6 +1199,13 @@
#define LV_ST_LTDC_USE_DMA2D_FLUSH 0
#endif
+/** LVGL UEFI backend */
+#define LV_USE_UEFI 0
+#if LV_USE_UEFI
+ #define LV_USE_UEFI_INCLUDE "myefi.h" /**< Header that hides the actual framework (EDK2, gnu-efi, ...) */
+ #define LV_UEFI_USE_MEMORY_SERVICES 0 /**< Use the memory functions from the boot services table */
+#endif
+
/** Use OpenGL to open window on PC and handle mouse and keyboard */
#define LV_USE_OPENGLES 0
#if LV_USE_OPENGLES
@@ -1116,31 +1218,42 @@
#define LV_QNX_BUF_COUNT 1 /**< 1 or 2 */
#endif
-/*==================
-* EXAMPLES
-*==================*/
+/*=====================
+* BUILD OPTIONS
+*======================*/
/** Enable examples to be built with the library. */
#define LV_BUILD_EXAMPLES 1
+/** Build the demos */
+#define LV_BUILD_DEMOS 1
+
+
/*===================
* DEMO USAGE
====================*/
-/** Music player demo */
-#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
-#endif
+#if LV_BUILD_DEMOS
+
+ /** Music player demo */
+ #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
+ #endif
+
+ #if LV_USE_DEMO_BENCHMARK
+ /** Use fonts where bitmaps are aligned 16 byte and has Nx16 byte stride */
+ #define LV_DEMO_BENCHMARK_ALIGNED_FONTS 0
+ #endif
-/*E-bike demo with Lottie animations (if LV_USE_LOTTIE is enabled)*/
-#define LV_USE_DEMO_EBIKE 0
-#if LV_USE_DEMO_EBIKE
- #define LV_DEMO_EBIKE_PORTRAIT 0 /*0: for 480x270..480x320, 1: for 480x800..720x1280*/
#endif
+/*---------------------------
+ * Demos from lvgl/lv_demos
+ ---------------------------*/
+
/*--END OF LV_CONF_H--*/
diff --git a/library.json b/library.json
index 729961857b..7bd96af23b 100644
--- a/library.json
+++ b/library.json
@@ -1,6 +1,6 @@
{
"name": "lvgl",
- "version": "9.3.0-dev",
+ "version": "9.3.0",
"keywords": "graphics, gui, embedded, tft, lvgl",
"description": "Graphics library to create embedded GUI with easy-to-use graphical elements, beautiful visual effects and low memory footprint. It offers anti-aliasing, opacity, and animations using only one frame buffer.",
"repository": {
diff --git a/library.properties b/library.properties
index e57fd71dbd..911743009d 100644
--- a/library.properties
+++ b/library.properties
@@ -1,5 +1,5 @@
name=lvgl
-version=9.3.0-dev
+version=9.3.0
author=kisvegabor
maintainer=kisvegabor,embeddedt,pete-pjb
sentence=Full-featured Graphics Library for Embedded Systems
diff --git a/lv_conf_template.h b/lv_conf_template.h
index edf1da0884..9afdf2341f 100644
--- a/lv_conf_template.h
+++ b/lv_conf_template.h
@@ -1,6 +1,6 @@
/**
* @file lv_conf.h
- * Configuration file for v9.3.0-dev
+ * Configuration file for v9.3.0
*/
/*
diff --git a/lv_version.h b/lv_version.h
index 6aa02efb6f..8bbd5506ef 100644
--- a/lv_version.h
+++ b/lv_version.h
@@ -9,6 +9,6 @@
#define LVGL_VERSION_MAJOR 9
#define LVGL_VERSION_MINOR 3
#define LVGL_VERSION_PATCH 0
-#define LVGL_VERSION_INFO "dev"
+#define LVGL_VERSION_INFO ""
#endif /* LVGL_VERSION_H */
diff --git a/src/draw/sw/arm2d/lv_draw_sw_arm2d.h b/src/draw/sw/arm2d/lv_draw_sw_arm2d.h
index f1a69765ad..3fa42677da 100644
--- a/src/draw/sw/arm2d/lv_draw_sw_arm2d.h
+++ b/src/draw/sw/arm2d/lv_draw_sw_arm2d.h
@@ -18,6 +18,8 @@ extern "C" {
#include "../../../lv_conf_internal.h"
#include "../../../misc/lv_area_private.h"
+#include "../../../draw/lv_draw_private.h"
+#include "../../../draw/lv_draw_image_private.h"
#if LV_USE_DRAW_ARM2D_SYNC
@@ -175,11 +177,11 @@ static inline lv_result_t lv_draw_sw_image_helium(
const lv_area_t * coords,
int32_t src_stride,
const lv_area_t * des_area,
- lv_draw_task_t * draw_task,
+ lv_draw_task_t * t,
const lv_draw_image_dsc_t * draw_dsc)
{
lv_result_t result = LV_RESULT_INVALID;
- lv_layer_t * layer = draw_task->target_layer;
+ lv_layer_t * layer = t->target_layer;
lv_color_format_t des_cf = layer->color_format;
static bool arm_2d_initialized = false;
@@ -192,19 +194,27 @@ static inline lv_result_t lv_draw_sw_image_helium(
if (!is_transform) {
break;
}
+ #if ARM_2D_VERSION < 10202ul
if(draw_dsc->scale_x != draw_dsc->scale_y) {
break;
}
+ #endif
/* filter the unsupported colour format combination */
if((LV_COLOR_FORMAT_RGB565 == des_cf)
&& !( (LV_COLOR_FORMAT_RGB565 == src_cf)
- || (LV_COLOR_FORMAT_RGB565A8 == src_cf))) {
+ || (LV_COLOR_FORMAT_RGB565A8 == src_cf)
+ #if __ARM_2D_CFG_SUPPORT_CCCA8888_IMPLICIT_CONVERSION__ && ARM_2D_VERSION > 10201ul
+ || (LV_COLOR_FORMAT_ARGB8888 == src_cf)
+ || (LV_COLOR_FORMAT_XRGB8888 == src_cf)
+ #endif
+ || (LV_COLOR_FORMAT_A8 == src_cf))) {
break;
}
- #if 0 /* a temporary patch */
+ #if ARM_2D_VERSION > 10201ul
if((LV_COLOR_FORMAT_XRGB8888 == des_cf)
&& !( (LV_COLOR_FORMAT_ARGB8888 == src_cf)
- || (LV_COLOR_FORMAT_XRGB8888 == src_cf))) {
+ || (LV_COLOR_FORMAT_XRGB8888 == src_cf)
+ || (LV_COLOR_FORMAT_A8 == src_cf))) {
break;
}
#else
@@ -218,7 +228,7 @@ static inline lv_result_t lv_draw_sw_image_helium(
/* ------------- prepare parameters for arm-2d APIs - BEGIN --------- */
lv_area_t blend_area;
- if(!lv_area_intersect(&blend_area, des_area, draw_task->clip_area)) {
+ if(!lv_area_intersect(&blend_area, des_area, &t->clip_area)) {
break;
}
@@ -268,8 +278,8 @@ static inline lv_result_t lv_draw_sw_image_helium(
target_region = (arm_2d_region_t) {
.tLocation = {
- .iX = (int16_t)(coords->x1 - draw_task->clip_area->x1),
- .iY = (int16_t)(coords->y1 - draw_task->clip_area->y1),
+ .iX = (int16_t)(coords->x1 - t->clip_area.x1),
+ .iY = (int16_t)(coords->y1 - t->clip_area.y1),
},
.tSize = src_size,
};
@@ -289,12 +299,12 @@ static inline lv_result_t lv_draw_sw_image_helium(
clip_region = (arm_2d_region_t) {
.tLocation = {
- .iX = (int16_t)(draw_task->clip_area->x1 - layer->buf_area.x1),
- .iY = (int16_t)(draw_task->clip_area->y1 - layer->buf_area.y1),
+ .iX = (int16_t)(t->clip_area.x1 - layer->buf_area.x1),
+ .iY = (int16_t)(t->clip_area.y1 - layer->buf_area.y1),
},
.tSize = {
- .iWidth = (int16_t)lv_area_get_width(draw_task->clip_area),
- .iHeight = (int16_t)lv_area_get_height(draw_task->clip_area),
+ .iWidth = (int16_t)lv_area_get_width(&t->clip_area),
+ .iHeight = (int16_t)lv_area_get_height(&t->clip_area),
},
};
@@ -318,13 +328,21 @@ static inline lv_result_t lv_draw_sw_image_helium(
.pchBuffer = (uint8_t *)src_buf,
};
+ #if ARM_2D_VERSION > 10201ul
+ static const bool bIsNewFrame = true;
+ arm_2d_point_float_t source_center, target_center;
+ source_center.fX = draw_dsc->pivot.x;
+ source_center.fY = draw_dsc->pivot.y;
+ target_center.fX = target_region.tLocation.iX + draw_dsc->pivot.x;
+ target_center.fY = target_region.tLocation.iY + draw_dsc->pivot.y;
+ #else
static arm_2d_location_t source_center, target_center;
source_center.iX = draw_dsc->pivot.x;
source_center.iY = draw_dsc->pivot.y;
target_center = target_region.tLocation;
target_center.iX += draw_dsc->pivot.x;
target_center.iY += draw_dsc->pivot.y;
-
+ #endif
if(LV_COLOR_FORMAT_A8 == src_cf) {
source_tile.tInfo.bHasEnforcedColour = true;
@@ -332,6 +350,21 @@ static inline lv_result_t lv_draw_sw_image_helium(
if(LV_COLOR_FORMAT_RGB565 == des_cf) {
+ #if ARM_2D_VERSION > 10201ul
+ arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_xy(
+ NULL,
+ &source_tile,
+ &target_tile,
+ NULL,
+ source_center,
+ ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
+ draw_dsc->scale_x / 256.0f,
+ draw_dsc->scale_y / 256.0f,
+ lv_color_to_u16(draw_dsc->recolor),
+ opa,
+ &target_center
+ );
+ #else
arm_2d_rgb565_fill_colour_with_mask_opacity_and_transform(
&source_tile,
&target_tile,
@@ -343,9 +376,26 @@ static inline lv_result_t lv_draw_sw_image_helium(
opa,
&target_center
);
-
+ #endif
}
else if(LV_COLOR_FORMAT_XRGB8888 == des_cf) {
+ #if ARM_2D_VERSION > 10201ul
+
+ arm_2dp_cccn888_fill_colour_with_mask_opacity_and_transform_xy(
+ NULL,
+ &source_tile,
+ &target_tile,
+ NULL,
+ source_center,
+ ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
+ draw_dsc->scale_x / 256.0f,
+ draw_dsc->scale_y / 256.0f,
+ lv_color_to_int(draw_dsc->recolor),
+ opa,
+ &target_center
+ );
+
+ #else
arm_2d_cccn888_fill_colour_with_mask_opacity_and_transform(
&source_tile,
&target_tile,
@@ -357,6 +407,7 @@ static inline lv_result_t lv_draw_sw_image_helium(
opa,
&target_center
);
+ #endif
}
else {
break;
@@ -377,6 +428,23 @@ static inline lv_result_t lv_draw_sw_image_helium(
mask_tile.tInfo.tColourInfo.chScheme = ARM_2D_COLOUR_GRAY8;
mask_tile.pchBuffer = (uint8_t *)mask_buf;
+ #if ARM_2D_VERSION > 10201ul
+
+ arm_2dp_rgb565_tile_transform_xy_with_src_mask_and_opacity(
+ NULL,
+ &source_tile,
+ &mask_tile,
+ &target_tile,
+ NULL,
+ source_center,
+ ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
+ draw_dsc->scale_x / 256.0f,
+ draw_dsc->scale_y / 256.0f,
+ opa,
+ &target_center
+ );
+
+ #else
if(opa >= LV_OPA_MAX) {
arm_2d_rgb565_tile_transform_with_src_mask(
&source_tile,
@@ -402,11 +470,27 @@ static inline lv_result_t lv_draw_sw_image_helium(
&target_center
);
}
-
+ #endif
}
else if(LV_COLOR_FORMAT_RGB565 == src_cf) {
LV_ASSERT(LV_COLOR_FORMAT_RGB565 == des_cf);
+ #if ARM_2D_VERSION > 10201ul
+
+ arm_2dp_rgb565_tile_transform_xy_only_with_opacity(
+ NULL,
+ &source_tile,
+ &target_tile,
+ NULL,
+ source_center,
+ ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
+ draw_dsc->scale_x / 256.0f,
+ draw_dsc->scale_y / 256.0f,
+ opa,
+ &target_center
+ );
+
+ #else
if(opa >= LV_OPA_MAX) {
#if ARM_2D_VERSION >= 10106
arm_2d_rgb565_tile_transform_only(
@@ -444,75 +528,81 @@ static inline lv_result_t lv_draw_sw_image_helium(
&target_center
);
}
-
+ #endif
}
- #if 0 /* a temporary patch */
+ #if ARM_2D_VERSION > 10201ul
else if(LV_COLOR_FORMAT_ARGB8888 == src_cf) {
- LV_ASSERT(LV_COLOR_FORMAT_XRGB8888 == des_cf);
+ if (LV_COLOR_FORMAT_XRGB8888 == des_cf) {
+ source_tile.tInfo.bHasEnforcedColour = true;
+ source_tile.tInfo.tColourInfo.chScheme = ARM_2D_COLOUR_CCCA8888;
- static arm_2d_tile_t mask_tile;
- mask_tile = source_tile;
-
- mask_tile.tInfo.bHasEnforcedColour = true;
- mask_tile.tInfo.tColourInfo.chScheme = ARM_2D_CHANNEL_8in32;
- mask_tile.pchBuffer = (uint8_t *)src_buf + 3;
-
- if(opa >= LV_OPA_MAX) {
- arm_2d_cccn888_tile_transform_with_src_mask(
+ arm_2dp_cccn888_tile_transform_xy_only_with_opacity(
+ NULL,
&source_tile,
- &mask_tile,
- &target_tile,
- NULL,
- source_center,
- ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
- draw_dsc->scale_x / 256.0f,
- &target_center
- );
- }
- else {
- arm_2d_cccn888_tile_transform_with_src_mask_and_opacity(
- &source_tile,
- &mask_tile,
&target_tile,
NULL,
source_center,
ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
draw_dsc->scale_x / 256.0f,
+ draw_dsc->scale_y / 256.0f,
opa,
&target_center
);
}
+ else if(LV_COLOR_FORMAT_RGB565 == des_cf) {
+ source_tile.tInfo.bHasEnforcedColour = true;
+ source_tile.tInfo.tColourInfo.chScheme = ARM_2D_COLOUR_CCCA8888;
+ arm_2dp_rgb565_tile_transform_xy_only_with_opacity(
+ NULL,
+ &source_tile,
+ &target_tile,
+ NULL,
+ source_center,
+ ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
+ draw_dsc->scale_x / 256.0f,
+ draw_dsc->scale_y / 256.0f,
+ opa,
+ &target_center
+ );
+ }
}
else if(LV_COLOR_FORMAT_XRGB8888 == src_cf) {
- LV_ASSERT(LV_COLOR_FORMAT_XRGB8888 == des_cf);
-
- if(opa >= LV_OPA_MAX) {
- arm_2d_cccn888_tile_transform_only(
- &source_tile,
- &target_tile,
- NULL,
- source_center,
- ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
- draw_dsc->scale_x / 256.0f,
- &target_center
- );
- }
- else {
- arm_2d_cccn888_tile_transform_only_with_opacity(
+ if(LV_COLOR_FORMAT_XRGB8888 == des_cf) {
+ arm_2dp_cccn888_tile_transform_xy_only_with_opacity(
+ NULL,
&source_tile,
&target_tile,
NULL,
source_center,
ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
draw_dsc->scale_x / 256.0f,
+ draw_dsc->scale_y / 256.0f,
opa,
&target_center
);
}
+ else if(LV_COLOR_FORMAT_RGB565 == des_cf) {
- }
+ source_tile.tInfo.bHasEnforcedColour = true;
+ source_tile.tInfo.tColourInfo.chScheme = ARM_2D_COLOUR_CCCA8888;
+
+ arm_2dp_rgb565_tile_transform_xy_only_with_opacity(
+ NULL,
+ &source_tile,
+ &target_tile,
+ NULL,
+ source_center,
+ ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
+ draw_dsc->scale_x / 256.0f,
+ draw_dsc->scale_y / 256.0f,
+ opa,
+ &target_center
+ );
+
+ }
#endif
+ }
else {
break;
}
diff --git a/src/draw/sw/lv_draw_sw.c b/src/draw/sw/lv_draw_sw.c
index 24e465774b..8b1ef4cc5d 100644
--- a/src/draw/sw/lv_draw_sw.c
+++ b/src/draw/sw/lv_draw_sw.c
@@ -83,7 +83,11 @@ void lv_draw_sw_init(void)
draw_sw_unit->base_unit.dispatch_cb = dispatch;
draw_sw_unit->base_unit.evaluate_cb = evaluate;
draw_sw_unit->base_unit.delete_cb = LV_USE_OS ? lv_draw_sw_delete : NULL;
+#if LV_USE_DRAW_ARM2D_SYNC
+ draw_sw_unit->base_unit.name = "SW_ARM2D";
+#else
draw_sw_unit->base_unit.name = "SW";
+#endif
#if LV_USE_OS
uint32_t i;
diff --git a/src/draw/sw/lv_draw_sw_img.c b/src/draw/sw/lv_draw_sw_img.c
index 2e1067ba6c..5d5574cff7 100644
--- a/src/draw/sw/lv_draw_sw_img.c
+++ b/src/draw/sw/lv_draw_sw_img.c
@@ -298,7 +298,7 @@ static void img_draw_core(lv_draw_task_t * t, const lv_draw_image_dsc_t * draw_d
img_coords, /* src_h, src_w, src_x1, src_y1 */
img_stride, /* image stride */
clipped_img_area, /* blend area */
- t, /* draw task*/
+ t, /* target buffer, buffer width, buffer height, buffer stride */
draw_dsc)) { /* opa, recolour_opa and colour */
/*In the other cases every pixel need to be checked one-by-one*/
transform_and_recolor(t, draw_dsc, decoder_dsc, sup, img_coords, clipped_img_area);
@@ -569,7 +569,7 @@ static void recolor(lv_area_t relative_area, uint8_t * src_buf, uint8_t * dest_b
lv_opa_t mix_inv = 255 - mix;
if(cf == LV_COLOR_FORMAT_RGB565A8 || cf == LV_COLOR_FORMAT_RGB565) {
- if(LV_RESULT_INVALID == LV_DRAW_SW_RGB565_RECOLOR(dest_buf, blend_area, color, mix)) {
+ if(LV_RESULT_INVALID == LV_DRAW_SW_RGB565_RECOLOR(dest_buf, relative_area, color, mix)) {
const uint8_t * src_buf_tmp = src_buf + src_stride * relative_area.y1 + relative_area.x1 * 2;
int32_t img_stride_px = src_stride / 2;
@@ -608,7 +608,7 @@ static void recolor(lv_area_t relative_area, uint8_t * src_buf, uint8_t * dest_b
}
}
else if(cf == LV_COLOR_FORMAT_RGB565_SWAPPED) {
- if(LV_RESULT_INVALID == LV_DRAW_SW_RGB565_SWAPPED_RECOLOR(dest_buf, blend_area, color, mix)) {
+ if(LV_RESULT_INVALID == LV_DRAW_SW_RGB565_SWAPPED_RECOLOR(dest_buf, relative_area, color, mix)) {
const uint8_t * src_buf_tmp = src_buf + src_stride * relative_area.y1 + relative_area.x1 * 2;
int32_t img_stride_px = src_stride / 2;
@@ -648,7 +648,7 @@ static void recolor(lv_area_t relative_area, uint8_t * src_buf, uint8_t * dest_b
}
}
else if(cf == LV_COLOR_FORMAT_RGB888 || cf == LV_COLOR_FORMAT_XRGB8888 || cf == LV_COLOR_FORMAT_ARGB8888) {
- if(LV_RESULT_INVALID == LV_DRAW_SW_RGB888_RECOLOR(dest_buf, blend_area, color, mix, cf_final)) {
+ if(LV_RESULT_INVALID == LV_DRAW_SW_RGB888_RECOLOR(dest_buf, relative_area, color, mix, cf)) {
uint32_t px_size = lv_color_format_get_size(cf);
src_buf += src_stride * relative_area.y1 + relative_area.x1 * px_size;
if(mix >= LV_OPA_MAX) {
@@ -688,7 +688,7 @@ static void recolor(lv_area_t relative_area, uint8_t * src_buf, uint8_t * dest_b
}
}
else if(cf == LV_COLOR_FORMAT_ARGB8888_PREMULTIPLIED) {
- if(LV_RESULT_INVALID == LV_DRAW_SW_ARGB8888_PREMULTIPLIED_RECOLOR(dest_buf, blend_area, color, mix, cf_final)) {
+ if(LV_RESULT_INVALID == LV_DRAW_SW_ARGB8888_PREMULTIPLIED_RECOLOR(dest_buf, relative_area, color, mix, cf)) {
uint32_t px_size = lv_color_format_get_size(cf);
src_buf += src_stride * relative_area.y1 + relative_area.x1 * px_size;