From 752e2c61ad01068c61fab8df6b38e687687377ea Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 22 Feb 2024 10:10:59 +0100 Subject: [PATCH 1/2] Squashed 'lib/lvgl/' changes from 9024b72b4..74d0a816a MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 74d0a816a release v8.3.11 8194d8322 chore(cmsis-pack): prepare for v8.3.11 (#4936) 1840decb4 fix(qrcode): use LV_ASSERT instead of assert ef76206c7 fix(disp): fix infinite recursive SCREEN_LOADED events 4fdc4c20b fix(obj): readjust scroll after layout when child removed (#4921) 85776aeec fix(rt-thread): fix create lvgl thread problem (#4862) d20bd1ca3 fix(keyboard): add '&' character c16bfdc22 fix(obj): fix arduino compile warnings (#4807) 3b6f98a93 fix(table):fix issue with abnormal string output of 'lv_table_set_cell_value_fmt' (#4804) 6c86969ee fix(table) user data API functions renamed (#4769) fdfff5c0b feat(table): add user_data to table cells (#4767) 2791d5739 feat(tiny_ttf): backport Tiny TTF to lvgl 8 (#4727) 68d380eb9 fix(ime_pinyin): keep cursor in the textarea when a candidate is pressed (#4731) 20b6199ba fix(arc): fix setting value by click 7efcea6d0 chore(cmake): add support for user-specified lv_conf.h path (#4689) 7f894cf75 fix(draw_needles): changed needle line draw start point from scale ce… (#4682) fa40b0519 feat(littlefs): add lv_fs_littlefs system as a driver (#4677) 17c580fad fix(arc): handle click outside background angle range (#4586) (#4667) 454e45429 fix(meter): fix minor issues (#4657) 9fbac7570 docs: fix typo 1e381f11b STM32U5 DMA2D support (8.3) (#4643) d22cda3cd fix: fix warning in lv_draw_sw_letter.c 869cc6300 backport: fix(lv_disp): fix lv_scr_load_anim being called twice quickly (#4629) 73fa50afa docs(obj): fix wording (#4625) 7a8fcbfd3 fix(draw): fix scaling rectangle parts with opa 7568df77d chore: fix compile error 9a673e447 chore(lv_draw_sw_letter.c): Fix print format (#4615) 3b2d75be0 fix(draw): fix compiler error in lv_draw_sw_transform.c #2 (#4612) 87ff746e2 docs(label): update text for recoloring (#4606) 14e21d27f fix(dropdown): avoid partial match in lv_dropdown_get_option_index (#4598) ff4f3f976 fix(dropdown): reset char_i = 0, avoid access overflow (#4589) a7a9d278c fix(btnmatrix): set LV_BTNMATRIX_BTN_NONE when clicking of disabled button (#4571) (#4578) 06e229cc7 release v8.3.10 9e388055e chore(cmsis-pack): create cmsis-pack for v8.3.10 (#4572) eb87767cc chore: code formatting 01cd1fed9 fix(vglite): be sure end_angle > start_angle in arc drawing 28094404a fix(refr): fix single buffered direct mode e2b19eb4a fix: build on Windows (MinGW environment) (#4538) bff1f2297 fix(docs): dropdown: fix function name in description of static options (#4535) 9787d47d0 fix: do not copy invalid areas if not double buffered mode (#4526) 6548ea0f2 feat(style): backport opa_layered 1375ea85a Update screen object opacity function documentation (#4505) a29645659 docs(calendar): update according to v8.2 changes 336f24127 feat(disp): add double buffered direct-mode efficient sync algorithm (v8.3) (#4497) 1c5df6c66 demo(sress): fix issues when the stress test is opened/clsoed multiple times 7d314aab6 fix(sdl): add missing parameter in lv_draw_sdl_composite_texture_obtain (#4490) fd21ed0eb ci: update screenshot compare from v9 to automatically create missing reference images 5fc488a08 ci(dropdown): fix test f17458924 fix(dropdown): position to the selected item in lv_dropdown_set_selected bcebafe4f docs(simulator): remove SDL support from the Visual Studio project 8063fac79 fix(btnmatrix): fix tapping just outside a button in a buttonmatrix 9ec3b8706 docs: update changelog bdf5bfb88 chore(cmsis-pack): prepare for release v8.3.9 (#4424) 4f102d7b6 fix: use const lv_img_dsc_t * dsc function parameter in lv_img_buf.h/ 810852b41 docs(disp): metined that rotation rotates the touch coordinates too 21e95bc1b fix(decoder): fix LV_IMG_CF_ALPHA_8BIT bin file decoder (#4406) dbcf56288 fix(config): fix typo in LV_USE_PERF_MONITOR and LV_USE_MEM_MONITOR (#4403) eee2dd186 fix(attr): refactor LV_ATTRIBUTE_* for function attributes (#4404) 141f4b8ab fix(font): fix optimizer issue in lv_font_fmt_txt.c (#4385) f9ffcc9d8 fix(chart): fix lv_chart_get_point_pos_by_id 385d999a4 fix(imgbtn): support LV_OBJ_FLAG_CHECKABLE 29ed7c571 fix(btnmatrix): Fix typo in previous commit! 65f1c9305 fix(btnmatrix): Hide button matrix when all buttons hidden b1bbb95ce chore: format code 223dc1cf9 fix(tabview): fix warning 416b26771 chore(music demo) fix formatting 645006e35 fix(indev): fix warnings when loggin coordinates is enabled 375b3b5d3 fix(obj) prevent hidden objects keeping focus 1c5d4b02d Merge branch 'demo-close' into release/v8.3 e6d7be00b docs: update changelog 15433d69b chore(cmsis-pack): update cmsis-pack for v8.3.8 (#4340) 91038a99e demos: add lv_demo_..._close() functions for each demo 9491c3ff6 example(tabview): fix tabview disable scrollig example 3de61c76a fix(tabview): remove the animation if the tab is selected by clicking the button on the header 09cc0de57 docs: mention incompatibility between software rotation and `direct_mode` or `full_refresh` (#4308) 227ac0234 docs(faq): don't say 24 bit is support as LVGL can't render in RGB888 directly 8b83fe7ea feat(rt-thread): make the rt-thread env recursively glob the UI files edd5ad28a fix(btnmatrix): fix array out of bounds addressing with groups and no buttons 07bce7466 fix:(BtnMatrix) Backport https://github.com/lvgl/lvgl/pull/4185 1713cd3fd Revert "fix:(BtnMatrix) Backport https://github.com/lvgl/lvgl/pull/4185" cb602ea77 fix:(BtnMatrix) Backport https://github.com/lvgl/lvgl/pull/4185 caf29ef0c add(docs): add renesas-ra6m3 get-started document (#4278) a3199514a fix(stm32): static function prototypes moved from .h to .c (#4276) 78cbdfc15 add(gpu): add renesas-ra6m3 gpu adaptation (#4270) 75e6ef4e1 fix(btnmatrix): fix using > 7 as button width 2376c5786 fix(png): fix decode image size and some warnings (#4248) e3659c46b fix(arduino): fix messed up variable types df96b57f4 fix(bidi): add more Hebrew checks to RTL characters set (#4171) (#4239) 67b3011f8 fix(chart): fix division by zero if there are no ticks d87737612 perf(pxp, vglite): improve performance and add more features (#4222) 6a89bd2d7 fix(msgbox): fix typo 6843c191b fix(msgbox): add missing lv_obj_class_init_obj 1caafc55d fix(disp): fix memory leak lv_scr_load_anim with auto_del and time=0 5ba90a5c4 fix(flex): register LV_STYLE_FLEX_GROW 630da9c6c fix(img): fix getting the image type on big endian systems (#4215) ee95e7dc2 fix(sdl): destroy texture after use if not stored in cache (#4173) 45b13c378 fix(draw): typo with LV_COLOR_DEPTH 8 2b56e0420 chore(cmsis-pack): update cmsis-pack for v8.3.7 (#4203) 177900b03 docs(changelog): update changelog for v8.3.7 203e7fc97 fix (spinbox): doubling characters entered from the keyboard (#4190) 7345e6235 fix(arm-2d): fix transform-chrome-keying issue (#4178) 48d7878ba fix(style): fix trasition on bg_grad color fixes: #4174 a0795b49e fix(indev): fix integer overflow in recursive zoom calculation a150b15e4 feat(btnmatrix): review ctrl map and allow width values to be max 15 a95714ba7 fix(menu): prevent setting the current page again (#4136) 8536152d8 fix(esp): fix ESP-IDF pedantic builds (backport v8.3) (#4135) 631444183 fix: color mixing with LV_COLOR_SWAP == 1 (#4101) 88c51b22a docs: udpate changelog 6b0092c0d chore(cmsis-pack): update cmsis-pack for v8.3.6 (#4108) aa313806d fix(bar): delete running animations when a new value is set without animation 5e0e1c8c4 chore: code formatting d0e19eb2d fix(arc): fix knob area invalidation fd20fabfd fix(group): fix default_group becomes wild pointer when deleted (#4076) 399069b4a Update build_html_examples.sh 501230e0f docs: use a fixed commit of lv_web_emscripten adcf16638 fix(fs_posix): allow creating new file and set permission. (#3976) 2f294aa76 docs(arduino): add note to not use lv_examles library 9a870b34a format code 0b7777f27 fix(slider): consider animations on pressing e8d8f399e fix(img): support negative angles (#3846) 0df09db23 fix(gif): synchronize with master (#4003) e2386fd46 fix(gpu): fix STM GPU drivers for some variants (#4004) 2944277f0 fix(img): possible divide by 0 exception (lvgl#3988) (#3990) 6af01798d feat(msg): add lv_msg_unsubcribe_obj 77670fb1a chore: update the version numbers to v8.3.5-dev f29514aa5 docs: update changelog e7e8cf846 feat(cmsis-pack): update cmsis-pack for v8.3.5 (#3972) 8b1270347 fix(monkey): remove executable permissions from source files (#3971) e6cd7063b fix(ci): set Ubuntu version for MicroPython test (#3865) 34c545ef1 docs(indev): fix the name of long_press_repeat_time (was long_press_rep_time) 361ee7961 feat(gpu): improve NXP's PXP and VGLite accelerators (#3952) 39f424767 fix(roller): consider the recolor setting of the label 1853cc514 perf(dam2d): rework stm32 dma2d (#3904) 9faca8a8d Update layer.md 8ea6f03fc fix(Kconfig): Fix wrong type of LV_FS_STDIO_CACHE_SIZE (v8.3) (#3906) c6c1b0b3d chore: add an option to "LV_TICK_CUSTOM" (#3879) e529230f4 ci(esp): fix push to the component registry on tag dbb15bb3e feat(cmsis-pack): update for v8.3.4 (#3896) 47c8f8f98 bump version numbers to v8.3.5-dev 2c0162b45 release v8.3.4 dec580b9f fix(rt-thread): sync rt-thread v5.0.0 rt_align (#3864) ad56dfaf7 fix(gridnav): fix stucking in pressed state with encoder c8e584f87 fix(style): add the missing support for pct pivot in tranasform style properties d2d886aae fix(draw): SDL2 gradient support #3848 (#3856) 1e3ca25fe fix(example): fix warnings 84cf05d8b fix(indev): fix scrolling on transformed obejcts 2c17b28ac fix(darw): add back the disappeared antialising=0 support 1ed026ca7 fix(benchmark): fix warnings ae3825871 demo(benchmark): fix lv_label_set_text_fmt format strings ae300acb2 [v8.3.x][rt-thread][squareline] fix compiler cannot find the lvgl/lvg… (#3834) 41fa41613 fix(msg): fix typos in API by adding wrappers fixes #3822 68f6190f8 chore: format code 1173dcba9 demo(benchmark): fix warning 716e5e2c8 fix(meter): fix setting part_draw_dsc.id in needle img drawing bb2c2ac34 fix(chart): fix very dense bar charts c4c400716 fix(flex): be sure obj->w_layout and h_layout can't be set at the same time 6825d4bd1 chore(table): remove extra spaces (#3805) 39d03a80f feat(table): scroll to the selected cell with key navigation 340a1cb60 fix(esp.cmake): add demos and examples (#3784) e06f03db7 fix(draw): fix transformation accuracy bd11ad854 fix(draw): handle LV_COLOR_DEPTH == 1 too in lv_draw_sw_transform e050f5ca1 fix(draw): fix text color with sub pixel rendering and BGR order 903e94b71 fix(style): remove the reduntant define of LV_GRADIENT_MAX_STOPS 0732400e7 Revert "feat(keyboard): ported arabic keyboard from release 7.10.0 (#3728)" 483b2a432 feat(keyboard): ported arabic keyboard from release 7.10.0 (#3728) 5545ffc92 release v8.3.3 c8bee4041 fix: version number in lvgl.h 755d363ec release v8.3.2 dfd14fa77 fix(slider): find the nearest value on click instead of floor 1ab9aa531 fix(fragment): fixed child fragment event dispatch (#3683) 4d69cd865 fix(sdl): clear streaming/target texture with FillRect (#3682) 832bef434 fix(sdl): transformation with alpha (#3576) (#3678) d5b2a9b25 fix(draw): fix border drawing with thick borders 764095021 chore: fix warnings 8b605cc48 fix(refr): fix true double double buffering logic with transparent screens ece349500 fix(draw): allow drawing outline with LV_DRAW_COMPLEX == 0 too f6655c2aa fix(draw_sw): fix image cache to access the freed stack space (#3584) cba2aa95c fix(style): use compile time prop_cnt for const styles (#3609) 660464c97 chore(rt-thread) backport fixes from v9 (#3604) 5156ee058 fix(group): be sure obj is removed from its current group in lv_group_add_obj a0515ba30 fix(style): add missing invalidation in lv_obj_remove_local_style_prop 1a4603091 docs(draw) remove reference to old lv_fs_add_drv function (#3564) f58dcd94f docs(disp): LV_COLOR_SCREEN_TRANSP remove dependency on LV_COLOR_DEPTH_32 as transparency is supported across all color depths (#3556) d59bba12d fix(colorwheel): fix updating color when using lv_colorwheel_set_hsv 5022476ed remove accidentally added code b884abae2 fix(canvas): fix clipéping on transformation aa45d5985 fix(demo): can not found lvgl.h file (#3477) 55e95ed35 fix(ci) checkout lv_micropython release/v8 branch (#3524) be485d760 ci: protect test.c with #if LV_BUILD_TEST git-subtree-dir: lib/lvgl git-subtree-split: 74d0a816a440eea53e030c4f1af842a94f7ce3d3 --- .github/workflows/build_micropython.yml | 4 +- .github/workflows/esp_upload_component.yml | 46 +- Kconfig | 35 +- .../assets/img_benchmark_cogwheel_rgb565a8.c | 7 +- demos/benchmark/lv_demo_benchmark.c | 33 +- demos/benchmark/lv_demo_benchmark.h | 2 + demos/keypad_encoder/lv_demo_keypad_encoder.c | 13 +- demos/keypad_encoder/lv_demo_keypad_encoder.h | 1 + demos/music/lv_demo_music.c | 25 +- demos/music/lv_demo_music.h | 2 + demos/music/lv_demo_music_list.c | 13 + demos/music/lv_demo_music_list.h | 2 + demos/music/lv_demo_music_main.c | 18 +- demos/music/lv_demo_music_main.h | 2 + demos/stress/lv_demo_stress.c | 31 +- demos/stress/lv_demo_stress.h | 2 + demos/widgets/lv_demo_widgets.c | 21 +- demos/widgets/lv_demo_widgets.h | 1 + docs/CHANGELOG.md | 323 + docs/get-started/platforms/arduino.md | 7 +- docs/get-started/platforms/index.md | 1 + docs/get-started/platforms/nxp.md | 168 +- docs/get-started/platforms/pc-simulator.md | 2 +- docs/get-started/platforms/renesas.md | 129 + docs/intro/index.md | 2 +- docs/libs/fsdrv.md | 36 +- docs/libs/index.md | 1 + docs/libs/tiny_ttf.md | 35 + docs/overview/display.md | 5 +- docs/overview/layer.md | 4 +- docs/overview/object.md | 2 +- docs/overview/renderers/arm-2d.md | 32 +- docs/overview/style-props.md | 13 +- docs/porting/display.md | 4 + docs/porting/indev.md | 4 +- docs/widgets/core/btnmatrix.md | 2 +- docs/widgets/core/dropdown.md | 2 +- docs/widgets/core/label.md | 4 +- docs/widgets/extra/calendar.md | 21 +- env_support/cmake/custom.cmake | 6 + env_support/cmake/esp.cmake | 49 +- ....lvgl.1.0.6.pack => LVGL.lvgl.8.3.11.pack} | Bin 4947452 -> 5060109 bytes env_support/cmsis-pack/LVGL.lvgl.pdsc | 309 +- env_support/cmsis-pack/LVGL.pidx | 4 +- env_support/cmsis-pack/README.md | 57 +- env_support/cmsis-pack/gen_pack.sh | 4 +- env_support/cmsis-pack/lv_conf_cmsis.h | 143 +- env_support/rt-thread/lv_rt_thread_conf.h | 6 +- env_support/rt-thread/lv_rt_thread_port.c | 8 +- env_support/rt-thread/squareline/README.md | 4 + env_support/rt-thread/squareline/SConscript | 25 + .../rt-thread/squareline/lv_ui_entry.c | 19 + .../rt-thread/squareline/ui/lvgl/lvgl.h | 15 + examples/anim/lv_example_anim_3.c | 2 +- .../arduino/LVGL_Arduino/LVGL_Arduino.ino | 54 +- examples/layouts/flex/lv_example_flex_1.c | 2 +- examples/lv_examples.mk | 2 +- .../widgets/animimg/lv_example_animimg_1.c | 2 +- examples/widgets/menu/lv_example_menu_4.c | 4 +- .../widgets/tabview/lv_example_tabview_2.c | 10 - .../widgets/tabview/lv_example_tabview_2.py | 9 - idf_component.yml | 7 +- library.json | 2 +- library.properties | 2 +- lv_conf_template.h | 29 +- lvgl.h | 2 +- scripts/build_html_examples.sh | 1 + scripts/style_api_gen.py | 8 +- src/core/lv_disp.c | 9 +- src/core/lv_group.c | 4 + src/core/lv_indev.c | 31 +- src/core/lv_indev_scroll.c | 124 +- src/core/lv_obj.c | 40 +- src/core/lv_obj.h | 2 + src/core/lv_obj_draw.c | 86 +- src/core/lv_obj_pos.c | 46 +- src/core/lv_obj_scroll.h | 2 +- src/core/lv_obj_style.c | 45 +- src/core/lv_obj_style.h | 15 + src/core/lv_obj_style_gen.c | 8 + src/core/lv_obj_style_gen.h | 7 + src/core/lv_obj_tree.c | 8 +- src/core/lv_refr.c | 138 +- src/draw/arm2d/lv_gpu_arm2d.c | 524 +- src/draw/lv_draw.h | 1 + src/draw/lv_draw_img.c | 27 +- src/draw/lv_draw_label.c | 4 +- src/draw/lv_draw_label.h | 6 +- src/draw/lv_draw_line.c | 4 +- src/draw/lv_draw_line.h | 6 +- src/draw/lv_draw_mask.c | 79 +- src/draw/lv_draw_mask.h | 11 +- src/draw/lv_draw_rect.c | 2 +- src/draw/lv_draw_rect.h | 2 +- src/draw/lv_img_buf.c | 81 +- src/draw/lv_img_buf.h | 10 +- src/draw/lv_img_decoder.c | 31 +- src/draw/lv_img_decoder.h | 4 +- src/draw/nxp/lv_draw_nxp.mk | 2 - src/draw/nxp/lv_gpu_nxp.c | 418 - src/draw/nxp/pxp/lv_draw_nxp_pxp.mk | 1 + src/draw/nxp/pxp/lv_draw_pxp.c | 275 + .../nxp/{lv_gpu_nxp.h => pxp/lv_draw_pxp.h} | 25 +- src/draw/nxp/pxp/lv_draw_pxp_blend.c | 405 +- src/draw/nxp/pxp/lv_draw_pxp_blend.h | 101 +- src/draw/nxp/pxp/lv_gpu_nxp_pxp.c | 36 +- src/draw/nxp/pxp/lv_gpu_nxp_pxp.h | 21 +- src/draw/nxp/pxp/lv_gpu_nxp_pxp_osa.c | 46 +- src/draw/nxp/vglite/lv_draw_nxp_vglite.mk | 5 +- src/draw/nxp/vglite/lv_draw_vglite.c | 557 + src/draw/nxp/vglite/lv_draw_vglite.h | 72 + src/draw/nxp/vglite/lv_draw_vglite_arc.c | 152 +- src/draw/nxp/vglite/lv_draw_vglite_arc.h | 26 +- src/draw/nxp/vglite/lv_draw_vglite_blend.c | 777 +- src/draw/nxp/vglite/lv_draw_vglite_blend.h | 141 +- src/draw/nxp/vglite/lv_draw_vglite_line.c | 142 + src/draw/nxp/vglite/lv_draw_vglite_line.h | 83 + src/draw/nxp/vglite/lv_draw_vglite_rect.c | 433 +- src/draw/nxp/vglite/lv_draw_vglite_rect.h | 34 +- src/draw/nxp/vglite/lv_gpu_nxp_vglite.c | 153 - src/draw/nxp/vglite/lv_vglite_buf.c | 141 + src/draw/nxp/vglite/lv_vglite_buf.h | 124 + src/draw/nxp/vglite/lv_vglite_utils.c | 149 + ...{lv_gpu_nxp_vglite.h => lv_vglite_utils.h} | 111 +- src/draw/renesas/lv_draw_renesas.mk | 7 + src/draw/renesas/lv_gpu_d2_draw_label.c | 292 + src/draw/renesas/lv_gpu_d2_ra6m3.c | 742 + src/draw/renesas/lv_gpu_d2_ra6m3.h | 56 + src/draw/sdl/lv_draw_sdl_arc.c | 9 +- src/draw/sdl/lv_draw_sdl_composite.c | 32 +- src/draw/sdl/lv_draw_sdl_composite.h | 13 +- src/draw/sdl/lv_draw_sdl_img.c | 63 +- src/draw/sdl/lv_draw_sdl_img.h | 16 +- src/draw/sdl/lv_draw_sdl_label.c | 17 +- src/draw/sdl/lv_draw_sdl_layer.c | 19 +- src/draw/sdl/lv_draw_sdl_layer.h | 1 + src/draw/sdl/lv_draw_sdl_line.c | 9 +- src/draw/sdl/lv_draw_sdl_polygon.c | 8 +- src/draw/sdl/lv_draw_sdl_priv.h | 1 + src/draw/sdl/lv_draw_sdl_rect.c | 337 +- src/draw/sdl/lv_draw_sdl_rect.h | 31 +- src/draw/sdl/lv_draw_sdl_texture_cache.c | 16 +- src/draw/sdl/lv_draw_sdl_texture_cache.h | 11 +- src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.c | 849 +- src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.h | 45 +- src/draw/sw/lv_draw_sw.h | 10 +- src/draw/sw/lv_draw_sw_blend.c | 70 +- src/draw/sw/lv_draw_sw_blend.h | 3 +- src/draw/sw/lv_draw_sw_dither.c | 12 +- src/draw/sw/lv_draw_sw_dither.h | 19 +- src/draw/sw/lv_draw_sw_gradient.c | 2 +- src/draw/sw/lv_draw_sw_gradient.h | 4 +- src/draw/sw/lv_draw_sw_img.c | 6 +- src/draw/sw/lv_draw_sw_layer.c | 2 +- src/draw/sw/lv_draw_sw_letter.c | 12 +- src/draw/sw/lv_draw_sw_line.c | 20 +- src/draw/sw/lv_draw_sw_rect.c | 32 +- src/draw/sw/lv_draw_sw_transform.c | 14 +- src/extra/layouts/flex/lv_flex.c | 11 +- src/extra/layouts/flex/lv_flex.h | 1 - src/extra/libs/fsdrv/lv_fs_littlefs.c | 332 + src/extra/libs/fsdrv/lv_fs_posix.c | 6 +- src/extra/libs/fsdrv/lv_fsdrv.h | 5 + src/extra/libs/gif/gifdec.c | 26 +- src/extra/libs/gif/gifdec.h | 2 +- src/extra/libs/gif/lv_gif.c | 17 +- src/extra/libs/lv_libs.h | 1 + src/extra/libs/png/lv_png.c | 38 +- src/extra/libs/qrcode/qrcodegen.c | 158 +- src/extra/libs/tiny_ttf/lv_tiny_ttf.c | 284 + src/extra/libs/tiny_ttf/lv_tiny_ttf.h | 62 + src/extra/libs/tiny_ttf/stb_rect_pack.h | 637 + src/extra/libs/tiny_ttf/stb_truetype_htcw.h | 5572 +++++++ src/extra/lv_extra.c | 4 + src/extra/lv_extra.mk | 2 +- .../others/fragment/lv_fragment_manager.c | 17 +- src/extra/others/gridnav/lv_gridnav.c | 1 + src/extra/others/ime/lv_ime_pinyin.c | 3 + src/extra/others/monkey/lv_monkey.c | 0 src/extra/others/monkey/lv_monkey.h | 0 src/extra/others/msg/lv_msg.c | 21 +- src/extra/others/msg/lv_msg.h | 21 + src/extra/widgets/animimg/lv_animimg.c | 2 +- src/extra/widgets/animimg/lv_animimg.h | 4 +- src/extra/widgets/chart/lv_chart.c | 52 +- src/extra/widgets/colorwheel/lv_colorwheel.c | 6 +- src/extra/widgets/imgbtn/lv_imgbtn.c | 9 + src/extra/widgets/keyboard/lv_keyboard.c | 2 +- src/extra/widgets/menu/lv_menu.c | 5 + src/extra/widgets/meter/lv_meter.c | 17 +- src/extra/widgets/meter/lv_meter.h | 1 - src/extra/widgets/msgbox/lv_msgbox.c | 3 + src/extra/widgets/span/lv_span.c | 2 +- src/extra/widgets/spinbox/lv_spinbox.c | 3 - src/extra/widgets/tabview/lv_tabview.c | 16 +- src/extra/widgets/tabview/lv_tabview.h | 2 +- src/font/lv_font_fmt_txt.c | 6 +- src/hal/lv_hal_disp.c | 32 +- src/hal/lv_hal_disp.h | 14 +- src/hal/lv_hal_indev.h | 1 + src/hal/lv_hal_tick.c | 2 +- src/hal/lv_hal_tick.h | 2 +- src/lv_conf_internal.h | 69 +- src/lv_conf_kconfig.h | 4 +- src/misc/lv_area.c | 72 + src/misc/lv_area.h | 9 + src/misc/lv_bidi.c | 5 +- src/misc/lv_color.c | 2 +- src/misc/lv_color.h | 19 +- src/misc/lv_fs.h | 1 - src/misc/lv_math.c | 4 +- src/misc/lv_math.h | 6 +- src/misc/lv_mem.c | 8 +- src/misc/lv_mem.h | 10 +- src/misc/lv_printf.h | 6 + src/misc/lv_style.c | 4 +- src/misc/lv_style.h | 63 +- src/misc/lv_style_gen.c | 8 + src/misc/lv_style_gen.h | 6 + src/misc/lv_timer.c | 2 +- src/misc/lv_timer.h | 4 +- src/widgets/lv_arc.c | 192 +- src/widgets/lv_arc.h | 9 +- src/widgets/lv_bar.c | 2 + src/widgets/lv_btnmatrix.c | 52 +- src/widgets/lv_btnmatrix.h | 25 +- src/widgets/lv_canvas.c | 15 +- src/widgets/lv_checkbox.c | 14 +- src/widgets/lv_checkbox.h | 2 +- src/widgets/lv_dropdown.c | 11 +- src/widgets/lv_img.c | 13 +- src/widgets/lv_roller.c | 3 + src/widgets/lv_slider.c | 12 +- src/widgets/lv_table.c | 199 +- src/widgets/lv_table.h | 32 +- tests/CMakeLists.txt | 3 +- tests/makefile/Makefile | 2 +- tests/makefile/test.c | 2 + tests/ref_imgs/arc_1.png | Bin 0 -> 10665 bytes tests/ref_imgs/arc_2.png | Bin 0 -> 10119 bytes tests/ref_imgs/dropdown_1.png | Bin 12395 -> 12588 bytes tests/ref_imgs/tiny_ttf_1.png | Bin 0 -> 16444 bytes tests/src/lv_test_conf.h | 2 + tests/src/test_cases/test_arc.c | 47 + tests/src/test_cases/test_dropdown.c | 2 +- tests/src/test_cases/test_tiny_ttf.c | 49 + tests/src/test_fonts/ubuntu_font.c | 11970 ++++++++++++++++ tests/unity/unity_support.c | 288 +- 248 files changed, 27873 insertions(+), 3184 deletions(-) create mode 100644 docs/get-started/platforms/renesas.md create mode 100644 docs/libs/tiny_ttf.md rename env_support/cmsis-pack/{LVGL.lvgl.1.0.6.pack => LVGL.lvgl.8.3.11.pack} (86%) create mode 100644 env_support/rt-thread/squareline/README.md create mode 100644 env_support/rt-thread/squareline/SConscript create mode 100644 env_support/rt-thread/squareline/lv_ui_entry.c create mode 100644 env_support/rt-thread/squareline/ui/lvgl/lvgl.h delete mode 100644 src/draw/nxp/lv_gpu_nxp.c create mode 100644 src/draw/nxp/pxp/lv_draw_pxp.c rename src/draw/nxp/{lv_gpu_nxp.h => pxp/lv_draw_pxp.h} (77%) create mode 100644 src/draw/nxp/vglite/lv_draw_vglite.c create mode 100644 src/draw/nxp/vglite/lv_draw_vglite.h create mode 100644 src/draw/nxp/vglite/lv_draw_vglite_line.c create mode 100644 src/draw/nxp/vglite/lv_draw_vglite_line.h delete mode 100644 src/draw/nxp/vglite/lv_gpu_nxp_vglite.c create mode 100644 src/draw/nxp/vglite/lv_vglite_buf.c create mode 100644 src/draw/nxp/vglite/lv_vglite_buf.h create mode 100644 src/draw/nxp/vglite/lv_vglite_utils.c rename src/draw/nxp/vglite/{lv_gpu_nxp_vglite.h => lv_vglite_utils.h} (64%) create mode 100644 src/draw/renesas/lv_draw_renesas.mk create mode 100644 src/draw/renesas/lv_gpu_d2_draw_label.c create mode 100644 src/draw/renesas/lv_gpu_d2_ra6m3.c create mode 100644 src/draw/renesas/lv_gpu_d2_ra6m3.h create mode 100644 src/extra/libs/fsdrv/lv_fs_littlefs.c create mode 100644 src/extra/libs/tiny_ttf/lv_tiny_ttf.c create mode 100644 src/extra/libs/tiny_ttf/lv_tiny_ttf.h create mode 100644 src/extra/libs/tiny_ttf/stb_rect_pack.h create mode 100644 src/extra/libs/tiny_ttf/stb_truetype_htcw.h mode change 100755 => 100644 src/extra/others/monkey/lv_monkey.c mode change 100755 => 100644 src/extra/others/monkey/lv_monkey.h create mode 100644 tests/ref_imgs/arc_1.png create mode 100644 tests/ref_imgs/arc_2.png create mode 100644 tests/ref_imgs/tiny_ttf_1.png create mode 100644 tests/src/test_cases/test_tiny_ttf.c create mode 100644 tests/src/test_fonts/ubuntu_font.c diff --git a/.github/workflows/build_micropython.yml b/.github/workflows/build_micropython.yml index dbad36c..a8bb912 100644 --- a/.github/workflows/build_micropython.yml +++ b/.github/workflows/build_micropython.yml @@ -8,7 +8,7 @@ jobs: build: if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }} name: Build ${{ matrix.port }} port - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 continue-on-error: true strategy: matrix: @@ -23,7 +23,7 @@ jobs: - name: Clone lv_micropython run: | git clone https://github.com/lvgl/lv_micropython.git . - git checkout master + git checkout release/v8 - name: Initialize lv_bindings submodule run: git submodule update --init --recursive lib/lv_bindings - name: Update ${{ matrix.port }} port submodules diff --git a/.github/workflows/esp_upload_component.yml b/.github/workflows/esp_upload_component.yml index cb017c7..08edfe2 100644 --- a/.github/workflows/esp_upload_component.yml +++ b/.github/workflows/esp_upload_component.yml @@ -1,23 +1,23 @@ -name: Push LVGL release to Espressif Component Service - -# If the commit is tagged, it will be uploaded. Other scenario silently fail. -on: - push: - branches: - - master - -jobs: - upload_components: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@master - with: - submodules: "recursive" - - - name: Upload component to component registry - uses: espressif/github-actions/upload_components@master - with: - name: "lvgl" - version: "git" - namespace: "lvgl" - api_token: ${{ secrets.ESP_IDF_COMPONENT_API_TOKEN }} +name: Push LVGL release to Espressif Component Service + +# If the commit is tagged, it will be uploaded. Other scenario silently fail. +on: + push: + tags: + - v* + +jobs: + upload_components: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + submodules: "recursive" + + - name: Upload component to component registry + uses: espressif/upload-components-ci-action@v1 + with: + name: "lvgl" + version: ${{ github.ref_name }} + namespace: "lvgl" + api_token: ${{ secrets.ESP_IDF_COMPONENT_API_TOKEN }} diff --git a/Kconfig b/Kconfig index 76e86c5..4e9a13b 100644 --- a/Kconfig +++ b/Kconfig @@ -42,11 +42,9 @@ menu "LVGL configuration" config LV_COLOR_SCREEN_TRANSP bool "Enable more complex drawing routines to manage screens transparency." - depends on LV_COLOR_DEPTH_32 help Can be used if the UI is above another layer, e.g. an OSD menu or video player. - Requires `LV_COLOR_DEPTH = 32` colors and the screen's `bg_opa` should be set to - non LV_OPA_COVER value + The screen's `bg_opa` should be set to non LV_OPA_COVER value config LV_COLOR_MIX_ROUND_OFS int "Adjust color mix functions rounding" @@ -230,6 +228,16 @@ menu "LVGL configuration" Must be defined to include path of CMSIS header of target processor e.g. "stm32f769xx.h" or "stm32f429xx.h" + config LV_USE_GPU_RA6M3_G2D + bool "Enable RA6M3 G2D GPU." + config LV_GPU_RA6M3_G2D_INCLUDE + string "include path of target processor" + depends on LV_USE_GPU_RA6M3_G2D + default "hal_data.h" + help + Must be defined to include path of target processor + e.g. "hal_data.h" + config LV_USE_GPU_SWM341_DMA2D bool "Enable SWM341 DMA2D GPU." config LV_GPU_SWM341_DMA2D_INCLUDE @@ -913,7 +921,8 @@ menu "LVGL configuration" string "Set the working directory" depends on LV_USE_FS_STDIO config LV_FS_STDIO_CACHE_SIZE - string ">0 to cache this number of bytes in lv_fs_read()" + int ">0 to cache this number of bytes in lv_fs_read()" + default 0 depends on LV_USE_FS_STDIO config LV_USE_FS_POSIX @@ -955,6 +964,17 @@ menu "LVGL configuration" default 0 depends on LV_USE_FS_FATFS + config LV_USE_FS_LITTLEFS + bool "File system on top of LittleFS" + config LV_FS_LITTLEFS_LETTER + int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65)" + default 0 + depends on LV_USE_FS_LITTLEFS + config LV_FS_LITTLEFS_CACHE_SIZE + int ">0 to cache this number of bytes in lv_fs_read()" + default 0 + depends on LV_USE_FS_LITTLEFS + config LV_USE_PNG bool "PNG decoder library" @@ -991,6 +1011,13 @@ menu "LVGL configuration" endmenu endif + config LV_USE_TINY_TTF + bool "Tiny TTF library" + config LV_TINY_TTF_FILE_SUPPORT + bool "Load TTF data from files" + depends on LV_USE_TINY_TTF + default n + config LV_USE_RLOTTIE bool "Lottie library" diff --git a/demos/benchmark/assets/img_benchmark_cogwheel_rgb565a8.c b/demos/benchmark/assets/img_benchmark_cogwheel_rgb565a8.c index 810c094..7d93948 100644 --- a/demos/benchmark/assets/img_benchmark_cogwheel_rgb565a8.c +++ b/demos/benchmark/assets/img_benchmark_cogwheel_rgb565a8.c @@ -1,9 +1,4 @@ -#if defined(LV_LVGL_H_INCLUDE_SIMPLE) -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - +#include "../../../lvgl.h" #ifndef LV_ATTRIBUTE_MEM_ALIGN #define LV_ATTRIBUTE_MEM_ALIGN diff --git a/demos/benchmark/lv_demo_benchmark.c b/demos/benchmark/lv_demo_benchmark.c index 44f3e8f..63e30ba 100644 --- a/demos/benchmark/lv_demo_benchmark.c +++ b/demos/benchmark/lv_demo_benchmark.c @@ -89,7 +89,7 @@ LV_FONT_DECLARE(lv_font_benchmark_montserrat_16_compr_az); LV_FONT_DECLARE(lv_font_benchmark_montserrat_28_compr_az); static void monitor_cb(lv_disp_drv_t * drv, uint32_t time, uint32_t px); -static void scene_next_task_cb(lv_timer_t * timer); +static void next_scene_timer_cb(lv_timer_t * timer); static void rect_create(lv_style_t * style); static void img_create(lv_style_t * style, const void * src, bool rotate, bool zoom, bool aa); static void txt_create(lv_style_t * style); @@ -636,7 +636,7 @@ static lv_obj_t * scene_bg; static lv_obj_t * title; static lv_obj_t * subtitle; static uint32_t rnd_act; - +static lv_timer_t * next_scene_timer; static const uint32_t rnd_map[] = { 0xbd13204f, 0x67d8167f, 0x20211c99, 0xb0a7cc05, @@ -708,9 +708,21 @@ void lv_demo_benchmark(void) benchmark_init(); /*Manually start scenes*/ - scene_next_task_cb(NULL); + next_scene_timer_cb(NULL); } +void lv_demo_benchmark_close(void) +{ + if(next_scene_timer) lv_timer_del(next_scene_timer); + next_scene_timer = NULL; + + lv_anim_del(NULL, NULL); + + lv_style_reset(&style_common); + + lv_obj_clean(lv_scr_act()); + +} void lv_demo_benchmark_run_scene(int_fast16_t scene_no) { @@ -725,7 +737,8 @@ void lv_demo_benchmark_run_scene(int_fast16_t scene_no) scene_act = scene_no >> 1; if(scenes[scene_act].create_cb) { - lv_label_set_text_fmt(title, "%"LV_PRId32"/%d: %s%s", scene_act * 2 + (opa_mode ? 1 : 0), (int)(dimof(scenes) * 2) - 2, + lv_label_set_text_fmt(title, "%"LV_PRId32"/%"LV_PRId32": %s%s", scene_act * 2 + (opa_mode ? 1 : 0), + (int32_t)(dimof(scenes) * 2) - 2, scenes[scene_act].name, opa_mode ? " + opa" : ""); lv_label_set_text(subtitle, ""); @@ -972,11 +985,13 @@ static void report_cb(lv_timer_t * timer) } } -static void scene_next_task_cb(lv_timer_t * timer) +static void next_scene_timer_cb(lv_timer_t * timer) { LV_UNUSED(timer); lv_obj_clean(scene_bg); + next_scene_timer = NULL; + if(opa_mode) { if(scene_act >= 0) { if(scenes[scene_act].time_sum_opa == 0) scenes[scene_act].time_sum_opa = 1; @@ -995,8 +1010,8 @@ static void scene_next_task_cb(lv_timer_t * timer) } if(scenes[scene_act].create_cb) { - lv_label_set_text_fmt(title, "%"LV_PRId32"/%d: %s%s", scene_act * 2 + (opa_mode ? 1 : 0), - (int)(dimof(scenes) * 2) - 2, scenes[scene_act].name, opa_mode ? " + opa" : ""); + lv_label_set_text_fmt(title, "%"LV_PRId32"/%"LV_PRId32": %s%s", scene_act * 2 + (opa_mode ? 1 : 0), + (int32_t)(dimof(scenes) * 2) - 2, scenes[scene_act].name, opa_mode ? " + opa" : ""); if(opa_mode) { lv_label_set_text_fmt(subtitle, "Result of \"%s\": %"LV_PRId32" FPS", scenes[scene_act].name, scenes[scene_act].fps_normal); @@ -1013,8 +1028,8 @@ static void scene_next_task_cb(lv_timer_t * timer) rnd_reset(); scenes[scene_act].create_cb(); - lv_timer_t * t = lv_timer_create(scene_next_task_cb, SCENE_TIME, NULL); - lv_timer_set_repeat_count(t, 1); + next_scene_timer = lv_timer_create(next_scene_timer_cb, SCENE_TIME, NULL); + lv_timer_set_repeat_count(next_scene_timer, 1); } /*Ready*/ diff --git a/demos/benchmark/lv_demo_benchmark.h b/demos/benchmark/lv_demo_benchmark.h index 6a0a4f6..71a7589 100644 --- a/demos/benchmark/lv_demo_benchmark.h +++ b/demos/benchmark/lv_demo_benchmark.h @@ -30,6 +30,8 @@ typedef void finished_cb_t(void); **********************/ void lv_demo_benchmark(void); +void lv_demo_benchmark_close(void); + void lv_demo_benchmark_run_scene(int_fast16_t scene_no); void lv_demo_benchmark_set_finished_cb(finished_cb_t * finished_cb); diff --git a/demos/keypad_encoder/lv_demo_keypad_encoder.c b/demos/keypad_encoder/lv_demo_keypad_encoder.c index fdb9b94..0f4006e 100644 --- a/demos/keypad_encoder/lv_demo_keypad_encoder.c +++ b/demos/keypad_encoder/lv_demo_keypad_encoder.c @@ -46,8 +46,11 @@ static lv_obj_t * t2; void lv_demo_keypad_encoder(void) { - g = lv_group_create(); - lv_group_set_default(g); + g = lv_group_get_default(); + if(g == NULL) { + g = lv_group_create(); + lv_group_set_default(g); + } lv_indev_t * cur_drv = NULL; for(;;) { @@ -76,6 +79,12 @@ void lv_demo_keypad_encoder(void) msgbox_create(); } +void lv_demo_keypad_encoder_close(void) +{ + lv_obj_clean(lv_scr_act()); + lv_obj_clean(lv_layer_top()); +} + /********************** * STATIC FUNCTIONS **********************/ diff --git a/demos/keypad_encoder/lv_demo_keypad_encoder.h b/demos/keypad_encoder/lv_demo_keypad_encoder.h index c509d66..1916670 100644 --- a/demos/keypad_encoder/lv_demo_keypad_encoder.h +++ b/demos/keypad_encoder/lv_demo_keypad_encoder.h @@ -27,6 +27,7 @@ extern "C" { * GLOBAL PROTOTYPES **********************/ void lv_demo_keypad_encoder(void); +void lv_demo_keypad_encoder_close(void); /********************** * MACROS diff --git a/demos/music/lv_demo_music.c b/demos/music/lv_demo_music.c index cb72ed1..7393dfd 100644 --- a/demos/music/lv_demo_music.c +++ b/demos/music/lv_demo_music.c @@ -103,6 +103,12 @@ static const uint32_t time_list[] = { 2 * 60 + 19, }; +#if LV_DEMO_MUSIC_AUTO_PLAY + static lv_timer_t * auto_step_timer; +#endif + +static lv_color_t original_screen_bg_color; + /********************** * MACROS **********************/ @@ -113,14 +119,31 @@ static const uint32_t time_list[] = { void lv_demo_music(void) { + original_screen_bg_color = lv_obj_get_style_bg_color(lv_scr_act(), 0); lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x343247), 0); list = _lv_demo_music_list_create(lv_scr_act()); ctrl = _lv_demo_music_main_create(lv_scr_act()); #if LV_DEMO_MUSIC_AUTO_PLAY - lv_timer_create(auto_step_cb, 1000, NULL); + auto_step_timer = lv_timer_create(auto_step_cb, 1000, NULL); +#endif +} + +void lv_demo_music_close(void) +{ + /*Delete all aniamtions*/ + lv_anim_del(NULL, NULL); + +#if LV_DEMO_MUSIC_AUTO_PLAY + lv_timer_del(auto_step_timer); #endif + _lv_demo_music_list_close(); + _lv_demo_music_main_close(); + + lv_obj_clean(lv_scr_act()); + + lv_obj_set_style_bg_color(lv_scr_act(), original_screen_bg_color, 0); } const char * _lv_demo_music_get_title(uint32_t track_id) diff --git a/demos/music/lv_demo_music.h b/demos/music/lv_demo_music.h index 82917fb..3c393d6 100644 --- a/demos/music/lv_demo_music.h +++ b/demos/music/lv_demo_music.h @@ -36,6 +36,8 @@ extern "C" { **********************/ void lv_demo_music(void); +void lv_demo_music_close(void); + const char * _lv_demo_music_get_title(uint32_t track_id); const char * _lv_demo_music_get_artist(uint32_t track_id); const char * _lv_demo_music_get_genre(uint32_t track_id); diff --git a/demos/music/lv_demo_music_list.c b/demos/music/lv_demo_music_list.c index 88e79ec..942baeb 100644 --- a/demos/music/lv_demo_music_list.c +++ b/demos/music/lv_demo_music_list.c @@ -130,6 +130,19 @@ lv_obj_t * _lv_demo_music_list_create(lv_obj_t * parent) return list; } + +void _lv_demo_music_list_close(void) +{ + lv_style_reset(&style_scrollbar); + lv_style_reset(&style_btn); + lv_style_reset(&style_btn_pr); + lv_style_reset(&style_btn_chk); + lv_style_reset(&style_btn_dis); + lv_style_reset(&style_title); + lv_style_reset(&style_artist); + lv_style_reset(&style_time); +} + void _lv_demo_music_list_btn_check(uint32_t track_id, bool state) { lv_obj_t * btn = lv_obj_get_child(list, track_id); diff --git a/demos/music/lv_demo_music_list.h b/demos/music/lv_demo_music_list.h index 48e6e17..d03c6d1 100644 --- a/demos/music/lv_demo_music_list.h +++ b/demos/music/lv_demo_music_list.h @@ -28,6 +28,8 @@ extern "C" { * GLOBAL PROTOTYPES **********************/ lv_obj_t * _lv_demo_music_list_create(lv_obj_t * parent); +void _lv_demo_music_list_close(void); + void _lv_demo_music_list_btn_check(uint32_t track_id, bool state); /********************** diff --git a/demos/music/lv_demo_music_main.c b/demos/music/lv_demo_music_main.c index f7bc4b8..e30acde 100644 --- a/demos/music/lv_demo_music_main.c +++ b/demos/music/lv_demo_music_main.c @@ -60,7 +60,7 @@ static void prev_click_event_cb(lv_event_t * e); static void next_click_event_cb(lv_event_t * e); static void timer_cb(lv_timer_t * t); static void track_load(uint32_t id); -static void stop_start_anim(lv_timer_t * t); +static void stop_start_anim_timer_cb(lv_timer_t * t); static void spectrum_end_cb(lv_anim_t * a); static void album_fade_anim_cb(void * var, int32_t v); static int32_t get_cos(int32_t deg, int32_t a); @@ -84,6 +84,7 @@ static uint32_t spectrum_lane_ofs_start = 0; static uint32_t bar_rot = 0; static uint32_t time_act; static lv_timer_t * sec_counter_timer; +static lv_timer_t * stop_start_anim_timer; static const lv_font_t * font_small; static const lv_font_t * font_large; static uint32_t track_id; @@ -232,8 +233,8 @@ lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent) start_anim = true; - lv_timer_t * timer = lv_timer_create(stop_start_anim, INTRO_TIME + 6000, NULL); - lv_timer_set_repeat_count(timer, 1); + stop_start_anim_timer = lv_timer_create(stop_start_anim_timer_cb, INTRO_TIME + 6000, NULL); + lv_timer_set_repeat_count(stop_start_anim_timer, 1); lv_anim_init(&a); lv_anim_set_path_cb(&a, lv_anim_path_bounce); @@ -292,6 +293,12 @@ lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent) return main_cont; } +void _lv_demo_music_main_close(void) +{ + if(stop_start_anim_timer) lv_timer_del(stop_start_anim_timer); + lv_timer_del(sec_counter_timer); +} + void _lv_demo_music_album_next(bool next) { uint32_t id = track_id; @@ -762,7 +769,7 @@ static void spectrum_draw_event_cb(lv_event_t * e) lv_obj_t * obj = lv_event_get_target(e); lv_draw_ctx_t * draw_ctx = lv_event_get_draw_ctx(e); - lv_opa_t opa = lv_obj_get_style_opa(obj, LV_PART_MAIN); + lv_opa_t opa = lv_obj_get_style_opa_recursive(obj, LV_PART_MAIN); if(opa < LV_OPA_MIN) return; lv_point_t poly[4]; @@ -990,10 +997,11 @@ static void spectrum_end_cb(lv_anim_t * a) } -static void stop_start_anim(lv_timer_t * t) +static void stop_start_anim_timer_cb(lv_timer_t * t) { LV_UNUSED(t); start_anim = false; + stop_start_anim_timer = NULL; lv_obj_refresh_ext_draw_size(spectrum_obj); } diff --git a/demos/music/lv_demo_music_main.h b/demos/music/lv_demo_music_main.h index a2cf939..04e8a7f 100644 --- a/demos/music/lv_demo_music_main.h +++ b/demos/music/lv_demo_music_main.h @@ -28,6 +28,8 @@ extern "C" { * GLOBAL PROTOTYPES **********************/ lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent); +void _lv_demo_music_main_close(void); + void _lv_demo_music_play(uint32_t id); void _lv_demo_music_resume(void); void _lv_demo_music_pause(void); diff --git a/demos/stress/lv_demo_stress.c b/demos/stress/lv_demo_stress.c index b247443..24a9534 100644 --- a/demos/stress/lv_demo_stress.c +++ b/demos/stress/lv_demo_stress.c @@ -25,7 +25,7 @@ static void msgbox_del(lv_timer_t * tmr); static void set_y_anim(void * obj, int32_t v); static void set_width_anim(void * obj, int32_t v); static void arc_set_end_angle_anim(void * obj, int32_t v); -static void obj_test_task_cb(lv_timer_t * tmr); +static void obj_test_timer_cb(lv_timer_t * tmr); /********************** * STATIC VARIABLES @@ -34,6 +34,10 @@ static lv_obj_t * main_page; static lv_obj_t * ta; static const char * mbox_btns[] = {"Ok", "Cancel", ""}; static uint32_t mem_free_start = 0; +static lv_timer_t * obj_test_timer; +static int16_t state; +static lv_timer_t * msgbox_tmr; + /********************** * MACROS **********************/ @@ -45,23 +49,34 @@ static uint32_t mem_free_start = 0; void lv_demo_stress(void) { LV_LOG_USER("Starting stress test. (< 100 bytes permanent memory leak is normal due to fragmentation)"); - lv_timer_create(obj_test_task_cb, LV_DEMO_STRESS_TIME_STEP, NULL); + obj_test_timer = lv_timer_create(obj_test_timer_cb, LV_DEMO_STRESS_TIME_STEP, NULL); + state = -1; +} + +void lv_demo_stress_close(void) +{ + lv_timer_del(obj_test_timer); + obj_test_timer = NULL; + if(msgbox_tmr) { + lv_timer_del(msgbox_tmr); + msgbox_tmr = NULL; + } + + lv_obj_clean(lv_scr_act()); + lv_obj_clean(lv_layer_top()); } /********************** * STATIC FUNCTIONS **********************/ -static void obj_test_task_cb(lv_timer_t * tmr) +static void obj_test_timer_cb(lv_timer_t * tmr) { (void) tmr; /*Unused*/ - static int16_t state = -1; lv_anim_t a; lv_obj_t * obj; - // printf("step start: %d\n", state); - switch(state) { case -1: { lv_res_t res = lv_mem_test(); @@ -246,8 +261,7 @@ static void obj_test_task_cb(lv_timer_t * tmr) case 14: obj = lv_msgbox_create(NULL, "Title", "Some text on the message box with average length", mbox_btns, true); - - lv_timer_t * msgbox_tmr = lv_timer_create(msgbox_del, LV_DEMO_STRESS_TIME_STEP * 5 + 30, obj); + msgbox_tmr = lv_timer_create(msgbox_del, LV_DEMO_STRESS_TIME_STEP * 5 + 30, obj); lv_timer_set_repeat_count(msgbox_tmr, 1); lv_obj_align(obj, LV_ALIGN_RIGHT_MID, -10, 0); break; @@ -439,6 +453,7 @@ static void auto_del(lv_obj_t * obj, uint32_t delay) static void msgbox_del(lv_timer_t * tmr) { + msgbox_tmr = NULL; lv_msgbox_close(tmr->user_data); } diff --git a/demos/stress/lv_demo_stress.h b/demos/stress/lv_demo_stress.h index f718366..aacc9e1 100644 --- a/demos/stress/lv_demo_stress.h +++ b/demos/stress/lv_demo_stress.h @@ -30,6 +30,8 @@ extern "C" { **********************/ void lv_demo_stress(void); +void lv_demo_stress_close(void); + /********************** * MACROS **********************/ diff --git a/demos/widgets/lv_demo_widgets.c b/demos/widgets/lv_demo_widgets.c index 839b999..44567e4 100644 --- a/demos/widgets/lv_demo_widgets.c +++ b/demos/widgets/lv_demo_widgets.c @@ -86,6 +86,8 @@ static uint32_t session_desktop = 1000; static uint32_t session_tablet = 1000; static uint32_t session_mobile = 1000; +static lv_timer_t * meter2_timer; + /********************** * MACROS **********************/ @@ -196,6 +198,22 @@ void lv_demo_widgets(void) color_changer_create(tv); } +void lv_demo_widgets_close(void) +{ + /*Delete all animation*/ + lv_anim_del(NULL, NULL); + + lv_timer_del(meter2_timer); + meter2_timer = NULL; + + lv_obj_clean(lv_scr_act()); + + lv_style_reset(&style_text_muted); + lv_style_reset(&style_title); + lv_style_reset(&style_icon); + lv_style_reset(&style_bullet); +} + /********************** * STATIC FUNCTIONS **********************/ @@ -205,6 +223,7 @@ static void profile_create(lv_obj_t * parent) lv_obj_t * panel1 = lv_obj_create(parent); lv_obj_set_height(panel1, LV_SIZE_CONTENT); + LV_IMG_DECLARE(img_demo_widgets_avatar); lv_obj_t * avatar = lv_img_create(panel1); lv_img_set_src(avatar, &img_demo_widgets_avatar); @@ -698,7 +717,7 @@ static void analytics_create(lv_obj_t * parent) lv_meter_set_indicator_start_value(meter2, meter2_indic[2], 70); lv_meter_set_indicator_end_value(meter2, meter2_indic[2], 99); - lv_timer_create(meter2_timer_cb, 100, meter2_indic); + meter2_timer = lv_timer_create(meter2_timer_cb, 100, meter2_indic); meter3 = create_meter_box(parent, "Network Speed", "Low speed", "Normal Speed", "High Speed"); if(disp_size < DISP_LARGE) lv_obj_add_flag(lv_obj_get_parent(meter3), LV_OBJ_FLAG_FLEX_IN_NEW_TRACK); diff --git a/demos/widgets/lv_demo_widgets.h b/demos/widgets/lv_demo_widgets.h index 66dddaf..8d70df1 100644 --- a/demos/widgets/lv_demo_widgets.h +++ b/demos/widgets/lv_demo_widgets.h @@ -27,6 +27,7 @@ extern "C" { * GLOBAL PROTOTYPES **********************/ void lv_demo_widgets(void); +void lv_demo_widgets_close(void); /********************** * MACROS diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 4839ce6..8349623 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,328 @@ # Changelog +## [v8.3.11](https://github.com/lvgl/lvgl/compare/v8.3.11...v8.3.10) 6 December 2023 + +### New Features + +- feat(table): add user_data to table cells [`4767`](https://github.com/lvgl/lvgl/pull/4767) +- feat(tiny_ttf): backport Tiny TTF to lvgl 8 [`4727`](https://github.com/lvgl/lvgl/pull/4727) +- feat(littlefs): add lv_fs_littlefs system as a driver [`4677`](https://github.com/lvgl/lvgl/pull/4677) + +### Fixes + +- fix(obj): readjust scroll after layout when child removed [`4921`](https://github.com/lvgl/lvgl/pull/4921) +- fix(rt-thread): fix create lvgl thread problem [`4862`](https://github.com/lvgl/lvgl/pull/4862) +- fix(obj): fix arduino compile warnings [`4807`](https://github.com/lvgl/lvgl/pull/4807) +- fix(table):fix issue with abnormal string output of 'lv_table_set_cell_value_fmt' [`4804`](https://github.com/lvgl/lvgl/pull/4804) +- fix(table) user data API functions renamed [`4769`](https://github.com/lvgl/lvgl/pull/4769) +- fix(ime_pinyin): keep cursor in the textarea when a candidate is pressed [`4731`](https://github.com/lvgl/lvgl/pull/4731) +- fix(draw_needles): changed needle line draw start point from scale ce… [`4682`](https://github.com/lvgl/lvgl/pull/4682) +- fix(arc): handle click outside background angle range (#4586) [`4667`](https://github.com/lvgl/lvgl/pull/4667) +- fix(meter): fix minor issues [`4657`](https://github.com/lvgl/lvgl/pull/4657) +- fix(draw): fix compiler error in lv_draw_sw_transform.c #2 [`4612`](https://github.com/lvgl/lvgl/pull/4612) +- fix(dropdown): avoid partial match in lv_dropdown_get_option_index [`4598`](https://github.com/lvgl/lvgl/pull/4598) +- fix(dropdown): reset char_i = 0, avoid access overflow [`4589`](https://github.com/lvgl/lvgl/pull/4589) +- fix(btnmatrix): set LV_BTNMATRIX_BTN_NONE when clicking of disabled button (#4571) [`4578`](https://github.com/lvgl/lvgl/pull/4578) +- fix(qrcode): use LV_ASSERT instead of assert [`1840dec`](https://github.com/lvgl/lvgl/commit/1840decb4136ba01552fcb7cedb0ff759824e2fd) +- fix: fix warning in lv_draw_sw_letter.c [`d22cda3`](https://github.com/lvgl/lvgl/commit/d22cda3cdb15cee95763491db95753980846d9f9) +- fix(arc): fix setting value by click [`20b6199`](https://github.com/lvgl/lvgl/commit/20b6199ba90319942c3cd91f2c727da6cd40cd2d) +- fix(disp): fix infinite recursive SCREEN_LOADED events [`ef76206`](https://github.com/lvgl/lvgl/commit/ef76206c75ea9de26407534a9ce1079dc8e750e3) +- fix(keyboard): add '&' character [`d20bd1c`](https://github.com/lvgl/lvgl/commit/d20bd1ca397ff954167dd496cf1a78da8814f602) +- fix(draw): fix scaling rectangle parts with opa [`7a8fcbf`](https://github.com/lvgl/lvgl/commit/7a8fcbfd3458739cbe64b29767a969ece9542039) + +### Docs + +- docs(obj): fix wording [`4625`](https://github.com/lvgl/lvgl/pull/4625) +- docs(label): update text for recoloring [`4606`](https://github.com/lvgl/lvgl/pull/4606) +- docs: fix typo [`9fbac75`](https://github.com/lvgl/lvgl/commit/9fbac7570bdec18ddbb157b59f5e26a2ebdf5daf) + +### Others + +- chore(cmsis-pack): prepare for v8.3.11 [`4936`](https://github.com/lvgl/lvgl/pull/4936) +- chore(cmake): add support for user-specified lv_conf.h path [`4689`](https://github.com/lvgl/lvgl/pull/4689) +- STM32U5 DMA2D support (8.3) [`4643`](https://github.com/lvgl/lvgl/pull/4643) +- backport: fix(lv_disp): fix lv_scr_load_anim being called twice quickly [`4629`](https://github.com/lvgl/lvgl/pull/4629) +- chore(lv_draw_sw_letter.c): Fix print format [`4615`](https://github.com/lvgl/lvgl/pull/4615) +- chore: fix compile error [`7568df7`](https://github.com/lvgl/lvgl/commit/7568df77d16ecbf2242b2bc290dc8fc0eb29cf5a) + +## [v8.3.10](https://github.com/lvgl/lvgl/compare/v8.3.10...v8.3.9) 20 September 2023 + +### New Features + +- feat(disp): add double buffered direct-mode efficient sync algorithm (v8.3) [`4497`](https://github.com/lvgl/lvgl/pull/4497) +- feat(style): backport opa_layered [`6548ea0`](https://github.com/lvgl/lvgl/commit/6548ea0f291be8a97afb3c4d7dcabbe465ae5a04) + + +### Fixes + +- fix: build on Windows (MinGW environment) [`4538`](https://github.com/lvgl/lvgl/pull/4538) +- fix(docs): dropdown: fix function name in description of static options [`4535`](https://github.com/lvgl/lvgl/pull/4535) +- fix: do not copy invalid areas if not double buffered mode [`4526`](https://github.com/lvgl/lvgl/pull/4526) +- fix(sdl): add missing parameter in lv_draw_sdl_composite_texture_obtain [`4490`](https://github.com/lvgl/lvgl/pull/4490) +- fix(dropdown): position to the selected item in lv_dropdown_set_selected [`f174589`](https://github.com/lvgl/lvgl/commit/f174589240b099a349e54ba09aa9b39c2b347341) +- fix(vglite): be sure end_angle > start_angle in arc drawing [`01cd1fe`](https://github.com/lvgl/lvgl/commit/01cd1fed9db974aa616a6289a29171b7a971cd89) +- fix(btnmatrix): fix tapping just outside a button in a buttonmatrix [`8063fac`](https://github.com/lvgl/lvgl/commit/8063fac793b0a09add1e57c1115b734659274e6f) + + +### Docs + +- docs(calendar): update according to v8.2 changes [`a296456`](https://github.com/lvgl/lvgl/commit/a296456591f6ff0e3b3ae6cdcdd9ec5b1711c357) +- docs(simulator): remove SDL support from the Visual Studio project [`bcebafe`](https://github.com/lvgl/lvgl/commit/bcebafe4fb72e336b7dedca89c07e334427eef8d) + +### CI and tests + +- ci: update screenshot compare from v9 to automatically create missing reference images [`fd21ed0`](https://github.com/lvgl/lvgl/commit/fd21ed0eb82bacb1e482180ab0aaed6a667f000d) +- ci(dropdown): fix test [`5fc488a`](https://github.com/lvgl/lvgl/commit/5fc488a088639dbfb5eb44f65b05e13b6ba881bf) + +### Others + +- chore(cmsis-pack): create cmsis-pack for v8.3.10 [`4572`](https://github.com/lvgl/lvgl/pull/4572) +- Update screen object opacity function documentation [`4505`](https://github.com/lvgl/lvgl/pull/4505) +- demo(sress): fix issues when the stress test is opened/clsoed multiple times [`1c5df6c`](https://github.com/lvgl/lvgl/commit/1c5df6c665b0d5f6f346d45b13109ff1f6ea78a6) +- chore: code formatting [`eb87767`](https://github.com/lvgl/lvgl/commit/eb87767cc65fec93f9cc4f87a1f8fb5b32f7e41d) + + +## [v8.3.9](https://github.com/lvgl/lvgl/compare/v8.3.9...v8.3.8) 6 August 2023 + + +### Fixes + +- fix(decoder): fix LV_IMG_CF_ALPHA_8BIT bin file decoder [`4406`](https://github.com/lvgl/lvgl/pull/4406) +- fix(config): fix typo in LV_USE_PERF_MONITOR and LV_USE_MEM_MONITOR [`4403`](https://github.com/lvgl/lvgl/pull/4403) +- fix(attr): refactor LV_ATTRIBUTE_* for function attributes [`4404`](https://github.com/lvgl/lvgl/pull/4404) +- fix(font): fix optimizer issue in lv_font_fmt_txt.c [`4385`](https://github.com/lvgl/lvgl/pull/4385) +- fix(btnmatrix): Hide button matrix when all buttons hidden [`65f1c93`](https://github.com/lvgl/lvgl/commit/65f1c9305e1b13356010524da4764fe20fe93030) +- fix(obj) prevent hidden objects keeping focus [`375b3b5`](https://github.com/lvgl/lvgl/commit/375b3b5d3ef2ea8c52f971a1bf20998be7940d5e) +- fix(btnmatrix): Fix typo in previous commit! [`29ed7c5`](https://github.com/lvgl/lvgl/commit/29ed7c5717f6cfbca5ce888bf4497221525aae85) +- fix(tabview): fix warning [`223dc1c`](https://github.com/lvgl/lvgl/commit/223dc1cf9d1cad0f40caf244eb435af0871f4153) +- fix(indev): fix warnings when loggin coordinates is enabled [`645006e`](https://github.com/lvgl/lvgl/commit/645006e35195cab3354f34a1a8cbc8c5ed0fdfad) +- fix: use const lv_img_dsc_t * dsc function parameter in lv_img_buf.h/ [`4f102d7`](https://github.com/lvgl/lvgl/commit/4f102d7b6b2e9f9fa68ab7b976d93762107549a4) +- fix(chart): fix lv_chart_get_point_pos_by_id [`f9ffcc9`](https://github.com/lvgl/lvgl/commit/f9ffcc9d8e11beb369dcbab0945ca85eab8f77b2) +- fix(imgbtn): support LV_OBJ_FLAG_CHECKABLE [`385d999`](https://github.com/lvgl/lvgl/commit/385d999a4a8164fcde6ae05f6a5daa5d5c209dd3) + + +### Docs + +- docs(disp): metined that rotation rotates the touch coordinates too [`810852b`](https://github.com/lvgl/lvgl/commit/810852b41be5df66fd7b80f8af69f8b579d142ea) + + +### Others + +- demos: add lv_demo_..._close() functions for each demo [`91038a9`](https://github.com/lvgl/lvgl/commit/91038a99e82a2522f693c7cdc77e9e7a672ee9ed) + + +## [v8.3.8](https://github.com/lvgl/lvgl/compare/v8.3.8...v8.3.7) 5 July 2023 + +### New Features + +- feat(rt-thread): make the rt-thread env recursively glob the UI files [`8b83fe7`](https://github.com/lvgl/lvgl/commit/8b83fe7ea53a597cdbae8204d0aa9be8ad3d2b89) + +### Performance + +- perf(pxp, vglite): improve performance and add more features [`4222`](https://github.com/lvgl/lvgl/pull/4222) + +### Fixes + +- fix(stm32): static function prototypes moved from .h to .c [`4276`](https://github.com/lvgl/lvgl/pull/4276) +- fix(png): fix decode image size and some warnings [`4248`](https://github.com/lvgl/lvgl/pull/4248) +- fix(bidi): add more Hebrew checks to RTL characters set (#4171) [`4239`](https://github.com/lvgl/lvgl/pull/4239) +- fix(img): fix getting the image type on big endian systems [`4215`](https://github.com/lvgl/lvgl/pull/4215) +- fix(sdl): destroy texture after use if not stored in cache [`4173`](https://github.com/lvgl/lvgl/pull/4173) + +- fix:(BtnMatrix) Backport https://github.com/lvgl/lvgl/pull/4185 [`cb602ea`](https://github.com/lvgl/lvgl/commit/cb602ea7785de21a187ef5ee5f7de4e3aa3f7e0e) +- fix(arduino): fix messed up variable types [`e3659c4`](https://github.com/lvgl/lvgl/commit/e3659c46b128b2b715b196c3ccfb94b3de4c89f8) +- fix:(BtnMatrix) Backport https://github.com/lvgl/lvgl/pull/4185 [`07bce74`](https://github.com/lvgl/lvgl/commit/07bce7466d471a15ba241a9db3239f7a116b0b46) +- fix(chart): fix division by zero if there are no ticks [`67b3011`](https://github.com/lvgl/lvgl/commit/67b3011f835b08c77ff60ae2d1e6592a710ca2b1) +- fix(msgbox): fix typo [`6a89bd2`](https://github.com/lvgl/lvgl/commit/6a89bd2d7409ac4d49ad32da73ba50a84f7c8990) +- fix(tabview): remove the animation if the tab is selected by clicking the button on the header [`3de61c7`](https://github.com/lvgl/lvgl/commit/3de61c76af0aed1665e9d61e47b4dd50b9e8bdf1) +- fix(btnmatrix): fix array out of bounds addressing with groups and no buttons [`edd5ad2`](https://github.com/lvgl/lvgl/commit/edd5ad28ad74d1025db0b442cfa390d8c01ae006) +- fix(btnmatrix): fix using > 7 as button width [`75e6ef4`](https://github.com/lvgl/lvgl/commit/75e6ef4e1d66a85d68160b97ef931b0717e77212) +- fix(draw): typo with LV_COLOR_DEPTH 8 [`45b13c3`](https://github.com/lvgl/lvgl/commit/45b13c378f6fc1728ddf1547c25daa61d62c9f76) +- fix(disp): fix memory leak lv_scr_load_anim with auto_del and time=0 [`1caafc5`](https://github.com/lvgl/lvgl/commit/1caafc55dde46e1b7e3d17d8c5349fbf7cccba9f) + +- fix(msgbox): add missing lv_obj_class_init_obj [`6843c19`](https://github.com/lvgl/lvgl/commit/6843c191b792f66829477827279adbbc763541c1) +- fix(flex): register LV_STYLE_FLEX_GROW [`5ba90a5`](https://github.com/lvgl/lvgl/commit/5ba90a5c41f584a8eb3a4fc8e2f466729652ddb3) + +### Examples + +- example(tabview): fix tabview disable scrollig example [`9491c3f`](https://github.com/lvgl/lvgl/commit/9491c3ff6d2f8e56b13d8fb493d4b3ee98ef1a4b) + +### Docs + +- docs: mention incompatibility between software rotation and `direct_mode` or `full_refresh` [`4308`](https://github.com/lvgl/lvgl/pull/4308) +- docs(faq): don't say 24 bit is support as LVGL can't render in RGB888 directly [`227ac02`](https://github.com/lvgl/lvgl/commit/227ac023419eeb253892b1c36113059f12b1f9f2) + +### CI and tests + +### Others + +- chore(cmsis-pack): update cmsis-pack for v8.3.8 [`4340`](https://github.com/lvgl/lvgl/pull/4340) +- add(docs): add renesas-ra6m3 get-started document [`4278`](https://github.com/lvgl/lvgl/pull/4278) +- add(gpu): add renesas-ra6m3 gpu adaptation [`4270`](https://github.com/lvgl/lvgl/pull/4270) + +- Revert "fix:(BtnMatrix) Backport https://github.com/lvgl/lvgl/pull/4185" [`1713cd3`](https://github.com/lvgl/lvgl/commit/1713cd3fd8f93aa575fbcf0e34b8626b6ee69ded) + + + + +## [v8.3.7](https://github.com/lvgl/lvgl/compare/v8.3.7...v8.3.6) 3 May 2023 + +### New Features + +- feat(btnmatrix): review ctrl map and allow width values to be max 15 [`a150b15`](https://github.com/lvgl/lvgl/commit/a150b15e45a922eb5497fe5a31a480e1cd689246) + +### Fixes + +- fix (spinbox): doubling characters entered from the keyboard [`4190`](https://github.com/lvgl/lvgl/pull/4190) +- fix(arm-2d): fix transform-chrome-keying issue [`4178`](https://github.com/lvgl/lvgl/pull/4178) +- fix(menu): prevent setting the current page again [`4136`](https://github.com/lvgl/lvgl/pull/4136) +- fix(esp): fix ESP-IDF pedantic builds (backport v8.3) [`4135`](https://github.com/lvgl/lvgl/pull/4135) +- fix: color mixing with LV_COLOR_SWAP == 1 [`4101`](https://github.com/lvgl/lvgl/pull/4101) + +- fix(indev): fix integer overflow in recursive zoom calculation [`a0795b4`](https://github.com/lvgl/lvgl/commit/a0795b49e82102ad68a27c86c36c37fffbe66d3c) +- fix(style): fix trasition on bg_grad color [`48d7878`](https://github.com/lvgl/lvgl/commit/48d7878bac3f607322957ed6f710d6615d5e72e0) + + +## [v8.3.6](https://github.com/lvgl/lvgl/compare/v8.3.6...v8.3.5) 3 April 2023 + +### New Features + +- feat(msg): add lv_msg_unsubcribe_obj [`6af0179`](https://github.com/lvgl/lvgl/commit/6af01798d82f90f0c2ba6a9da39c4f10fb427df7) + +### Performance + +### Fixes + +- fix(group): fix default_group becomes wild pointer when deleted [`4076`](https://github.com/lvgl/lvgl/pull/4076) +- fix(fs_posix): allow creating new file and set permission. [`3976`](https://github.com/lvgl/lvgl/pull/3976) +- fix(img): support negative angles [`3846`](https://github.com/lvgl/lvgl/pull/3846) +- fix(gif): synchronize with master [`4003`](https://github.com/lvgl/lvgl/pull/4003) +- fix(gpu): fix STM GPU drivers for some variants [`4004`](https://github.com/lvgl/lvgl/pull/4004) +- fix(img): possible divide by 0 exception (lvgl#3988) [`3990`](https://github.com/lvgl/lvgl/pull/3990) +- fix(arc): fix knob area invalidation [`d0e19eb`](https://github.com/lvgl/lvgl/commit/d0e19eb2d38ba8a500399b0496d7a8363be4003e) +- fix(slider): consider animations on pressing [`0b7777f`](https://github.com/lvgl/lvgl/commit/0b7777f27a7932efe3d594be426e1beb59d80ae3) +- fix(bar): delete running animations when a new value is set without animation [`aa31380`](https://github.com/lvgl/lvgl/commit/aa313806d0ebde475fc2bc360a15172cc1b658a7) +- docs: use a fixed commit of lv_web_emscripten [`501230e`](https://github.com/lvgl/lvgl/commit/501230e0fc95936199b3187d350873c3bb4a94e4) + +### Examples + +### Docs + +- docs(arduino): add note to not use lv_examles library [`2f294aa`](https://github.com/lvgl/lvgl/commit/2f294aa76c8fece98a4fa72304bc6f267ed2a228) +- docs: use a fixed commit of lv_web_emscripten [`501230e`](https://github.com/lvgl/lvgl/commit/501230e0fc95936199b3187d350873c3bb4a94e4) + +### CI and tests + +### Others + +- chore(cmsis-pack): update cmsis-pack for v8.3.6 [`4108`](https://github.com/lvgl/lvgl/pull/4108) +- chore: update the version numbers to v8.3.5-dev [`77670fb`](https://github.com/lvgl/lvgl/commit/77670fb1a55e0f2012ff7a057e535830e7253e22) +- Update build_html_examples.sh [`399069b`](https://github.com/lvgl/lvgl/commit/399069b4a2423c11823581668fe71ce9a7c88e7d) + + +## [v8.3.5](https://github.com/lvgl/lvgl/compare/v8.3.4...v8.3.5) 7 February 2023 + +### Performance + +- perf(gpu): improve NXP's PXP and VGLite accelerators [`3952`](https://github.com/lvgl/lvgl/pull/3952) +- perf(dam2d): rework stm32 dma2d [`3904`](https://github.com/lvgl/lvgl/pull/3904) + +### Fixes + +- fix(monkey): remove executable permissions from source files [`3971`](https://github.com/lvgl/lvgl/pull/3971) +- fix(ci): set Ubuntu version for MicroPython test [`3865`](https://github.com/lvgl/lvgl/pull/3865) +- fix(Kconfig): fix wrong type of LV_FS_STDIO_CACHE_SIZE (v8.3) [`3906`](https://github.com/lvgl/lvgl/pull/3906) +- docs(indev): fix the name of long_press_repeat_time (was long_press_rep_time) [`34c545e`](https://github.com/lvgl/lvgl/commit/34c545ef19dc97c8952a412e533a4cd3924b9fbc) +- fix(roller): consider the recolor setting of the label [`39f4247`](https://github.com/lvgl/lvgl/commit/39f424767fa57376c4cb08cf22951fd56d854fd6) + +### Examples + +### Docs + +- docs(indev): fix the name of long_press_repeat_time (was long_press_rep_time) [`34c545e`](https://github.com/lvgl/lvgl/commit/34c545ef19dc97c8952a412e533a4cd3924b9fbc) + +### CI and tests + +- ci(esp): fix push to the component registry on tag [`e529230`](https://github.com/lvgl/lvgl/commit/e529230f4bb97b4506c430aac96d5ddaef685dc4) + +### Others + +- chore(cmsis-pack): update cmsis-pack for v8.3.5 [`3972`](https://github.com/lvgl/lvgl/pull/3972) +- chore: add an option to "LV_TICK_CUSTOM" [`3879`](https://github.com/lvgl/lvgl/pull/3879) + +- bump version numbers to v8.3.5-dev [`47c8f8f`](https://github.com/lvgl/lvgl/commit/47c8f8f9822f4c0c0ffbe2f12b380bddefcec475) +- Update layer.md [`9faca8a`](https://github.com/lvgl/lvgl/commit/9faca8a8d4125e21dedbf6e46aa1586a6b57e5b8) + +## [v8.3.4](https://github.com/lvgl/lvgl/compare/v8.3.4...v8.3.3) 15 December 2022 + +### New Features + +- feat(keyboard): ported arabic keyboard from release 7.10.0 [`3728`](https://github.com/lvgl/lvgl/pull/3728) +- feat(table): scroll to the selected cell with key navigation [`39d03a8`](https://github.com/lvgl/lvgl/commit/39d03a80f45847a1977cfe9cc6a509b1613d0aca) + +### Fixes + +- fix(rt-thread): sync rt-thread v5.0.0 rt_align [`3864`](https://github.com/lvgl/lvgl/pull/3864) +- fix(draw): SDL2 gradient support #3848 [`3856`](https://github.com/lvgl/lvgl/pull/3856) +- fix(esp.cmake): add demos and examples [`3784`](https://github.com/lvgl/lvgl/pull/3784) +- fix(indev): fix scrolling on transformed obejcts [`84cf05d`](https://github.com/lvgl/lvgl/commit/84cf05d8b23b31e000db757a278545e58fcbcbe8) +- fix(style): add the missing support for pct pivot in tranasform style properties [`c8e584f`](https://github.com/lvgl/lvgl/commit/c8e584f879a1e1427e7a8f5ff496af39f17df41d) +- fix(flex): be sure obj->w_layout and h_layout can't be set at the same time [`c4c4007`](https://github.com/lvgl/lvgl/commit/c4c400716e80a279e7b3d43b8992915fe94441eb) +- fix(chart): fix very dense bar charts [`bb2c2ac`](https://github.com/lvgl/lvgl/commit/bb2c2ac34ac943978513c7ed51885078979b1c10) +- fix(draw): handle LV_COLOR_DEPTH == 1 too in lv_draw_sw_transform [`bd11ad8`](https://github.com/lvgl/lvgl/commit/bd11ad8542eac9ff51420e5afb80f7e6fcf36a5c) +- fix(example): fix warnings [`1e3ca25`](https://github.com/lvgl/lvgl/commit/1e3ca25fed13bbf85c32a60d4b7041cf8bd525ab) +- fix(benchmark): fix warnings [`1ed026c`](https://github.com/lvgl/lvgl/commit/1ed026ca7307957568fe419f1ff39a15b2535b3e) +- fix(draw): fix text color with sub pixel rendering and BGR order [`e050f5c`](https://github.com/lvgl/lvgl/commit/e050f5ca156f79d752894f38f0a437c946205cb4) +- fix(meter): fix setting part_draw_dsc.id in needle img drawing [`716e5e2`](https://github.com/lvgl/lvgl/commit/716e5e2c8bd2a22e7d56e8d7ca33054a11a1f4ed) +- fix(gridnav): fix stucking in pressed state with encoder [`ad56dfa`](https://github.com/lvgl/lvgl/commit/ad56dfaf7046a9bb8c05e877a8c8852cd14a59af) +- fix(darw): add back the disappeared antialising=0 support [`2c17b28`](https://github.com/lvgl/lvgl/commit/2c17b28ac476c95a4153ab6cabb77b1c7208bb74) +- fix(msg): fix typos in API by adding wrappers [`41fa416`](https://github.com/lvgl/lvgl/commit/41fa41613455260ccdeb87ecb890ce026ff0a435) +- fix(draw): fix transformation accuracy [`e06f03d`](https://github.com/lvgl/lvgl/commit/e06f03db72f98439078118518158f52439dd7bf8) +- fix(style): remove the reduntant define of LV_GRADIENT_MAX_STOPS [`903e94b`](https://github.com/lvgl/lvgl/commit/903e94b716ca1b32cdb51de11df679953699e53b) +- demo(benchmark): fix lv_label_set_text_fmt format strings [`ae38258`](https://github.com/lvgl/lvgl/commit/ae3825871e31cd42cad2f310bdfc605150670511) +- demo(benchmark): fix warning [`1173dcb`](https://github.com/lvgl/lvgl/commit/1173dcba96621e20c9a7240c8572bd6573bce6a0) + +## [v8.3.3](https://github.com/lvgl/lvgl/compare/v8.3.2...v8.3.3) 06 October 2022 + +v8.3.3 is the same as v8.3.2. It was released only because the version number was set incorrectly in lvgl.h. + +## [v8.3.2](https://github.com/lvgl/lvgl/compare/v8.3.1...v8.3.2) 27 September 2022 + +### Fixes + +- fix(fragment): fixed child fragment event dispatch [`3683`](https://github.com/lvgl/lvgl/pull/3683) +- fix(sdl): clear streaming/target texture with FillRect [`3682`](https://github.com/lvgl/lvgl/pull/3682) +- fix(sdl): transformation with alpha (#3576) [`3678`](https://github.com/lvgl/lvgl/pull/3678) +- fix(draw_sw): fix image cache to access the freed stack space [`3584`](https://github.com/lvgl/lvgl/pull/3584) +- fix(style): use compile time prop_cnt for const styles [`3609`](https://github.com/lvgl/lvgl/pull/3609) +- fix(demo): can not found lvgl.h file [`3477`](https://github.com/lvgl/lvgl/pull/3477) +- fix(ci) checkout lv_micropython release/v8 branch [`3524`](https://github.com/lvgl/lvgl/pull/3524) +- fix(canvas): fix clipéping on transformation [`b884aba`](https://github.com/lvgl/lvgl/commit/b884abae26f3824b27783a85d18ed51e550347c1) +- fix(draw): allow drawing outline with LV_DRAW_COMPLEX == 0 too [`ece3495`](https://github.com/lvgl/lvgl/commit/ece34950040e218fc73605a4e88f1060c2a274f8) +- fix(colorwheel): fix updating color when using lv_colorwheel_set_hsv [`d59bba1`](https://github.com/lvgl/lvgl/commit/d59bba12db115afb4b6aa53eed2625221dfff2fd) +- fix(slider): find the nearest value on click instead of floor [`dfd14fa`](https://github.com/lvgl/lvgl/commit/dfd14fa778aef25d0db61748a58aa9989ce5e2c8) +- fix(draw): fix border drawing with thick borders [`d5b2a9b`](https://github.com/lvgl/lvgl/commit/d5b2a9b2562cbfa327bf0ec03c11d28576037a14) +- fix(refr): fix true double double buffering logic with transparent screens [`8b605cc`](https://github.com/lvgl/lvgl/commit/8b605cc48224d0497cdd936fa77229e0c3d606d2) +- fix(group): be sure obj is removed from its current group in lv_group_add_obj [`5156ee0`](https://github.com/lvgl/lvgl/commit/5156ee058d5de674a00ffd84d15d460de7f0e53b) +- fix(style): add missing invalidation in lv_obj_remove_local_style_prop [`a0515ba`](https://github.com/lvgl/lvgl/commit/a0515ba30dd74b8b22a6709d334eb03782ee1a4d) + +### Docs + +- docs(draw) remove reference to old lv_fs_add_drv function [`3564`](https://github.com/lvgl/lvgl/pull/3564) +- docs(disp): LV_COLOR_SCREEN_TRANSP remove dependency on LV_COLOR_DEPTH_32 as transparency is supported across all color depths [`3556`](https://github.com/lvgl/lvgl/pull/3556) + +### CI and tests + +- ci: protect test.c with #if LV_BUILD_TEST [`be485d7`](https://github.com/lvgl/lvgl/commit/be485d7605136d2a5d6a633c7cb5b7c525cae7ee) + +### Others + +- chore(rt-thread) backport fixes from v9 [`3604`](https://github.com/lvgl/lvgl/pull/3604) + +- chore: fix warnings [`7640950`](https://github.com/lvgl/lvgl/commit/76409502163ffe67cfbab9c7f24f2226cc8a5941) +- remove accidentally added code [`5022476`](https://github.com/lvgl/lvgl/commit/5022476edc8676f2a6ef7b919d3578159edeef7c) + + ## [v8.3.1](https://github.com/lvgl/lvgl/compare/v8.3.0...v8.3.1) 25 July 2022 ### Fixes diff --git a/docs/get-started/platforms/arduino.md b/docs/get-started/platforms/arduino.md index e9ca2e4..2571cac 100644 --- a/docs/get-started/platforms/arduino.md +++ b/docs/get-started/platforms/arduino.md @@ -52,9 +52,14 @@ In the INO file you can see how to register a display and a touchpad for LVGL an Note that, there is no dedicated INO file for every example. Instead, you can load an example by calling an `lv_example_...` function. For example `lv_example_btn_1()`. -**IMPORTANT** +**IMPORTANT NOTE 1** Due to some the limitations of Arduino's build system you need to copy `lvgl/examples` to `lvgl/src/examples`. Similarly for the demos `lvgl/demos` to `lvgl/src/demos`. + +**IMPORTANT NOTE 2** +Note that the `lv_examples` library is for LVGL v7 and you shouldn't install it for this version (since LVGL v8) +as the examples and demos are now part of the main LVGL library. + ## Debugging and logging LVGL can display debug information in case of trouble. diff --git a/docs/get-started/platforms/index.md b/docs/get-started/platforms/index.md index 7ed6a01..7fba951 100644 --- a/docs/get-started/platforms/index.md +++ b/docs/get-started/platforms/index.md @@ -9,6 +9,7 @@ nxp stm32 espressif + renesas arduino tasmota-berry cmake diff --git a/docs/get-started/platforms/nxp.md b/docs/get-started/platforms/nxp.md index 9767fbf..48e25d2 100644 --- a/docs/get-started/platforms/nxp.md +++ b/docs/get-started/platforms/nxp.md @@ -1,6 +1,6 @@ # NXP -NXP has integrated LVGL into the MCUXpresso SDK packages for several of their general purpose and crossover -microcontrollers, allowing easy evaluation and migration into your product design. +NXP has integrated LVGL into the MCUXpresso SDK packages for general purpose and crossover microcontrollers, allowing +easy evaluation and migration into your product design. [Download an SDK for a supported board](https://www.nxp.com/design/software/embedded-software/littlevgl-open-source-graphics-library:LITTLEVGL-OPEN-SOURCE-GRAPHICS-LIBRARY?&tid=vanLITTLEVGL-OPEN-SOURCE-GRAPHICS-LIBRARY) today and get started with your next GUI application. @@ -10,42 +10,40 @@ with PXP/VGLite support if the modules are present), no additional integration w ## HW acceleration for NXP iMX RT platforms Depending on the RT platform used, the acceleration can be done by NXP PXP (PiXel Pipeline) and/or the Verisilicon GPU -through an API named VGLite. There is a single NXP draw context that covers both GPUs allowing to have enabled either -one or even both at the same time. While enableing both 2D accelerators, the VGLite can be used to accelerate widget -drawing while the PXP accelerated blit and fill operations. +through an API named VGLite. Each accelerator has its own context that allows them to be used individually as well +simultaneously (in LVGL multithreading mode). -Supported draw callbacks are available in "src/draw/nxp/lv_gpu_nxp.c": +### PXP accelerator +Several drawing features in LVGL can be offloaded to the PXP engine. The CPU is available for other operations while the +PXP is running. RTOS is required to block the LVGL drawing thread and switch to another task or suspend the CPU for +power savings. + +Supported draw callbacks are available in "src/draw/nxp/pxp/lv_draw_pxp.c": ```c - nxp_draw_ctx->base_draw.draw_arc = lv_draw_nxp_arc; - nxp_draw_ctx->base_draw.draw_rect = lv_draw_nxp_rect; - nxp_draw_ctx->base_draw.draw_img_decoded = lv_draw_nxp_img_decoded; - nxp_draw_ctx->blend = lv_draw_nxp_blend; + pxp_draw_ctx->base_draw.draw_img_decoded = lv_draw_pxp_img_decoded; + pxp_draw_ctx->blend = lv_draw_pxp_blend; + pxp_draw_ctx->base_draw.wait_for_finish = lv_draw_pxp_wait_for_finish; + pxp_draw_ctx->base_draw.buffer_copy = lv_draw_pxp_buffer_copy; ``` -If enabled both GPUs, the PXP is the preffered one to be used for drawing operation. A fallback mechanism is -implemented so that if the feature is not supported by PXP (or if PXP fails), the VGLite will take over to handle the -task. At the end, the CPU will assure that every widget drawing is fully covered (if not already done by GPU). - -### PXP accelerator -Several drawing features in LVGL can be offloaded to the PXP engine. The VGLite (if supported) and CPU are available for -other operations while the PXP is running. An RTOS is required to block the LVGL drawing thread and switch to another -task or suspend the CPU for power savings. - #### Features supported: + All operations can be used in conjunction with optional transparency. + - RGB565 and ARGB8888 color formats - - Area fill + optional transparency - - BLIT (BLock Image Transfer) + optional transparency - - Color keying + optional transparency - - Recoloring (color tint) + optional transparency - - Image Rotation (90, 180, 270 degree) + optional transparency - - Recoloring (color tint) + Image Rotation (90, 180, 270 degree) + optional transparency + - Area fill with color + - BLIT (BLock Image Transfer) - Screen Rotation (90, 180, 270 degree) + - Color keying + - Recoloring (color tint) + - Image Rotation (90, 180, 270 degree) + - Buffer copy - RTOS integration layer - Default FreeRTOS and bare metal code provided - - Combination of recolor and/or rotation + color key/alpha blend/transparency is supported but PXP needs two steps. - First step is to recolor/rotate the image to a temporarly buffer (please check LV_MEM_SIZE value for allocation limit) - and another step is required to handle color keying, alpha chanel or to apply transparency. + - Combination of recolor and/or rotation + color key/alpha blend/transparency is supported. + That is achieved by PXP in two steps: + - First step is to recolor/rotate the image to a temporary buffer (statically allocated) + - Second step is required to handle color keying, alpha channel or to apply transparency #### Known limitations: - Rotation is not supported for images unaligned to blocks of 16x16 pixels. @@ -78,51 +76,71 @@ and the final output image can look shifted. #### Project setup: - Add PXP related files to project: - - src/draw/nxp/pxp/lv_gpu_nxp_pxp.c, src/draw/nxp/pxp/lv_gpu_nxp_pxp.h: init, uninit, run/wait PXP device, log/trace - - src/draw/nxp/pxp/lv_draw_pxp_blend.c, src/draw/nxp/pxp/lv_draw_pxp_blend.h: fill and blit (w/o transformation) - - src/draw/nxp/pxp/lv_gpu_nxp_osa.c, src/draw/nxp/pxp/lv_gpu_osa.h: default implementation of OS-specific functions - (bare metal and FreeRTOS only) + - src/draw/nxp/pxp/lv_draw_pxp.c[.h]: draw context callbacks + - src/draw/nxp/pxp/lv_draw_pxp_blend.c[.h]: fill and blit (with optional transformation) + - src/draw/nxp/pxp/lv_gpu_nxp_pxp.c[.h]: init, uninit, run/wait PXP device + - src/draw/nxp/pxp/lv_gpu_nxp_pxp_osa.c[.h]: OS abstraction (FreeRTOS or bare metal) - optional, required only if `LV_USE_GPU_NXP_PXP_AUTO_INIT` is set to 1 - PXP related code depends on two drivers provided by MCU SDK. These drivers need to be added to project: - - fsl_pxp.c, fsl_pxp.h: PXP driver - - fsl_cache.c, fsl_cache.h: CPU cache handling functions + - fsl_pxp.c[.h]: PXP driver + - fsl_cache.c[.h]: CPU cache handling functions #### Logging: - - By default, LV_GPU_NXP_PXP_LOG_ERRORS is enabled so that any PXP error will be seen on LVGL output - - For tracing logs about the PXP limitations or size thresholds, the user can enable LV_GPU_NXP_PXP_LOG_TRACES + - By default, `LV_GPU_NXP_PXP_LOG_ERRORS` is enabled so that any PXP error will be seen on SDK debug console + - By default, `LV_GPU_NXP_PXP_LOG_TRACES` is disabled. Enable it for tracing logs (like PXP limitations) #### Advanced configuration: - Implementation depends on multiple OS-specific functions. The struct `lv_nxp_pxp_cfg_t` with callback pointers is - used as a parameter for the `lv_gpu_nxp_pxp_init()` function. Default implementation for FreeRTOS and baremetal is - provided in lv_gpu_nxp_osa.c + used as a parameter for the `lv_gpu_nxp_pxp_init()` function. Default implementation for FreeRTOS and bare metal is + provided in lv_gpu_nxp_pxp_osa.c - `pxp_interrupt_init()`: Initialize PXP interrupt (HW setup, OS setup) - `pxp_interrupt_deinit()`: Deinitialize PXP interrupt (HW setup, OS setup) - `pxp_run()`: Start PXP job. Use OS-specific mechanism to block drawing thread. PXP must finish drawing before leaving this function. - - There are configurable area thresholds which are used to decide whether the area will be processed by CPU or by PXP. - Areas smaller than a defined value will be processed by CPU and those bigger than the threshold will be processed by - PXP. These thresholds may be defined as preprocessor variables. Default values are defined in lv_draw_pxp_blend.h - - `LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT`: size threshold for image BLIT, BLIT with color keying, BLIT with recolor and - BLIT with rotation (OPA >= LV_OPA_MAX) - - `LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT`: size threshold for image BLIT, BLIT with color keying, BLIT with recolor - and BLIT with rotation and transparency (OPA < LV_OPA_MAX) - - `LV_GPU_NXP_PXP_FILL_SIZE_LIMIT`: size threshold for fill operation (OPA >= LV_OPA_MAX) - - `LV_GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT`: size threshold for fill operation with transparency (OPA < LV_OPA_MAX) + - Area threshold (size limit) is configurable and used to decide whether the area will be processed by PXP or not. + Areas smaller than the defined value will be processed by CPU and those bigger than the threshold will be processed by + PXP. The threshold is defined as a macro in lv_draw_pxp.c + - `LV_GPU_NXP_PXP_SIZE_LIMIT`: size threshold for fill/blit (with optional transformation) ### VGLite accelerator -Extra drawing features in LVGL can be handled by the VGLite engine. The PXP (if supported) and CPU are available for -other operations while the VGLite is running. An RTOS is required to block the LVGL drawing thread and switch to another -task or suspend the CPU for power savings. +Extra drawing features in LVGL can be handled by the VGLite engine. The CPU is available for other operations while the +VGLite is running. An RTOS is required to block the LVGL drawing thread and switch to another task or suspend the CPU +for power savings. + +Supported draw callbacks are available in "src/draw/nxp/vglite/lv_draw_vglite.c": +```c + vglite_draw_ctx->base_draw.init_buf = lv_draw_vglite_init_buf; + vglite_draw_ctx->base_draw.draw_line = lv_draw_vglite_line; + vglite_draw_ctx->base_draw.draw_arc = lv_draw_vglite_arc; + vglite_draw_ctx->base_draw.draw_rect = lv_draw_vglite_rect; + vglite_draw_ctx->base_draw.draw_img_decoded = lv_draw_vglite_img_decoded; + vglite_draw_ctx->blend = lv_draw_vglite_blend; + vglite_draw_ctx->base_draw.wait_for_finish = lv_draw_vglite_wait_for_finish; + vglite_draw_ctx->base_draw.buffer_copy = lv_draw_vglite_buffer_copy; +``` #### Features supported: + All operations can be used in conjunction with optional transparency. + - RGB565 and ARGB8888 color formats - - Area fill + optional transparency - - BLIT (BLock Image Transfer) + optional transparency - - Image Rotation (any degree with decimal) + optional transparency - - Image Scale + optional transparency - - Draw background rectangle with radius or gradient - - Draw arc - - RTOS integration layer + - Area fill with color + - BLIT (BLock Image Transfer) + - Image Rotation (any degree with decimal) + - Image Scale + - Draw rectangle background with optional radius or gradient + - Blit rectangle background image + - Draw rectangle border/outline with optional rounded corners + - Draw arc with optional rounded ending + - Draw line or dashed line with optional rounded ending + - Buffer copy + +#### Known limitations: + - Source image alignment: + The byte alignment requirement for a pixel depends on the specific pixel format. Both buffer address and buffer stride + must be aligned. As general rule, the alignment is set to 16 pixels. This makes the buffer address alignment to be + 32 bytes for RGB565 and 64 bytes for ARGB8888. + - For pixel engine (PE) destination, the alignment should be 64 bytes for all tiled (4x4) buffer layouts. + The pixel engine has no additional alignment requirement for linear buffer layouts (`VG_LITE_LINEAR`). #### Basic configuration: - Select NXP VGLite engine in lv_conf.h: Set `LV_USE_GPU_NXP_VG_LITE` to 1 @@ -130,8 +148,8 @@ task or suspend the CPU for power savings. #### Basic initialization: - Initialize VGLite before calling `lv_init()` by specifying the width/height of tessellation window. Value should be - a multiple of 16; minimum value is 16 pixels, maximum cannot be greater than frame width. If less than or equal to 0, - then no tessellation buffer is created, in which case the function is used for a blit init. + a multiple of 16; minimum value is 16 pixels, maximum cannot be greater than the frame width. If less than or equal + to 0, then no tessellation buffer is created, in which case VGLite is initialized only for blitting. ```c #if LV_USE_GPU_NXP_VG_LITE #include "vg_lite.h" @@ -144,25 +162,21 @@ task or suspend the CPU for power savings. #### Project setup: - Add VGLite related files to project: - - src/draw/nxp/vglite/lv_gpu_nxp_vglite.c, src/draw/nxp/vglite/lv_gpu_nxp_vglite.h: buffer init, log/trace - - src/draw/nxp/vglite/lv_draw_vglite_blend.c, src/draw/nxp/vglite/lv_draw_vglite_blend.h: fill and blit - (w/o transformation) - - src/draw/nxp/vglite/lv_draw_vglite_rect.c, src/draw/nxp/vglite/lv_draw_vglite_rect.h: rectangle draw - - src/draw/nxp/vglite/lv_draw_vglite_arc.c, src/draw/nxp/vglite/lv_draw_vglite_arc.h: arc draw + - src/draw/nxp/vglite/lv_draw_vglite.c[.h]: draw context callbacks + - src/draw/nxp/vglite/lv_draw_vglite_blend.c[.h]: fill and blit (with optional transformation) + - src/draw/nxp/vglite/lv_draw_vglite_rect.c[.h]: draw rectangle + - src/draw/nxp/vglite/lv_draw_vglite_arc.c[.h]: draw arc + - src/draw/nxp/vglite/lv_draw_vglite_line.c[.h]: draw line + - src/draw/nxp/vglite/lv_vglite_buf.c[.h]: init/get vglite buffer + - src/draw/nxp/vglite/lv_vglite_utils.c[.h]: function helpers #### Logging: - - By default, LV_GPU_NXP_VG_LITE_LOG_ERRORS is enabled so that any VGLite error will be seen on LVGL output - - For tracing logs about the VGLite limitations, size thresholds or stride alignment, the user can enable - LV_GPU_NXP_VG_LITE_LOG_TRACES + - By default, `LV_GPU_NXP_VG_LITE_LOG_ERRORS` is enabled so that any VGLite error will be seen on SDK debug console + - By default, `LV_GPU_NXP_VG_LITE_LOG_TRACES` is disabled. Enable it for tracing logs (like blit split workaround or + VGLite fallback to CPU due to any error on the driver) #### Advanced configuration: - - There are configurable area thresholds which are used to decide whether the area will be processed by CPU or by - VGLite. Areas smaller than a defined value will be processed by CPU and those bigger than the threshold will be - processed by VGLite. These thresholds may be defined as preprocessor variables. Default values are defined in - lv_draw_vglite_blend.h - - `LV_GPU_NXP_VG_LITE_BLIT_SIZE_LIMIT`: size threshold for image BLIT, BLIT with scale and BLIT with rotation - (OPA >= LV_OPA_MAX) - - `LV_GPU_NXP_VG_LITE_BLIT_OPA_SIZE_LIMIT`: size threshold for image BLIT, BLIT with scale and BLIT with rotation - and transparency (OPA < LV_OPA_MAX) - - `LV_GPU_NXP_VG_LITE_FILL_SIZE_LIMIT`: size threshold for fill operation (OPA >= LV_OPA_MAX) - - `LV_GPU_NXP_VG_LITE_FILL_OPA_SIZE_LIMIT`: size threshold for fill operation with transparency (OPA < LV_OPA_MAX) + - Area threshold (size limit) is configurable and used to decide whether the area will be processed by VGLite or not. + Areas smaller than the defined value will be processed by CPU and those bigger than the threshold will be processed by + VGLite. The threshold is defined as a macro in lv_draw_vglite.c + - `LV_GPU_NXP_VG_LITE_SIZE_LIMIT`: size threshold for fill/blit (with optional transformation) diff --git a/docs/get-started/platforms/pc-simulator.md b/docs/get-started/platforms/pc-simulator.md index 3bdc495..95c35ff 100644 --- a/docs/get-started/platforms/pc-simulator.md +++ b/docs/get-started/platforms/pc-simulator.md @@ -15,7 +15,7 @@ The simulator is ported to various IDEs (Integrated Development Environments). C - [Eclipse with SDL driver](https://github.com/lvgl/lv_sim_eclipse_sdl): Recommended on Linux and Mac - [CodeBlocks](https://github.com/lvgl/lv_sim_codeblocks_win): Recommended on Windows -- [VisualStudio with SDL driver](https://github.com/lvgl/lv_sim_visual_studio_sdl): For Windows +- [VisualStudio](https://github.com/lvgl/lv_sim_visual_studio_sdl): For Windows - [VSCode with SDL driver](https://github.com/lvgl/lv_sim_vscode_sdl): Recommended on Linux and Mac - [PlatformIO with SDL driver](https://github.com/lvgl/lv_platformio): Recommended on Linux and Mac - [MDK with FastModel](https://github.com/lvgl/lv_port_an547_cm55_sim): For Windows diff --git a/docs/get-started/platforms/renesas.md b/docs/get-started/platforms/renesas.md new file mode 100644 index 0000000..b33095f --- /dev/null +++ b/docs/get-started/platforms/renesas.md @@ -0,0 +1,129 @@ +# Renesas +The [HMI-Board](https://bit.ly/3I9nfUo) development board SDK now comes with LVGL integration for quick evaluation. Simply download the [SDK](https://github.com/RT-Thread-Studio/sdk-bsp-ra6m3-hmi-board/tree/main/projects/hmi-board-lvgl) for the supported motherboard and you’ll be on your way to creating your next GUI application in no time. For more information, check out the [Software design description](https://github.com/RT-Thread-Studio/sdk-bsp-ra6m3-hmi-board/blob/main/projects/hmi-board-lvgl/README.md). + +## Creating new project with LVGL +It is recommended to start your project by downloading the HMI-Board SDK example project. It comes fully equipped with LVGL and dave-2d support (if the modules are present), so you won’t need to do any additional integration work. + +## HW acceleration for Renesas RA6M3 platforms +For RA6M3 platforms, hardware acceleration can be achieved using the dave-2d GPU, depending on the platform used. Each accelerator has its own context, allowing them to be used individually or simultaneously in LVGL’s multithreading mode. + +### Dave-2d accelerator +LVGL can offload several drawing features to the dave-2d engine, freeing up the CPU for other operations while dave-2d runs. An RTOS is required to block the LVGL drawing thread and switch to another task or suspend the CPU for power savings. Supported draw callbacks can be found in “src/draw/renesas/lv_gpu_d2_ra6m3.c”. + +LVGL can offload several drawing features to the dave-2d engine, freeing up the CPU for other operations while dave-2d runs. An RTOS is required to block the LVGL drawing thread and switch to another task or suspend the CPU for power savings. Supported draw callbacks can be found in “src/draw/renesas/lv_gpu_d2_ra6m3.c”. + +```c + ra_2d_draw_ctx->blend = lv_draw_ra6m3_2d_blend; + ra_2d_draw_ctx->base_draw.draw_img_decoded = lv_port_gpu_img_decoded; + ra_2d_draw_ctx->base_draw.wait_for_finish = lv_port_gpu_wait; + ra_2d_draw_ctx->base_draw.draw_letter = lv_draw_gpu_letter; +``` + +### Features supported: + All operations can be used in conjunction with optional transparency. + + - RGB565 and ARGB8888 color formats + - Area fill with color + - BLIT (BLock Image Transfer) + - Color conversion + - Rotate and scale + - Alpha blending + - Bilinear filtering + - RTOS integration layer + - Default RT-Thread code provided + - Subpixel exact placement + +### Basic configuration: + - Select Renesas dave-2d engine in lv_conf.h: Set `LV_USE_GPU_RA6M3_G2D` to 1 + - Set referenced header file in lv_conf.h: `#define LV_GPU_RA6M3_G2D_INCLUDE "hal_data.h"` + +### RT-Thread Example: + +```c +#define COLOR_BUFFER (LV_HOR_RES_MAX * LV_VER_RES_MAX) + +static lv_disp_drv_t disp_drv; + +/*A static or global variable to store the buffers*/ +static lv_color_t buf_1[COLOR_BUFFER]; +``` + +- After initializing your peripherals (such as SPI, GPIOs, and LCD) in the `lv_port_disp_init()` function, you can initialize LVGL using [`lv_init()`.](https://docs.lvgl.io/master/API/core/lv_obj.html#_CPPv47lv_initv) Next, register the frame buffers using `lv_disp_draw_buf_init()` and create a new display driver using `lv_disp_drv_init()`. + +```c +/*Initialize `disp_buf` with the buffer(s). With only one buffer use NULL instead buf_2 */ +lv_disp_draw_buf_init(&disp_buf, buf_1, RT_NULL, COLOR_BUFFER); +lv_disp_drv_init(&disp_drv); /*Basic initialization*/ + +/*Set the resolution of the display*/ +disp_drv.hor_res = LV_HOR_RES_MAX; +disp_drv.ver_res = LV_VER_RES_MAX; + +/*Set a display buffer*/ +disp_drv.draw_buf = &disp_buf; + +/*Used to copy the buffer's content to the display*/ +disp_drv.flush_cb = disp_flush; + +/* Initialize GPU module */ +lv_port_gpu_hw_init(); + +/*Finally register the driver*/ +lv_disp_drv_register(&disp_drv); +``` + +* To run LVGL, you’ll need to create a thread. You can find examples of how to do this using RT-Thread in the `env_support/rt-thread/lv_rt_thread_port.c` file. + +```c +static void lvgl_thread_entry(void *parameter) +{ +#if LV_USE_LOG + lv_log_register_print_cb(lv_rt_log); +#endif /* LV_USE_LOG */ + lv_init(); + lv_port_disp_init(); + lv_port_indev_init(); + lv_user_gui_init(); + + /* handle the tasks of LVGL */ + while(1) + { + lv_task_handler(); + rt_thread_mdelay(LV_DISP_DEF_REFR_PERIOD); + } +} + +static int lvgl_thread_init(void) +{ + rt_err_t err; + + /* create lvgl thread */ + err = rt_thread_init(&lvgl_thread, "LVGL", lvgl_thread_entry, RT_NULL, + &lvgl_thread_stack[0], sizeof(lvgl_thread_stack), PKG_LVGL_THREAD_PRIO, 10); + if(err != RT_EOK) + { + LOG_E("Failed to create LVGL thread"); + return -1; + } + rt_thread_startup(&lvgl_thread); + + return 0; +} +INIT_ENV_EXPORT(lvgl_thread_init); +``` + +- The last step is to create a function to output the frame buffer to your LCD. The specifics of this function will depend on the features of your MCU. Here’s an example for a typical MCU interface: `my_flush_cb`. + +```c +static void my_flush_cb(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p) +{ +#ifdef PKG_USING_ILI9341 + lcd_fill_array_spi(area->x1, area->y1, area->x2, area->y2, color_p); +#elif LV_USE_GPU_RA6M3_G2D + lv_port_gpu_blit(area->x1, area->y1, color_p, area); +#else + ...... +#endif + lv_disp_flush_ready(disp_drv); +} +``` diff --git a/docs/intro/index.md b/docs/intro/index.md index 0d20b28..62508d1 100644 --- a/docs/intro/index.md +++ b/docs/intro/index.md @@ -132,7 +132,7 @@ LVGL needs just one simple driver function to copy an array of pixels into a giv If you can do this with your display then you can use it with LVGL. Some examples of the supported display types: -- TFTs with 16 or 24 bit color depth +- TFTs with 16 or 32 bit color depth - Monitors with an HDMI port - Small monochrome displays - Gray-scale displays diff --git a/docs/libs/fsdrv.md b/docs/libs/fsdrv.md index 7b9015a..8f828d9 100644 --- a/docs/libs/fsdrv.md +++ b/docs/libs/fsdrv.md @@ -2,14 +2,38 @@ # File System Interfaces LVGL has a [File system](https://docs.lvgl.io/master/overview/file-system.html) module to provide an abstraction layer for various file system drivers. +You still need to provide the drivers and libraries, this extension provides only the bridge between FATFS, LittleFS, STDIO, POSIX, WIN32 and LVGL. -LVG has built in support for: -- [FATFS](http://elm-chan.org/fsw/ff/00index_e.html) -- STDIO (Linux and Windows using C standard function .e.g fopen, fread) -- POSIX (Linux and Windows using POSIX function .e.g open, read) -- WIN32 (Windows using Win32 API function .e.g CreateFileA, ReadFile) +## Built in wrappers -You still need to provide the drivers and libraries, this extension provides only the bridge between FATFS, STDIO, POSIX, WIN32 and LVGL. +### FATFS + +Bridge for [FatFS](http://elm-chan.org/fsw/ff/00index_e.html). FatFS itself is not part of LVGL, but can be added and initialized externally. + + +### LittleFS + +Though `lv_fs_littlefs` uses [LittleFS]((https://github.com/littlefs-project/littlefs)) API, the LittleFS library needs other external libraries that handle the mounting of partitions and low-level accesses, according to the given architecture. The functions for the latter are given to the lfs_t structure as pointers by an external low-level library. + +There's a convenience function called `lv_fs_littlefs_set_driver(LV_FS_LITTLEFS_LETTER, my_lfs)`, specific to `lv_fs_littlefs`, to attach a `lfs_t` object's pointer to a registered driver-letter. See its comments for more info. + + +[esp_littlefs](https://components.espressif.com/components/joltwallet/littlefs) is a wrapper for LittleFS to be used in Espressif ESP-devices. It handles the mounting and has the low-level `littlefs_api` functions to read/write/erase blocks that LittleFS library needs. On mounting by `esp_littlefs` the `lfs_t` structures are created. You need to get a handle to these to use ESP with `lv_fs_littlefs`, as all functions use that `lfs_t` in LittleFS to identify the mounted partition. + + +In case you don't find a special function in the `lv_fs_littlefs` wrapper, you can look for it in the `esp_littlefs` API and use it directly, as `lv_fs_littlefs` and the `esp_littlefs` APIs can be used side-by-side. + +### STDIO + +Bride to C standard functions on Linux and Windows. For example `fopen`, `fread`, etc. + +### POSIX + +Bride to POSIX functions on Linux and Windows. For example `open`, `read`, etc. + +### WIN32 + +Bride to Win32 API function. For example `CreateFileA`, `ReadFile`, etc. ## Usage diff --git a/docs/libs/index.md b/docs/libs/index.md index 8217e91..f0eb900 100644 --- a/docs/libs/index.md +++ b/docs/libs/index.md @@ -12,6 +12,7 @@ png gif freetype + tiny_ttf qrcode rlottie ffmpeg diff --git a/docs/libs/tiny_ttf.md b/docs/libs/tiny_ttf.md new file mode 100644 index 0000000..fd795ae --- /dev/null +++ b/docs/libs/tiny_ttf.md @@ -0,0 +1,35 @@ +# Tiny TTF font engine + +## Usage + +Use https://github.com/nothings/stb to render TrueType fonts in LVGL. + +When enabled in `lv_conf.h` with `LV_USE_TINY_TTF` +`lv_tiny_ttf_create_data(data, data_size, font_size)` can be used to +create a TTF font instance at the specified font size. You can then +use that font anywhere `lv_font_t` is accepted. + +By default, the TTF or OTF file must be embedded as an array, either in +a header, or loaded into RAM in order to function. + +However, if `LV_TINY_TTF_FILE_SUPPORT` is enabled, +`lv_tiny_ttf_create_file(path, font_size)` will also be available, +allowing tiny_ttf to stream from a file. The file must remain open the +entire time the font is being used, and streaming on demand may be +considerably slower. + +After a font is created, you can change the font size in pixels by using +`lv_tiny_ttf_set_size(font, font_size)`. + +By default, a font will use up to 4KB of cache to speed up rendering +glyphs. This maximum can be changed by using +`lv_tiny_ttf_create_data_ex(data, data_size, font_size, cache_size)` +or `lv_tiny_ttf_create_file_ex(path, font_size, cache_size)` (when +available). The cache size is indicated in bytes. + +## API + +```eval_rst +.. doxygenfile:: lv_tiny_ttf.h + :project: lvgl +``` diff --git a/docs/overview/display.md b/docs/overview/display.md index 66f8462..4626a56 100644 --- a/docs/overview/display.md +++ b/docs/overview/display.md @@ -63,12 +63,11 @@ See the [Display background](#display-background) section for more details. If t This configuration (transparent screen and display) could be used to create for example OSD menus where a video is played on a lower layer, and a menu is overlayed on an upper layer. To handle transparent displays, special (slower) color mixing algorithms need to be used by LVGL so this feature needs to enabled with `LV_COLOR_SCREEN_TRANSP` in `lv_conf.h`. -As this mode operates on the Alpha channel of the pixels `LV_COLOR_DEPTH = 32` is also required. The Alpha channel of 32-bit colors will be 0 where there are no objects and 255 where there are solid objects. +The Alpha channel of 32-bit colors will be 0 where there are no objects and 255 where there are solid objects. In summary, to enable transparent screens and displays for OSD menu-like UIs: - Enable `LV_COLOR_SCREEN_TRANSP` in `lv_conf.h` -- Be sure to use `LV_COLOR_DEPTH 32` -- Set the screen's opacity to `LV_OPA_TRANSP` e.g. with `lv_obj_set_style_local_bg_opa(lv_scr_act(), LV_OBJMASK_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP)` +- Set the screen's opacity to `LV_OPA_TRANSP` e.g. with `lv_obj_set_style_bg_opa(lv_scr_act(), LV_OPA_TRANSP, LV_PART_MAIN)` - Set the display opacity to `LV_OPA_TRANSP` with `lv_disp_set_bg_opa(NULL, LV_OPA_TRANSP);` ## Features of displays diff --git a/docs/overview/layer.md b/docs/overview/layer.md index 8cb4645..dd4301b 100644 --- a/docs/overview/layer.md +++ b/docs/overview/layer.md @@ -34,11 +34,11 @@ lv_label_set_text(label2, "Button 2"); /*Set the text of the label*/ lv_obj_del(label2); ``` -## Bring to the foreground +## Change order There are four explicit ways to bring an object to the foreground: - Use `lv_obj_move_foreground(obj)` to bring an object to the foreground. Similarly, use `lv_obj_move_background(obj)` to move it to the background. -- Use `lv_obj_move_up(obj)` to move an object one position up in the hierarchy, Similarly, use `lv_obj_move_down(obj)` to move an object one position down in the hierarchy. +- Use `lv_obj_move_to_index(obj, idx)` to move an object to a given index in the order of children. (0: backgroud, child_num - 1: foreground, <0: count from the top, to move forward (up): `lv_obj_move_to_index(obj, lv_obj_get_index(obj) - 1)`) - Use `lv_obj_swap(obj1, obj2)` to swap the relative layer position of two objects. - When `lv_obj_set_parent(obj, new_parent)` is used, `obj` will be on the foreground of the `new_parent`. diff --git a/docs/overview/object.md b/docs/overview/object.md index a2849dc..d019c35 100644 --- a/docs/overview/object.md +++ b/docs/overview/object.md @@ -173,7 +173,7 @@ All inputs are disabled during the screen animation. Screens are created on the currently selected *default display*. The *default display* is the last registered display with `lv_disp_drv_register`. You can also explicitly select a new default display using `lv_disp_set_default(disp)`. -`lv_scr_act()`, `lv_scr_load()` and `lv_scr_load_anim()` operate on the default screen. +`lv_scr_act()`, `lv_scr_load()` and `lv_scr_load_anim()` operate on the default display. Visit [Multi-display support](/overview/display) to learn more. diff --git a/docs/overview/renderers/arm-2d.md b/docs/overview/renderers/arm-2d.md index d655477..85a4dbc 100644 --- a/docs/overview/renderers/arm-2d.md +++ b/docs/overview/renderers/arm-2d.md @@ -1,4 +1,32 @@ -# ARM-2D GPU +# Arm-2D GPU -TODO +Arm-2D is not a GPU but **an abstraction layer for 2D GPUs dedicated to Microcontrollers**. It supports all Cortex-M processors ranging from Cortex-M0 to the latest Cortex-M85. +Arm-2D is an open-source project on Github. For more, please refer to: https://github.com/ARM-software/Arm-2D. + + + +## How to Use + +In general, you can set the macro `LV_USE_GPU_ARM2D` to `1`in `lv_conf.h` to enable Arm-2D acceleration for LVGL. + +If you are using **[CMSIS-Pack](https://github.com/lvgl/lvgl/tree/master/env_support/cmsis-pack)** to deploy the LVGL. You don't have to define the macro `LV_USE_GPU_ARM2D` manually, instead, please select the component `GPU Arm-2D` in the **RTE** dialog. This step will define the macro for us. + + + +## Design Considerations + +As mentioned before, Arm-2D is an abstraction layer for 2D GPU; hence if there is no accelerator or dedicated instruction set (such as Helium or ACI) available for Arm-2D, it provides negligible performance boost for LVGL (sometimes worse) for regular Cortex-M processors. + +**We highly recommend you enable Arm-2D acceleration for LVGL** when: + +- The target processors are **Cortex-M55** and/or **Cortex-M85** +- The target processors support **[Helium](https://developer.arm.com/documentation/102102/0103/?lang=en)**. +- The device vendor provides an arm-2d compliant driver for their propriotory 2D accelerators and/or customized instruction set. +- The target device contains [DMA-350](https://community.arm.com/arm-community-blogs/b/internet-of-things-blog/posts/arm-corelink-dma-350-next-generation-direct-memory-access-for-endpoint-ai) + + + +## Examples + +- [A Cortex-M55 (supports Helium) based MDK Project, PC emulation is available.](https://github.com/lvgl/lv_port_an547_cm55_sim) diff --git a/docs/overview/style-props.md b/docs/overview/style-props.md index 74a0cd5..ab08df9 100644 --- a/docs/overview/style-props.md +++ b/docs/overview/style-props.md @@ -355,7 +355,7 @@ Set the opacity of the border. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means full ### border_width -Set hte width of the border. Only pixel values can be used. +Set the width of the border. Only pixel values can be used. +### opa_layered +First draw the object on the layer, then scale down layer opacity factor. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values or LV_OPA_10, LV_OPA_20, etc means semi transparency. + + ### color_filter_dsc Mix a color to all colors of the object. ### layout -Set the layout if the object. The children will be repositioned and resized according to the policies set for the layout. For the possible values see the documentation of the layouts. +Set the layout of the object. The children will be repositioned and resized according to the policies set for the layout. For the possible values see the documentation of the layouts.