Compare commits
69 Commits
revert-680
...
v9.2.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
59a6b61c95 | ||
|
|
c897fe8f18 | ||
|
|
51e1dfcb40 | ||
|
|
7d5cb8385e | ||
|
|
ac0cdcb0d9 | ||
|
|
efd965c4c1 | ||
|
|
0237e9fce7 | ||
|
|
5b837eb727 | ||
|
|
8658411a2f | ||
|
|
da74d6983b | ||
|
|
6dd7b3a978 | ||
|
|
a634deade4 | ||
|
|
c3ec922708 | ||
|
|
29c977042e | ||
|
|
c3690544d5 | ||
|
|
99974d46b7 | ||
|
|
0f9f322733 | ||
|
|
892d97ccc1 | ||
|
|
a109608806 | ||
|
|
64beb5f811 | ||
|
|
7275e1fff6 | ||
|
|
7c3b20d9f2 | ||
|
|
68d04bd353 | ||
|
|
f7c42c29de | ||
|
|
ed5d38b048 | ||
|
|
e86ec9e9fd | ||
|
|
068583d7c0 | ||
|
|
0b4a188c0b | ||
|
|
2e0b7359ee | ||
|
|
3d3342104f | ||
|
|
4199044aac | ||
|
|
c826f31f00 | ||
|
|
2be97d6b92 | ||
|
|
475b538276 | ||
|
|
3d351af17f | ||
|
|
e633ea2931 | ||
|
|
53c846f4ac | ||
|
|
e961669dd8 | ||
|
|
cd4f477497 | ||
|
|
0ad8217b8d | ||
|
|
1ff2ea3e4a | ||
|
|
84346f3ef2 | ||
|
|
9275c52854 | ||
|
|
7de50992b2 | ||
|
|
be7b3ee714 | ||
|
|
ccf518bee1 | ||
|
|
ca8e23d934 | ||
|
|
0d483105e9 | ||
|
|
6c8366a039 | ||
|
|
e08f1b7686 | ||
|
|
df1b96f5a9 | ||
|
|
e66438fb58 | ||
|
|
3a96eaa08a | ||
|
|
c11fda693c | ||
|
|
c2f969eab2 | ||
|
|
b4bb91803a | ||
|
|
cd6e7e373f | ||
|
|
96cb2ae945 | ||
|
|
182d4ab188 | ||
|
|
f4ee0e6ca4 | ||
|
|
806349698e | ||
|
|
d106f113f6 | ||
|
|
af4452ef41 | ||
|
|
fa69216d4c | ||
|
|
d316710b3f | ||
|
|
a80da28224 | ||
|
|
fc22ef316e | ||
|
|
2b7cacf2bc | ||
|
|
a246604041 |
22
.github/workflows/verify_kconfig.yml
vendored
Normal file
22
.github/workflows/verify_kconfig.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
name: Verify Kconfig
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
verify-kconfig:
|
||||
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
fetch-depth: 0
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: 3.7
|
||||
- name: Run kconfig_verify.py
|
||||
run: python3 -m pip install kconfiglib && python kconfig_verify.py ../Kconfig
|
||||
working-directory: scripts
|
||||
54
Kconfig
54
Kconfig
@@ -1,4 +1,4 @@
|
||||
# Kconfig file for LVGL v9.2.0
|
||||
# Kconfig file for LVGL v9.2.1
|
||||
|
||||
menu "LVGL configuration"
|
||||
|
||||
@@ -162,6 +162,15 @@ menu "LVGL configuration"
|
||||
string "Custom OS include header"
|
||||
default "stdint.h"
|
||||
depends on LV_OS_CUSTOM
|
||||
|
||||
config LV_USE_FREERTOS_TASK_NOTIFY
|
||||
bool "Use RTOS task with a direct notification for synchronization"
|
||||
default y
|
||||
depends on LV_OS_FREERTOS
|
||||
help
|
||||
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.
|
||||
endmenu
|
||||
|
||||
menu "Rendering Configuration"
|
||||
@@ -363,8 +372,18 @@ menu "LVGL configuration"
|
||||
depends on LV_USE_DRAW_VGLITE
|
||||
default n
|
||||
|
||||
config LV_USE_PXP
|
||||
bool "Use NXP's PXP on iMX RTxxx platforms"
|
||||
default n
|
||||
|
||||
config LV_USE_DRAW_PXP
|
||||
bool "Use NXP's PXP on iMX RTxxx platforms"
|
||||
bool "Use PXP for drawing"
|
||||
depends on LV_USE_PXP
|
||||
default y
|
||||
|
||||
config LV_USE_ROTATE_PXP
|
||||
bool "Use PXP to rotate display"
|
||||
depends on LV_USE_PXP
|
||||
default n
|
||||
|
||||
config LV_USE_PXP_DRAW_THREAD
|
||||
@@ -708,6 +727,18 @@ menu "LVGL configuration"
|
||||
int "Required alignment size for buffers"
|
||||
default 1
|
||||
|
||||
config LV_ATTRIBUTE_MEM_ALIGN
|
||||
string "Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default)."
|
||||
default ""
|
||||
help
|
||||
E.g. __attribute__((aligned(LV_ATTRIBUTE_MEM_ALIGN_SIZE)))
|
||||
|
||||
config LV_ATTRIBUTE_LARGE_CONST
|
||||
string "Attribute to mark large constant arrays for example font's bitmaps"
|
||||
default ""
|
||||
help
|
||||
E.g. __attribute__((section("DataQuickAccess")))
|
||||
|
||||
config LV_ATTRIBUTE_FAST_MEM_USE_IRAM
|
||||
bool "Set IRAM as LV_ATTRIBUTE_FAST_MEM"
|
||||
help
|
||||
@@ -1327,6 +1358,13 @@ menu "LVGL configuration"
|
||||
bool "Enable system monitor component"
|
||||
default n
|
||||
|
||||
config LV_SYSMON_GET_IDLE
|
||||
string "Get the idle percentage."
|
||||
depends on LV_USE_SYSMON
|
||||
default "lv_timer_get_idle"
|
||||
help
|
||||
E.g. uint32_t my_get_idle(void);
|
||||
|
||||
config LV_USE_PERF_MONITOR
|
||||
bool "Show CPU usage and FPS count"
|
||||
depends on LV_USE_SYSMON
|
||||
@@ -1364,7 +1402,7 @@ menu "LVGL configuration"
|
||||
config LV_USE_MEM_MONITOR
|
||||
bool "Show the used memory and the memory fragmentation"
|
||||
default n
|
||||
depends on LV_STDLIB_BUILTIN && LV_USE_SYSMON
|
||||
depends on LV_USE_BUILTIN_MALLOC && LV_USE_SYSMON
|
||||
|
||||
choice
|
||||
prompt "Memory monitor position"
|
||||
@@ -1464,6 +1502,16 @@ menu "LVGL configuration"
|
||||
default y
|
||||
help
|
||||
This can save some memory, but not much. After the quick access bar is created, it can be hidden by clicking the button at the top left corner of the browsing area, which is very useful for small screen devices.
|
||||
|
||||
config LVGL_VERSION_MAJOR
|
||||
int
|
||||
default 9 # LVGL_VERSION_MAJOR
|
||||
config LVGL_VERSION_MINOR
|
||||
int
|
||||
default 2 # LVGL_VERSION_MINOR
|
||||
config LVGL_VERSION_PATCH
|
||||
int
|
||||
default 1 # LVGL_VERSION_PATCH
|
||||
endmenu
|
||||
|
||||
menu "Devices"
|
||||
|
||||
@@ -458,6 +458,9 @@ void lv_demo_benchmark(void)
|
||||
#if LV_USE_PERF_MONITOR
|
||||
lv_display_t * disp = lv_display_get_default();
|
||||
lv_subject_add_observer_obj(&disp->perf_sysmon_backend.subject, sysmon_perf_observer_cb, title, NULL);
|
||||
#if LV_USE_PERF_MONITOR_LOG_MODE
|
||||
lv_obj_add_flag(title, LV_OBJ_FLAG_HIDDEN);
|
||||
#endif
|
||||
#else
|
||||
lv_label_set_text(title, "LV_USE_PERF_MONITOR is not enabled");
|
||||
#endif
|
||||
@@ -510,9 +513,8 @@ static void next_scene_timer_cb(lv_timer_t * timer)
|
||||
static void sysmon_perf_observer_cb(lv_observer_t * observer, lv_subject_t * subject)
|
||||
{
|
||||
const lv_sysmon_perf_info_t * info = lv_subject_get_pointer(subject);
|
||||
lv_obj_t * label = lv_observer_get_target(observer);
|
||||
|
||||
char scene_name[64];
|
||||
|
||||
if(scenes[scene_act].name[0] != '\0') {
|
||||
lv_snprintf(scene_name, sizeof(scene_name), "%s: ", scenes[scene_act].name);
|
||||
}
|
||||
@@ -520,6 +522,8 @@ static void sysmon_perf_observer_cb(lv_observer_t * observer, lv_subject_t * sub
|
||||
scene_name[0] = '\0';
|
||||
}
|
||||
|
||||
#if !LV_USE_PERF_MONITOR_LOG_MODE
|
||||
lv_obj_t * label = lv_observer_get_target(observer);
|
||||
lv_label_set_text_fmt(label,
|
||||
"%s"
|
||||
"%" LV_PRIu32" FPS, %" LV_PRIu32 "%% CPU\n"
|
||||
@@ -528,6 +532,9 @@ static void sysmon_perf_observer_cb(lv_observer_t * observer, lv_subject_t * sub
|
||||
info->calculated.fps, info->calculated.cpu,
|
||||
info->calculated.render_avg_time + info->calculated.flush_avg_time,
|
||||
info->calculated.render_avg_time, info->calculated.flush_avg_time);
|
||||
#else
|
||||
LV_UNUSED(observer);
|
||||
#endif
|
||||
|
||||
/*Ignore the first call as it contains data from the previous scene*/
|
||||
if(scenes[scene_act].measurement_cnt != 0) {
|
||||
@@ -591,7 +598,7 @@ static void summary_create(void)
|
||||
lv_table_set_cell_value(table, 0, 3, "Avg. time (render + flush)");
|
||||
|
||||
/* csv log */
|
||||
LV_LOG("Benchmark Summary (%"LV_PRIu32".%"LV_PRIu32".%"LV_PRIu32" %s)\r\n",
|
||||
LV_LOG("Benchmark Summary (%d.%d.%d %s)\r\n",
|
||||
LVGL_VERSION_MAJOR,
|
||||
LVGL_VERSION_MINOR,
|
||||
LVGL_VERSION_PATCH,
|
||||
|
||||
@@ -187,6 +187,7 @@ const LV_ATTRIBUTE_MEM_ALIGN uint8_t img_lv_demo_music_cover_1_map[] = {
|
||||
const lv_image_dsc_t img_lv_demo_music_cover_1 = {
|
||||
.header.w = 176,
|
||||
.header.h = 175,
|
||||
.header.stride = 704,
|
||||
.header.cf = LV_COLOR_FORMAT_ARGB8888,
|
||||
.data = img_lv_demo_music_cover_1_map,
|
||||
.data_size = sizeof(img_lv_demo_music_cover_1_map),
|
||||
|
||||
@@ -448,6 +448,7 @@ img_lv_demo_music_cover_1_map[] = {
|
||||
const lv_image_dsc_t img_lv_demo_music_cover_1 = {
|
||||
.header.w = 428,
|
||||
.header.h = 428,
|
||||
.header.stride = 1712,
|
||||
.header.cf = LV_COLOR_FORMAT_ARGB8888,
|
||||
.data = img_lv_demo_music_cover_1_map,
|
||||
.data_size = sizeof(img_lv_demo_music_cover_1_map),
|
||||
|
||||
@@ -188,6 +188,7 @@ const LV_ATTRIBUTE_MEM_ALIGN uint8_t img_lv_demo_music_cover_2_map[] = {
|
||||
const lv_image_dsc_t img_lv_demo_music_cover_2 = {
|
||||
.header.w = 176,
|
||||
.header.h = 175,
|
||||
.header.stride = 704,
|
||||
.header.cf = LV_COLOR_FORMAT_ARGB8888,
|
||||
.data = img_lv_demo_music_cover_2_map,
|
||||
.data_size = sizeof(img_lv_demo_music_cover_2_map),
|
||||
|
||||
@@ -448,6 +448,7 @@ img_lv_demo_music_cover_2_map[] = {
|
||||
const lv_image_dsc_t img_lv_demo_music_cover_2 = {
|
||||
.header.w = 428,
|
||||
.header.h = 428,
|
||||
.header.stride = 1712,
|
||||
.header.cf = LV_COLOR_FORMAT_ARGB8888,
|
||||
.data = img_lv_demo_music_cover_2_map,
|
||||
.data_size = sizeof(img_lv_demo_music_cover_2_map),
|
||||
|
||||
@@ -188,6 +188,7 @@ const LV_ATTRIBUTE_MEM_ALIGN uint8_t img_lv_demo_music_cover_3_map[] = {
|
||||
const lv_image_dsc_t img_lv_demo_music_cover_3 = {
|
||||
.header.w = 176,
|
||||
.header.h = 175,
|
||||
.header.stride = 704,
|
||||
.header.cf = LV_COLOR_FORMAT_ARGB8888,
|
||||
.data = img_lv_demo_music_cover_3_map,
|
||||
.data_size = sizeof(img_lv_demo_music_cover_3_map),
|
||||
|
||||
@@ -447,6 +447,7 @@ img_lv_demo_music_cover_3_map[] = {
|
||||
const lv_image_dsc_t img_lv_demo_music_cover_3 = {
|
||||
.header.w = 428,
|
||||
.header.h = 428,
|
||||
.header.stride = 1712,
|
||||
.header.cf = LV_COLOR_FORMAT_ARGB8888,
|
||||
.data = img_lv_demo_music_cover_3_map,
|
||||
.data_size = sizeof(img_lv_demo_music_cover_3_map),
|
||||
|
||||
@@ -3,487 +3,92 @@
|
||||
Changelog
|
||||
=========
|
||||
|
||||
`v9.2 <https://github.com/lvgl/lvgl/compare/v9.1.0...v9.2.0>`__ 26 August 2024
|
||||
------------------------------------------------------------------------------
|
||||
`v9.2.0 <https://github.com/lvgl/lvgl/compare/v9.2.1...v9.2.0>`__ 24 October 2024
|
||||
---------------------------------------------------------------------------------
|
||||
|
||||
It's huge release with many interesting updates:
|
||||
|
||||
- Built-in `Wayland driver <https://docs.lvgl.io/master/integration/driver/wayland.html>`__
|
||||
- `OpenGL ES and GLFW driver <https://docs.lvgl.io/master/integration/driver/opengles.html>`__ with support for external textures
|
||||
- `Renesas GLCDC <https://docs.lvgl.io/master/integration/driver/display/renesas_glcdc.html>`__ driver
|
||||
- L8 and I1 rendering support
|
||||
- Matrix transformations during rendering
|
||||
- New `file system interfaces <https://docs.lvgl.io/master/libs/fs.html>`__: LittleFS, ESP LittleFS, Arduino FS
|
||||
- SDL renderer improvements (supporting all draw task types and improving speed)
|
||||
- Radial, Conic, and Skew `gradients supported <https://docs.lvgl.io/master/overview/style.html#metallic-knob-with-conic-gradient>`__ by software rendering and VG-Lite
|
||||
- `QNX <https://docs.lvgl.io/master/integration/os/qnx.html>`__ and `MQX <https://docs.lvgl.io/master/integration/os/mqx.html>`__ support
|
||||
- `Mouse hover handling <https://docs.lvgl.io/master/get-started/quick-overview.html>`__
|
||||
- `Lottie <https://docs.lvgl.io/master/widgets/lottie.html>`__ support
|
||||
- CI tests for UEFI builds
|
||||
|
||||
And many smaller fixes and features
|
||||
|
||||
Breaking Changes
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
``lvgl_private.h`` was introduced to better separate internal and public APIs and data. Your application might rely on APIs or data that are now available via ``lvgl_private.h``.
|
||||
|
||||
Resolve it by either
|
||||
|
||||
- include ``lvgl_private.h`` where needed
|
||||
- enable ``LV_USE_PRIVATE_API`` to internally include ``lvgl_private.h`` in `lvgl.h`
|
||||
|
||||
New Features
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- **feat(sdl_render): support all draw task types** `6437 <https://github.com/lvgl/lvgl/pull/6437>`__
|
||||
- **feat(scale): add custom labels example** `6699 <https://github.com/lvgl/lvgl/pull/6699>`__
|
||||
- **feat(driver): import Wayland driver from v8** `6549 <https://github.com/lvgl/lvgl/pull/6549>`__
|
||||
- **feat(scripts): add default config generator** `6522 <https://github.com/lvgl/lvgl/pull/6522>`__
|
||||
- **feat(draw_sw): extend lv_draw_sw_rotate with L8 support** `6520 <https://github.com/lvgl/lvgl/pull/6520>`__
|
||||
- **feat(anim_timeline): add repeat and more** `6127 <https://github.com/lvgl/lvgl/pull/6127>`__
|
||||
- **feat(indev): add scroll_time and scroll_throw setter** `6723 <https://github.com/lvgl/lvgl/pull/6723>`__
|
||||
- **feat(draw): add physical clipping area to solve the scaling accuracy problem** `6703 <https://github.com/lvgl/lvgl/pull/6703>`__
|
||||
- **feat(fs): default drive letter + ESP FS docs** `6367 <https://github.com/lvgl/lvgl/pull/6367>`__
|
||||
- **feat(freertos): add functions to better measure the CPU usage** `6619 <https://github.com/lvgl/lvgl/pull/6619>`__
|
||||
- **feat(core): Add lv_group_get_obj_by_index method** `6589 <https://github.com/lvgl/lvgl/pull/6589>`__
|
||||
- **feat(draw_buf): make draw buf API more OOP style** `6427 <https://github.com/lvgl/lvgl/pull/6427>`__
|
||||
- **feat(opengles): multiple windows and embed user opengl textures** `6600 <https://github.com/lvgl/lvgl/pull/6600>`__
|
||||
- **feat(obj): add lv_obj_null_on_delete** `6599 <https://github.com/lvgl/lvgl/pull/6599>`__
|
||||
- **feat(indev): add long press time setter** `6664 <https://github.com/lvgl/lvgl/pull/6664>`__
|
||||
- **feat(cmake): Make LVGL version available for all CMake environments** `6654 <https://github.com/lvgl/lvgl/pull/6654>`__
|
||||
- **feat(os): use recursive mutex by default** `6573 <https://github.com/lvgl/lvgl/pull/6573>`__
|
||||
- **feat(env/qnx): generate lv_conf.h at build time** `6596 <https://github.com/lvgl/lvgl/pull/6596>`__
|
||||
- **feat(label): add property** `6575 <https://github.com/lvgl/lvgl/pull/6575>`__
|
||||
- **feat(unity): update unity to version 2.6.0** `6453 <https://github.com/lvgl/lvgl/pull/6453>`__
|
||||
- **feat(libpng): add parsing variable to libpng** `6553 <https://github.com/lvgl/lvgl/pull/6553>`__
|
||||
- **feat(nuttx): malloc second FB if driver only has one** `6580 <https://github.com/lvgl/lvgl/pull/6580>`__
|
||||
- **feat(draw): add global matrix drawing modes** `4883 <https://github.com/lvgl/lvgl/pull/4883>`__
|
||||
- **feat(drivers): initial implementation of a QNX screen driver** `6507 <https://github.com/lvgl/lvgl/pull/6507>`__
|
||||
- **feat(nxp/pxp): add Zephyr Support** `6298 <https://github.com/lvgl/lvgl/pull/6298>`__
|
||||
- **feat(obj): add more obj properties** `6537 <https://github.com/lvgl/lvgl/pull/6537>`__
|
||||
- **feat(anim): add lv_anim_speed_to_time back** `6531 <https://github.com/lvgl/lvgl/pull/6531>`__
|
||||
- **feat(draw/sw): add support for LV_COLOR_FORMAT_I1** `6345 <https://github.com/lvgl/lvgl/pull/6345>`__
|
||||
- **feat(barcode): add none tiled mode** `6462 <https://github.com/lvgl/lvgl/pull/6462>`__
|
||||
- **feat(observer): add lv_obj_remove_from_subject** `6341 <https://github.com/lvgl/lvgl/pull/6341>`__
|
||||
- **feat(textarea): make textarea editable** `6467 <https://github.com/lvgl/lvgl/pull/6467>`__
|
||||
- **feat(lodepng): update lodepng to version 20230410** `6454 <https://github.com/lvgl/lvgl/pull/6454>`__
|
||||
- **feat(env): make LVGL a Zephyr compatible module** `6460 <https://github.com/lvgl/lvgl/pull/6460>`__
|
||||
- **feat(nuttx): add lv_nuttx_run** `6371 <https://github.com/lvgl/lvgl/pull/6371>`__
|
||||
- **feat(nuttx): update the joined invalid area instead of the last one** `6397 <https://github.com/lvgl/lvgl/pull/6397>`__
|
||||
- **feat(refr): add details on rendering_in_progress ASSERT cause** `6450 <https://github.com/lvgl/lvgl/pull/6450>`__
|
||||
- **feat(nuttx_image_cache): add tid for cache name** `6434 <https://github.com/lvgl/lvgl/pull/6434>`__
|
||||
- **feat(bar): add bar orientation** `6212 <https://github.com/lvgl/lvgl/pull/6212>`__
|
||||
- **feat(scale): set tick drawing order** `6185 <https://github.com/lvgl/lvgl/pull/6185>`__
|
||||
- **feat: add API JSON generator** `5677 <https://github.com/lvgl/lvgl/pull/5677>`__
|
||||
- **feat(property): add property name** `6329 <https://github.com/lvgl/lvgl/pull/6329>`__
|
||||
- **feat(nuttx): add stack size check** `6381 <https://github.com/lvgl/lvgl/pull/6381>`__
|
||||
- **feat(vg_lite): add image clip corner support** `6121 <https://github.com/lvgl/lvgl/pull/6121>`__
|
||||
- **feat(fsdrv): implement directory open and close for littlefs driver** `6301 <https://github.com/lvgl/lvgl/pull/6301>`__
|
||||
- **feat(obj): add API to set/get object ID.** `6278 <https://github.com/lvgl/lvgl/pull/6278>`__
|
||||
- **feat(draw): add a configuration to reduce code size** `6313 <https://github.com/lvgl/lvgl/pull/6313>`__
|
||||
- **feat(opengles): add basic driver for opengles** `6254 <https://github.com/lvgl/lvgl/pull/6254>`__
|
||||
- **feat(tests): add VG-Lite render test** `6264 <https://github.com/lvgl/lvgl/pull/6264>`__
|
||||
- **feat(drivers): GLCDC support for RX72 family** `6291 <https://github.com/lvgl/lvgl/pull/6291>`__
|
||||
- **feat(lottie): add external thorvg header file support** `6311 <https://github.com/lvgl/lvgl/pull/6311>`__
|
||||
- **feat(demos): add demo for the OSAL** `6182 <https://github.com/lvgl/lvgl/pull/6182>`__
|
||||
- **feat(rtthread): add cpu usage support** `6310 <https://github.com/lvgl/lvgl/pull/6310>`__
|
||||
- **feat(property): add style selector support for property API** `6275 <https://github.com/lvgl/lvgl/pull/6275>`__
|
||||
- **feat(micropython): improve mem core micropython** `6219 <https://github.com/lvgl/lvgl/pull/6219>`__
|
||||
- **feat(vector): add set viewport support for vector api with thorvg** `6299 <https://github.com/lvgl/lvgl/pull/6299>`__
|
||||
- **feat(api_map): adds guards to api mapping** `6269 <https://github.com/lvgl/lvgl/pull/6269>`__
|
||||
- **feat(vg_lite): img_decoder add stride from src** `6292 <https://github.com/lvgl/lvgl/pull/6292>`__
|
||||
- **feat(thorvg): update thorvg version to 0.13.5** `6274 <https://github.com/lvgl/lvgl/pull/6274>`__
|
||||
- **feat(obj): add check null pointer** `6249 <https://github.com/lvgl/lvgl/pull/6249>`__
|
||||
- **feat(draw_sw): implemented radial gradient background** `6170 <https://github.com/lvgl/lvgl/pull/6170>`__
|
||||
- **feat(refr): add backward compatibility for LV_COLOR_16_SWAP** `6225 <https://github.com/lvgl/lvgl/pull/6225>`__
|
||||
- **feat(bidi): support set neutral string** `6146 <https://github.com/lvgl/lvgl/pull/6146>`__
|
||||
- **feat(pxp): add zephyr support** `6159 <https://github.com/lvgl/lvgl/pull/6159>`__
|
||||
- **feat(stdlib): strncpy consistency and add strlcpy** `6204 <https://github.com/lvgl/lvgl/pull/6204>`__
|
||||
- **feat(printf): LV_FORMAT_ATTRIBUTE for IAR compiler** `6231 <https://github.com/lvgl/lvgl/pull/6231>`__
|
||||
- **feat(fs): file writes update the file cache** `6186 <https://github.com/lvgl/lvgl/pull/6186>`__
|
||||
- **feat(tool): add premultiply support to image tool** `6175 <https://github.com/lvgl/lvgl/pull/6175>`__
|
||||
- **feat(table): add function to set selected table cell** `6163 <https://github.com/lvgl/lvgl/pull/6163>`__
|
||||
- **feat(os): add mqx for osal** `6191 <https://github.com/lvgl/lvgl/pull/6191>`__
|
||||
- **feat(anim_timeline): add anim's `completed_cb` support** `6085 <https://github.com/lvgl/lvgl/pull/6085>`__
|
||||
- **feat(test): enable warning to format-security** `6199 <https://github.com/lvgl/lvgl/pull/6199>`__
|
||||
- **feat(draw_buf): add LV_DRAW_BUF_INIT macro to meet alignment requirement** `6102 <https://github.com/lvgl/lvgl/pull/6102>`__
|
||||
- **feat(tools): Python script for automatically applying version (#6012)** `6080 <https://github.com/lvgl/lvgl/pull/6080>`__
|
||||
- **feat(draw_buff): adapt lv_draw_buf_dup to support multi-instance** `6179 <https://github.com/lvgl/lvgl/pull/6179>`__
|
||||
- **feat(hover): add Hover support for pointer device.** `5947 <https://github.com/lvgl/lvgl/pull/5947>`__
|
||||
- **feat(gridnav): single axis movement flags** `6044 <https://github.com/lvgl/lvgl/pull/6044>`__
|
||||
- **feat(api_map): add missing keyboard API map for v8** `6103 <https://github.com/lvgl/lvgl/pull/6103>`__
|
||||
- **feat(log): add LV_LOG_PRINT_CB to set a default log print cb** `6095 <https://github.com/lvgl/lvgl/pull/6095>`__
|
||||
- **feat(arc): support RGB565A8 arc image** `6009 <https://github.com/lvgl/lvgl/pull/6009>`__
|
||||
- **feat(ci): Add CI test for UEFI build** `5964 <https://github.com/lvgl/lvgl/pull/5964>`__
|
||||
- **feat(draw/sw): added support for LV_COLOR_FORMAT_L8** `5800 <https://github.com/lvgl/lvgl/pull/5800>`__
|
||||
- **feat(cache): add name for cache instance** `6040 <https://github.com/lvgl/lvgl/pull/6040>`__
|
||||
- **feat(CI): Windows MSVC and GCC build** `6015 <https://github.com/lvgl/lvgl/pull/6015>`__
|
||||
- **feat(drv): Implement Arduino SD driver** `5968 <https://github.com/lvgl/lvgl/pull/5968>`__
|
||||
- **feat(demos): align images used in benchmark to stride 64** `5925 <https://github.com/lvgl/lvgl/pull/5925>`__
|
||||
- **feat(vg_lite): adapt premultiply src over blend mode** `6062 <https://github.com/lvgl/lvgl/pull/6062>`__
|
||||
- **feat(fs): add profiler hook** `6056 <https://github.com/lvgl/lvgl/pull/6056>`__
|
||||
- **feat(drivers): account for the frame buffer virtual resolution deviating from the visible resolution.** `5988 <https://github.com/lvgl/lvgl/pull/5988>`__
|
||||
- **feat(decoder): add a name field to decoder to facilitate debugging** `6037 <https://github.com/lvgl/lvgl/pull/6037>`__
|
||||
- **feat(fs_posix): add error number print** `6041 <https://github.com/lvgl/lvgl/pull/6041>`__
|
||||
- **feat(calendar): add chinese calendar** `5940 <https://github.com/lvgl/lvgl/pull/5940>`__
|
||||
- **feat(example): make "LVGL_Arduino.ino" easier to use** `6001 <https://github.com/lvgl/lvgl/pull/6001>`__
|
||||
- **feat(evdev): automatically calibrate pointer input devices.** `5989 <https://github.com/lvgl/lvgl/pull/5989>`__
|
||||
- **feat(draw_buf): user can separate font draw buf from default draw buff now** `5982 <https://github.com/lvgl/lvgl/pull/5982>`__
|
||||
- **feat(scale): multiple line needles** `5937 <https://github.com/lvgl/lvgl/pull/5937>`__
|
||||
- **feat(draw_buff): add user custom draw buffer instance support** `5974 <https://github.com/lvgl/lvgl/pull/5974>`__
|
||||
- **feat(cache): add more profile notes** `5983 <https://github.com/lvgl/lvgl/pull/5983>`__
|
||||
- **feat(font): add lv_font_glyph_release_draw_data api to release glyph data** `5985 <https://github.com/lvgl/lvgl/pull/5985>`__
|
||||
- **feat(nuttx): add defer feature for nuttx image cache** `5967 <https://github.com/lvgl/lvgl/pull/5967>`__
|
||||
- **feat(vglite) add implementation for partial border** `5912 <https://github.com/lvgl/lvgl/pull/5912>`__
|
||||
- **feat(mask): add support for image file bitmap masks** `5911 <https://github.com/lvgl/lvgl/pull/5911>`__
|
||||
- **feat(stdlib): add lv_strncat and refactor strcat uses** `5927 <https://github.com/lvgl/lvgl/pull/5927>`__
|
||||
- **feat(cache): image cache supports dynamic setting of cache size** `5926 <https://github.com/lvgl/lvgl/pull/5926>`__
|
||||
- **feat(draw): add draw thread stack size config option** `5910 <https://github.com/lvgl/lvgl/pull/5910>`__
|
||||
- **feat(draw): optimize helium asm** `5702 <https://github.com/lvgl/lvgl/pull/5702>`__
|
||||
- **feat(fbdev,sdl): support display rotation** `5703 <https://github.com/lvgl/lvgl/pull/5703>`__
|
||||
- **feat(fs): add Arduino ESP LittleFS driver** `5905 <https://github.com/lvgl/lvgl/pull/5905>`__
|
||||
- **feat(vg_lite): add radial gradient support** `5836 <https://github.com/lvgl/lvgl/pull/5836>`__
|
||||
- **feat(thorvg): update ThorVG to v0.11.99** `7addc72 <https://github.com/lvgl/lvgl/commit/7addc72735e06b5c78af5638190f1c32b5bad426>`__
|
||||
- **feat(lottie): add ThorVG based lottie widget** `9c5ca0e <https://github.com/lvgl/lvgl/commit/9c5ca0e0817ff2c7d7e46ff604ebf97fa062012e>`__
|
||||
- **feat(drivers): Renesas GLCDC display driver** `4d12d64 <https://github.com/lvgl/lvgl/commit/4d12d64e4e043e794c11497ba3aeff3591e0158d>`__
|
||||
- **feat(textarea): add properties** `357d5b7 <https://github.com/lvgl/lvgl/commit/357d5b7ff9d827c62aff520183b418585ee76054>`__
|
||||
- **feat(image_decoder): refactor image decoder to reduce file operation on get_info** `daa7fef <https://github.com/lvgl/lvgl/commit/daa7fefb3a4bd058f1c5b5166871085876d0ada4>`__
|
||||
- **feat(dropdown): add properties** `7c1a8a5 <https://github.com/lvgl/lvgl/commit/7c1a8a523d9d5d46dec670ec3da57b1fe54fb1dc>`__
|
||||
- **feat(keyboard): add properties** `cd48c3c <https://github.com/lvgl/lvgl/commit/cd48c3c8d6247611d06fee7b41163a3b4dd13133>`__
|
||||
- **feat(roller): add properties** `a793178 <https://github.com/lvgl/lvgl/commit/a793178bbf029c15e9f8a0717f15542d706f860f>`__
|
||||
- **feat(nuttx): add lv_nuttx_deinit** `2b717a3 <https://github.com/lvgl/lvgl/commit/2b717a32fd1b2de0a96a0ec7a7c5a25c32aeccd7>`__
|
||||
- **feat(glcdc): screen rotation support** `fd79a4f <https://github.com/lvgl/lvgl/commit/fd79a4f42712f5640d43e46f245498e99705f6d8>`__
|
||||
- **feat(nuttx): add adaptive color format** `691554d <https://github.com/lvgl/lvgl/commit/691554ded85613af6ad06bba655f8e665fd661a4>`__
|
||||
- **feat(libpng): use I8 format if png is 8bit mode** `49053e9 <https://github.com/lvgl/lvgl/commit/49053e9d962d589d936b35f5b11255312b2d1743>`__
|
||||
- **feat(property): add boolean type support** `6dc75d4 <https://github.com/lvgl/lvgl/commit/6dc75d4995ace9a03d6d2a2eddf15b7d6d7ce611>`__
|
||||
- **feat(freetype): add invalid font descriptor print** `46887db <https://github.com/lvgl/lvgl/commit/46887dbe5149616ba8cebeb45039880d462b3519>`__
|
||||
- **feat(libpng): let png handle stride alignment** `3116dc4 <https://github.com/lvgl/lvgl/commit/3116dc469e2e53f9f571f16e57f65aa3ded6c691>`__
|
||||
- **feat(gif): backport add loop count control and GIF load result** `6922 <https://github.com/lvgl/lvgl/pull/6922>`__
|
||||
- **feat(animimg): backport add getter function for underlying animation** `6923 <https://github.com/lvgl/lvgl/pull/6923>`__
|
||||
- **feat(pxp) Add option to use PXP only for rotation without creating PXP draw unit.** `892d97c <https://github.com/lvgl/lvgl/commit/892d97ccc107045fef25389bf0660cbed7f2ebe7>`__
|
||||
|
||||
Performance
|
||||
~~~~~~~~~~~
|
||||
|
||||
- **perf(draw): skip empty draw tasks** `6720 <https://github.com/lvgl/lvgl/pull/6720>`__
|
||||
- **perf(vg_lite): use DST_IN blending mode to improve rounded corner cropping performance** `6623 <https://github.com/lvgl/lvgl/pull/6623>`__
|
||||
- **perf(array): optimize array remove / erase function performance** `6544 <https://github.com/lvgl/lvgl/pull/6544>`__
|
||||
- **perf(vg_lite): add stroke path cache to improve drawing performance** `6502 <https://github.com/lvgl/lvgl/pull/6502>`__
|
||||
- **perf(array): optimize array push back function performance** `6431 <https://github.com/lvgl/lvgl/pull/6431>`__
|
||||
- **perf(qrcode): improve drawing speed** `6475 <https://github.com/lvgl/lvgl/pull/6475>`__
|
||||
- **perf(lottie): remove lottie canvas quadratic premultiplication.** `6358 <https://github.com/lvgl/lvgl/pull/6358>`__
|
||||
- **perf(vg_lite): invert the vector font Y axis coordinate in advance** `6353 <https://github.com/lvgl/lvgl/pull/6353>`__
|
||||
- **perf(obj): return directly if parent is unchanged** `6283 <https://github.com/lvgl/lvgl/pull/6283>`__
|
||||
- **perf(theme): optimize the order of function calls** `5971 <https://github.com/lvgl/lvgl/pull/5971>`__
|
||||
- **perf(draw): skip border drawing when border side is none** `5959 <https://github.com/lvgl/lvgl/pull/5959>`__
|
||||
- **perf(draw): skip area independence tests with one draw unit** `6825 <https://github.com/lvgl/lvgl/pull/6825>`__
|
||||
- **perf(vg_lite): reduce matrix and radius calculations** `6800 <https://github.com/lvgl/lvgl/pull/6800>`__
|
||||
|
||||
Fixes
|
||||
~~~~~
|
||||
|
||||
- **fix(env_support/cmake): If LV_CONF_PATH is set, install the indicated config instead of the default one.** `6675 <https://github.com/lvgl/lvgl/pull/6675>`__
|
||||
- **fix(i1): fix compiler and runtime issues with I1 rendering** `6714 <https://github.com/lvgl/lvgl/pull/6714>`__
|
||||
- **fix(vg_lite): fix rounded rectangle path error** `6726 <https://github.com/lvgl/lvgl/pull/6726>`__
|
||||
- **fix(vg_lite): fix rendering aliasing caused by global matrix transformation** `6730 <https://github.com/lvgl/lvgl/pull/6730>`__
|
||||
- **fix(indev): fix LV_EVENT_SCROLL_THROW_BEGIN not send to scroll_obj** `6693 <https://github.com/lvgl/lvgl/pull/6693>`__
|
||||
- **fix(tiny_ttf): Fix formatting specifier macro in lv_tiny_ttf_set_size** `6731 <https://github.com/lvgl/lvgl/pull/6731>`__
|
||||
- **fix(nuttx): fix build break** `6732 <https://github.com/lvgl/lvgl/pull/6732>`__
|
||||
- **fix(chart): fix memory leak** `6727 <https://github.com/lvgl/lvgl/pull/6727>`__
|
||||
- **fix(draw/neon): fix build break** `6682 <https://github.com/lvgl/lvgl/pull/6682>`__
|
||||
- **fix(spinbox): add missing update value** `6719 <https://github.com/lvgl/lvgl/pull/6719>`__
|
||||
- **fix(roller): do not move when there is only one option** `6717 <https://github.com/lvgl/lvgl/pull/6717>`__
|
||||
- **fix(docbuild): Fix @file commands and guard macros.** `6689 <https://github.com/lvgl/lvgl/pull/6689>`__
|
||||
- **fix(fs): remove Arduino SD initialization** `6725 <https://github.com/lvgl/lvgl/pull/6725>`__
|
||||
- **fix(benchmark): use assets only from its own folder** `6666 <https://github.com/lvgl/lvgl/pull/6666>`__
|
||||
- **fix(Kconfig): remove leading spaces on line 1692** `6695 <https://github.com/lvgl/lvgl/pull/6695>`__
|
||||
- **fix(roller): fix roller error in ubuntu24.04 uefi** `6683 <https://github.com/lvgl/lvgl/pull/6683>`__
|
||||
- **fix(rtthread): display driver hang** `6667 <https://github.com/lvgl/lvgl/pull/6667>`__
|
||||
- **fix(objid): free old id before assign new one** `6697 <https://github.com/lvgl/lvgl/pull/6697>`__
|
||||
- **fix(demo): fill image->data_size field** `6710 <https://github.com/lvgl/lvgl/pull/6710>`__
|
||||
- **fix(indev): fix indev not send gesture event** `6676 <https://github.com/lvgl/lvgl/pull/6676>`__
|
||||
- **fix(indev): swap the order of sending indev events and obj events** `6636 <https://github.com/lvgl/lvgl/pull/6636>`__
|
||||
- **fix(scripts): fix update_version error** `6662 <https://github.com/lvgl/lvgl/pull/6662>`__
|
||||
- **fix(refr): reshape using draw_buf stride** `6567 <https://github.com/lvgl/lvgl/pull/6567>`__
|
||||
- **fix(arc): add missing private include** `6648 <https://github.com/lvgl/lvgl/pull/6648>`__
|
||||
- **fix(docbuild): Doxygen warnings from format errors (part 2 of 2)** `6653 <https://github.com/lvgl/lvgl/pull/6653>`__
|
||||
- **fix(docbuild): Doxygen warnings from format errors (part 1 of 2)** `6652 <https://github.com/lvgl/lvgl/pull/6652>`__
|
||||
- **fix(API): keep ime struct lv_pinyin_dict_t public** `6645 <https://github.com/lvgl/lvgl/pull/6645>`__
|
||||
- **fix(draw_sw): fix swapped 90/270 rotation in case of RGB888** `6642 <https://github.com/lvgl/lvgl/pull/6642>`__
|
||||
- **fix(docs): fix Doxygen warnings caused by format errors** `6584 <https://github.com/lvgl/lvgl/pull/6584>`__
|
||||
- **fix(freetype): fix outline font being cropped** `6639 <https://github.com/lvgl/lvgl/pull/6639>`__
|
||||
- **fix(API): keep font struct lv_font_fmt_txt_kern_pair_t public** `6625 <https://github.com/lvgl/lvgl/pull/6625>`__
|
||||
- **fix(nxp/vglite): fix stride calculation** `6613 <https://github.com/lvgl/lvgl/pull/6613>`__
|
||||
- **fix(vector): fix vector graphic draw test case for amd64** `6616 <https://github.com/lvgl/lvgl/pull/6616>`__
|
||||
- **fix(osal): initialize Windows thread sync correctly** `6604 <https://github.com/lvgl/lvgl/pull/6604>`__
|
||||
- **fix(tiny_ttf): fix no cache and formatting cleanup** `6568 <https://github.com/lvgl/lvgl/pull/6568>`__
|
||||
- **fix(vg_lite): remove pattern_color from label drawing** `6605 <https://github.com/lvgl/lvgl/pull/6605>`__
|
||||
- **fix(display): delete previous screen instead of current** `6494 <https://github.com/lvgl/lvgl/pull/6494>`__
|
||||
- **fix(docbuild): `@file` command arg mismatches** `6582 <https://github.com/lvgl/lvgl/pull/6582>`__
|
||||
- **fix(kconfig): Do not set LV_CONF_SKIP by default** `6562 <https://github.com/lvgl/lvgl/pull/6562>`__
|
||||
- **fix(property): fix style property** `6552 <https://github.com/lvgl/lvgl/pull/6552>`__
|
||||
- **fix(draw_buf): handle negative coordinates on the area to clear** `6510 <https://github.com/lvgl/lvgl/pull/6510>`__
|
||||
- **fix(draw_sw): do not recalculate target buffer stride** `6530 <https://github.com/lvgl/lvgl/pull/6530>`__
|
||||
- **fix(theme): make the text styles work on the INDICATOR's DEFAULT state** `6521 <https://github.com/lvgl/lvgl/pull/6521>`__
|
||||
- **fix(examples): fix typo in lv_port_indev_template.c** `6555 <https://github.com/lvgl/lvgl/pull/6555>`__
|
||||
- **fix(ci): fix micropython CI** `6546 <https://github.com/lvgl/lvgl/pull/6546>`__
|
||||
- **fix(vg_lite): fix draw pattern recolor error** `6525 <https://github.com/lvgl/lvgl/pull/6525>`__
|
||||
- **fix(sdl): make sure minimal alignment is sizeof(void*) for aligned alloc** `6526 <https://github.com/lvgl/lvgl/pull/6526>`__
|
||||
- **fix(pxp): use floorf instead of floor** `6516 <https://github.com/lvgl/lvgl/pull/6516>`__
|
||||
- **fix(anim): fix deleted_cb not called in lv_anim_delete_all** `6513 <https://github.com/lvgl/lvgl/pull/6513>`__
|
||||
- **fix(thorvg): support rendering in draw events** `6406 <https://github.com/lvgl/lvgl/pull/6406>`__
|
||||
- **fix(obj_tree): fix incorrect return value of function lv_obj_get_sibling_by_type()** `6503 <https://github.com/lvgl/lvgl/pull/6503>`__
|
||||
- **fix(test): fix filter option dot escape by setting regexp string** `6509 <https://github.com/lvgl/lvgl/pull/6509>`__
|
||||
- **fix(dave2d): fix rendering to canvas with dave2d** `6498 <https://github.com/lvgl/lvgl/pull/6498>`__
|
||||
- **fix(label): do not break last line for LV_LABEL_LONG_DOT (#5606)** `6362 <https://github.com/lvgl/lvgl/pull/6362>`__
|
||||
- **fix(ime): fix buffer-overflow error in pingyin IME** `6501 <https://github.com/lvgl/lvgl/pull/6501>`__
|
||||
- **fix(refr): eliminate side effect in assert** `6499 <https://github.com/lvgl/lvgl/pull/6499>`__
|
||||
- **fix(gif): add correct image header** `6472 <https://github.com/lvgl/lvgl/pull/6472>`__
|
||||
- **fix(vg_lite_tvg): fix path structure is not fully initialized** `6493 <https://github.com/lvgl/lvgl/pull/6493>`__
|
||||
- **fix(drivers): fix hardware rotation of generic mipi display** `6470 <https://github.com/lvgl/lvgl/pull/6470>`__
|
||||
- **fix(gen_json): fix bad LVGL header path** `6479 <https://github.com/lvgl/lvgl/pull/6479>`__
|
||||
- **fix(Windows): use global lock** `6425 <https://github.com/lvgl/lvgl/pull/6425>`__
|
||||
- **fix(decoder): use unsigned format spec with uint32_t's** `6457 <https://github.com/lvgl/lvgl/pull/6457>`__
|
||||
- **fix(draw_buf): skip palette cleanup** `6471 <https://github.com/lvgl/lvgl/pull/6471>`__
|
||||
- **fix(scroll): fix jumping on scroll end** `6393 <https://github.com/lvgl/lvgl/pull/6393>`__
|
||||
- **fix(gridnav): send focus/defocus event from gridnav key handler** `6385 <https://github.com/lvgl/lvgl/pull/6385>`__
|
||||
- **fix(nxp): fix rounded corner image in NXP vglite** `6436 <https://github.com/lvgl/lvgl/pull/6436>`__
|
||||
- **fix(codespace): enable builtin OBJID feature** `6417 <https://github.com/lvgl/lvgl/pull/6417>`__
|
||||
- **fix(conf): make comment requirement explicit** `6248 <https://github.com/lvgl/lvgl/pull/6248>`__
|
||||
- **fix(ap): fix ap map table** `6430 <https://github.com/lvgl/lvgl/pull/6430>`__
|
||||
- **fix(draw_buf): fix user defined draw_buf alloc/destroy not paired** `6426 <https://github.com/lvgl/lvgl/pull/6426>`__
|
||||
- **fix(x11): use normal malloc for frame buffer allocation** `6384 <https://github.com/lvgl/lvgl/pull/6384>`__
|
||||
- **fix(vg_lite): fix scissor setting error** `6420 <https://github.com/lvgl/lvgl/pull/6420>`__
|
||||
- **fix(examples): correct typo in widgets example doc** `6412 <https://github.com/lvgl/lvgl/pull/6412>`__
|
||||
- **fix(demo): make the music player correctly work with v9** `6302 <https://github.com/lvgl/lvgl/pull/6302>`__
|
||||
- **fix(indev): fix use after free of last hovered object** `6405 <https://github.com/lvgl/lvgl/pull/6405>`__
|
||||
- **fix(vg_lite): fix incorrect alpha handling** `6402 <https://github.com/lvgl/lvgl/pull/6402>`__
|
||||
- **fix(theme): set a default length for scale** `6359 <https://github.com/lvgl/lvgl/pull/6359>`__
|
||||
- **fix(spangroup): handle style_text_letter_space better** `6364 <https://github.com/lvgl/lvgl/pull/6364>`__
|
||||
- **fix(sdl): fix draw buffer misalignment** `6386 <https://github.com/lvgl/lvgl/pull/6386>`__
|
||||
- **fix(nuttx): fix build warning using nuttx** `6379 <https://github.com/lvgl/lvgl/pull/6379>`__
|
||||
- **fix(test): fix compile error on macos** `6377 <https://github.com/lvgl/lvgl/pull/6377>`__
|
||||
- **fix(fs_littlefs): fix maybe-uninitialized warning** `6380 <https://github.com/lvgl/lvgl/pull/6380>`__
|
||||
- **fix(thorvg): fix sw_engine crash** `6372 <https://github.com/lvgl/lvgl/pull/6372>`__
|
||||
- **fix(scale): fix the issue of needle sliding in scale** `6343 <https://github.com/lvgl/lvgl/pull/6343>`__
|
||||
- **fix(cmake): install headers correctly** `6332 <https://github.com/lvgl/lvgl/pull/6332>`__
|
||||
- **fix(animimage): add NULL pointer check** `6206 <https://github.com/lvgl/lvgl/pull/6206>`__
|
||||
- **fix(docs): fix Lottie document cannot view examples (#6338)** `6342 <https://github.com/lvgl/lvgl/pull/6342>`__
|
||||
- **fix(obj): fix memory leak in error handling** `6330 <https://github.com/lvgl/lvgl/pull/6330>`__
|
||||
- **fix(env): fix meson build break** `5745 <https://github.com/lvgl/lvgl/pull/5745>`__
|
||||
- **fix(drm): add tick_get_cb** `6306 <https://github.com/lvgl/lvgl/pull/6306>`__
|
||||
- **fix(dave2d): make it work without software render too** `6290 <https://github.com/lvgl/lvgl/pull/6290>`__
|
||||
- **fix(demo): lv_demo_widgets update scale3 needle and label pos on resize** `6258 <https://github.com/lvgl/lvgl/pull/6258>`__
|
||||
- **fix(example): lv_example_scale_3 second scale needle was scrollable** `6320 <https://github.com/lvgl/lvgl/pull/6320>`__
|
||||
- **fix(roller): enable lv_example_roller_3 again** `6307 <https://github.com/lvgl/lvgl/pull/6307>`__
|
||||
- **fix(math): fix compile warning** `6315 <https://github.com/lvgl/lvgl/pull/6315>`__
|
||||
- **fix(dave2d): fix warnings on non Cortex-M85** `6284 <https://github.com/lvgl/lvgl/pull/6284>`__
|
||||
- **fix(docs): Fix failing docs build in master since lottie** `6316 <https://github.com/lvgl/lvgl/pull/6316>`__
|
||||
- **fix(display): cancelled screen animation may block input indefinitely** `6277 <https://github.com/lvgl/lvgl/pull/6277>`__
|
||||
- **fix(obj): search child object using depth-first search** `6287 <https://github.com/lvgl/lvgl/pull/6287>`__
|
||||
- **fix(roller): avoid divided-by-zero during draw event** `6285 <https://github.com/lvgl/lvgl/pull/6285>`__
|
||||
- **fix(indev): fix elastic scrolling with snapping** `6230 <https://github.com/lvgl/lvgl/pull/6230>`__
|
||||
- **fix(benchmark): use the correct subject for performance data** `6237 <https://github.com/lvgl/lvgl/pull/6237>`__
|
||||
- **fix(layouts): fix rounding for fr in grid layout** `6255 <https://github.com/lvgl/lvgl/pull/6255>`__
|
||||
- **fix (dave2d) : remove __NOP(); and __BKPT(0);** `6228 <https://github.com/lvgl/lvgl/pull/6228>`__
|
||||
- **fix(sdl): handle if the window_id is not set correctly in SDL** `6194 <https://github.com/lvgl/lvgl/pull/6194>`__
|
||||
- **fix(drivers): drm driver not initialising with small screens** `6244 <https://github.com/lvgl/lvgl/pull/6244>`__
|
||||
- **fix(freetype): fix potential multi-threaded data conflicts** `6252 <https://github.com/lvgl/lvgl/pull/6252>`__
|
||||
- **fix(vglite): build issues ** `6245 <https://github.com/lvgl/lvgl/pull/6245>`__
|
||||
- **fix(canvas): lv_canvas_set_px for indexed images** `6226 <https://github.com/lvgl/lvgl/pull/6226>`__
|
||||
- **fix(snapshot): fix memleak in lv_snapshot** `6147 <https://github.com/lvgl/lvgl/pull/6147>`__
|
||||
- **fix(span): fix span incorrect max height calculation** `6243 <https://github.com/lvgl/lvgl/pull/6243>`__
|
||||
- **fix(refr): remove the unnecessary wait for flush in double buffered direct mode** `6120 <https://github.com/lvgl/lvgl/pull/6120>`__
|
||||
- **fix(display): load screen from matching display** `6189 <https://github.com/lvgl/lvgl/pull/6189>`__
|
||||
- **fix(roller): set the position of the selected text correctly** `6083 <https://github.com/lvgl/lvgl/pull/6083>`__
|
||||
- **fix(span): fix Chinese character incorrect break line** `6222 <https://github.com/lvgl/lvgl/pull/6222>`__
|
||||
- **fix(lv_msgbox): Automatically adjust msgbox's content height.** `6176 <https://github.com/lvgl/lvgl/pull/6176>`__
|
||||
- **fix(imagebutton): tiling regression** `6195 <https://github.com/lvgl/lvgl/pull/6195>`__
|
||||
- **fix(docs): fix broken links** `6207 <https://github.com/lvgl/lvgl/pull/6207>`__
|
||||
- **fix(sysmon): fix MicroPython compilation error when system monitor is enabled** `6073 <https://github.com/lvgl/lvgl/pull/6073>`__
|
||||
- **fix(fsdrv/fatfs): support FF_DIR and FATFS_DIR typedef in ff.h** `6128 <https://github.com/lvgl/lvgl/pull/6128>`__
|
||||
- **fix(scripts): remove scripts/release/ directory** `6134 <https://github.com/lvgl/lvgl/pull/6134>`__
|
||||
- **fix(arc): arc pressing bounds detection** `6188 <https://github.com/lvgl/lvgl/pull/6188>`__
|
||||
- **fix(refr): call flush_wait_cb only if flushing is in progress** `6174 <https://github.com/lvgl/lvgl/pull/6174>`__
|
||||
- **fix(event): stop event event processing when requested** `6113 <https://github.com/lvgl/lvgl/pull/6113>`__
|
||||
- **fix(nuttx): fix assert failed due to wrong color format** `6160 <https://github.com/lvgl/lvgl/pull/6160>`__
|
||||
- **fix(nuttx): fix compile warning** `6156 <https://github.com/lvgl/lvgl/pull/6156>`__
|
||||
- **fix(README): with corrected example code** `6151 <https://github.com/lvgl/lvgl/pull/6151>`__
|
||||
- **fix(example): fix the gradient text example** `6152 <https://github.com/lvgl/lvgl/pull/6152>`__
|
||||
- **fix(tests): fix check failed for `-Wno-c++11-extensions`** `6154 <https://github.com/lvgl/lvgl/pull/6154>`__
|
||||
- **fix(scroll): fix infinite loop in scroll_end events** `6109 <https://github.com/lvgl/lvgl/pull/6109>`__
|
||||
- **fix(vg_lite): fix incorrect cache operation** `6054 <https://github.com/lvgl/lvgl/pull/6054>`__
|
||||
- **fix(docs): fix typo for LV_KEYBOARD_MODE_SPECIAL** `6136 <https://github.com/lvgl/lvgl/pull/6136>`__
|
||||
- **fix(demo): fix compile warning** `6100 <https://github.com/lvgl/lvgl/pull/6100>`__
|
||||
- **fix(docs): use find_version helper in build script** `6122 <https://github.com/lvgl/lvgl/pull/6122>`__
|
||||
- **fix(docs): pull version out of lv_version.h** `6097 <https://github.com/lvgl/lvgl/pull/6097>`__
|
||||
- **fix(area): increase coordinate percent range beyond +-1000** `6051 <https://github.com/lvgl/lvgl/pull/6051>`__
|
||||
- **fix(cmake): generate versioned shared libraries** `5865 <https://github.com/lvgl/lvgl/pull/5865>`__
|
||||
- **fix(image): set the draw_task area correctly for tiled image** `6029 <https://github.com/lvgl/lvgl/pull/6029>`__
|
||||
- **fix(encoder): always fire LV_EVENT_LONG_PRESSED to indev callback** `6064 <https://github.com/lvgl/lvgl/pull/6064>`__
|
||||
- **fix(vg_lite):check the color format before alloc layer buffer** `6071 <https://github.com/lvgl/lvgl/pull/6071>`__
|
||||
- **fix(lodepng): fix crash when fallback from lodepng decoder** `6079 <https://github.com/lvgl/lvgl/pull/6079>`__
|
||||
- **fix(scroll): fix deletion animation causing missing scroll end event** `5979 <https://github.com/lvgl/lvgl/pull/5979>`__
|
||||
- **fix(evdev): add missing include for strerror** `6047 <https://github.com/lvgl/lvgl/pull/6047>`__
|
||||
- **fix(canvas): invalidate canvas on finish layer** `6042 <https://github.com/lvgl/lvgl/pull/6042>`__
|
||||
- **fix(bin_decoder): fix memory leak** `5990 <https://github.com/lvgl/lvgl/pull/5990>`__
|
||||
- **fix(font): fix the include path of lvgl.h** `6050 <https://github.com/lvgl/lvgl/pull/6050>`__
|
||||
- **fix(kconfig): add Montserrat 10 font to default title font list in Kconfig (#6057)** `6058 <https://github.com/lvgl/lvgl/pull/6058>`__
|
||||
- **fix(style): refresh the style on transition start** `6043 <https://github.com/lvgl/lvgl/pull/6043>`__
|
||||
- **fix(canvas): fix buf copy assert msg error** `6063 <https://github.com/lvgl/lvgl/pull/6063>`__
|
||||
- **fix(display): update the color format of the draw buffers on color format change** `5973 <https://github.com/lvgl/lvgl/pull/5973>`__
|
||||
- **fix(label): fix maybe-uninitialized warning** `6028 <https://github.com/lvgl/lvgl/pull/6028>`__
|
||||
- **fix(draw): fix the default draw thread stack is too large** `5951 <https://github.com/lvgl/lvgl/pull/5951>`__
|
||||
- **fix(driver): lv_x11_input.c fixes** `6033 <https://github.com/lvgl/lvgl/pull/6033>`__
|
||||
- **fix(example): LVGL_Arduino.ino millis() as tick source** `5999 <https://github.com/lvgl/lvgl/pull/5999>`__
|
||||
- **fix(textarea): update password bullets immediately on set** `5943 <https://github.com/lvgl/lvgl/pull/5943>`__
|
||||
- **fix(nuttx): fix gesture event failure** `5996 <https://github.com/lvgl/lvgl/pull/5996>`__
|
||||
- **fix(fbdev): set resolution prior to buffer** `6004 <https://github.com/lvgl/lvgl/pull/6004>`__
|
||||
- **fix(thorvg): fix windows build break** `5978 <https://github.com/lvgl/lvgl/pull/5978>`__
|
||||
- **fix(kconfig): update as per lv_conf_template.h** `5980 <https://github.com/lvgl/lvgl/pull/5980>`__
|
||||
- **fix(anim): optimize repeat_count type** `5975 <https://github.com/lvgl/lvgl/pull/5975>`__
|
||||
- **fix(rtthread): implement lv_strcat function in rt-thread due to absence of rt_strcat** `5920 <https://github.com/lvgl/lvgl/pull/5920>`__
|
||||
- **fix(span): handle trailing newline** `5957 <https://github.com/lvgl/lvgl/pull/5957>`__
|
||||
- **fix(sdl_keyboard): fix warning of the implicit declaration of function memmove** `5962 <https://github.com/lvgl/lvgl/pull/5962>`__
|
||||
- **fix(obj_tree): fix event loss caused by obj deletion** `5950 <https://github.com/lvgl/lvgl/pull/5950>`__
|
||||
- **fix(sdl): handle both LV_IMAGE_SRC_FILE and LV_IMAGE_SRC_VARIABLE** `5852 <https://github.com/lvgl/lvgl/pull/5852>`__
|
||||
- **fix(demos): update README to match lv_demos.c** `5939 <https://github.com/lvgl/lvgl/pull/5939>`__
|
||||
- **fix(flex): LV_FLEX_ALIGN_SPACE_BETWEEN align single item left** `5915 <https://github.com/lvgl/lvgl/pull/5915>`__
|
||||
- **fix(platformio): fix CI to automatically publish release** `5924 <https://github.com/lvgl/lvgl/pull/5924>`__
|
||||
- **fix(script): update RLE compressed image raw len without padding** `dd70291 <https://github.com/lvgl/lvgl/commit/dd70291e4cfe152c28750192d0241def8e012625>`__
|
||||
- **fix(image): image inner align name should not conflict with obj's align** `d6495b5 <https://github.com/lvgl/lvgl/commit/d6495b576b5c1cbdcde03c5de4350423d59077fa>`__
|
||||
- **fix(refr): NOT draw if scale is 0** `1d647ad <https://github.com/lvgl/lvgl/commit/1d647adaef6e346c1b7e09af8123099973fe0d47>`__
|
||||
- **fix(sdl): fix build warning** `9a91368 <https://github.com/lvgl/lvgl/commit/9a913684f04030d99be8341f80a78fb01ddd4ae8>`__
|
||||
- **fix(script): add per image attribute for C array** `124086c <https://github.com/lvgl/lvgl/commit/124086cb1b4d4b2009d302b8183e9ec577dad13b>`__
|
||||
- **fix(anim): fix lv_anim_set_repeat_count configuration parameter may be truncated** `6e3f686 <https://github.com/lvgl/lvgl/commit/6e3f6866cb71e831927d8deb9b732ff138a98a42>`__
|
||||
- **fix(draw_buf): use LV_ROUND_UP to align draw buffer address** `79b64c8 <https://github.com/lvgl/lvgl/commit/79b64c8bd8f2ee51df6954fe0e0b5fbf58ff85db>`__
|
||||
- **fix(bin_decoder): check buffer size before write data** `75eef0d <https://github.com/lvgl/lvgl/commit/75eef0d209dfc96bf87d9d83b30eaee3e21b9f14>`__
|
||||
- **fix(property): support user added property index** `c191ecb <https://github.com/lvgl/lvgl/commit/c191ecbfb60d628252d3cb012a5a216f2b7f23d3>`__
|
||||
- **fixed compile error on line 402 when using two SDL frame buffers** `7722f0f <https://github.com/lvgl/lvgl/commit/7722f0f5ce8c6a102702242e6ed4ec02b8f33e28>`__
|
||||
- **fix(animimg): Optimize the structure size of animations** `150d1a1 <https://github.com/lvgl/lvgl/commit/150d1a1d371ab23406a61a7afcad408d63ec30e4>`__
|
||||
- **fix(obj): avoid to init NULL obj** `9e3ea81 <https://github.com/lvgl/lvgl/commit/9e3ea81ddebe9b5f48256e657ba0bc228a7ff0a3>`__
|
||||
- **fix(thorvg): use premultiplied images in SW render** `f34ec4b <https://github.com/lvgl/lvgl/commit/f34ec4b671c599eea1d1b7c2c172c1732566dea4>`__
|
||||
|
||||
Examples
|
||||
~~~~~~~~
|
||||
- **fix(kconfig): add LV_ATTRIBUTE_MEM_ALIGN, LV_ATTRIBUTE_LARGE_CONST and LV_SYSMON_GET_IDLE configs** `7131 <https://github.com/lvgl/lvgl/pull/7131>`__
|
||||
- **fix(display): remove lv_display_set_buffers_with_stride function** `7087 <https://github.com/lvgl/lvgl/pull/7087>`__
|
||||
- **fix(pxp): sync rotation direction with SW render** `7063 <https://github.com/lvgl/lvgl/pull/7063>`__
|
||||
- **fix(vg_lite): fix image transform clipping area error** `6810 <https://github.com/lvgl/lvgl/pull/6810>`__
|
||||
- **fix(vg_lite): select blend mode based on premultiplication** `6766 <https://github.com/lvgl/lvgl/pull/6766>`__
|
||||
- **fix(layout): calculate content width using x alignment** `6948 <https://github.com/lvgl/lvgl/pull/6948>`__
|
||||
- **fix(calendar): fix lv_calendar_gregorian_to_chinese compile error** `6894 <https://github.com/lvgl/lvgl/pull/6894>`__
|
||||
- **fix(indev): fix hovering disabled obj resets indev** `6855 <https://github.com/lvgl/lvgl/pull/6855>`__
|
||||
- **fix(gif): added bounds check in gif decoder** `6863 <https://github.com/lvgl/lvgl/pull/6863>`__
|
||||
- **fix(freertos): sync signal from isr fixed** `6793 <https://github.com/lvgl/lvgl/pull/6793>`__
|
||||
- **fix(draw): fix sw compile error when disable LV_DRAW_SW_COMPLEX** `6895 <https://github.com/lvgl/lvgl/pull/6895>`__
|
||||
- **fix(libinput): private headers** `6869 <https://github.com/lvgl/lvgl/pull/6869>`__
|
||||
- **fix(color): add missing ARGB8565 alpha check** `6891 <https://github.com/lvgl/lvgl/pull/6891>`__
|
||||
- **fix(display): remove the unused sw_rotate field** `6866 <https://github.com/lvgl/lvgl/pull/6866>`__
|
||||
- **fix(bar): fix bit overflow** `6841 <https://github.com/lvgl/lvgl/pull/6841>`__
|
||||
- **fix(indev): don't wait until release when a new object is found** `6831 <https://github.com/lvgl/lvgl/pull/6831>`__
|
||||
- **fix(glfw/opengles): fix buf_size calculation error** `6830 <https://github.com/lvgl/lvgl/pull/6830>`__
|
||||
- **fix(roller): fix stringop overflow** `6826 <https://github.com/lvgl/lvgl/pull/6826>`__
|
||||
- **fix(perf): perf monitor FPS** `6798 <https://github.com/lvgl/lvgl/pull/6798>`__
|
||||
- **fix(micropython): missing bidi private header feature guard** `6801 <https://github.com/lvgl/lvgl/pull/6801>`__
|
||||
- **fix(draw): fix artifact when rotating ARGB8888 images** `6794 <https://github.com/lvgl/lvgl/pull/6794>`__
|
||||
- **fix(sdl): check against NULL before using the driver data of a display** `6799 <https://github.com/lvgl/lvgl/pull/6799>`__
|
||||
- **fix(assets): add missing strides** `6790 <https://github.com/lvgl/lvgl/pull/6790>`__
|
||||
- **fix(arc): ignore hits that are outside drawn background arc** `6753 <https://github.com/lvgl/lvgl/pull/6753>`__
|
||||
- **fix(vg_lite): fixed clip_radius image cropping error** `6780 <https://github.com/lvgl/lvgl/pull/6780>`__
|
||||
- **fix(vg_lite/vector): convert gradient matrix to global matrix** `6577 <https://github.com/lvgl/lvgl/pull/6577>`__
|
||||
- **fix(spangroup): fix height calculation error** `6775 <https://github.com/lvgl/lvgl/pull/6775>`__
|
||||
- **fix(buttonmatrix): use const arrays** `6765 <https://github.com/lvgl/lvgl/pull/6765>`__
|
||||
- **fix(ime): fix ime crash when input_char is too long** `6767 <https://github.com/lvgl/lvgl/pull/6767>`__
|
||||
- **fix(draw): cast color_format in LV_DRAW_BUF_INIT_STATIC** `6729 <https://github.com/lvgl/lvgl/pull/6729>`__
|
||||
- **fix(sdl): nested comment is not allowed** `6748 <https://github.com/lvgl/lvgl/pull/6748>`__
|
||||
- **fix(ime_pinyin): fix letter count wrong when using some dictionary** `6752 <https://github.com/lvgl/lvgl/pull/6752>`__
|
||||
- **fix(anim): use correct variable `repeat_cnt`** `6757 <https://github.com/lvgl/lvgl/pull/6757>`__
|
||||
- **fix(image): backport lv_image_set_inner_align() behaviour with LV_IMAGE_ALIGN_… (#6864)** `6946 <https://github.com/lvgl/lvgl/pull/6946>`__
|
||||
- **fix(fs): backport add lv_fs_dir_t to lv_fs.h (#6925)** `6943 <https://github.com/lvgl/lvgl/pull/6943>`__
|
||||
- **fix(textarea): fix placeholder text cannot be centered** `6879 <https://github.com/lvgl/lvgl/pull/6879>`__
|
||||
- **fix(Kconfig): Fix non existant LV_STDLIB_BUILTIN (#6851)** `84346f3 <https://github.com/lvgl/lvgl/commit/84346f3ef208ca30d22e61de30e3d9a329142960>`__
|
||||
- **fix(dropdown): automatically center dropdown content (#6881)** `e961669 <https://github.com/lvgl/lvgl/commit/e961669dd8ae7dc5355e4209cb717eb1674cf453>`__
|
||||
- **fix(vglite) set cache invalidation callback for all handlers** `64beb5f <https://github.com/lvgl/lvgl/commit/64beb5f811e9ad119b28ad976b2e252a41f4b5ae>`__
|
||||
- **fix(vglite): Set buffer stride as required by hardware** `c369054 <https://github.com/lvgl/lvgl/commit/c3690544d5b384fa6d2f8d26838a6e1cd976feac>`__
|
||||
- **fix(sysmon) disable all performance banners from screen with serial redirect** `51e1dfc <https://github.com/lvgl/lvgl/commit/51e1dfcb40c52eb194138c7a4afadc828eb8c4bb>`__
|
||||
- **fix(vglite) draw when multiple draw units are available** `a109608 <https://github.com/lvgl/lvgl/commit/a1096088062a37f6f5726790b8d947cf9bb7600c>`__
|
||||
- **fix(vglite) triangle gradient areas fix** `5b837eb <https://github.com/lvgl/lvgl/commit/5b837eb7276c42a620235f544178b69d3f8501d1>`__
|
||||
- **fix(pxp): Initialize all required handlers** `0f9f322 <https://github.com/lvgl/lvgl/commit/0f9f322733bb9b5709c5da4fd6bba58862461b8a>`__
|
||||
- **fix(vglite) Small cleanup.** `c3ec922 <https://github.com/lvgl/lvgl/commit/c3ec922708aeaaf0c90abadc9f533b6edab54995>`__
|
||||
- **fix(pxp) Small cleanup.** `29c9770 <https://github.com/lvgl/lvgl/commit/29c977042e317c741e874338af26041deb97925a>`__
|
||||
- **fix(pxp) Fixed include header.** `7275e1f <https://github.com/lvgl/lvgl/commit/7275e1fff632d5271a6a16a869a595a8799476fa>`__
|
||||
- **fix(style): remove transitions when a local style property is set (#6941)** `3d33421 <https://github.com/lvgl/lvgl/commit/3d3342104f390e8b0f0447db5c13dc0619070c2f>`__
|
||||
- **fix(conf) Remove empty line to make comment more condens.** `8658411 <https://github.com/lvgl/lvgl/commit/8658411a2f5670468d105849d63a5705885ff1dc>`__
|
||||
- **fix(pxp) invalidate cache for the whole frame buffer** `6dd7b3a <https://github.com/lvgl/lvgl/commit/6dd7b3a97862b1f6fa49f23d8afb76becd8088a8>`__
|
||||
- **fix(vglite) invalidate cache for the whole frame buffer** `a634dea <https://github.com/lvgl/lvgl/commit/a634deade4709185c260afe1c038aed0291c3310>`__
|
||||
- **fix(fs): add lv_fs_dir_t to lv_fs.h (#6925)** `c826f31 <https://github.com/lvgl/lvgl/commit/c826f31f0014c0d45311cda25effb36d1f801841>`__
|
||||
|
||||
Docs
|
||||
~~~~
|
||||
|
||||
- **docs(label): fix unintentional definition list in parts and styles section** `6735 <https://github.com/lvgl/lvgl/pull/6735>`__
|
||||
- **docs(arm): add overview docs for Arm** `6712 <https://github.com/lvgl/lvgl/pull/6712>`__
|
||||
- **docs(obj): fix typo of LV_OBJ_FLAG_IGNORE_LAYOUT** `6713 <https://github.com/lvgl/lvgl/pull/6713>`__
|
||||
- **docs(espressif): Update Espressif's documentation with esp_lvgl_port** `6658 <https://github.com/lvgl/lvgl/pull/6658>`__
|
||||
- **docs(scale): Add note about major tick label calculation when no custom labels are set** `6585 <https://github.com/lvgl/lvgl/pull/6585>`__
|
||||
- **docs: Added docs for BDF fonts** `6398 <https://github.com/lvgl/lvgl/pull/6398>`__
|
||||
- **docs(qnx): reflect on the changed build directory** `6583 <https://github.com/lvgl/lvgl/pull/6583>`__
|
||||
- **docs(example): complete the examples not cited in the docs** `6608 <https://github.com/lvgl/lvgl/pull/6608>`__
|
||||
- **docs(msgbox): update to reflect latest** `6603 <https://github.com/lvgl/lvgl/pull/6603>`__
|
||||
- **docs: add VG-Lite related documents** `6557 <https://github.com/lvgl/lvgl/pull/6557>`__
|
||||
- **docs(qnx): add to index.rst** `6572 <https://github.com/lvgl/lvgl/pull/6572>`__
|
||||
- **docs: fix flush_cb typo** `6523 <https://github.com/lvgl/lvgl/pull/6523>`__
|
||||
- **docs: update the drivers description** `6423 <https://github.com/lvgl/lvgl/pull/6423>`__
|
||||
- **docs(renesas): update board videos, fix typos** `6429 <https://github.com/lvgl/lvgl/pull/6429>`__
|
||||
- **docs(README): fix broken images** `6404 <https://github.com/lvgl/lvgl/pull/6404>`__
|
||||
- **docs(build): fix build error** `6403 <https://github.com/lvgl/lvgl/pull/6403>`__
|
||||
- **docs(README): fix links** `6383 <https://github.com/lvgl/lvgl/pull/6383>`__
|
||||
- **docs(tileview): fix tileview column/row argument order** `6388 <https://github.com/lvgl/lvgl/pull/6388>`__
|
||||
- **docs: add evdev documentation** `6376 <https://github.com/lvgl/lvgl/pull/6376>`__
|
||||
- **docs(examples): add the gradient examples** `6328 <https://github.com/lvgl/lvgl/pull/6328>`__
|
||||
- **docs(quick-overview): update indev create to v9** `6282 <https://github.com/lvgl/lvgl/pull/6282>`__
|
||||
- **docs(lottie): fix missing lottie link on the widgets index** `6272 <https://github.com/lvgl/lvgl/pull/6272>`__
|
||||
- **docs(quick-overview): clarify which folders are required** `6250 <https://github.com/lvgl/lvgl/pull/6250>`__
|
||||
- **docs(simulator): update simulator page and mention lv_port_linux** `6205 <https://github.com/lvgl/lvgl/pull/6205>`__
|
||||
- **docs: simplify the find_version script and fix shellcheck report in it** `6133 <https://github.com/lvgl/lvgl/pull/6133>`__
|
||||
- **docs(coord): fix the layout of overview** `6112 <https://github.com/lvgl/lvgl/pull/6112>`__
|
||||
- **docs: fix example build break** `6114 <https://github.com/lvgl/lvgl/pull/6114>`__
|
||||
- **docs(obj): fix add/remove flag documentation** `6067 <https://github.com/lvgl/lvgl/pull/6067>`__
|
||||
- **docs(calendar): move instruction to the usage section** `6045 <https://github.com/lvgl/lvgl/pull/6045>`__
|
||||
- **docs: fix typo in the comments [ci skip]** `6027 <https://github.com/lvgl/lvgl/pull/6027>`__
|
||||
- **docs(renesas): fix the links** `5977 <https://github.com/lvgl/lvgl/pull/5977>`__
|
||||
- **docs(renesas): add a general introduction page** `5969 <https://github.com/lvgl/lvgl/pull/5969>`__
|
||||
- **docs(changelog): fixed changelog displaying no line breaks** `5931 <https://github.com/lvgl/lvgl/pull/5931>`__
|
||||
- **docs: update changelog** `5923 <https://github.com/lvgl/lvgl/pull/5923>`__
|
||||
- **docs(global): decoration should be as long as the text** `5ed3a06 <https://github.com/lvgl/lvgl/commit/5ed3a064c1169766bcb2b6a9cd93ff6f4f145e07>`__
|
||||
- **docs(renesas): update links** `be4a9d1 <https://github.com/lvgl/lvgl/commit/be4a9d1e735f191151aae5acf4a2018ca2e86f0b>`__
|
||||
- **docs(faq): lv_display_t, lv_indev_t, and lv_fs_drv_t doesn't have to be static** `1dfd782 <https://github.com/lvgl/lvgl/commit/1dfd7827148543d156a1c2ac8614c9f99054672e>`__
|
||||
|
||||
CI and tests
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- **ci(sdl): add sdl build to ci test** `6505 <https://github.com/lvgl/lvgl/pull/6505>`__
|
||||
- **ci(micropython): improve logs** `6257 <https://github.com/lvgl/lvgl/pull/6257>`__
|
||||
- **test(span): add span testcase for Chinese line break** `6236 <https://github.com/lvgl/lvgl/pull/6236>`__
|
||||
- **ci(test): fix include path** `6141 <https://github.com/lvgl/lvgl/pull/6141>`__
|
||||
- **ci(ubuntu):ci use ubuntu-2204** `6213 <https://github.com/lvgl/lvgl/pull/6213>`__
|
||||
- **ci(stale): do not mark shaping and ready for development issues as stale** `6086 <https://github.com/lvgl/lvgl/pull/6086>`__
|
||||
- **ci: use ubuntu-22.04 instead of ubuntu-latest** `6032 <https://github.com/lvgl/lvgl/pull/6032>`__
|
||||
- **ci(test): remove non-native builds and add native 32 and 64 bit builds instead** `f2e81d8 <https://github.com/lvgl/lvgl/commit/f2e81d80b37214eb72a2b21efd658817d928ac1e>`__
|
||||
- **docs(CHANGELOG): fix formatting** `72dfc1d <https://github.com/lvgl/lvgl/commit/72dfc1d75198a126dd495483d9cbc5b27c6c882b>`__
|
||||
- **docs(PXP): update PXP for rotation only feature** `da74d69 <https://github.com/lvgl/lvgl/commit/da74d6983b832637c9553d67f0133b63f260eafb>`__
|
||||
|
||||
Others
|
||||
~~~~~~
|
||||
|
||||
- **chore(api): add api map for v9.1** `6733 <https://github.com/lvgl/lvgl/pull/6733>`__
|
||||
- **chore: move the astyle repo to the lvgl organization** `6614 <https://github.com/lvgl/lvgl/pull/6614>`__
|
||||
- **chore(docs): update Zephyr documentation** `6581 <https://github.com/lvgl/lvgl/pull/6581>`__
|
||||
- **chore(display): prevent disp_refr from becoming a wild pointer** `6618 <https://github.com/lvgl/lvgl/pull/6618>`__
|
||||
- **chore(demos/README.md): fix typo `LV_MEME_SIZE`** `6669 <https://github.com/lvgl/lvgl/pull/6669>`__
|
||||
- **chore(tiny_ttf): fix docstring on each API** `6514 <https://github.com/lvgl/lvgl/pull/6514>`__
|
||||
- **chore(text): update ISO8859-1 text functions' docstring** `6590 <https://github.com/lvgl/lvgl/pull/6590>`__
|
||||
- **chore(deps): bump carlosperate/arm-none-eabi-gcc-action from 1.8.2 to 1.9.0** `6620 <https://github.com/lvgl/lvgl/pull/6620>`__
|
||||
- **chore(deps): bump JamesIves/github-pages-deploy-action from 4.6.1 to 4.6.3** `6621 <https://github.com/lvgl/lvgl/pull/6621>`__
|
||||
- **chore(api_map_v8): API for adapting imagebutton for version V8** `6641 <https://github.com/lvgl/lvgl/pull/6641>`__
|
||||
- **refactor(API): don't expose private symbols in lvgl.h. phase-out "_lv*" names** `6068 <https://github.com/lvgl/lvgl/pull/6068>`__
|
||||
- **chore(tests): remove vg_lite L8 render reference images** `6606 <https://github.com/lvgl/lvgl/pull/6606>`__
|
||||
- **chore: make lv_utils as public and align function prototype with stdlib** `6473 <https://github.com/lvgl/lvgl/pull/6473>`__
|
||||
- **refactor(tiny_fft): refactor tiny_ttf cache with updated improvements** `6441 <https://github.com/lvgl/lvgl/pull/6441>`__
|
||||
- **chore(sdl): fix warning** `6483 <https://github.com/lvgl/lvgl/pull/6483>`__
|
||||
- **chore(rt-thread): revert macro back to PKG_USING_LVGL_SQUARELINE** `6481 <https://github.com/lvgl/lvgl/pull/6481>`__
|
||||
- **chore(vg_lite): remove YUV format processing of vg-lite decoder** `6461 <https://github.com/lvgl/lvgl/pull/6461>`__
|
||||
- **chore(logo): update lvgl logo** `6416 <https://github.com/lvgl/lvgl/pull/6416>`__
|
||||
- **chore(examples): fixes a typo in the Arduino example** `6464 <https://github.com/lvgl/lvgl/pull/6464>`__
|
||||
- **chore(tests): add missing test images** `6452 <https://github.com/lvgl/lvgl/pull/6452>`__
|
||||
- **chore(examples): remove extra spaces** `6435 <https://github.com/lvgl/lvgl/pull/6435>`__
|
||||
- **chore(scale): fix compile warning** `6445 <https://github.com/lvgl/lvgl/pull/6445>`__
|
||||
- **chore: fix spelling** `6401 <https://github.com/lvgl/lvgl/pull/6401>`__
|
||||
- **chore(lvgl_private): remove unnecessary private header file includes** `6418 <https://github.com/lvgl/lvgl/pull/6418>`__
|
||||
- **chore(draw_vector): complete printing information** `6399 <https://github.com/lvgl/lvgl/pull/6399>`__
|
||||
- **refact(draw_vector): standardized draw gradient API** `6344 <https://github.com/lvgl/lvgl/pull/6344>`__
|
||||
- **chore(test): fix render test typo** `6370 <https://github.com/lvgl/lvgl/pull/6370>`__
|
||||
- **chore(widgets): fix typo** `6369 <https://github.com/lvgl/lvgl/pull/6369>`__
|
||||
- **chore(decoder): use trace level of log** `6361 <https://github.com/lvgl/lvgl/pull/6361>`__
|
||||
- **chore(test): add missing vg-lite ref images** `6363 <https://github.com/lvgl/lvgl/pull/6363>`__
|
||||
- **chore(obj_pos): fix typo** `6336 <https://github.com/lvgl/lvgl/pull/6336>`__
|
||||
- **chore(deps): bump JamesIves/github-pages-deploy-action from 4.6.0 to 4.6.1** `6323 <https://github.com/lvgl/lvgl/pull/6323>`__
|
||||
- **chore(deps): bump carlosperate/arm-none-eabi-gcc-action from 1.8.1 to 1.8.2** `6322 <https://github.com/lvgl/lvgl/pull/6322>`__
|
||||
- **chore(example): fix build break caused by undefined LV_USE_DRAW_SW_COMPLEX_GRADIENTS** `6286 <https://github.com/lvgl/lvgl/pull/6286>`__
|
||||
- **chore(log): remove \n from log message** `6276 <https://github.com/lvgl/lvgl/pull/6276>`__
|
||||
- **Revert "feat(pxp): add zephyr support"** `6261 <https://github.com/lvgl/lvgl/pull/6261>`__
|
||||
- **Add LVGL9 demos to esp.cmake** `6220 <https://github.com/lvgl/lvgl/pull/6220>`__
|
||||
- **chore(group): remove useless code** `6124 <https://github.com/lvgl/lvgl/pull/6124>`__
|
||||
- **refactor(image_decoder): extract cache operation to image decoder from decoder instance** `6155 <https://github.com/lvgl/lvgl/pull/6155>`__
|
||||
- **chore(image_decoder): fix compile error when compiling testcase** `6223 <https://github.com/lvgl/lvgl/pull/6223>`__
|
||||
- **chore: fix compile error** `6224 <https://github.com/lvgl/lvgl/pull/6224>`__
|
||||
- **refactor(nuttx_image_cache): remove LV_CACHE_DEF_SIZE dependency** `6178 <https://github.com/lvgl/lvgl/pull/6178>`__
|
||||
- **chore(deps): bump JamesIves/github-pages-deploy-action from 4.5.0 to 4.6.0** `6164 <https://github.com/lvgl/lvgl/pull/6164>`__
|
||||
- **chore(deps): bump uraimo/run-on-arch-action from 2.7.1 to 2.7.2** `6165 <https://github.com/lvgl/lvgl/pull/6165>`__
|
||||
- **chore(nuttx_image_cache): optimize inlucde** `6177 <https://github.com/lvgl/lvgl/pull/6177>`__
|
||||
- **chore(draw_sw): optimize lv_draw_sw_rotate judgment logic** `6148 <https://github.com/lvgl/lvgl/pull/6148>`__
|
||||
- **chore(cmsis-pack): monthly catch-up** `6129 <https://github.com/lvgl/lvgl/pull/6129>`__
|
||||
- **chore(style): use lv_part_t type where suitable** `6075 <https://github.com/lvgl/lvgl/pull/6075>`__
|
||||
- **chore(decoder): update comments** `6072 <https://github.com/lvgl/lvgl/pull/6072>`__
|
||||
- **chore(lodepng): fix typo** `6077 <https://github.com/lvgl/lvgl/pull/6077>`__
|
||||
- **chore: update some code and docs to use v9 API** `5876 <https://github.com/lvgl/lvgl/pull/5876>`__
|
||||
- **chore(text): move "_" funcs to private h** `5913 <https://github.com/lvgl/lvgl/pull/5913>`__
|
||||
- **chore(vg_lite_tvg): fix build warnings** `5984 <https://github.com/lvgl/lvgl/pull/5984>`__
|
||||
- **chore(kconfig): move use_vector to correct place** `5995 <https://github.com/lvgl/lvgl/pull/5995>`__
|
||||
- **chore(vg_lite): fix typo** `5993 <https://github.com/lvgl/lvgl/pull/5993>`__
|
||||
- **chore(vg_lite): remove duplicate parameter judgments** `5960 <https://github.com/lvgl/lvgl/pull/5960>`__
|
||||
- **chore(PR): modify the astyle version description in PR** `5963 <https://github.com/lvgl/lvgl/pull/5963>`__
|
||||
- **chore(cmsis-pack): minor update** `5948 <https://github.com/lvgl/lvgl/pull/5948>`__
|
||||
- **chore(observer): rename lv_button_bind_checked to lv_obj_bind_checked** `5944 <https://github.com/lvgl/lvgl/pull/5944>`__
|
||||
- **refactor(font): refactor font glyph data acquire method** `5884 <https://github.com/lvgl/lvgl/pull/5884>`__
|
||||
- **Optimize lv_color_16_16_mix() when c1 == c2** `5929 <https://github.com/lvgl/lvgl/pull/5929>`__
|
||||
- **chore(cache): adjust includes** `5921 <https://github.com/lvgl/lvgl/pull/5921>`__
|
||||
- **refacter(conf): use defines for standard includes** `5767 <https://github.com/lvgl/lvgl/pull/5767>`__
|
||||
- **refactor(image_decoder): refactor image decoder and image cache** `5890 <https://github.com/lvgl/lvgl/pull/5890>`__
|
||||
- **refactor(draw_buff): separate all image cache related draw buff into image_cache_draw_buff** `417d78b <https://github.com/lvgl/lvgl/commit/417d78bead6735b54827b5f5994685994266ef7e>`__
|
||||
- **refactor(image_decoder): refactor get_info so that it can pass params via dsc** `001b483 <https://github.com/lvgl/lvgl/commit/001b4835ba2e7a7c41fa6266a73122af14b217db>`__
|
||||
- **refactor(display_rotate_area): use a copy instead of const casting** `20bbe4a <https://github.com/lvgl/lvgl/commit/20bbe4a8ac33b2c8d8f44015aa1838c9e17f40cb>`__
|
||||
- **chore(Makefile): remove useless macro LV_USE_DEV_VERSION** `9b3e8ee <https://github.com/lvgl/lvgl/commit/9b3e8eec6da492026ed4557f5876252079c7eaa0>`__
|
||||
- **chore(vg_lite): remove unnecessary buffer checks** `6921 <https://github.com/lvgl/lvgl/pull/6921>`__
|
||||
- **chore: fix compile warnings** `6975 <https://github.com/lvgl/lvgl/pull/6975>`__
|
||||
- **chore(Kconfig): add version info to Kconfig file to check mismatch** `6900 <https://github.com/lvgl/lvgl/pull/6900>`__
|
||||
|
||||
- **chore(cmsis-pack): create cmsis-pack for v9.2.1 patch (#7092)** `efd965c <https://github.com/lvgl/lvgl/commit/efd965c4c109f4370afa968f9feb11113fb6845c>`__
|
||||
- **chore: update the version number to v9.2.1** `7c3b20d <https://github.com/lvgl/lvgl/commit/7c3b20d9f2e72b7812e9f453b513d87208505abe>`__
|
||||
- **chore: cleanup after adding fixes from master** `0b4a188 <https://github.com/lvgl/lvgl/commit/0b4a188c0b0fd1c6076a1d91d8bd89dcaf4a4def>`__
|
||||
|
||||
@@ -36,7 +36,9 @@ PXP accelerator
|
||||
Basic configuration:
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- Select NXP PXP engine in "lv_conf.h": Set :c:macro:`LV_USE_DRAW_PXP` to `1`.
|
||||
- Select NXP PXP engine in "lv_conf.h": Set :c:macro:`LV_USE_PXP` to `1`.
|
||||
- In order to use PXP as a draw unit, select in "lv_conf.h": Set :c:macro:`LV_USE_DRAW_PXP` to `1`.
|
||||
- In order to use PXP to rotate the screen, select in "lv_conf.h": Set :c:macro:`LV_USE_ROTATE_PXP` to `1`.
|
||||
- Enable PXP asserts in "lv_conf.h": Set :c:macro: `LV_USE_PXP_ASSERT` to `1`.
|
||||
There are few PXP assertions that can stop the program execution in case the
|
||||
c:macro: `LV_ASSERT_HANDLER` is set to `while(1);` (Halt by default). Else,
|
||||
@@ -48,16 +50,16 @@ Basic initialization:
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
PXP draw initialization is done automatically in :cpp:func:`lv_init()` once the
|
||||
PXP is enabled, no user code is required:
|
||||
PXP is enabled as a draw unit or to rotate the screen, no user code is required:
|
||||
|
||||
.. code:: c
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP
|
||||
lv_draw_pxp_init();
|
||||
#endif
|
||||
|
||||
During PXP initialization, a new draw unit `lv_draw_pxp_unit_t` will be created
|
||||
with the additional callbacks:
|
||||
with the additional callbacks, if :c:macro:`LV_USE_DRAW_PXP` is set to `1`:
|
||||
|
||||
.. code:: c
|
||||
|
||||
|
||||
@@ -33,6 +33,16 @@ Image sources
|
||||
To set the image in a state, use the
|
||||
:cpp:expr:`lv_animimg_set_src(imagebutton, dsc[], num)`.
|
||||
|
||||
Using the inner animation
|
||||
-------------------------
|
||||
|
||||
For more advanced use cases, the animation internally used by the image can be
|
||||
retrieved using the :cpp:expr:`lv_animimg_get_anim(image)`. This way, the
|
||||
:ref:`Animation <animations>` functions can be used, for example to
|
||||
override the animation values using the
|
||||
:cpp:expr:`lv_anim_set_values(anim, start, end)` or to set a callback
|
||||
on the animation completed event.
|
||||
|
||||
.. _lv_animimg_events:
|
||||
|
||||
Events
|
||||
|
||||
@@ -105,13 +105,19 @@ the object non-clickable:
|
||||
lv_obj_remove_style(arc, NULL, LV_PART_KNOB);
|
||||
lv_obj_remove_flag(arc, LV_OBJ_FLAG_CLICKABLE);
|
||||
|
||||
Advanced hit test
|
||||
-----------------
|
||||
Interactive area
|
||||
----------------
|
||||
|
||||
If the :cpp:enumerator:`LV_OBJ_FLAG_ADV_HITTEST` flag is enabled the arc can be
|
||||
clicked through in the middle. Clicks are recognized only on the ring of
|
||||
the background arc. :cpp:func:`lv_obj_set_ext_click_size` makes the sensitive
|
||||
area larger inside and outside with the given number of pixels.
|
||||
By default :cpp:enumerator:`LV_OBJ_FLAG_ADV_HITTEST` is disabled which
|
||||
means the arc's whole area is interactive.
|
||||
As usual :cpp:func:`lv_obj_set_ext_click_size` can be used to increase
|
||||
the sensitive area outside the arc by a specified number of pixels.
|
||||
|
||||
If :cpp:enumerator:`LV_OBJ_FLAG_ADV_HITTEST` is enabled the arc will be sensitive only
|
||||
in the range of start and end background angles and on the arc itself (not inside the arc).
|
||||
In this case ``ext_click_size`` makes the sensitive area ticker both inward and outward.
|
||||
Additionally, a tolerance of :cpp:expr:`lv_dpx(50)` pixels is applied to each angle, extending the
|
||||
hit-test range along the arc's length.
|
||||
|
||||
Place another object to the knob
|
||||
--------------------------------
|
||||
|
||||
@@ -70,3 +70,9 @@ if(CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM)
|
||||
target_compile_definitions(${COMPONENT_LIB}
|
||||
PUBLIC "-DLV_ATTRIBUTE_FAST_MEM=IRAM_ATTR")
|
||||
endif()
|
||||
|
||||
if(CONFIG_FREERTOS_SMP)
|
||||
target_include_directories(${COMPONENT_LIB} PRIVATE "${IDF_PATH}/components/freertos/FreeRTOS-Kernel-SMP/include/freertos/")
|
||||
else()
|
||||
target_include_directories(${COMPONENT_LIB} PRIVATE "${IDF_PATH}/components/freertos/FreeRTOS-Kernel/include/freertos/")
|
||||
endif()
|
||||
@@ -1,6 +1,6 @@
|
||||
set(LVGL_VERSION_MAJOR "9")
|
||||
set(LVGL_VERSION_MINOR "2")
|
||||
set(LVGL_VERSION_PATCH "0")
|
||||
set(LVGL_VERSION_PATCH "1")
|
||||
set(LVGL_VERSION_INFO "")
|
||||
|
||||
set(LVGL_VERSION ${LVGL_VERSION_MAJOR}.${LVGL_VERSION_MINOR}.${LVGL_VERSION_PATCH}) # This is a CMake variable
|
||||
|
||||
Binary file not shown.
@@ -36,7 +36,11 @@
|
||||
<repository type="git">https://github.com/lvgl/lvgl.git</repository>
|
||||
|
||||
<releases>
|
||||
<release date="2024-08-26" version="9.2.0" url="https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/LVGL.lvgl.9.2.0.pack">
|
||||
<release date="2024-10-16" version="9.2.1" url="https://github.com/lvgl/lvgl/raw/v9.2.1/env_support/cmsis-pack/LVGL.lvgl.9.2.1.pack">
|
||||
- LVGL 9.2.1
|
||||
- See Change Log
|
||||
</release>
|
||||
<release date="2024-08-26" version="9.2.0" url="https://github.com/lvgl/lvgl/raw/v9.2.0/env_support/cmsis-pack/LVGL.lvgl.9.2.0.pack">
|
||||
- LVGL 9.2.0
|
||||
- See Change Log
|
||||
</release>
|
||||
@@ -86,7 +90,7 @@
|
||||
- LVGL 8.3.6 release
|
||||
- Various fixes
|
||||
</release>
|
||||
<release date="2023-02-06" version="8.3.5" url="https://github.com/lvgl/lvgl/raw/6b0092c0d91b2c7bfded48e04cc7b486ed3a72bd/env_support/cmsis-pack/LVGL.lvgl.8.3.6.pack">
|
||||
<release date="2023-02-06" version="8.3.5" url="https://github.com/lvgl/lvgl/raw/e7e8cf846dce96f7542e27b5c9655bab680c31a1/env_support/cmsis-pack/LVGL.lvgl.8.3.5.pack">
|
||||
- LVGL 8.3.5 release
|
||||
- Use LVGL version as the cmsis-pack version
|
||||
- Fix GPU support for NXP PXP and NXP VGLite
|
||||
@@ -314,7 +318,7 @@
|
||||
</conditions>
|
||||
|
||||
<components>
|
||||
<bundle Cbundle="LVGL9" Cclass="LVGL" Cversion="9.2.0">
|
||||
<bundle Cbundle="LVGL9" Cclass="LVGL" Cversion="9.2.1">
|
||||
<description>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.</description>
|
||||
<doc></doc>
|
||||
<component Cgroup="Essential">
|
||||
@@ -586,7 +590,7 @@
|
||||
<file category="sourceC" name="src/osal/lv_os.c"/>
|
||||
|
||||
<!-- general -->
|
||||
<file category="preIncludeGlobal" name="lv_conf_cmsis.h" attr="config" version="2.3.0" />
|
||||
<file category="preIncludeGlobal" name="lv_conf_cmsis.h" attr="config" version="2.3.1" />
|
||||
<file category="sourceC" name="lv_cmsis_pack.c" />
|
||||
<file category="header" name="lvgl.h" />
|
||||
<file category="doc" name="README.md"/>
|
||||
@@ -906,7 +910,7 @@
|
||||
<RTE_Components_h>
|
||||
|
||||
/*! \brief enable NXP PXP */
|
||||
#define LV_USE_DRAW_PXP 1
|
||||
#define LV_USE_PXP 1
|
||||
</RTE_Components_h>
|
||||
|
||||
</component>
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
<index schemaVersion="1.0.0" xs:noNamespaceSchemaLocation="PackIndex.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<vendor>LVGL</vendor>
|
||||
<url>https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/</url>
|
||||
<timestamp>2024-08-26</timestamp>
|
||||
<timestamp>2024-10-16</timestamp>
|
||||
<pindex>
|
||||
<pdsc url="https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/" vendor="LVGL" name="lvgl" version="9.2.0"/>
|
||||
<pdsc url="https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/" vendor="LVGL" name="lvgl" version="9.2.1"/>
|
||||
</pindex>
|
||||
</index>
|
||||
|
||||
@@ -57,9 +57,9 @@ remove the misleading guide above this code segment.
|
||||
- LV_USE_DEMO_VECTOR_GRAPHIC
|
||||
- LV_USE_DRAW_VGLITE
|
||||
- LV_USE_DRAW_VG_LITE
|
||||
- LV_USE_DRAW_PXP
|
||||
- LV_USE_PXP
|
||||
- LV_USE_DRAW_SDL
|
||||
- LV_USE_DRAW_ARM2D
|
||||
- LV_USE_DRAW_ARM2D_SYNC
|
||||
- LV_USE_SNAPSHOT
|
||||
- LV_USE_MONKEY
|
||||
- LV_USE_GRIDNAV
|
||||
@@ -85,7 +85,7 @@ remove the misleading guide above this code segment.
|
||||
#define LV_DRAW_BUF_STRIDE_ALIGN 4
|
||||
#define LV_ATTRIBUTE_MEM_ALIGN __attribute__((aligned(4)))
|
||||
```
|
||||
Make sure `LV_MEM_SIZE` is no less than `(72*1024U)`.
|
||||
Make sure `LV_MEM_SIZE` is no less than `(128*1024U)`.
|
||||
|
||||
8. Remove following macro definitions in the `3rd party libraries` section:
|
||||
|
||||
@@ -171,7 +171,7 @@ with:
|
||||
/*turn-on helium acceleration when Arm-2D and the Helium-powered device are detected */
|
||||
#if defined(__ARM_FEATURE_MVE) && __ARM_FEATURE_MVE
|
||||
#define LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_HELIUM
|
||||
#define LV_USE_DRAW_ARM2D 1
|
||||
#define LV_USE_DRAW_ARM2D_SYNC 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* @file lv_conf_cmsis.h
|
||||
* Configuration file for v9.2.0
|
||||
* Configuration file for v9.2.1
|
||||
*/
|
||||
|
||||
/* clang-format off */
|
||||
@@ -100,6 +100,15 @@
|
||||
#if LV_USE_OS == LV_OS_CUSTOM
|
||||
#define LV_OS_CUSTOM_INCLUDE <stdint.h>
|
||||
#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
|
||||
#endif
|
||||
|
||||
/*========================
|
||||
* RENDERING CONFIGURATION
|
||||
@@ -210,7 +219,18 @@
|
||||
#endif
|
||||
|
||||
/* Use NXP's PXP on iMX RTxxx platforms. */
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_PXP
|
||||
/* Use PXP for drawing.*/
|
||||
#define LV_USE_DRAW_PXP 1
|
||||
|
||||
/* Use PXP to rotate display.*/
|
||||
#define LV_USE_ROTATE_PXP 0
|
||||
|
||||
#if LV_USE_DRAW_PXP && LV_USE_OS
|
||||
/* Use additional draw thread for PXP processing.*/
|
||||
#define LV_USE_PXP_DRAW_THREAD 1
|
||||
#endif
|
||||
|
||||
/* Enable PXP asserts. */
|
||||
#define LV_USE_PXP_ASSERT 0
|
||||
#endif
|
||||
|
||||
@@ -58,6 +58,7 @@ const lv_image_dsc_t img_star = {
|
||||
.header.magic = LV_IMAGE_HEADER_MAGIC,
|
||||
.header.w = 30,
|
||||
.header.h = 29,
|
||||
.header.stride = 120,
|
||||
.data_size = 870 * 4,
|
||||
.data = img_star_map,
|
||||
};
|
||||
|
||||
@@ -128,10 +128,10 @@ static void time_observer_cb(lv_observer_t * observer, lv_subject_t * subject)
|
||||
lv_obj_t * label = lv_observer_get_target(observer);
|
||||
|
||||
if(format == TIME_FORMAT_24) {
|
||||
lv_label_set_text_fmt(label, "%d:%02d", hour, minute);
|
||||
lv_label_set_text_fmt(label, "%" LV_PRId32 ":%02" LV_PRId32, hour, minute);
|
||||
}
|
||||
else {
|
||||
lv_label_set_text_fmt(label, "%d:%02d %s", hour + 1, minute, am_pm == TIME_AM ? "am" : "pm");
|
||||
lv_label_set_text_fmt(label, "%"LV_PRId32":%02"LV_PRId32" %s", hour + 1, minute, am_pm == TIME_AM ? "am" : "pm");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ static void increment_thread_entry(void * user_data)
|
||||
lv_lock();
|
||||
counter_label = lv_label_create(lv_scr_act());
|
||||
lv_obj_align(counter_label, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_label_set_text_fmt(counter_label, "Pressed %u times", press_count);
|
||||
lv_label_set_text_fmt(counter_label, "Pressed %" LV_PRIu32 " times", press_count);
|
||||
lv_unlock();
|
||||
|
||||
while(true) {
|
||||
@@ -86,7 +86,7 @@ static void increment_thread_entry(void * user_data)
|
||||
press_count += 1;
|
||||
|
||||
lv_lock();
|
||||
lv_label_set_text_fmt(counter_label, "Pressed %u times", press_count);
|
||||
lv_label_set_text_fmt(counter_label, "Pressed %" LV_PRIu32 " times", press_count);
|
||||
lv_unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "lvgl",
|
||||
"version": "9.2.0",
|
||||
"version": "9.2.1",
|
||||
"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": {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name=lvgl
|
||||
version=9.2.0
|
||||
version=9.2.1
|
||||
author=kisvegabor
|
||||
maintainer=kisvegabor,embeddedt,pete-pjb
|
||||
sentence=Full-featured Graphics Library for Embedded Systems
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* @file lv_conf.h
|
||||
* Configuration file for v9.2.0
|
||||
* Configuration file for v9.2.1
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -95,6 +95,14 @@
|
||||
#if LV_USE_OS == LV_OS_CUSTOM
|
||||
#define LV_OS_CUSTOM_INCLUDE <stdint.h>
|
||||
#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
|
||||
#endif
|
||||
|
||||
/*========================
|
||||
* RENDERING CONFIGURATION
|
||||
@@ -205,10 +213,16 @@
|
||||
#endif
|
||||
|
||||
/* Use NXP's PXP on iMX RTxxx platforms. */
|
||||
#define LV_USE_DRAW_PXP 0
|
||||
#define LV_USE_PXP 0
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_OS
|
||||
#if LV_USE_PXP
|
||||
/* Use PXP for drawing.*/
|
||||
#define LV_USE_DRAW_PXP 1
|
||||
|
||||
/* Use PXP to rotate display.*/
|
||||
#define LV_USE_ROTATE_PXP 0
|
||||
|
||||
#if LV_USE_DRAW_PXP && LV_USE_OS
|
||||
/* Use additional draw thread for PXP processing.*/
|
||||
#define LV_USE_PXP_DRAW_THREAD 1
|
||||
#endif
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
#define LVGL_VERSION_MAJOR 9
|
||||
#define LVGL_VERSION_MINOR 2
|
||||
#define LVGL_VERSION_PATCH 0
|
||||
#define LVGL_VERSION_PATCH 1
|
||||
#define LVGL_VERSION_INFO ""
|
||||
|
||||
#endif /* LVGL_VERSION_H */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
vcpkg install vcpkg-tool-ninja libpng freetype opengl glfw3 glew
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
pip install pypng lz4
|
||||
pip install pypng lz4 kconfiglib
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
|
||||
@@ -14,4 +14,4 @@ sudo apt install gcc gcc-multilib g++-multilib ninja-build \
|
||||
ruby-full gcovr cmake python3 pngquant libinput-dev libxkbcommon-dev \
|
||||
libdrm-dev pkg-config wayland-protocols libwayland-dev libwayland-bin \
|
||||
libwayland-dev:i386 libxkbcommon-dev:i386
|
||||
pip3 install pypng lz4
|
||||
pip3 install pypng lz4 kconfiglib
|
||||
|
||||
29
scripts/kconfig_verify.py
Normal file
29
scripts/kconfig_verify.py
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
|
||||
try:
|
||||
import kconfiglib
|
||||
except ImportError:
|
||||
print("Need kconfiglib package, do `pip3 install kconfiglib`")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def verify_kconfig(kconfig_file):
|
||||
kconf = kconfiglib.Kconfig(kconfig_file)
|
||||
|
||||
if kconf.warnings:
|
||||
print("Warnings found:")
|
||||
for warning in kconf.warnings:
|
||||
print(warning)
|
||||
sys.exit(1)
|
||||
else:
|
||||
print("No warnings found.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 2:
|
||||
print("Usage: python check_kconfig.py <Kconfig_file>")
|
||||
sys.exit(1)
|
||||
|
||||
verify_kconfig(sys.argv[1])
|
||||
@@ -121,6 +121,35 @@ class CmakeReplacer(MacroReplacer):
|
||||
def getReplacement(self, val: str):
|
||||
return r'\g<1>' + val + r'\g<3>'
|
||||
|
||||
class KconfigReplacer(RepoFileVersionReplacer):
|
||||
"""Replace version info in Kconfig file"""
|
||||
|
||||
def __init__(self, relative_path_segments: list[str]):
|
||||
super().__init__(relative_path_segments, 3)
|
||||
|
||||
def applyVersionToLine(self, line: str, version: Version):
|
||||
targets = {
|
||||
'LVGL_VERSION_MAJOR': version.major,
|
||||
'LVGL_VERSION_MINOR': version.minor,
|
||||
'LVGL_VERSION_PATCH': version.patch,
|
||||
}
|
||||
|
||||
for key, val in targets.items():
|
||||
pattern = self.getPattern(key)
|
||||
repl = self.getReplacement(val)
|
||||
replaced, n = re.subn(pattern, repl, line)
|
||||
if n > 0:
|
||||
return replaced
|
||||
|
||||
return None
|
||||
def getPattern(self, key: str):
|
||||
# Match the version fields in Kconfig file
|
||||
return rf'(^\s+default\s+)(\d+) # ({key})'
|
||||
|
||||
def getReplacement(self, val: str):
|
||||
# Replace the version value
|
||||
return r'\g<1>' + val + r' # \g<3>'
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
args = get_arg()
|
||||
@@ -132,6 +161,7 @@ if __name__ == '__main__':
|
||||
MacroReplacer(['lv_version.h']),
|
||||
CmakeReplacer(['env_support', 'cmake', 'version.cmake']),
|
||||
PrefixReplacer(['lv_conf_template.h'], 'Configuration file for v'),
|
||||
KconfigReplacer(['Kconfig']),
|
||||
]
|
||||
|
||||
if version.is_release:
|
||||
|
||||
@@ -306,7 +306,7 @@ void lv_obj_add_state(lv_obj_t * obj, lv_state_t state)
|
||||
lv_state_t new_state = obj->state | state;
|
||||
if(obj->state != new_state) {
|
||||
|
||||
if(new_state & LV_STATE_DISABLED) {
|
||||
if(new_state & ~obj->state & LV_STATE_DISABLED) {
|
||||
lv_indev_reset(NULL, obj);
|
||||
}
|
||||
|
||||
|
||||
@@ -1046,7 +1046,7 @@ static int32_t calc_content_width(lv_obj_t * obj)
|
||||
default:
|
||||
/* Consider other cases only if x=0 and use the width of the object.
|
||||
* With x!=0 circular dependency could occur. */
|
||||
if(lv_obj_get_style_y(child, 0) == 0) {
|
||||
if(lv_obj_get_style_x(child, 0) == 0) {
|
||||
child_res_tmp = lv_area_get_width(&child->coords) + space_left;
|
||||
child_res_tmp += lv_obj_get_style_margin_right(child, LV_PART_MAIN);
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ typedef lv_result_t (*lv_property_getter_t)(const lv_obj_t *, lv_prop_id_t, lv_p
|
||||
**********************/
|
||||
|
||||
static lv_result_t obj_property(lv_obj_t * obj, lv_prop_id_t id, lv_property_t * value, bool set);
|
||||
static int32_t property_name_compare(const void * ref, const void * element);
|
||||
static int property_name_compare(const void * ref, const void * element);
|
||||
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
@@ -121,7 +121,7 @@ lv_property_t lv_obj_get_style_property(lv_obj_t * obj, lv_prop_id_t id, uint32_
|
||||
uint32_t index = LV_PROPERTY_ID_INDEX(id);
|
||||
|
||||
if(index == LV_PROPERTY_ID_INVALID || index >= LV_PROPERTY_ID_START) {
|
||||
LV_LOG_WARN("invalid style property id %d", id);
|
||||
LV_LOG_WARN("invalid style property id 0x%" LV_PRIx32, id);
|
||||
value.id = LV_PROPERTY_ID_INVALID;
|
||||
value.num = 0;
|
||||
return value;
|
||||
@@ -232,7 +232,7 @@ static lv_result_t obj_property(lv_obj_t * obj, lv_prop_id_t id, lv_property_t *
|
||||
|
||||
/*id matched but we got null pointer to functions*/
|
||||
if(set ? prop->setter == NULL : prop->getter == NULL) {
|
||||
LV_LOG_WARN("NULL %s provided, id: %d", set ? "setter" : "getter", id);
|
||||
LV_LOG_WARN("NULL %s provided, id: 0x%" LV_PRIx32, set ? "setter" : "getter", id);
|
||||
return LV_RESULT_INVALID;
|
||||
}
|
||||
|
||||
@@ -278,7 +278,7 @@ static lv_result_t obj_property(lv_obj_t * obj, lv_prop_id_t id, lv_property_t *
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
LV_LOG_WARN("Unknown property id: 0x%08x", prop->id);
|
||||
LV_LOG_WARN("Unknown property id: 0x%08" LV_PRIx32, prop->id);
|
||||
return LV_RESULT_INVALID;
|
||||
}
|
||||
}
|
||||
@@ -289,7 +289,7 @@ static lv_result_t obj_property(lv_obj_t * obj, lv_prop_id_t id, lv_property_t *
|
||||
/*If no setter found, try base class then*/
|
||||
}
|
||||
|
||||
LV_LOG_WARN("Unknown property id: 0x%08x", id);
|
||||
LV_LOG_WARN("Unknown property id: 0x%08" LV_PRIx32, id);
|
||||
return LV_RESULT_INVALID;
|
||||
}
|
||||
|
||||
|
||||
@@ -353,6 +353,9 @@ bool lv_obj_has_style_prop(const lv_obj_t * obj, lv_style_selector_t selector, l
|
||||
void lv_obj_set_local_style_prop(lv_obj_t * obj, lv_style_prop_t prop, lv_style_value_t value,
|
||||
lv_style_selector_t selector)
|
||||
{
|
||||
/*Stop running transitions wit this property */
|
||||
trans_delete(obj, lv_obj_style_get_selector_part(selector), prop, NULL);
|
||||
|
||||
lv_style_t * style = get_local_style(obj, selector);
|
||||
if(selector == LV_PART_MAIN && lv_style_prop_has_flag(prop, LV_STYLE_PROP_FLAG_TRANSFORM)) {
|
||||
lv_obj_invalidate(obj);
|
||||
|
||||
@@ -355,7 +355,7 @@ void lv_display_refr_timer(lv_timer_t * tmr)
|
||||
/* Ensure the timer does not run again automatically.
|
||||
* This is done before refreshing in case refreshing invalidates something else.
|
||||
* However if the performance monitor is enabled keep the timer running to count the FPS.*/
|
||||
#if LV_USE_PERF_MONITOR
|
||||
#if !LV_USE_PERF_MONITOR
|
||||
lv_timer_pause(tmr);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -141,8 +141,7 @@ struct lv_display_t {
|
||||
|
||||
lv_event_list_t event_list;
|
||||
|
||||
uint32_t sw_rotate : 1; /**< 1: use software rotation (slower)*/
|
||||
uint32_t rotation : 2; /**< Element of lv_display_rotation_t*/
|
||||
uint32_t rotation : 3; /**< Element of lv_display_rotation_t*/
|
||||
|
||||
lv_theme_t * theme; /**< The theme assigned to the screen*/
|
||||
|
||||
|
||||
@@ -179,8 +179,7 @@ void lv_draw_dispatch(void)
|
||||
while(disp) {
|
||||
lv_layer_t * layer = disp->layer_head;
|
||||
while(layer) {
|
||||
/* If there are no tasks in the layer, skip it */
|
||||
if(layer->draw_task_head && lv_draw_dispatch_layer(disp, layer))
|
||||
if(lv_draw_dispatch_layer(disp, layer))
|
||||
task_dispatched = true;
|
||||
layer = layer->next;
|
||||
}
|
||||
@@ -311,6 +310,41 @@ uint32_t lv_draw_get_unit_count(void)
|
||||
lv_draw_task_t * lv_draw_get_next_available_task(lv_layer_t * layer, lv_draw_task_t * t_prev, uint8_t draw_unit_id)
|
||||
{
|
||||
LV_PROFILER_BEGIN;
|
||||
|
||||
/* If there is only 1 draw unit the task can be consumed linearly as
|
||||
* they are added in the correct order. However, it can happen that
|
||||
* there is a `LV_DRAW_TASK_TYPE_LAYER` which can be blended only when
|
||||
* all its tasks are ready. As other areas might be on top of that
|
||||
* layer-to-blend don't skip it. Instead stop there, so that the
|
||||
* draw tasks of that layer can be consumed and can be finished.
|
||||
* After that this layer-to-blenf will have `LV_DRAW_TASK_STATE_QUEUED`
|
||||
* so it can be blended normally.*/
|
||||
if(_draw_info.unit_cnt <= 1) {
|
||||
lv_draw_task_t * t = layer->draw_task_head;
|
||||
while(t) {
|
||||
/*Mark unsupported draw tasks as ready as no one else will consume them*/
|
||||
if(t->state == LV_DRAW_TASK_STATE_QUEUED &&
|
||||
t->preferred_draw_unit_id != LV_DRAW_UNIT_NONE &&
|
||||
t->preferred_draw_unit_id != draw_unit_id) {
|
||||
t->state = LV_DRAW_TASK_STATE_READY;
|
||||
}
|
||||
/*Not queued yet, leave this layer while the first task will be queued*/
|
||||
else if(t->state != LV_DRAW_TASK_STATE_QUEUED) {
|
||||
t = NULL;
|
||||
break;
|
||||
}
|
||||
/*It's a supported and queued task, process it*/
|
||||
else {
|
||||
break;
|
||||
}
|
||||
t = t->next;
|
||||
}
|
||||
LV_PROFILER_END;
|
||||
return t;
|
||||
}
|
||||
|
||||
/*Handle the case of multiply draw units*/
|
||||
|
||||
/*If the first task is screen sized, there cannot be independent areas*/
|
||||
if(layer->draw_task_head) {
|
||||
int32_t hor_res = lv_display_get_horizontal_resolution(lv_refr_get_disp_refreshing());
|
||||
|
||||
@@ -83,6 +83,16 @@ lv_draw_buf_handlers_t * lv_draw_buf_get_handlers(void)
|
||||
return &default_handlers;
|
||||
}
|
||||
|
||||
lv_draw_buf_handlers_t * lv_draw_buf_get_font_handlers(void)
|
||||
{
|
||||
return &font_draw_buf_handlers;
|
||||
}
|
||||
|
||||
lv_draw_buf_handlers_t * lv_draw_buf_get_image_handlers(void)
|
||||
{
|
||||
return &image_cache_draw_buf_handlers;
|
||||
}
|
||||
|
||||
uint32_t lv_draw_buf_width_to_stride(uint32_t w, lv_color_format_t color_format)
|
||||
{
|
||||
return lv_draw_buf_width_to_stride_ex(&default_handlers, w, color_format);
|
||||
@@ -536,7 +546,7 @@ void lv_draw_buf_set_palette(lv_draw_buf_t * draw_buf, uint8_t index, lv_color32
|
||||
palette[index] = color;
|
||||
}
|
||||
|
||||
bool lv_draw_buf_has_flag(lv_draw_buf_t * draw_buf, lv_image_flags_t flag)
|
||||
bool lv_draw_buf_has_flag(const lv_draw_buf_t * draw_buf, lv_image_flags_t flag)
|
||||
{
|
||||
return draw_buf->header.flags & flag;
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ LV_EXPORT_CONST_INT(LV_STRIDE_AUTO);
|
||||
#define LV_DRAW_BUF_INIT_STATIC(name) \
|
||||
do { \
|
||||
lv_image_header_t * header = &name.header; \
|
||||
lv_draw_buf_init(&name, header->w, header->h, header->cf, header->stride, buf_##name, sizeof(buf_##name)); \
|
||||
lv_draw_buf_init(&name, header->w, header->h, (lv_color_format_t)header->cf, header->stride, buf_##name, sizeof(buf_##name)); \
|
||||
lv_draw_buf_set_flag(&name, LV_IMAGE_FLAGS_MODIFIABLE); \
|
||||
} while(0)
|
||||
|
||||
@@ -129,6 +129,9 @@ void lv_draw_buf_handlers_init(lv_draw_buf_handlers_t * handlers,
|
||||
* @return pointer to the struct of handlers
|
||||
*/
|
||||
lv_draw_buf_handlers_t * lv_draw_buf_get_handlers(void);
|
||||
lv_draw_buf_handlers_t * lv_draw_buf_get_font_handlers(void);
|
||||
lv_draw_buf_handlers_t * lv_draw_buf_get_image_handlers(void);
|
||||
|
||||
|
||||
/**
|
||||
* Align the address of a buffer. The buffer needs to be large enough for the real data after alignment
|
||||
@@ -304,7 +307,7 @@ lv_result_t lv_draw_buf_adjust_stride(lv_draw_buf_t * src, uint32_t stride);
|
||||
*/
|
||||
lv_result_t lv_draw_buf_premultiply(lv_draw_buf_t * draw_buf);
|
||||
|
||||
bool lv_draw_buf_has_flag(lv_draw_buf_t * draw_buf, lv_image_flags_t flag);
|
||||
bool lv_draw_buf_has_flag(const lv_draw_buf_t * draw_buf, lv_image_flags_t flag);
|
||||
|
||||
void lv_draw_buf_set_flag(lv_draw_buf_t * draw_buf, lv_image_flags_t flag);
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#include "lv_draw_pxp.h"
|
||||
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP
|
||||
#include "../../lv_draw_buf_private.h"
|
||||
#include "lv_pxp_cfg.h"
|
||||
@@ -51,8 +52,12 @@ static void _invalidate_cache(const lv_draw_buf_t * draw_buf, const lv_area_t *
|
||||
void lv_draw_buf_pxp_init_handlers(void)
|
||||
{
|
||||
lv_draw_buf_handlers_t * handlers = lv_draw_buf_get_handlers();
|
||||
lv_draw_buf_handlers_t * font_handlers = lv_draw_buf_get_font_handlers();
|
||||
lv_draw_buf_handlers_t * image_handlers = lv_draw_buf_get_image_handlers();
|
||||
|
||||
handlers->invalidate_cache_cb = _invalidate_cache;
|
||||
font_handlers->invalidate_cache_cb = _invalidate_cache;
|
||||
image_handlers->invalidate_cache_cb = _invalidate_cache;
|
||||
}
|
||||
|
||||
/**********************
|
||||
@@ -66,7 +71,7 @@ static void _invalidate_cache(const lv_draw_buf_t * draw_buf, const lv_area_t *
|
||||
lv_color_format_t cf = header->cf;
|
||||
|
||||
if(area->y1 == 0) {
|
||||
uint16_t size = stride * lv_area_get_height(area);
|
||||
uint32_t size = stride * lv_area_get_height(area);
|
||||
|
||||
/* Invalidate full buffer. */
|
||||
DEMO_CleanInvalidateCacheByAddr((void *)draw_buf->data, size);
|
||||
@@ -109,3 +114,4 @@ static void _invalidate_cache(const lv_draw_buf_t * draw_buf, const lv_area_t *
|
||||
}
|
||||
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
#endif /*LV_USE_PXP*/
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
|
||||
#include "lv_draw_pxp.h"
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP
|
||||
#include "lv_pxp_cfg.h"
|
||||
#include "lv_pxp_utils.h"
|
||||
|
||||
@@ -82,6 +83,9 @@ static void _pxp_execute_drawing(lv_draw_pxp_unit_t * u);
|
||||
|
||||
void lv_draw_pxp_init(void)
|
||||
{
|
||||
lv_pxp_init();
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
lv_draw_buf_pxp_init_handlers();
|
||||
|
||||
lv_draw_pxp_unit_t * draw_pxp_unit = lv_draw_create_unit(sizeof(lv_draw_pxp_unit_t));
|
||||
@@ -89,11 +93,10 @@ void lv_draw_pxp_init(void)
|
||||
draw_pxp_unit->base_unit.dispatch_cb = _pxp_dispatch;
|
||||
draw_pxp_unit->base_unit.delete_cb = _pxp_delete;
|
||||
|
||||
lv_pxp_init();
|
||||
|
||||
#if LV_USE_PXP_DRAW_THREAD
|
||||
lv_thread_init(&draw_pxp_unit->thread, LV_THREAD_PRIO_HIGH, _pxp_render_thread_cb, 2 * 1024, draw_pxp_unit);
|
||||
#endif
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
}
|
||||
|
||||
void lv_draw_pxp_deinit(void)
|
||||
@@ -107,19 +110,26 @@ void lv_draw_pxp_rotate(const void * src_buf, void * dest_buf, int32_t src_width
|
||||
{
|
||||
lv_pxp_reset();
|
||||
|
||||
/* convert rotation angle */
|
||||
/* Convert rotation angle
|
||||
* To be in sync with CPU, the received angle is counterclockwise
|
||||
* and the PXP constants are for clockwise rotation
|
||||
*
|
||||
* counterclockwise clockwise
|
||||
* LV_DISPLAY_ROTATION_90 -> kPXP_Rotate270
|
||||
* LV_DISPLAY_ROTATION_270 -> kPXP_Rotate90
|
||||
*/
|
||||
pxp_rotate_degree_t pxp_rotation;
|
||||
switch(rotation) {
|
||||
case LV_DISPLAY_ROTATION_0:
|
||||
pxp_rotation = kPXP_Rotate0;
|
||||
break;
|
||||
case LV_DISPLAY_ROTATION_90:
|
||||
case LV_DISPLAY_ROTATION_270:
|
||||
pxp_rotation = kPXP_Rotate90;
|
||||
break;
|
||||
case LV_DISPLAY_ROTATION_180:
|
||||
pxp_rotation = kPXP_Rotate180;
|
||||
break;
|
||||
case LV_DISPLAY_ROTATION_270:
|
||||
case LV_DISPLAY_ROTATION_90:
|
||||
pxp_rotation = kPXP_Rotate270;
|
||||
break;
|
||||
default:
|
||||
@@ -159,7 +169,7 @@ void lv_draw_pxp_rotate(const void * src_buf, void * dest_buf, int32_t src_width
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
static inline bool _pxp_src_cf_supported(lv_color_format_t cf)
|
||||
{
|
||||
bool is_cf_supported = false;
|
||||
@@ -321,8 +331,7 @@ static int32_t _pxp_dispatch(lv_draw_unit_t * draw_unit, lv_layer_t * layer)
|
||||
if(t == NULL || t->preferred_draw_unit_id != DRAW_UNIT_ID_PXP)
|
||||
return LV_DRAW_UNIT_IDLE;
|
||||
|
||||
void * buf = lv_draw_layer_alloc_buf(layer);
|
||||
if(buf == NULL)
|
||||
if(lv_draw_layer_alloc_buf(layer) == NULL)
|
||||
return LV_DRAW_UNIT_IDLE;
|
||||
|
||||
t->state = LV_DRAW_TASK_STATE_IN_PROGRESS;
|
||||
@@ -484,5 +493,6 @@ static void _pxp_render_thread_cb(void * ptr)
|
||||
LV_LOG_INFO("Exit PXP draw thread.");
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
#endif /*LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP*/
|
||||
#endif /*LV_USE_PXP*/
|
||||
|
||||
@@ -22,8 +22,10 @@ extern "C" {
|
||||
|
||||
#include "../../../lv_conf_internal.h"
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#include "../../sw/lv_draw_sw.h"
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP
|
||||
#include "../../sw/lv_draw_sw_private.h"
|
||||
#include "../../../misc/lv_area_private.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
@@ -39,8 +41,6 @@ typedef lv_draw_sw_unit_t lv_draw_pxp_unit_t;
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
void lv_draw_buf_pxp_init_handlers(void);
|
||||
|
||||
void lv_draw_pxp_init(void);
|
||||
|
||||
void lv_draw_pxp_deinit(void);
|
||||
@@ -49,6 +49,9 @@ void lv_draw_pxp_rotate(const void * src_buf, void * dest_buf, int32_t src_width
|
||||
int32_t src_stride, int32_t dest_stride, lv_display_rotation_t rotation,
|
||||
lv_color_format_t cf);
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
void lv_draw_buf_pxp_init_handlers(void);
|
||||
|
||||
void lv_draw_pxp_fill(lv_draw_unit_t * draw_unit, const lv_draw_fill_dsc_t * dsc,
|
||||
const lv_area_t * coords);
|
||||
|
||||
@@ -62,6 +65,8 @@ void lv_draw_pxp_layer(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t * d
|
||||
* MACROS
|
||||
**********************/
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
#endif /*LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP*/
|
||||
#endif /*LV_USE_PXP*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C"*/
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#include "lv_draw_pxp.h"
|
||||
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP
|
||||
#include "lv_pxp_cfg.h"
|
||||
#include "lv_pxp_utils.h"
|
||||
@@ -145,3 +146,4 @@ static void _pxp_fill(uint8_t * dest_buf, const lv_area_t * dest_area, int32_t d
|
||||
}
|
||||
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
#endif /*LV_USE_PXP*/
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#include "lv_draw_pxp.h"
|
||||
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP
|
||||
#include "lv_pxp_cfg.h"
|
||||
#include "lv_pxp_utils.h"
|
||||
@@ -363,3 +364,4 @@ static void _pxp_blit(uint8_t * dest_buf, const lv_area_t * dest_area, int32_t d
|
||||
}
|
||||
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
#endif /*LV_USE_PXP*/
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#include "lv_draw_pxp.h"
|
||||
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP
|
||||
|
||||
#include "../../../stdlib/lv_string.h"
|
||||
@@ -154,3 +155,4 @@ void lv_draw_pxp_layer(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t * d
|
||||
}
|
||||
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
#endif /*LV_USE_PXP*/
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
|
||||
#include "lv_pxp_cfg.h"
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP
|
||||
#include "lv_pxp_osa.h"
|
||||
|
||||
/*********************
|
||||
@@ -88,4 +89,5 @@ void lv_pxp_wait(void)
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
#endif /*LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP*/
|
||||
#endif /*LV_USE_PXP*/
|
||||
|
||||
@@ -22,7 +22,8 @@ extern "C" {
|
||||
|
||||
#include "../../../lv_conf_internal.h"
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP
|
||||
#include "fsl_cache.h"
|
||||
#include "fsl_pxp.h"
|
||||
|
||||
@@ -93,7 +94,8 @@ void lv_pxp_wait(void);
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
#endif /*LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP*/
|
||||
#endif /*LV_USE_PXP*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C"*/
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
|
||||
#include "lv_pxp_osa.h"
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP
|
||||
#include "lv_pxp_utils.h"
|
||||
#include "../../../misc/lv_log.h"
|
||||
#include "../../../osal/lv_os.h"
|
||||
@@ -183,4 +184,5 @@ static void _pxp_wait(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
#endif /*LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP*/
|
||||
#endif /*LV_USE_PXP*/
|
||||
|
||||
@@ -22,7 +22,8 @@ extern "C" {
|
||||
|
||||
#include "../../../lv_conf_internal.h"
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP
|
||||
#include "lv_pxp_cfg.h"
|
||||
|
||||
/*********************
|
||||
@@ -51,7 +52,8 @@ pxp_cfg_t * pxp_get_default_cfg(void);
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
#endif /*LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP*/
|
||||
#endif /*LV_USE_PXP*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C"*/
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
|
||||
#include "lv_pxp_utils.h"
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
@@ -89,6 +90,7 @@ pxp_as_pixel_format_t pxp_get_as_px_format(lv_color_format_t cf)
|
||||
return as_px_format;
|
||||
}
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
pxp_ps_pixel_format_t pxp_get_ps_px_format(lv_color_format_t cf)
|
||||
{
|
||||
pxp_ps_pixel_format_t ps_px_format = kPXP_PsPixelFormatRGB565;
|
||||
@@ -143,3 +145,5 @@ bool pxp_buf_aligned(const void * buf, uint32_t stride)
|
||||
**********************/
|
||||
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
#endif /*LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP*/
|
||||
#endif /*LV_USE_PXP*/
|
||||
|
||||
@@ -21,7 +21,8 @@ extern "C" {
|
||||
*********************/
|
||||
#include "../../../lv_conf_internal.h"
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP
|
||||
#include "fsl_pxp.h"
|
||||
#include "../../../misc/lv_color.h"
|
||||
|
||||
@@ -59,6 +60,7 @@ pxp_output_pixel_format_t pxp_get_out_px_format(lv_color_format_t cf);
|
||||
|
||||
pxp_as_pixel_format_t pxp_get_as_px_format(lv_color_format_t cf);
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
pxp_ps_pixel_format_t pxp_get_ps_px_format(lv_color_format_t cf);
|
||||
|
||||
bool pxp_buf_aligned(const void * buf, uint32_t stride);
|
||||
@@ -72,6 +74,8 @@ bool pxp_buf_aligned(const void * buf, uint32_t stride);
|
||||
**********************/
|
||||
|
||||
#endif /*LV_USE_DRAW_PXP*/
|
||||
#endif /*LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP*/
|
||||
#endif /*LV_USE_PXP*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C"*/
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
**********************/
|
||||
|
||||
static void _invalidate_cache(const lv_draw_buf_t * draw_buf, const lv_area_t * area);
|
||||
static uint32_t _width_to_stride(uint32_t w, lv_color_format_t cf);
|
||||
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
@@ -51,8 +52,17 @@ static void _invalidate_cache(const lv_draw_buf_t * draw_buf, const lv_area_t *
|
||||
void lv_draw_buf_vglite_init_handlers(void)
|
||||
{
|
||||
lv_draw_buf_handlers_t * handlers = lv_draw_buf_get_handlers();
|
||||
lv_draw_buf_handlers_t * font_handlers = lv_draw_buf_get_font_handlers();
|
||||
lv_draw_buf_handlers_t * image_handlers = lv_draw_buf_get_image_handlers();
|
||||
|
||||
handlers->invalidate_cache_cb = _invalidate_cache;
|
||||
font_handlers->invalidate_cache_cb = _invalidate_cache;
|
||||
image_handlers->invalidate_cache_cb = _invalidate_cache;
|
||||
|
||||
handlers->width_to_stride_cb = _width_to_stride;
|
||||
font_handlers->width_to_stride_cb = _width_to_stride;
|
||||
image_handlers->width_to_stride_cb = _width_to_stride;
|
||||
|
||||
}
|
||||
|
||||
/**********************
|
||||
@@ -66,7 +76,7 @@ static void _invalidate_cache(const lv_draw_buf_t * draw_buf, const lv_area_t *
|
||||
lv_color_format_t cf = header->cf;
|
||||
|
||||
if(area->y1 == 0) {
|
||||
uint16_t size = stride * lv_area_get_height(area);
|
||||
uint32_t size = stride * lv_area_get_height(area);
|
||||
|
||||
/* Invalidate full buffer. */
|
||||
DEMO_CleanInvalidateCacheByAddr((void *)draw_buf->data, size);
|
||||
@@ -108,4 +118,14 @@ static void _invalidate_cache(const lv_draw_buf_t * draw_buf, const lv_area_t *
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t _width_to_stride(uint32_t w, lv_color_format_t cf)
|
||||
{
|
||||
uint8_t bits_per_pixel = lv_color_format_get_bpp(cf);
|
||||
uint32_t width_bits = (w * bits_per_pixel + 7) & ~7;
|
||||
uint32_t width_bytes = width_bits / 8;
|
||||
uint8_t align_bytes = vglite_get_stride_alignment(cf);
|
||||
|
||||
return (width_bytes + align_bytes - 1) & ~(align_bytes - 1);
|
||||
}
|
||||
|
||||
#endif /*LV_USE_DRAW_VGLITE*/
|
||||
|
||||
@@ -291,16 +291,14 @@ static int32_t _vglite_dispatch(lv_draw_unit_t * draw_unit, lv_layer_t * layer)
|
||||
if(t == NULL)
|
||||
return LV_DRAW_UNIT_IDLE;
|
||||
|
||||
if(lv_draw_get_unit_count() > 1) {
|
||||
/* Let the SW unit to draw this task. */
|
||||
if(t->preferred_draw_unit_id != DRAW_UNIT_ID_VGLITE)
|
||||
if(t->preferred_draw_unit_id != DRAW_UNIT_ID_VGLITE) {
|
||||
/* Let the preferred known unit to draw this task. */
|
||||
if(t->preferred_draw_unit_id != LV_DRAW_UNIT_NONE) {
|
||||
return LV_DRAW_UNIT_IDLE;
|
||||
}
|
||||
else {
|
||||
/* Fake unsupported tasks as ready. */
|
||||
if(t->preferred_draw_unit_id != DRAW_UNIT_ID_VGLITE) {
|
||||
}
|
||||
else {
|
||||
/* Fake unsupported tasks as ready. */
|
||||
t->state = LV_DRAW_TASK_STATE_READY;
|
||||
|
||||
/* Request a new dispatching as it can get a new task. */
|
||||
lv_draw_dispatch_request();
|
||||
|
||||
@@ -308,8 +306,7 @@ static int32_t _vglite_dispatch(lv_draw_unit_t * draw_unit, lv_layer_t * layer)
|
||||
}
|
||||
}
|
||||
|
||||
void * buf = lv_draw_layer_alloc_buf(layer);
|
||||
if(buf == NULL)
|
||||
if(lv_draw_layer_alloc_buf(layer) == NULL)
|
||||
return LV_DRAW_UNIT_IDLE;
|
||||
|
||||
t->state = LV_DRAW_TASK_STATE_IN_PROGRESS;
|
||||
@@ -340,9 +337,13 @@ static int32_t _vglite_wait_for_finish(lv_draw_unit_t * draw_unit)
|
||||
lv_draw_vglite_unit_t * draw_vglite_unit = (lv_draw_vglite_unit_t *) draw_unit;
|
||||
draw_vglite_unit->wait_for_finish = true;
|
||||
|
||||
/* Signal draw unit to finish its tasks and return READY state after completion. */
|
||||
if(draw_vglite_unit->inited)
|
||||
lv_thread_sync_signal(&draw_vglite_unit->sync);
|
||||
|
||||
/* Wait for finish now. */
|
||||
lv_draw_dispatch_wait_for_request();
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -97,8 +97,8 @@ static void _vglite_draw_triangle(const lv_area_t * coords, const lv_area_t * cl
|
||||
tri_area.x2 = (int32_t)LV_MAX3(dsc->p[0].x, dsc->p[1].x, dsc->p[2].x);
|
||||
tri_area.y2 = (int32_t)LV_MAX3(dsc->p[0].y, dsc->p[1].y, dsc->p[2].y);
|
||||
|
||||
uint32_t width = tri_area.x2 - tri_area.x1;
|
||||
uint32_t height = tri_area.y2 - tri_area.y1;
|
||||
uint32_t width = lv_area_get_width(&tri_area);
|
||||
uint32_t height = lv_area_get_height(&tri_area);
|
||||
|
||||
/* Init path */
|
||||
int32_t triangle_path[] = { /*VG line path*/
|
||||
|
||||
@@ -16,6 +16,8 @@ extern "C" {
|
||||
|
||||
#include "lv_draw_sw_mask.h"
|
||||
|
||||
#if LV_DRAW_SW_COMPLEX
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
@@ -146,6 +148,8 @@ void lv_draw_sw_mask_cleanup(void);
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#endif /*LV_DRAW_SW_COMPLEX*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C"*/
|
||||
#endif
|
||||
|
||||
@@ -455,7 +455,7 @@ static void transform_argb8888(const uint8_t * src, int32_t src_w, int32_t src_h
|
||||
dest_c32[x].alpha = (dest_c32[x].alpha * (0xFF - ys_fract)) >> 8;
|
||||
}
|
||||
else if(!lv_color32_eq(dest_c32[x], px_ver)) {
|
||||
dest_c32[x].alpha = ((px_ver.alpha * ys_fract) + (dest_c32[x].alpha * (0xFF - ys_fract))) >> 8;
|
||||
if(dest_c32[x].alpha) dest_c32[x].alpha = ((px_ver.alpha * ys_fract) + (dest_c32[x].alpha * (0xFF - ys_fract))) >> 8;
|
||||
px_ver.alpha = ys_fract;
|
||||
dest_c32[x] = lv_color_mix32(px_ver, dest_c32[x]);
|
||||
}
|
||||
@@ -464,7 +464,7 @@ static void transform_argb8888(const uint8_t * src, int32_t src_w, int32_t src_h
|
||||
dest_c32[x].alpha = (dest_c32[x].alpha * (0xFF - xs_fract)) >> 8;
|
||||
}
|
||||
else if(!lv_color32_eq(dest_c32[x], px_hor)) {
|
||||
dest_c32[x].alpha = ((px_hor.alpha * xs_fract) + (dest_c32[x].alpha * (0xFF - xs_fract))) >> 8;
|
||||
if(dest_c32[x].alpha) dest_c32[x].alpha = ((px_hor.alpha * xs_fract) + (dest_c32[x].alpha * (0xFF - xs_fract))) >> 8;
|
||||
px_hor.alpha = xs_fract;
|
||||
dest_c32[x] = lv_color_mix32(px_hor, dest_c32[x]);
|
||||
}
|
||||
|
||||
@@ -114,7 +114,9 @@ static void draw_execute(lv_draw_vg_lite_unit_t * u)
|
||||
lv_draw_buf_set_flag(layer->draw_buf, LV_IMAGE_FLAGS_PREMULTIPLIED);
|
||||
|
||||
vg_lite_identity(&u->global_matrix);
|
||||
vg_lite_translate(-layer->buf_area.x1, -layer->buf_area.y1, &u->global_matrix);
|
||||
if(layer->buf_area.x1 || layer->buf_area.y1) {
|
||||
vg_lite_translate(-layer->buf_area.x1, -layer->buf_area.y1, &u->global_matrix);
|
||||
}
|
||||
|
||||
#if LV_DRAW_TRANSFORM_USE_MATRIX
|
||||
vg_lite_matrix_t layer_matrix;
|
||||
|
||||
@@ -149,9 +149,7 @@ void lv_draw_vg_lite_arc(lv_draw_unit_t * draw_unit, const lv_draw_arc_dsc_t * d
|
||||
|
||||
lv_vg_lite_path_end(path);
|
||||
|
||||
vg_lite_matrix_t matrix;
|
||||
vg_lite_identity(&matrix);
|
||||
lv_vg_lite_matrix_multiply(&matrix, &u->global_matrix);
|
||||
vg_lite_matrix_t matrix = u->global_matrix;
|
||||
|
||||
vg_lite_color_t color = lv_vg_lite_color(dsc->color, dsc->opa, true);
|
||||
|
||||
@@ -174,10 +172,8 @@ void lv_draw_vg_lite_arc(lv_draw_unit_t * draw_unit, const lv_draw_arc_dsc_t * d
|
||||
if(dsc->img_src) {
|
||||
vg_lite_buffer_t src_buf;
|
||||
lv_image_decoder_dsc_t decoder_dsc;
|
||||
if(lv_vg_lite_buffer_open_image(&src_buf, &decoder_dsc, dsc->img_src, false)) {
|
||||
vg_lite_matrix_t path_matrix;
|
||||
vg_lite_identity(&path_matrix);
|
||||
lv_vg_lite_matrix_multiply(&path_matrix, &u->global_matrix);
|
||||
if(lv_vg_lite_buffer_open_image(&src_buf, &decoder_dsc, dsc->img_src, false, true)) {
|
||||
vg_lite_matrix_t path_matrix = u->global_matrix;
|
||||
|
||||
/* move image to center */
|
||||
vg_lite_translate(cx - radius_out, cy - radius_out, &matrix);
|
||||
|
||||
@@ -83,9 +83,7 @@ void lv_draw_vg_lite_border(lv_draw_unit_t * draw_unit, const lv_draw_border_dsc
|
||||
|
||||
lv_vg_lite_path_end(path);
|
||||
|
||||
vg_lite_matrix_t matrix;
|
||||
vg_lite_identity(&matrix);
|
||||
lv_vg_lite_matrix_multiply(&matrix, &u->global_matrix);
|
||||
vg_lite_matrix_t matrix = u->global_matrix;
|
||||
|
||||
vg_lite_color_t color = lv_vg_lite_color(dsc->color, dsc->opa, true);
|
||||
|
||||
|
||||
@@ -57,22 +57,15 @@ void lv_draw_vg_lite_fill(lv_draw_unit_t * draw_unit, const lv_draw_fill_dsc_t *
|
||||
|
||||
LV_PROFILER_BEGIN;
|
||||
|
||||
vg_lite_matrix_t matrix;
|
||||
vg_lite_identity(&matrix);
|
||||
lv_vg_lite_matrix_multiply(&matrix, &u->global_matrix);
|
||||
|
||||
int32_t w = lv_area_get_width(coords);
|
||||
int32_t h = lv_area_get_height(coords);
|
||||
float r = dsc->radius;
|
||||
if(dsc->radius) {
|
||||
float r_short = LV_MIN(w, h) / 2.0f;
|
||||
r = LV_MIN(r, r_short);
|
||||
}
|
||||
vg_lite_matrix_t matrix = u->global_matrix;
|
||||
|
||||
lv_vg_lite_path_t * path = lv_vg_lite_path_get(u, VG_LITE_FP32);
|
||||
lv_vg_lite_path_set_quality(path, dsc->radius == 0 ? VG_LITE_LOW : VG_LITE_HIGH);
|
||||
lv_vg_lite_path_set_bonding_box_area(path, &clip_area);
|
||||
lv_vg_lite_path_append_rect(path, coords->x1, coords->y1, w, h, r);
|
||||
lv_vg_lite_path_append_rect(path,
|
||||
coords->x1, coords->y1,
|
||||
lv_area_get_width(coords), lv_area_get_height(coords),
|
||||
dsc->radius);
|
||||
lv_vg_lite_path_end(path);
|
||||
|
||||
vg_lite_path_t * vg_lite_path = lv_vg_lite_path_get_path(path);
|
||||
|
||||
@@ -74,7 +74,10 @@ void lv_draw_vg_lite_img(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t *
|
||||
|
||||
vg_lite_buffer_t src_buf;
|
||||
lv_image_decoder_dsc_t decoder_dsc;
|
||||
if(!lv_vg_lite_buffer_open_image(&src_buf, &decoder_dsc, dsc->src, no_cache)) {
|
||||
|
||||
/* if not support blend normal, premultiply alpha */
|
||||
bool premultiply = !lv_vg_lite_support_blend_normal();
|
||||
if(!lv_vg_lite_buffer_open_image(&src_buf, &decoder_dsc, dsc->src, no_cache, premultiply)) {
|
||||
LV_PROFILER_END;
|
||||
return;
|
||||
}
|
||||
@@ -91,13 +94,22 @@ void lv_draw_vg_lite_img(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t *
|
||||
lv_memset(&color, dsc->opa, sizeof(color));
|
||||
}
|
||||
|
||||
vg_lite_matrix_t matrix;
|
||||
vg_lite_identity(&matrix);
|
||||
lv_vg_lite_matrix_multiply(&matrix, &u->global_matrix);
|
||||
lv_vg_lite_image_matrix(&matrix, coords->x1, coords->y1, dsc);
|
||||
/* convert the blend mode to vg-lite blend mode, considering the premultiplied alpha */
|
||||
bool has_pre_mul = lv_draw_buf_has_flag(decoder_dsc.decoded, LV_IMAGE_FLAGS_PREMULTIPLIED);
|
||||
vg_lite_blend_t blend = lv_vg_lite_blend_mode(dsc->blend_mode, has_pre_mul);
|
||||
|
||||
/* original image matrix */
|
||||
vg_lite_matrix_t image_matrix;
|
||||
vg_lite_identity(&image_matrix);
|
||||
lv_vg_lite_image_matrix(&image_matrix, coords->x1, coords->y1, dsc);
|
||||
|
||||
/* image drawing matrix */
|
||||
vg_lite_matrix_t matrix = u->global_matrix;
|
||||
lv_vg_lite_matrix_multiply(&matrix, &image_matrix);
|
||||
|
||||
LV_VG_LITE_ASSERT_SRC_BUFFER(&src_buf);
|
||||
LV_VG_LITE_ASSERT_DEST_BUFFER(&u->target_buffer);
|
||||
LV_VG_LITE_ASSERT_MATRIX(&matrix);
|
||||
|
||||
bool no_transform = lv_matrix_is_identity_or_translation((const lv_matrix_t *)&matrix);
|
||||
vg_lite_filter_t filter = no_transform ? VG_LITE_FILTER_POINT : VG_LITE_FILTER_BI_LINEAR;
|
||||
@@ -118,7 +130,7 @@ void lv_draw_vg_lite_img(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t *
|
||||
&src_buf,
|
||||
&rect,
|
||||
&matrix,
|
||||
lv_vg_lite_blend_mode(dsc->blend_mode),
|
||||
blend,
|
||||
color,
|
||||
filter));
|
||||
LV_PROFILER_END_TAG("vg_lite_blit_rect");
|
||||
@@ -126,23 +138,22 @@ void lv_draw_vg_lite_img(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t *
|
||||
else {
|
||||
lv_vg_lite_path_t * path = lv_vg_lite_path_get(u, VG_LITE_FP32);
|
||||
|
||||
if(dsc->clip_radius) {
|
||||
int32_t width = lv_area_get_width(coords);
|
||||
int32_t height = lv_area_get_height(coords);
|
||||
float r_short = LV_MIN(width, height) / 2.0f;
|
||||
float radius = LV_MIN(dsc->clip_radius, r_short);
|
||||
|
||||
/**
|
||||
* When clip_radius is enabled, the clipping edges
|
||||
* are aligned with the image edges
|
||||
*/
|
||||
/**
|
||||
* When the image is transformed or rounded, create a path around
|
||||
* the image and follow the image_matrix for coordinate transformation
|
||||
*/
|
||||
if(!no_transform || dsc->clip_radius) {
|
||||
/* apply the image transform to the path */
|
||||
lv_vg_lite_path_set_transform(path, &image_matrix);
|
||||
lv_vg_lite_path_append_rect(
|
||||
path,
|
||||
coords->x1, coords->y1,
|
||||
width, height,
|
||||
radius);
|
||||
0, 0,
|
||||
lv_area_get_width(coords), lv_area_get_height(coords),
|
||||
dsc->clip_radius);
|
||||
lv_vg_lite_path_set_transform(path, NULL);
|
||||
}
|
||||
else {
|
||||
/* append normal rect to the path */
|
||||
lv_vg_lite_path_append_rect(
|
||||
path,
|
||||
clip_area.x1, clip_area.y1,
|
||||
@@ -156,9 +167,8 @@ void lv_draw_vg_lite_img(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t *
|
||||
vg_lite_path_t * vg_lite_path = lv_vg_lite_path_get_path(path);
|
||||
LV_VG_LITE_ASSERT_PATH(vg_lite_path);
|
||||
|
||||
vg_lite_matrix_t path_matrix;
|
||||
vg_lite_identity(&path_matrix);
|
||||
lv_vg_lite_matrix_multiply(&path_matrix, &u->global_matrix);
|
||||
vg_lite_matrix_t path_matrix = u->global_matrix;
|
||||
LV_VG_LITE_ASSERT_MATRIX(&path_matrix);
|
||||
|
||||
LV_PROFILER_BEGIN_TAG("vg_lite_draw_pattern");
|
||||
LV_VG_LITE_CHECK_ERROR(vg_lite_draw_pattern(
|
||||
@@ -168,7 +178,7 @@ void lv_draw_vg_lite_img(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t *
|
||||
&path_matrix,
|
||||
&src_buf,
|
||||
&matrix,
|
||||
lv_vg_lite_blend_mode(dsc->blend_mode),
|
||||
blend,
|
||||
VG_LITE_PATTERN_COLOR,
|
||||
0,
|
||||
color,
|
||||
|
||||
@@ -150,9 +150,7 @@ static void draw_letter_bitmap(lv_draw_vg_lite_unit_t * u, const lv_draw_glyph_d
|
||||
|
||||
lv_area_t image_area = *dsc->letter_coords;
|
||||
|
||||
vg_lite_matrix_t matrix;
|
||||
vg_lite_identity(&matrix);
|
||||
lv_vg_lite_matrix_multiply(&matrix, &u->global_matrix);
|
||||
vg_lite_matrix_t matrix = u->global_matrix;
|
||||
vg_lite_translate(image_area.x1, image_area.y1, &matrix);
|
||||
|
||||
vg_lite_buffer_t src_buf;
|
||||
@@ -198,9 +196,7 @@ static void draw_letter_bitmap(lv_draw_vg_lite_unit_t * u, const lv_draw_glyph_d
|
||||
vg_lite_path_t * vg_lite_path = lv_vg_lite_path_get_path(path);
|
||||
LV_VG_LITE_ASSERT_PATH(vg_lite_path);
|
||||
|
||||
vg_lite_matrix_t path_matrix;
|
||||
vg_lite_identity(&path_matrix);
|
||||
lv_vg_lite_matrix_multiply(&path_matrix, &u->global_matrix);
|
||||
vg_lite_matrix_t path_matrix = u->global_matrix;
|
||||
LV_VG_LITE_ASSERT_MATRIX(&path_matrix);
|
||||
|
||||
LV_PROFILER_BEGIN_TAG("vg_lite_draw_pattern");
|
||||
@@ -255,10 +251,7 @@ static void draw_letter_outline(lv_draw_vg_lite_unit_t * u, const lv_draw_glyph_
|
||||
vg_lite_identity(&matrix);
|
||||
|
||||
/* matrix for drawing, different from matrix for calculating the bonding box */
|
||||
vg_lite_matrix_t draw_matrix;
|
||||
vg_lite_identity(&draw_matrix);
|
||||
|
||||
lv_vg_lite_matrix_multiply(&draw_matrix, &u->global_matrix);
|
||||
vg_lite_matrix_t draw_matrix = u->global_matrix;
|
||||
|
||||
/* convert to vg-lite coordinate */
|
||||
vg_lite_translate(pos.x - dsc->g->ofs_x, pos.y + dsc->g->box_h + dsc->g->ofs_y, &draw_matrix);
|
||||
|
||||
@@ -180,9 +180,7 @@ void lv_draw_vg_lite_line(lv_draw_unit_t * draw_unit, const lv_draw_line_dsc_t *
|
||||
|
||||
lv_vg_lite_path_end(path);
|
||||
|
||||
vg_lite_matrix_t matrix;
|
||||
vg_lite_identity(&matrix);
|
||||
lv_vg_lite_matrix_multiply(&matrix, &u->global_matrix);
|
||||
vg_lite_matrix_t matrix = u->global_matrix;
|
||||
|
||||
vg_lite_color_t color = lv_vg_lite_color(dsc->color, dsc->opa, true);
|
||||
|
||||
|
||||
@@ -102,28 +102,23 @@ void lv_draw_vg_lite_mask_rect(lv_draw_unit_t * draw_unit, const lv_draw_mask_re
|
||||
|
||||
int32_t w = lv_area_get_width(&dsc->area);
|
||||
int32_t h = lv_area_get_height(&dsc->area);
|
||||
float r = dsc->radius;
|
||||
if(dsc->radius) {
|
||||
float r_short = LV_MIN(w, h) / 2.0f;
|
||||
r = LV_MIN(r, r_short);
|
||||
}
|
||||
|
||||
lv_vg_lite_path_t * path = lv_vg_lite_path_get(u, VG_LITE_FP32);
|
||||
lv_vg_lite_path_set_quality(path, VG_LITE_HIGH);
|
||||
lv_vg_lite_path_set_bonding_box_area(path, &draw_area);
|
||||
|
||||
/* Use rounded rectangles and normal rectangles of the same size to nest the cropped area */
|
||||
lv_vg_lite_path_append_rect(path, dsc->area.x1, dsc->area.y1, w, h, r);
|
||||
lv_vg_lite_path_append_rect(path, dsc->area.x1, dsc->area.y1, w, h, dsc->radius);
|
||||
lv_vg_lite_path_append_rect(path, dsc->area.x1, dsc->area.y1, w, h, 0);
|
||||
lv_vg_lite_path_end(path);
|
||||
|
||||
vg_lite_path_t * vg_lite_path = lv_vg_lite_path_get_path(path);
|
||||
|
||||
vg_lite_matrix_t * matrix = &u->global_matrix;
|
||||
vg_lite_matrix_t matrix = u->global_matrix;
|
||||
|
||||
LV_VG_LITE_ASSERT_DEST_BUFFER(&u->target_buffer);
|
||||
LV_VG_LITE_ASSERT_PATH(vg_lite_path);
|
||||
LV_VG_LITE_ASSERT_MATRIX(matrix);
|
||||
LV_VG_LITE_ASSERT_MATRIX(&matrix);
|
||||
|
||||
/* Use VG_LITE_BLEND_DST_IN (Sa * D) blending mode to make the corners transparent */
|
||||
LV_PROFILER_BEGIN_TAG("vg_lite_draw");
|
||||
@@ -131,7 +126,7 @@ void lv_draw_vg_lite_mask_rect(lv_draw_unit_t * draw_unit, const lv_draw_mask_re
|
||||
&u->target_buffer,
|
||||
vg_lite_path,
|
||||
VG_LITE_FILL_EVEN_ODD,
|
||||
matrix,
|
||||
&matrix,
|
||||
VG_LITE_BLEND_DST_IN,
|
||||
0));
|
||||
LV_PROFILER_END_TAG("vg_lite_draw");
|
||||
|
||||
@@ -71,9 +71,7 @@ void lv_draw_vg_lite_triangle(lv_draw_unit_t * draw_unit, const lv_draw_triangle
|
||||
LV_VG_LITE_ASSERT_DEST_BUFFER(&u->target_buffer);
|
||||
LV_VG_LITE_ASSERT_PATH(vg_lite_path);
|
||||
|
||||
vg_lite_matrix_t matrix;
|
||||
vg_lite_identity(&matrix);
|
||||
lv_vg_lite_matrix_multiply(&matrix, &u->global_matrix);
|
||||
vg_lite_matrix_t matrix = u->global_matrix;
|
||||
LV_VG_LITE_ASSERT_MATRIX(&matrix);
|
||||
|
||||
if(dsc->bg_grad.dir != LV_GRAD_DIR_NONE) {
|
||||
|
||||
@@ -217,7 +217,7 @@ static void task_draw_cb(void * ctx, const lv_vector_path_t * path, const lv_vec
|
||||
/* draw image */
|
||||
vg_lite_buffer_t image_buffer;
|
||||
lv_image_decoder_dsc_t decoder_dsc;
|
||||
if(lv_vg_lite_buffer_open_image(&image_buffer, &decoder_dsc, dsc->fill_dsc.img_dsc.src, false)) {
|
||||
if(lv_vg_lite_buffer_open_image(&image_buffer, &decoder_dsc, dsc->fill_dsc.img_dsc.src, false, true)) {
|
||||
/* Calculate pattern matrix. Should start from path bond box, and also apply fill matrix. */
|
||||
lv_matrix_t m = dsc->matrix;
|
||||
lv_matrix_translate(&m, min_x, min_y);
|
||||
@@ -251,7 +251,15 @@ static void task_draw_cb(void * ctx, const lv_vector_path_t * path, const lv_vec
|
||||
break;
|
||||
case LV_VECTOR_DRAW_STYLE_GRADIENT: {
|
||||
vg_lite_matrix_t grad_matrix;
|
||||
lv_vg_lite_matrix(&grad_matrix, &dsc->fill_dsc.matrix);
|
||||
vg_lite_identity(&grad_matrix);
|
||||
|
||||
#if !LV_USE_VG_LITE_THORVG
|
||||
/* Workaround inconsistent matrix behavior between device and ThorVG */
|
||||
lv_vg_lite_matrix_multiply(&grad_matrix, &matrix);
|
||||
#endif
|
||||
vg_lite_matrix_t fill_matrix;
|
||||
lv_vg_lite_matrix(&fill_matrix, &dsc->fill_dsc.matrix);
|
||||
lv_vg_lite_matrix_multiply(&grad_matrix, &fill_matrix);
|
||||
|
||||
lv_vg_lite_draw_grad(
|
||||
u,
|
||||
|
||||
@@ -36,8 +36,10 @@
|
||||
|
||||
struct lv_vg_lite_path_t {
|
||||
vg_lite_path_t base;
|
||||
vg_lite_matrix_t matrix;
|
||||
size_t mem_size;
|
||||
uint8_t format_len;
|
||||
bool has_transform;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
@@ -138,6 +140,7 @@ void lv_vg_lite_path_reset(lv_vg_lite_path_t * path, vg_lite_format_t data_forma
|
||||
path->base.quality = VG_LITE_MEDIUM;
|
||||
path->base.path_type = VG_LITE_DRAW_ZERO;
|
||||
path->format_len = lv_vg_lite_path_format_len(data_format);
|
||||
path->has_transform = false;
|
||||
}
|
||||
|
||||
vg_lite_path_t * lv_vg_lite_path_get_path(lv_vg_lite_path_t * path)
|
||||
@@ -234,6 +237,16 @@ bool lv_vg_lite_path_update_bonding_box(lv_vg_lite_path_t * path)
|
||||
return true;
|
||||
}
|
||||
|
||||
void lv_vg_lite_path_set_transform(lv_vg_lite_path_t * path, const vg_lite_matrix_t * matrix)
|
||||
{
|
||||
LV_ASSERT_NULL(path);
|
||||
if(matrix) {
|
||||
path->matrix = *matrix;
|
||||
}
|
||||
|
||||
path->has_transform = matrix ? true : false;
|
||||
}
|
||||
|
||||
void lv_vg_lite_path_set_quality(lv_vg_lite_path_t * path, vg_lite_quality_t quality)
|
||||
{
|
||||
LV_ASSERT_NULL(path);
|
||||
@@ -267,6 +280,15 @@ static void lv_vg_lite_path_append_op(lv_vg_lite_path_t * path, uint32_t op)
|
||||
|
||||
static void lv_vg_lite_path_append_point(lv_vg_lite_path_t * path, float x, float y)
|
||||
{
|
||||
if(path->has_transform) {
|
||||
LV_VG_LITE_ASSERT_MATRIX(&path->matrix);
|
||||
/* transform point */
|
||||
float ori_x = x;
|
||||
float ori_y = y;
|
||||
x = ori_x * path->matrix.m[0][0] + ori_y * path->matrix.m[0][1] + path->matrix.m[0][2];
|
||||
y = ori_x * path->matrix.m[1][0] + ori_y * path->matrix.m[1][1] + path->matrix.m[1][2];
|
||||
}
|
||||
|
||||
if(path->base.format == VG_LITE_FP32) {
|
||||
lv_vg_lite_path_append_data(path, &x, sizeof(x));
|
||||
lv_vg_lite_path_append_data(path, &y, sizeof(y));
|
||||
|
||||
@@ -61,6 +61,8 @@ void lv_vg_lite_path_get_bonding_box(lv_vg_lite_path_t * path,
|
||||
|
||||
bool lv_vg_lite_path_update_bonding_box(lv_vg_lite_path_t * path);
|
||||
|
||||
void lv_vg_lite_path_set_transform(lv_vg_lite_path_t * path, const vg_lite_matrix_t * matrix);
|
||||
|
||||
void lv_vg_lite_path_set_quality(lv_vg_lite_path_t * path, vg_lite_quality_t quality);
|
||||
|
||||
vg_lite_path_t * lv_vg_lite_path_get_path(lv_vg_lite_path_t * path);
|
||||
|
||||
@@ -714,7 +714,7 @@ void lv_vg_lite_image_matrix(vg_lite_matrix_t * matrix, int32_t x, int32_t y, co
|
||||
}
|
||||
|
||||
bool lv_vg_lite_buffer_open_image(vg_lite_buffer_t * buffer, lv_image_decoder_dsc_t * decoder_dsc, const void * src,
|
||||
bool no_cache)
|
||||
bool no_cache, bool premultiply)
|
||||
{
|
||||
LV_ASSERT_NULL(buffer);
|
||||
LV_ASSERT_NULL(decoder_dsc);
|
||||
@@ -722,7 +722,7 @@ bool lv_vg_lite_buffer_open_image(vg_lite_buffer_t * buffer, lv_image_decoder_ds
|
||||
|
||||
lv_image_decoder_args_t args;
|
||||
lv_memzero(&args, sizeof(lv_image_decoder_args_t));
|
||||
args.premultiply = !lv_vg_lite_support_blend_normal();
|
||||
args.premultiply = premultiply;
|
||||
args.stride_align = true;
|
||||
args.use_indexed = true;
|
||||
args.no_cache = no_cache;
|
||||
@@ -778,15 +778,11 @@ void lv_vg_lite_rect(vg_lite_rectangle_t * rect, const lv_area_t * area)
|
||||
rect->height = lv_area_get_height(area);
|
||||
}
|
||||
|
||||
#if LV_USE_MATRIX
|
||||
|
||||
void lv_vg_lite_matrix(vg_lite_matrix_t * dest, const lv_matrix_t * src)
|
||||
{
|
||||
lv_memcpy(dest, src, sizeof(lv_matrix_t));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
uint32_t lv_vg_lite_get_palette_size(vg_lite_buffer_format_t format)
|
||||
{
|
||||
uint32_t size = 0;
|
||||
@@ -819,9 +815,9 @@ vg_lite_color_t lv_vg_lite_color(lv_color_t color, lv_opa_t opa, bool pre_mul)
|
||||
return (uint32_t)opa << 24 | (uint32_t)color.blue << 16 | (uint32_t)color.green << 8 | color.red;
|
||||
}
|
||||
|
||||
vg_lite_blend_t lv_vg_lite_blend_mode(lv_blend_mode_t blend_mode)
|
||||
vg_lite_blend_t lv_vg_lite_blend_mode(lv_blend_mode_t blend_mode, bool has_pre_mul)
|
||||
{
|
||||
if(vg_lite_query_feature(gcFEATURE_BIT_VG_LVGL_SUPPORT)) {
|
||||
if(!has_pre_mul && vg_lite_query_feature(gcFEATURE_BIT_VG_LVGL_SUPPORT)) {
|
||||
switch(blend_mode) {
|
||||
case LV_BLEND_MODE_NORMAL: /**< Simply mix according to the opacity value*/
|
||||
return VG_LITE_BLEND_NORMAL_LVGL;
|
||||
@@ -842,7 +838,7 @@ vg_lite_blend_t lv_vg_lite_blend_mode(lv_blend_mode_t blend_mode)
|
||||
|
||||
switch(blend_mode) {
|
||||
case LV_BLEND_MODE_NORMAL: /**< Simply mix according to the opacity value*/
|
||||
if(vg_lite_query_feature(gcFEATURE_BIT_VG_HW_PREMULTIPLY)) {
|
||||
if(!has_pre_mul && vg_lite_query_feature(gcFEATURE_BIT_VG_HW_PREMULTIPLY)) {
|
||||
return VG_LITE_BLEND_PREMULTIPLY_SRC_OVER;
|
||||
}
|
||||
return VG_LITE_BLEND_SRC_OVER;
|
||||
@@ -883,11 +879,6 @@ bool lv_vg_lite_buffer_check(const vg_lite_buffer_t * buffer, bool is_src)
|
||||
return false;
|
||||
}
|
||||
|
||||
if(buffer->stride < 1) {
|
||||
LV_LOG_ERROR("buffer stride(%d) < 1", (int)buffer->stride);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!(buffer->tiled == VG_LITE_LINEAR || buffer->tiled == VG_LITE_TILED)) {
|
||||
LV_LOG_ERROR("buffer tiled(%d) is invalid", (int)buffer->tiled);
|
||||
return false;
|
||||
@@ -898,12 +889,6 @@ bool lv_vg_lite_buffer_check(const vg_lite_buffer_t * buffer, bool is_src)
|
||||
return false;
|
||||
}
|
||||
|
||||
if((uint32_t)(uintptr_t)buffer->memory != buffer->address) {
|
||||
LV_LOG_ERROR("buffer memory(%p) != address(%p)",
|
||||
buffer->memory, (void *)(uintptr_t)buffer->address);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(is_src && buffer->width != (vg_lite_int32_t)lv_vg_lite_width_align(buffer->width)) {
|
||||
LV_LOG_ERROR("buffer width(%d) is not aligned", (int)buffer->width);
|
||||
return false;
|
||||
|
||||
@@ -131,13 +131,13 @@ void lv_vg_lite_image_matrix(vg_lite_matrix_t * matrix, int32_t x, int32_t y, co
|
||||
void lv_vg_lite_image_dec_init(vg_lite_matrix_t * matrix, int32_t x, int32_t y, const lv_draw_image_dsc_t * dsc);
|
||||
|
||||
bool lv_vg_lite_buffer_open_image(vg_lite_buffer_t * buffer, lv_image_decoder_dsc_t * decoder_dsc, const void * src,
|
||||
bool no_cache);
|
||||
bool no_cache, bool premultiply);
|
||||
|
||||
void lv_vg_lite_image_dsc_init(struct lv_draw_vg_lite_unit_t * unit);
|
||||
|
||||
void lv_vg_lite_image_dsc_deinit(struct lv_draw_vg_lite_unit_t * unit);
|
||||
|
||||
vg_lite_blend_t lv_vg_lite_blend_mode(lv_blend_mode_t blend_mode);
|
||||
vg_lite_blend_t lv_vg_lite_blend_mode(lv_blend_mode_t blend_mode, bool has_pre_mul);
|
||||
|
||||
uint32_t lv_vg_lite_get_palette_size(vg_lite_buffer_format_t format);
|
||||
|
||||
@@ -145,12 +145,8 @@ vg_lite_color_t lv_vg_lite_color(lv_color_t color, lv_opa_t opa, bool pre_mul);
|
||||
|
||||
void lv_vg_lite_rect(vg_lite_rectangle_t * rect, const lv_area_t * area);
|
||||
|
||||
#if LV_USE_MATRIX
|
||||
|
||||
void lv_vg_lite_matrix(vg_lite_matrix_t * dest, const lv_matrix_t * src);
|
||||
|
||||
#endif
|
||||
|
||||
/* Param checker */
|
||||
|
||||
bool lv_vg_lite_buffer_check(const vg_lite_buffer_t * buffer, bool is_src);
|
||||
|
||||
@@ -61,7 +61,7 @@ lv_display_t * lv_opengles_texture_create(int32_t w, int32_t h)
|
||||
return NULL;
|
||||
}
|
||||
uint32_t stride = lv_draw_buf_width_to_stride(w, lv_display_get_color_format(disp));
|
||||
uint32_t buf_size = stride * w;
|
||||
uint32_t buf_size = stride * h;
|
||||
dsc->fb1 = malloc(buf_size);
|
||||
if(dsc->fb1 == NULL) {
|
||||
lv_free(dsc);
|
||||
|
||||
@@ -18,6 +18,10 @@ extern "C" {
|
||||
|
||||
#if LV_USE_LIBINPUT
|
||||
|
||||
#if LV_LIBINPUT_XKB
|
||||
#include "lv_xkb_private.h"
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
@@ -18,6 +18,7 @@ extern "C" {
|
||||
|
||||
#if defined(LV_LIBINPUT_XKB) && LV_LIBINPUT_XKB
|
||||
|
||||
#include "../../misc/lv_types.h"
|
||||
#include <stdbool.h>
|
||||
#include <xkbcommon/xkbcommon.h>
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ lv_display_t * lv_sdl_window_create(int32_t hor_res, int32_t ver_res)
|
||||
lv_display_set_buffers(disp, dsc->fb1, dsc->fb2, stride * disp->ver_res,
|
||||
LV_SDL_RENDER_MODE);
|
||||
}
|
||||
#else /*/*LV_USE_DRAW_SDL == 1*/
|
||||
#else /*LV_USE_DRAW_SDL == 1*/
|
||||
/*It will render directly to default Texture, so the buffer is not used, so just set something*/
|
||||
static lv_draw_buf_t draw_buf;
|
||||
static uint8_t dummy_buf; /*It won't be used as it will render to the SDL textures directly*/
|
||||
@@ -166,7 +166,7 @@ lv_display_t * lv_sdl_get_disp_from_win_id(uint32_t win_id)
|
||||
|
||||
while(disp) {
|
||||
lv_sdl_window_t * dsc = lv_display_get_driver_data(disp);
|
||||
if(SDL_GetWindowID(dsc->window) == win_id) {
|
||||
if(dsc != NULL && SDL_GetWindowID(dsc->window) == win_id) {
|
||||
return disp;
|
||||
}
|
||||
disp = lv_display_get_next(disp);
|
||||
|
||||
@@ -1203,11 +1203,6 @@ static void indev_proc_press(lv_indev_t * indev)
|
||||
|
||||
lv_obj_send_event(last_obj, LV_EVENT_PRESS_LOST, indev_act);
|
||||
if(indev_reset_check(indev)) return;
|
||||
|
||||
/*Do nothing until release and a new press*/
|
||||
lv_indev_reset(indev, NULL);
|
||||
lv_indev_wait_release(indev);
|
||||
return;
|
||||
}
|
||||
|
||||
indev->pointer.act_obj = indev_obj_act; /*Save the pressed object*/
|
||||
|
||||
@@ -113,9 +113,21 @@ static gd_GIF * gif_open(gd_GIF * gif_base)
|
||||
/* Aspect Ratio */
|
||||
f_gif_read(gif_base, &aspect, 1);
|
||||
/* Create gd_GIF Structure. */
|
||||
if(0 == width || 0 == height){
|
||||
LV_LOG_WARN("Zero size image");
|
||||
goto fail;
|
||||
}
|
||||
#if LV_GIF_CACHE_DECODE_DATA
|
||||
if(0 == (INT_MAX - sizeof(gd_GIF) - LZW_CACHE_SIZE) / width / height / 5){
|
||||
LV_LOG_WARN("Image dimensions are too large");
|
||||
goto fail;
|
||||
}
|
||||
gif = lv_malloc(sizeof(gd_GIF) + 5 * width * height + LZW_CACHE_SIZE);
|
||||
#else
|
||||
if(0 == (INT_MAX - sizeof(gd_GIF)) / width / height / 5){
|
||||
LV_LOG_WARN("Image dimensions are too large");
|
||||
goto fail;
|
||||
}
|
||||
gif = lv_malloc(sizeof(gd_GIF) + 5 * width * height);
|
||||
#endif
|
||||
if(!gif) goto fail;
|
||||
@@ -318,6 +330,8 @@ get_key(gd_GIF *gif, int key_size, uint8_t *sub_len, uint8_t *shift, uint8_t *by
|
||||
}
|
||||
|
||||
#if LV_GIF_CACHE_DECODE_DATA
|
||||
/* Decompress image pixels.
|
||||
* Return 0 on success or -1 on out-of-memory (w.r.t. LZW code table) or parse error. */
|
||||
static int
|
||||
read_image_data(gd_GIF *gif, int interlace)
|
||||
{
|
||||
@@ -375,6 +389,10 @@ read_image_data(gd_GIF *gif, int interlace)
|
||||
while (frm_off < frm_size) {
|
||||
/* copy data to frame buffer */
|
||||
while (sp > p_stack) {
|
||||
if(frm_off >= frm_size){
|
||||
LV_LOG_WARN("LZW table token overflows the frame buffer");
|
||||
return -1;
|
||||
}
|
||||
*ptr++ = *(--sp);
|
||||
frm_off += 1;
|
||||
/* read one line */
|
||||
@@ -526,7 +544,7 @@ interlaced_line_index(int h, int y)
|
||||
}
|
||||
|
||||
/* Decompress image pixels.
|
||||
* Return 0 on success or -1 on out-of-memory (w.r.t. LZW code table). */
|
||||
* Return 0 on success or -1 on out-of-memory (w.r.t. LZW code table) or parse error. */
|
||||
static int
|
||||
read_image_data(gd_GIF * gif, int interlace)
|
||||
{
|
||||
@@ -578,6 +596,10 @@ read_image_data(gd_GIF * gif, int interlace)
|
||||
if(ret == 1) key_size++;
|
||||
entry = table->entries[key];
|
||||
str_len = entry.length;
|
||||
if(frm_off + str_len >= frm_size){
|
||||
LV_LOG_WARN("LZW table token overflows the frame buffer");
|
||||
return -1;
|
||||
}
|
||||
for(i = 0; i < str_len; i++) {
|
||||
p = frm_off + entry.length - 1;
|
||||
x = p % gif->fw;
|
||||
@@ -603,7 +625,7 @@ read_image_data(gd_GIF * gif, int interlace)
|
||||
#endif
|
||||
|
||||
/* Read image.
|
||||
* Return 0 on success or -1 on out-of-memory (w.r.t. LZW code table). */
|
||||
* Return 0 on success or -1 on out-of-memory (w.r.t. LZW code table) or parse error. */
|
||||
static int
|
||||
read_image(gd_GIF * gif)
|
||||
{
|
||||
@@ -615,6 +637,10 @@ read_image(gd_GIF * gif)
|
||||
gif->fy = read_num(gif);
|
||||
gif->fw = read_num(gif);
|
||||
gif->fh = read_num(gif);
|
||||
if(gif->fx + (uint32_t)gif->fw > gif->width || gif->fy + (uint32_t)gif->fh > gif->height){
|
||||
LV_LOG_WARN("Frame coordinates out of image bounds");
|
||||
return -1;
|
||||
}
|
||||
f_gif_read(gif, &fisrz, 1);
|
||||
interlace = fisrz & 0x40;
|
||||
/* Ignore Sort Flag. */
|
||||
|
||||
@@ -137,6 +137,36 @@ void lv_gif_resume(lv_obj_t * obj)
|
||||
lv_timer_resume(gifobj->timer);
|
||||
}
|
||||
|
||||
bool lv_gif_is_loaded(lv_obj_t * obj)
|
||||
{
|
||||
lv_gif_t * gifobj = (lv_gif_t *) obj;
|
||||
|
||||
return (gifobj->gif != NULL);
|
||||
}
|
||||
|
||||
int32_t lv_gif_get_loop_count(lv_obj_t * obj)
|
||||
{
|
||||
lv_gif_t * gifobj = (lv_gif_t *) obj;
|
||||
|
||||
if(gifobj->gif == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return gifobj->gif->loop_count;
|
||||
}
|
||||
|
||||
void lv_gif_set_loop_count(lv_obj_t * obj, int32_t count)
|
||||
{
|
||||
lv_gif_t * gifobj = (lv_gif_t *) obj;
|
||||
|
||||
if(gifobj->gif == NULL) {
|
||||
LV_LOG_WARN("Gif resource not loaded correctly");
|
||||
return;
|
||||
}
|
||||
|
||||
gifobj->gif->loop_count = count;
|
||||
}
|
||||
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
||||
@@ -72,6 +72,25 @@ void lv_gif_pause(lv_obj_t * obj);
|
||||
*/
|
||||
void lv_gif_resume(lv_obj_t * obj);
|
||||
|
||||
/**
|
||||
* Checks if the GIF was loaded correctly.
|
||||
* @param obj pointer to a gif obj
|
||||
*/
|
||||
bool lv_gif_is_loaded(lv_obj_t * obj);
|
||||
|
||||
/**
|
||||
* Get the loop count for the GIF.
|
||||
* @param obj pointer to a gif obj
|
||||
*/
|
||||
int32_t lv_gif_get_loop_count(lv_obj_t * obj);
|
||||
|
||||
/**
|
||||
* Set the loop count for the GIF.
|
||||
* @param obj pointer to a gif obj
|
||||
* @param count the loop count to set
|
||||
*/
|
||||
void lv_gif_set_loop_count(lv_obj_t * obj, int32_t count);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
@@ -266,6 +266,24 @@
|
||||
#endif
|
||||
#endif
|
||||
#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.
|
||||
*/
|
||||
#ifndef LV_USE_FREERTOS_TASK_NOTIFY
|
||||
#ifdef LV_KCONFIG_PRESENT
|
||||
#ifdef CONFIG_LV_USE_FREERTOS_TASK_NOTIFY
|
||||
#define LV_USE_FREERTOS_TASK_NOTIFY CONFIG_LV_USE_FREERTOS_TASK_NOTIFY
|
||||
#else
|
||||
#define LV_USE_FREERTOS_TASK_NOTIFY 0
|
||||
#endif
|
||||
#else
|
||||
#define LV_USE_FREERTOS_TASK_NOTIFY 1
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*========================
|
||||
* RENDERING CONFIGURATION
|
||||
@@ -610,16 +628,38 @@
|
||||
#endif
|
||||
|
||||
/* Use NXP's PXP on iMX RTxxx platforms. */
|
||||
#ifndef LV_USE_DRAW_PXP
|
||||
#ifdef CONFIG_LV_USE_DRAW_PXP
|
||||
#define LV_USE_DRAW_PXP CONFIG_LV_USE_DRAW_PXP
|
||||
#ifndef LV_USE_PXP
|
||||
#ifdef CONFIG_LV_USE_PXP
|
||||
#define LV_USE_PXP CONFIG_LV_USE_PXP
|
||||
#else
|
||||
#define LV_USE_DRAW_PXP 0
|
||||
#define LV_USE_PXP 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_OS
|
||||
#if LV_USE_PXP
|
||||
/* Use PXP for drawing.*/
|
||||
#ifndef LV_USE_DRAW_PXP
|
||||
#ifdef LV_KCONFIG_PRESENT
|
||||
#ifdef CONFIG_LV_USE_DRAW_PXP
|
||||
#define LV_USE_DRAW_PXP CONFIG_LV_USE_DRAW_PXP
|
||||
#else
|
||||
#define LV_USE_DRAW_PXP 0
|
||||
#endif
|
||||
#else
|
||||
#define LV_USE_DRAW_PXP 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Use PXP to rotate display.*/
|
||||
#ifndef LV_USE_ROTATE_PXP
|
||||
#ifdef CONFIG_LV_USE_ROTATE_PXP
|
||||
#define LV_USE_ROTATE_PXP CONFIG_LV_USE_ROTATE_PXP
|
||||
#else
|
||||
#define LV_USE_ROTATE_PXP 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if LV_USE_DRAW_PXP && LV_USE_OS
|
||||
/* Use additional draw thread for PXP processing.*/
|
||||
#ifndef LV_USE_PXP_DRAW_THREAD
|
||||
#ifdef LV_KCONFIG_PRESENT
|
||||
|
||||
@@ -18,6 +18,16 @@ extern "C" {
|
||||
|
||||
# ifdef __NuttX__
|
||||
# include <nuttx/config.h>
|
||||
/*
|
||||
* Make sure version number in Kconfig file is correctly set.
|
||||
* Mismatch can happen when user manually copy lvgl/Kconfig file to their project, like what NuttX does.
|
||||
*/
|
||||
# include "../lv_version.h"
|
||||
|
||||
# if CONFIG_LVGL_VERSION_MAJOR != LVGL_VERSION_MAJOR || CONFIG_LVGL_VERSION_MINOR != LVGL_VERSION_MINOR \
|
||||
|| CONFIG_LVGL_VERSION_PATCH != LVGL_VERSION_PATCH
|
||||
# warning "Version mismatch between Kconfig and lvgl/lv_version.h"
|
||||
# endif
|
||||
# elif defined(__RTTHREAD__)
|
||||
# define LV_CONF_INCLUDE_SIMPLE
|
||||
# include <lv_rt_thread_conf.h>
|
||||
|
||||
@@ -43,8 +43,10 @@
|
||||
#if LV_USE_DRAW_VGLITE
|
||||
#include "draw/nxp/vglite/lv_draw_vglite.h"
|
||||
#endif
|
||||
#if LV_USE_DRAW_PXP
|
||||
#include "draw/nxp/pxp/lv_draw_pxp.h"
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP
|
||||
#include "draw/nxp/pxp/lv_draw_pxp.h"
|
||||
#endif
|
||||
#endif
|
||||
#if LV_USE_DRAW_DAVE2D
|
||||
#include "draw/renesas/dave2d/lv_draw_dave2d.h"
|
||||
@@ -198,9 +200,11 @@ void lv_init(void)
|
||||
lv_draw_vglite_init();
|
||||
#endif
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP
|
||||
lv_draw_pxp_init();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if LV_USE_DRAW_DAVE2D
|
||||
lv_draw_dave2d_init();
|
||||
@@ -385,9 +389,11 @@ void lv_deinit(void)
|
||||
|
||||
lv_obj_style_deinit();
|
||||
|
||||
#if LV_USE_DRAW_PXP
|
||||
#if LV_USE_PXP
|
||||
#if LV_USE_DRAW_PXP || LV_USE_ROTATE_PXP
|
||||
lv_draw_pxp_deinit();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if LV_USE_DRAW_VGLITE
|
||||
lv_draw_vglite_deinit();
|
||||
|
||||
@@ -70,7 +70,6 @@ extern "C" {
|
||||
#include "widgets/buttonmatrix/lv_buttonmatrix_private.h"
|
||||
#include "widgets/slider/lv_slider_private.h"
|
||||
#include "widgets/switch/lv_switch_private.h"
|
||||
#include "widgets/calendar/lv_calendar_chinese_private.h"
|
||||
#include "widgets/calendar/lv_calendar_private.h"
|
||||
#include "widgets/imagebutton/lv_imagebutton_private.h"
|
||||
#include "widgets/bar/lv_bar_private.h"
|
||||
|
||||
@@ -138,7 +138,7 @@ uint32_t lv_anim_get_playtime(const lv_anim_t * a)
|
||||
if(repeat_cnt < 1) repeat_cnt = 1;
|
||||
|
||||
uint32_t playtime = a->repeat_delay + a->duration + a->playback_delay + a->playback_duration;
|
||||
playtime = playtime * a->repeat_cnt;
|
||||
playtime = playtime * repeat_cnt;
|
||||
return playtime;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ extern "C" {
|
||||
*********************/
|
||||
|
||||
#include "lv_bidi.h"
|
||||
#if LV_USE_BIDI
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
@@ -91,6 +92,8 @@ void lv_bidi_process_paragraph(const char * str_in, char * str_out, uint32_t len
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#endif /*LV_USE_BIDI*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C"*/
|
||||
#endif
|
||||
|
||||
@@ -87,6 +87,7 @@ bool lv_color_format_has_alpha(lv_color_format_t cf)
|
||||
case LV_COLOR_FORMAT_I4:
|
||||
case LV_COLOR_FORMAT_I8:
|
||||
case LV_COLOR_FORMAT_RGB565A8:
|
||||
case LV_COLOR_FORMAT_ARGB8565:
|
||||
case LV_COLOR_FORMAT_ARGB8888:
|
||||
case LV_COLOR_FORMAT_AL88:
|
||||
return true;
|
||||
|
||||
@@ -91,6 +91,12 @@ typedef struct {
|
||||
lv_fs_file_cache_t * cache;
|
||||
} lv_fs_file_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
void * dir_d;
|
||||
lv_fs_drv_t * drv;
|
||||
} lv_fs_dir_t;
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
@@ -38,12 +38,6 @@ struct lv_fs_path_ex_t {
|
||||
uint32_t size;
|
||||
};
|
||||
|
||||
struct lv_fs_dir_t {
|
||||
void * dir_d;
|
||||
lv_fs_drv_t * drv;
|
||||
};
|
||||
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
@@ -139,8 +139,6 @@ typedef struct lv_fs_file_cache_t lv_fs_file_cache_t;
|
||||
|
||||
typedef struct lv_fs_path_ex_t lv_fs_path_ex_t;
|
||||
|
||||
typedef struct lv_fs_dir_t lv_fs_dir_t;
|
||||
|
||||
typedef struct lv_image_decoder_args_t lv_image_decoder_args_t;
|
||||
|
||||
typedef struct lv_image_cache_data_t lv_image_cache_data_t;
|
||||
@@ -187,8 +185,6 @@ typedef struct lv_buttonmatrix_t lv_buttonmatrix_t;
|
||||
|
||||
typedef struct lv_calendar_t lv_calendar_t;
|
||||
|
||||
typedef struct lv_calendar_chinese_t lv_calendar_chinese_t;
|
||||
|
||||
typedef struct lv_canvas_t lv_canvas_t;
|
||||
|
||||
typedef struct lv_chart_series_t lv_chart_series_t;
|
||||
|
||||
@@ -15,11 +15,7 @@
|
||||
#include "lv_os.h"
|
||||
#if LV_USE_OS == LV_OS_FREERTOS
|
||||
|
||||
#if (ESP_PLATFORM)
|
||||
#include "freertos/atomic.h"
|
||||
#else
|
||||
#include "atomic.h"
|
||||
#endif
|
||||
#include "atomic.h"
|
||||
|
||||
#include "../tick/lv_tick.h"
|
||||
#include "../misc/lv_log.h"
|
||||
@@ -54,7 +50,9 @@ static void prvCondInit(lv_thread_sync_t * pxCond);
|
||||
|
||||
static void prvCheckCondInit(lv_thread_sync_t * pxCond);
|
||||
|
||||
#if !USE_FREERTOS_TASK_NOTIFY
|
||||
static void prvCheckCondInitIsr(lv_thread_sync_t * pxCond);
|
||||
|
||||
#if !LV_USE_FREERTOS_TASK_NOTIFY
|
||||
static void prvTestAndDecrement(lv_thread_sync_t * pxCond,
|
||||
uint32_t ulLocalWaitingThreads);
|
||||
#endif
|
||||
@@ -74,9 +72,13 @@ static void prvTestAndDecrement(lv_thread_sync_t * pxCond,
|
||||
#if (ESP_PLATFORM)
|
||||
#define _enter_critical() taskENTER_CRITICAL(&critSectionMux);
|
||||
#define _exit_critical() taskEXIT_CRITICAL(&critSectionMux);
|
||||
#define _enter_critical_isr() taskENTER_CRITICAL_FROM_ISR();
|
||||
#define _exit_critical_isr(x) taskEXIT_CRITICAL_FROM_ISR(x);
|
||||
#else
|
||||
#define _enter_critical() taskENTER_CRITICAL();
|
||||
#define _exit_critical() taskEXIT_CRITICAL();
|
||||
#define _enter_critical_isr() taskENTER_CRITICAL_FROM_ISR();
|
||||
#define _exit_critical_isr(x) taskEXIT_CRITICAL_FROM_ISR(x);
|
||||
#endif
|
||||
|
||||
/**********************
|
||||
@@ -195,20 +197,20 @@ lv_result_t lv_thread_sync_wait(lv_thread_sync_t * pxCond)
|
||||
/* If the cond is uninitialized, perform initialization. */
|
||||
prvCheckCondInit(pxCond);
|
||||
|
||||
#if USE_FREERTOS_TASK_NOTIFY
|
||||
TaskHandle_t current_task_handle = xTaskGetCurrentTaskHandle();
|
||||
#if LV_USE_FREERTOS_TASK_NOTIFY
|
||||
TaskHandle_t xCurrentTaskHandle = xTaskGetCurrentTaskHandle();
|
||||
|
||||
_enter_critical();
|
||||
BaseType_t signal_sent = pxCond->xSyncSignal;
|
||||
BaseType_t xSyncSygnal = pxCond->xSyncSignal;
|
||||
pxCond->xSyncSignal = pdFALSE;
|
||||
if(signal_sent == pdFALSE) {
|
||||
if(xSyncSygnal == pdFALSE) {
|
||||
/* The signal hasn't been sent yet. Tell the sender to notify this task */
|
||||
pxCond->xTaskToNotify = current_task_handle;
|
||||
pxCond->xTaskToNotify = xCurrentTaskHandle;
|
||||
}
|
||||
/* If we have a signal from the other task, we should not ask to be notified */
|
||||
_exit_critical();
|
||||
|
||||
if(signal_sent == pdFALSE) {
|
||||
if(xSyncSygnal == pdFALSE) {
|
||||
/* Wait for other task to notify this task. */
|
||||
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
|
||||
}
|
||||
@@ -275,20 +277,20 @@ lv_result_t lv_thread_sync_signal(lv_thread_sync_t * pxCond)
|
||||
/* If the cond is uninitialized, perform initialization. */
|
||||
prvCheckCondInit(pxCond);
|
||||
|
||||
#if USE_FREERTOS_TASK_NOTIFY
|
||||
#if LV_USE_FREERTOS_TASK_NOTIFY
|
||||
_enter_critical();
|
||||
TaskHandle_t task_to_notify = pxCond->xTaskToNotify;
|
||||
TaskHandle_t xTaskToNotify = pxCond->xTaskToNotify;
|
||||
pxCond->xTaskToNotify = NULL;
|
||||
if(task_to_notify == NULL) {
|
||||
if(xTaskToNotify == NULL) {
|
||||
/* No task waiting to be notified. Send this signal for later */
|
||||
pxCond->xSyncSignal = pdTRUE;
|
||||
}
|
||||
/* If a task is already waiting, there is no need to set the sync signal */
|
||||
_exit_critical();
|
||||
|
||||
if(task_to_notify != NULL) {
|
||||
if(xTaskToNotify != NULL) {
|
||||
/* There is a task waiting. Send a notification to it */
|
||||
xTaskNotifyGive(task_to_notify);
|
||||
xTaskNotifyGive(xTaskToNotify);
|
||||
}
|
||||
/* If there was no task waiting to be notified, we sent a signal for it to see later. */
|
||||
#else
|
||||
@@ -329,13 +331,13 @@ lv_result_t lv_thread_sync_signal(lv_thread_sync_t * pxCond)
|
||||
|
||||
lv_result_t lv_thread_sync_delete(lv_thread_sync_t * pxCond)
|
||||
{
|
||||
#if !USE_FREERTOS_TASK_NOTIFY
|
||||
#if !LV_USE_FREERTOS_TASK_NOTIFY
|
||||
/* Cleanup all resources used by the cond. */
|
||||
vSemaphoreDelete(pxCond->xCondWaitSemaphore);
|
||||
vSemaphoreDelete(pxCond->xSyncMutex);
|
||||
pxCond->ulWaitingThreads = 0;
|
||||
pxCond->xSyncSignal = pdFALSE;
|
||||
#endif
|
||||
pxCond->xSyncSignal = pdFALSE;
|
||||
pxCond->xIsInitialized = pdFALSE;
|
||||
|
||||
return LV_RESULT_OK;
|
||||
@@ -346,28 +348,28 @@ lv_result_t lv_thread_sync_signal_isr(lv_thread_sync_t * pxCond)
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
/* If the cond is uninitialized, perform initialization. */
|
||||
prvCheckCondInit(pxCond);
|
||||
prvCheckCondInitIsr(pxCond);
|
||||
|
||||
#if USE_FREERTOS_TASK_NOTIFY
|
||||
_enter_critical();
|
||||
TaskHandle_t task_to_notify = pxCond->xTaskToNotify;
|
||||
#if LV_USE_FREERTOS_TASK_NOTIFY
|
||||
uint32_t mask = _enter_critical_isr();
|
||||
TaskHandle_t xTaskToNotify = pxCond->xTaskToNotify;
|
||||
pxCond->xTaskToNotify = NULL;
|
||||
if(task_to_notify == NULL) {
|
||||
if(xTaskToNotify == NULL) {
|
||||
/* No task waiting to be notified. Send this signal for later */
|
||||
pxCond->xSyncSignal = pdTRUE;
|
||||
}
|
||||
/* If a task is already waiting, there is no need to set the sync signal */
|
||||
_exit_critical();
|
||||
_exit_critical_isr(mask);
|
||||
|
||||
if(task_to_notify != NULL) {
|
||||
if(xTaskToNotify != NULL) {
|
||||
/* There is a task waiting. Send a notification to it */
|
||||
vTaskNotifyGiveFromISR(task_to_notify, &xHigherPriorityTaskWoken);
|
||||
vTaskNotifyGiveFromISR(xTaskToNotify, &xHigherPriorityTaskWoken);
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
}
|
||||
/* If there was no task waiting to be notified, we sent a signal for it to see later. */
|
||||
#else
|
||||
/* Enter critical section to prevent preemption. */
|
||||
_enter_critical();
|
||||
uint32_t mask = _enter_critical_isr();
|
||||
|
||||
pxCond->xSyncSignal = pdTRUE;
|
||||
BaseType_t xAnyHigherPriorityTaskWoken = pdFALSE;
|
||||
@@ -378,7 +380,7 @@ lv_result_t lv_thread_sync_signal_isr(lv_thread_sync_t * pxCond)
|
||||
xHigherPriorityTaskWoken |= xAnyHigherPriorityTaskWoken;
|
||||
}
|
||||
|
||||
_exit_critical();
|
||||
_exit_critical_isr(mask);
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
#endif
|
||||
|
||||
@@ -470,7 +472,7 @@ static void prvCondInit(lv_thread_sync_t * pxCond)
|
||||
pxCond->xIsInitialized = pdTRUE;
|
||||
pxCond->xSyncSignal = pdFALSE;
|
||||
|
||||
#if USE_FREERTOS_TASK_NOTIFY
|
||||
#if LV_USE_FREERTOS_TASK_NOTIFY
|
||||
pxCond->xTaskToNotify = NULL;
|
||||
#else
|
||||
pxCond->xCondWaitSemaphore = xSemaphoreCreateCounting(ulMAX_COUNT, 0U);
|
||||
@@ -516,7 +518,27 @@ static void prvCheckCondInit(lv_thread_sync_t * pxCond)
|
||||
}
|
||||
}
|
||||
|
||||
#if !USE_FREERTOS_TASK_NOTIFY
|
||||
static void prvCheckCondInitIsr(lv_thread_sync_t * pxCond)
|
||||
{
|
||||
/* Check if the condition variable needs to be initialized. */
|
||||
if(pxCond->xIsInitialized == pdFALSE) {
|
||||
/* Cond initialization must be in a critical section to prevent two
|
||||
* threads from initializing it at the same time. */
|
||||
uint32_t mask = _enter_critical_isr();
|
||||
|
||||
/* Check again that the condition is still uninitialized, i.e. it wasn't
|
||||
* initialized while this function was waiting to enter the critical
|
||||
* section. */
|
||||
if(pxCond->xIsInitialized == pdFALSE) {
|
||||
prvCondInit(pxCond);
|
||||
}
|
||||
|
||||
/* Exit the critical section. */
|
||||
_exit_critical_isr(mask);
|
||||
}
|
||||
}
|
||||
|
||||
#if !LV_USE_FREERTOS_TASK_NOTIFY
|
||||
static void prvTestAndDecrement(lv_thread_sync_t * pxCond,
|
||||
uint32_t ulLocalWaitingThreads)
|
||||
{
|
||||
|
||||
@@ -37,14 +37,6 @@ extern "C" {
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/*
|
||||
* 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 USE_FREERTOS_TASK_NOTIFY 1
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
@@ -64,7 +56,7 @@ typedef struct {
|
||||
BaseType_t
|
||||
xIsInitialized; /**< Set to pdTRUE if this condition variable is initialized, pdFALSE otherwise. */
|
||||
BaseType_t xSyncSignal; /**< Set to pdTRUE if the thread is signaled, pdFALSE otherwise. */
|
||||
#if USE_FREERTOS_TASK_NOTIFY
|
||||
#if LV_USE_FREERTOS_TASK_NOTIFY
|
||||
TaskHandle_t xTaskToNotify; /**< The task waiting to be signalled. NULL if nothing is waiting. */
|
||||
#else
|
||||
SemaphoreHandle_t xCondWaitSemaphore; /**< Threads block on this semaphore in lv_thread_sync_wait. */
|
||||
|
||||
@@ -707,7 +707,8 @@ static void lv_ime_pinyin_kb_event(lv_event_t * e)
|
||||
}
|
||||
else if((pinyin_ime->mode == LV_IME_PINYIN_MODE_K26) && ((txt[0] >= 'a' && txt[0] <= 'z') || (txt[0] >= 'A' &&
|
||||
txt[0] <= 'Z'))) {
|
||||
lv_strcat(pinyin_ime->input_char, txt);
|
||||
uint16_t len = lv_strlen(pinyin_ime->input_char);
|
||||
lv_snprintf(pinyin_ime->input_char + len, sizeof(pinyin_ime->input_char) - len, "%s", txt);
|
||||
pinyin_input_proc(obj);
|
||||
pinyin_ime->ta_count++;
|
||||
}
|
||||
@@ -877,8 +878,8 @@ static void init_pinyin_dict(lv_obj_t * obj, const lv_pinyin_dict_t * dict)
|
||||
}
|
||||
else {
|
||||
headletter = dict[i].py[0];
|
||||
pinyin_ime->py_num[letter_calc] = offset_count;
|
||||
letter_calc = headletter - 'a';
|
||||
pinyin_ime->py_num[letter_calc - 1] = offset_count;
|
||||
offset_sum += offset_count;
|
||||
pinyin_ime->py_pos[letter_calc] = offset_sum;
|
||||
|
||||
|
||||
@@ -277,11 +277,10 @@ static void perf_update_timer_cb(lv_timer_t * t)
|
||||
|
||||
static void perf_observer_cb(lv_observer_t * observer, lv_subject_t * subject)
|
||||
{
|
||||
lv_obj_t * label = lv_observer_get_target(observer);
|
||||
const lv_sysmon_perf_info_t * perf = lv_subject_get_pointer(subject);
|
||||
|
||||
#if LV_USE_PERF_MONITOR_LOG_MODE
|
||||
LV_UNUSED(label);
|
||||
LV_UNUSED(observer);
|
||||
LV_LOG("sysmon: "
|
||||
"%" LV_PRIu32 " FPS (refr_cnt: %" LV_PRIu32 " | redraw_cnt: %" LV_PRIu32"), "
|
||||
"refr %" LV_PRIu32 "ms (render %" LV_PRIu32 "ms | flush %" LV_PRIu32 "ms), "
|
||||
@@ -290,6 +289,7 @@ static void perf_observer_cb(lv_observer_t * observer, lv_subject_t * subject)
|
||||
perf->calculated.refr_avg_time, perf->calculated.render_avg_time, perf->calculated.flush_avg_time,
|
||||
perf->calculated.cpu);
|
||||
#else
|
||||
lv_obj_t * label = lv_observer_get_target(observer);
|
||||
lv_label_set_text_fmt(
|
||||
label,
|
||||
"%" LV_PRIu32" FPS, %" LV_PRIu32 "%% CPU\n"
|
||||
|
||||
@@ -134,6 +134,13 @@ uint32_t lv_animimg_get_repeat_count(lv_obj_t * obj)
|
||||
return lv_anim_get_repeat_count(&animimg->anim);
|
||||
}
|
||||
|
||||
lv_anim_t * lv_animimg_get_anim(lv_obj_t * obj)
|
||||
{
|
||||
LV_ASSERT_OBJ(obj, MY_CLASS);
|
||||
lv_animimg_t * animimg = (lv_animimg_t *)obj;
|
||||
return &animimg->anim;
|
||||
}
|
||||
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
||||
@@ -14,6 +14,7 @@ extern "C" {
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "../image/lv_image.h"
|
||||
#include "../../misc/lv_types.h"
|
||||
|
||||
#if LV_USE_ANIMIMG != 0
|
||||
|
||||
@@ -112,6 +113,13 @@ uint32_t lv_animimg_get_duration(lv_obj_t * img);
|
||||
*/
|
||||
uint32_t lv_animimg_get_repeat_count(lv_obj_t * img);
|
||||
|
||||
/**
|
||||
* Get the image animation underlying animation.
|
||||
* @param img pointer to an animation image object
|
||||
* @return the animation reference
|
||||
*/
|
||||
lv_anim_t * lv_animimg_get_anim(lv_obj_t * img);
|
||||
|
||||
#endif /*LV_USE_ANIMIMG*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -199,6 +199,9 @@ void lv_arc_set_rotation(lv_obj_t * obj, int32_t rotation)
|
||||
LV_ASSERT_OBJ(obj, MY_CLASS);
|
||||
lv_arc_t * arc = (lv_arc_t *)obj;
|
||||
|
||||
/* ensure the angle is in the range [0, 360) */
|
||||
while(rotation < 0) rotation += 360;
|
||||
while(rotation >= 360) rotation -= 360;
|
||||
arc->rotation = rotation;
|
||||
|
||||
lv_obj_invalidate(obj);
|
||||
@@ -506,8 +509,9 @@ static void lv_arc_event(const lv_obj_class_t * class_p, lv_event_t * e)
|
||||
angle -= arc->rotation;
|
||||
angle -= arc->bg_angle_start; /*Make the angle relative to the start angle*/
|
||||
|
||||
/* If we click near the bg_angle_start the angle will be close to 360° instead of a small angle */
|
||||
if(angle < 0) angle += 360;
|
||||
/* ensure the angle is in the range [0, 360) */
|
||||
while(angle < 0) angle += 360;
|
||||
while(angle >= 360) angle -= 360;
|
||||
|
||||
const uint32_t circumference = (uint32_t)((2U * r * 314U) / 100U); /* Equivalent to: 2r * 3.14, avoiding floats */
|
||||
const lv_value_precise_t tolerance_deg = (360 * lv_dpx(50U)) / circumference;
|
||||
@@ -655,6 +659,25 @@ static void lv_arc_event(const lv_obj_class_t * class_p, lv_event_t * e)
|
||||
return;
|
||||
}
|
||||
|
||||
/*Calculate the angle of the pressed point*/
|
||||
lv_value_precise_t angle = lv_atan2(info->point->y - p.y, info->point->x - p.x);
|
||||
angle -= arc->rotation;
|
||||
angle -= arc->bg_angle_start; /*Make the angle relative to the start angle*/
|
||||
|
||||
/* ensure the angle is in the range [0, 360) */
|
||||
while(angle < 0) angle += 360;
|
||||
while(angle >= 360) angle -= 360;
|
||||
|
||||
const uint32_t circumference = (uint32_t)((2U * r * 314U) / 100U); /* Equivalent to: 2r * 3.14, avoiding floats */
|
||||
const lv_value_precise_t tolerance_deg = (360 * lv_dpx(50U)) / circumference;
|
||||
|
||||
/* Check if the angle is outside the drawn background arc */
|
||||
const bool is_angle_within_bg_bounds = lv_arc_angle_within_bg_bounds(obj, angle, tolerance_deg);
|
||||
if(!is_angle_within_bg_bounds) {
|
||||
info->res = false;
|
||||
return;
|
||||
}
|
||||
|
||||
/*Valid if no clicked outside*/
|
||||
lv_area_increase(&a, w + ext_click_area * 2, w + ext_click_area * 2);
|
||||
info->res = lv_area_is_point_on(&a, info->point, LV_RADIUS_CIRCLE);
|
||||
@@ -941,7 +964,10 @@ static bool lv_arc_angle_within_bg_bounds(lv_obj_t * obj, const lv_value_precise
|
||||
lv_arc_t * arc = (lv_arc_t *)obj;
|
||||
|
||||
lv_value_precise_t bounds_angle = arc->bg_angle_end - arc->bg_angle_start;
|
||||
if(bounds_angle < 0) bounds_angle += 360;
|
||||
|
||||
/* ensure the angle is in the range [0, 360) */
|
||||
while(bounds_angle < 0) bounds_angle += 360;
|
||||
while(bounds_angle >= 360) bounds_angle -= 360;
|
||||
|
||||
/* Angle is in the bounds */
|
||||
if(angle <= bounds_angle) {
|
||||
|
||||
@@ -44,8 +44,8 @@ struct lv_bar_t {
|
||||
bool val_reversed; /**< Whether value been reversed */
|
||||
lv_bar_anim_t cur_value_anim;
|
||||
lv_bar_anim_t start_value_anim;
|
||||
lv_bar_mode_t mode : 2; /**< Type of bar*/
|
||||
lv_bar_orientation_t orientation : 2; /**< Orientation of bar*/
|
||||
lv_bar_mode_t mode : 3; /**< Type of bar*/
|
||||
lv_bar_orientation_t orientation : 3; /**< Orientation of bar*/
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ static bool button_is_popover(lv_buttonmatrix_ctrl_t ctrl_bits);
|
||||
static bool button_is_checkable(lv_buttonmatrix_ctrl_t ctrl_bits);
|
||||
static bool button_get_checked(lv_buttonmatrix_ctrl_t ctrl_bits);
|
||||
static uint32_t get_button_from_point(lv_obj_t * obj, lv_point_t * p);
|
||||
static void allocate_button_areas_and_controls(const lv_obj_t * obj, const char ** map);
|
||||
static void allocate_button_areas_and_controls(const lv_obj_t * obj, const char * const * map);
|
||||
static void invalidate_button_area(const lv_obj_t * obj, uint32_t btn_idx);
|
||||
static void make_one_button_checked(lv_obj_t * obj, uint32_t btn_idx);
|
||||
static bool has_popovers_in_top_row(lv_obj_t * obj);
|
||||
@@ -60,7 +60,7 @@ static bool has_popovers_in_top_row(lv_obj_t * obj);
|
||||
* STATIC VARIABLES
|
||||
**********************/
|
||||
#if LV_WIDGETS_HAS_DEFAULT_VALUE
|
||||
static const char * lv_buttonmatrix_def_map[] = {"Btn1", "Btn2", "Btn3", "\n", "Btn4", "Btn5", ""};
|
||||
static const char * const lv_buttonmatrix_def_map[] = {"Btn1", "Btn2", "Btn3", "\n", "Btn4", "Btn5", ""};
|
||||
#endif
|
||||
|
||||
const lv_obj_class_t lv_buttonmatrix_class = {
|
||||
@@ -96,7 +96,7 @@ lv_obj_t * lv_buttonmatrix_create(lv_obj_t * parent)
|
||||
* Setter functions
|
||||
*====================*/
|
||||
|
||||
void lv_buttonmatrix_set_map(lv_obj_t * obj, const char * map[])
|
||||
void lv_buttonmatrix_set_map(lv_obj_t * obj, const char * const map[])
|
||||
{
|
||||
LV_ASSERT_OBJ(obj, MY_CLASS);
|
||||
if(map == NULL) return;
|
||||
@@ -125,7 +125,7 @@ void lv_buttonmatrix_set_map(lv_obj_t * obj, const char * map[])
|
||||
*(A button can be 1,2,3... unit wide)*/
|
||||
uint32_t txt_tot_i = 0; /*Act. index in the str map*/
|
||||
uint32_t btn_tot_i = 0; /*Act. index of button areas*/
|
||||
const char ** map_row = map;
|
||||
const char * const * map_row = map;
|
||||
|
||||
/*Count the units and the buttons in a line*/
|
||||
uint32_t row;
|
||||
@@ -295,7 +295,7 @@ void lv_buttonmatrix_set_one_checked(lv_obj_t * obj, bool en)
|
||||
* Getter functions
|
||||
*====================*/
|
||||
|
||||
const char ** lv_buttonmatrix_get_map(const lv_obj_t * obj)
|
||||
const char * const * lv_buttonmatrix_get_map(const lv_obj_t * obj)
|
||||
{
|
||||
LV_ASSERT_OBJ(obj, MY_CLASS);
|
||||
|
||||
@@ -813,7 +813,7 @@ static void draw_main(lv_event_t * e)
|
||||
* @param obj pointer to button matrix object
|
||||
* @param map_p pointer to a string array
|
||||
*/
|
||||
static void allocate_button_areas_and_controls(const lv_obj_t * obj, const char ** map)
|
||||
static void allocate_button_areas_and_controls(const lv_obj_t * obj, const char * const * map)
|
||||
{
|
||||
lv_buttonmatrix_t * btnm = (lv_buttonmatrix_t *)obj;
|
||||
btnm->row_cnt = 1;
|
||||
@@ -1029,7 +1029,7 @@ static bool has_popovers_in_top_row(lv_obj_t * obj)
|
||||
return false;
|
||||
}
|
||||
|
||||
const char ** map_row = btnm->map_p;
|
||||
const char * const * map_row = btnm->map_p;
|
||||
uint32_t btn_cnt = 0;
|
||||
|
||||
while(map_row[btn_cnt] && lv_strcmp(map_row[btn_cnt], "\n") != 0 && map_row[btn_cnt][0] != '\0') {
|
||||
|
||||
@@ -73,7 +73,7 @@ lv_obj_t * lv_buttonmatrix_create(lv_obj_t * parent);
|
||||
* @param obj pointer to a button matrix object
|
||||
* @param map pointer a string array. The last string has to be: "". Use "\n" to make a line break.
|
||||
*/
|
||||
void lv_buttonmatrix_set_map(lv_obj_t * obj, const char * map[]);
|
||||
void lv_buttonmatrix_set_map(lv_obj_t * obj, const char * const map[]);
|
||||
|
||||
/**
|
||||
* Set the button control map (hidden, disabled etc.) for a button matrix.
|
||||
@@ -155,7 +155,7 @@ void lv_buttonmatrix_set_one_checked(lv_obj_t * obj, bool en);
|
||||
* @param obj pointer to a button matrix object
|
||||
* @return the current map
|
||||
*/
|
||||
const char ** lv_buttonmatrix_get_map(const lv_obj_t * obj);
|
||||
const char * const * lv_buttonmatrix_get_map(const lv_obj_t * obj);
|
||||
|
||||
/**
|
||||
* Get the index of the lastly "activated" button by the user (pressed, released, focused etc)
|
||||
|
||||
@@ -30,7 +30,7 @@ extern "C" {
|
||||
/** Data of button matrix */
|
||||
struct lv_buttonmatrix_t {
|
||||
lv_obj_t obj;
|
||||
const char ** map_p; /**< Pointer to the current map */
|
||||
const char * const * map_p; /**< Pointer to the current map */
|
||||
lv_area_t * button_areas; /**< Array of areas of buttons */
|
||||
lv_buttonmatrix_ctrl_t * ctrl_bits; /**< Array of control bytes */
|
||||
uint32_t btn_cnt; /**< Number of button in 'map_p'(Handled by the library) */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user