lvgl/docs/ROADMAP.md
2023-03-10 21:34:31 +01:00

6.8 KiB

Roadmap

Planned for v9

Naming and API

  • lv_style_set_size() should have separate width and height parameters
  • lv_img_set_src() use "type-aware" parameter. See here
  • 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`
  • Reconsider the use of has, is, enable "action" keywords
  • Update canvas API (https://github.com/lvgl/lvgl/issues/3393)
  • 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_CUSTO_... and let the user implement lv_... functions somewhere (instead of defining the name of the custom functions)

Architecture

  • Consider merging lv_disp_t, lv_disp_t, lv_disp_draw_buf_t, lv_draw_ctx_t, and structs from the new driver API (or only some of them)
  • Better way to reset global variables in lv_deinit() #3385
  • 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 whic is independent of the drawing engine.
  • get_glyph_bitmap should return an a8 bitmap that can be blended immediately.
  • Reconsider how themes should work. See here.
  • Make LVGL render independent areas in parallel.
  • Introduce a pipeline in renderer to support multi-GPUs/Accelerators, such as 2D-capable-DMAs, 2D GPUs, dedicated processor cores for 2D tasks etc.
  • More conscious <std*.h> wrapper API
  • 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.
  • 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 typesetting.
  • Generic lv_date_t and lv_time_t?
  • More color formats: 24 bit, ARGB1555, ARGB4444 etc
  • Unified caching #3116 #3415
  • Make layouts with an lv_layout_dsc_t instead of registering an ID+callback. See here
  • Condider using lv_color32_t on APIs to support e.g. alpha gradient.

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

  • 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
  • Universal scale widget/support (see here and #4043)
  • Improve lv_label_align_t #1656
  • Disabled widgets should absorb indev actions without sending events. #3860

Drawing and rendering

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

Animations

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

  • Plaform independent bechmarking # 3443
  • Run static analyzer
  • Release script
  • Unit test for all widgets #2337
  • CI test for flash/RAM usage #3127

Architecture

Styles

  • Hover
  • Global states in selectors. E.g. LV_STATE_PRESSED | SMALL_SCREEN like media quarry in CSS

Drawing and rendering

  • 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
  • gradient with alpha

Widgets

  • lv_bar, lv_arc: handle max < min for fill direction swapping #4039

Others

  • 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
  • Variable binding. I.e create properties which can be bound to objects and those obejcts are notified on value change. Maybe based on lv_msg?
  • Consider stagger animations.

Ideas

  • 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)
  • lv_mem_alloc_aligned(size, align)
  • 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
  • SVG support: integrate an SVG render library
  • 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