Roadmap
v9
Schedule
December 4: Feature stop, start updating the docs and testing
December 18: Release candidate version and call to test
January 15: Release v9.0
Naming and API
☑️ lv_style_set_size() should have separate width and height parameters
☑️ Reconsider image color formats.
☑️ More consistent names:remove/clear/delete/del, offset/ofs, add/create/register, id/idx/index, middle/mid/center, img/image, txt/text, opa/opacity/alpha, scr/screen, disp, display, finished/complete/completed/ready, buf/buffer, ..._cb, angle/rotation, zoom/scale, has, is, enable
☑️ Update canvas API LINK
☑️ LV_STYLE_PROP_INHERIT -> LV_STYLE_PROP_FLAG_INHERITABLE LINK
☑️ Replace disp_drv->direct_mode/full_refresh with enum.
☑️ Consider flat directory structure. E.g. extra/widgets to widgets
☑️ Use uint32_t and int32_t in APIs where possible. Consider hardcoding int32_t as int32_t.
☑️ To define a new stdlib API use defines LV_USE_CUSTOM_... and let the user implement lv_... functions somewhere (instead of defining the name of the custom functions) (see here)
☑️ Gradient with alpha
Architecture
☑️ Consider merging lv_disp_drv_t, lv_disp_t, lv_disp_draw_buf_t, lv_draw_ctx_t struct's from the new driver API (or only some of them)
☑️ New driver architecture #2720
☑️ draw_ctx->buffer_convert? (see here) Also remove 16 SWAPPED color format? (see here)
☑️ Reconsider masks. There should be a generic high level mask API which is independent of the drawing engine. #4059
☑️ get_glyph_bitmap should return an a8 bitmap that can be blended immediately. (see here)
☑️ Make LVGL render independent areas in parallel. #4016
☑️ Drop lv_mem_buf_get as tlsf should be fast enough for normal allocations as well. Fragmentation is also lower if processes can completely clean up after themselves.
☑️ More color formats: 24 bit, ARGB1555, ARGB4444 etc (see here)
☑️ Unified caching #3116 #3415
☑️ Variable binding. I.e create properties which can be bound to Widgets and those Widgets are notified on value change. Maybe based on lv_msg?
🔲 Add GPU abstraction for display rotation
☑️ Replace the read_line_cb of the image decoders with get_area_cb
☑️ Limit the image caching size in bytes instead of image count
☑️ lv_draw_buf for unified stride, buffer and cache invalidation management. 4241
☑️ Add vector graphics support via ThorVG
☑️ SVG support: integrate an SVG render library 4388
☑️ Introduce optional
float
support. 4648☑️ Introduce support layer for 3D GPUs (OpenGL, SDL, Vulkan, etc). 4622
Styles
☑️ non-uniform scale of images: scale width and height differently
☑️ Scroll anim settings should come from styles to allow customization
Widgets
☑️ Universal scale widget/support
☑️ lv_img: Reconsider image sizing models (when the image size is not content): center, top-left, zoom, tile, other?
☑️ lv_tabview Replace button matrix with real buttons for more flexibility (see here and #4043)
☑️ Disabled widgets should absorb indev actions without sending events. #3860
Animations
☑️ lv_anim_time_to_speed should work differently to remove style_anim_speed. E.g. on large values of anim time store the speed. Besides all widgets should use the style_anim property. anim should clamp the time if it's calculated from speed, e.g lv_clamp(200, t, 2000). (maybe a->min_time/max_time).
🔲 Use dedicated lv_anim_custom_exec_cb_t. See here.
Planned in general
CI
🔲 Platform independent benchmarking #3443
🔲 Run static analyzer
🔲 Release script
🔲 Unit test for all widgets #2337
🔲 CI test for flash/RAM usage #3127
Architecture
🔲 Add more feature to key presses (long press, release, etc).
🔲 lv_image_set_src() use “type-aware” parameter and rework image decoders. (see here)
🔲 Markup language #2428
Styles
🔲 Hover
🔲 Global states in selectors. E.g. LV_STATE_PRESSED | SMALL_SCREEN like media quarry in CSS
Drawing and rendering
🔲 SW: Line drawing with image rotation
🔲 SW: Arc drawing from small squares (16x16?) to detect transparent or solid parts
🔲 SW: Rounded rectangle drawing from small squares (16x16?) to detect transparent or solid parts
🔲 Different radius on each corner #2800
🔲 Gradient to border/outline/shadow
🔲 Multiple shadow/border
🔲 Perspective
🔲 Text shadow
🔲 Inner shadow
🔲 ARGB image stroke/grow on the alpha map
🔲 Real time blur
Widgets
🔲 lv_bar, lv_arc: handle max < min for fill direction swapping #4039
🔲 lv_bar, lv_slider, lv_arc: make possible to move the knob only inside the background (see here)
🔲 Improve lv_label_align_t #1656
🔲 lv_label reconsider label long modes. (support min/max-width/height as well) #3420
🔲 lv_roller make it more flexible #4009
Others
🔲 em, ch, vw/vh units
🔲 aspect-ratio as size
🔲 More grid features. E.g. repeat(auto-fill, minmax( px, 1fr))
🔲 Named grid cells to allow updating layouts without touching the children (like CSS grid-template-areas)
🔲 Scene support. See this comment
🔲 Circle layout. #2871
🔲 Consider stagger animations.
🔲 Add custom indev type. See here.
🔲 Automatically recalculate the layout if a coordinate is obtained using lv_obj_get_width/height/x/y/etc
Ideas
Reconsider how themes should work.
Better way to reset global variables in lv_deinit() #3385
lv_array: replace linked lists with array where possible (arrays are faster and uses less memory)
Reconsider how to handle UTF-8 characters (allow different encoding as well) and Bidi. Maybe create an abstraction for textshaping.
Consider direct binary font format support
Improve groups. Discussion. Reconsider focusing logic. Allow having no widget selected (on web it's possible). Keep editing state in lv_obj_t (see here). Support slider left knob focusing (see here)
Speed up font decompression
Support larger images: add support for large image #1892
Functional programming support, pure view? (see here)
Style components. (see this comment
Support dot_begin and dot_middle long modes for labels
Allow matrix input for image transformation?
Radial/skew/conic gradient
Somehow let children inherit the parent's state
Text on path