Roadmap

Planned for v9

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 lv_coord_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 too. 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 objects and those objects 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

  • 🔲 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

  • 🔲 Make style_bg_img support 9patch images

  • ☑️ 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

  • 🔲 lv_label reconsider label long modes. (support min/max-width/height too) #3420

  • 🔲 lv_roller make it more flexible #4009 (see here and #4043)

  • ☑️ Disabled widgets should absorb indev actions without sending events. #3860

Drawing and rendering

  • 🔲 Automatically recalculate the layout if a coordinate is get with lv_obj_get_width/height/x/y/etc

Animations

  • 🔲 Use anim events to replace many callbacks with one

  • 🔲 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)

  • 🔲 C++ binding

  • 🔲 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

  • 🔲 Innter 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

Others

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 too) 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