Skip to content

Releases: lvgl/lvgl

[v7.0.1] Bugfixes

29 Jun 11:44
Compare
Choose a tag to compare

Bugfixes

  • Make the Microptyhon working by adding the required variables as GC_ROOT
  • Prefix some internal API functions with _ to reduce the API of LVGL
  • Fix built-in SimSun CJK font
  • Fix UTF-8 encoding when LV_USE_ARABIC_PERSIAN_CHARS is enabled
  • Fix DMA2D usage when 32 bit images directly blended
  • Fix lv_roller in infinite mode when used with encoder
  • Add lv_theme_get_color_secondary()
  • Add LV_COLOR_MIX_ROUND_OFS to adjust color mixing to make it compatible with the GPU
  • Improve DMA2D blending
  • Remove memcpy from lv_ll (caused issues with some optimization settings)
  • lv_chart fix X tick drawing
  • Fix vertical dashed line drawing
  • Some additonal minor fixes and formattings

v7.0.0 is released

19 May 08:58
e6f89ad
Compare
Choose a tag to compare

Documentation

The docs for v7 is available at https://docs.lvgl.io/v7/en/html/index.html

Legal changes

The name of the project is changed to LVGL and the new website is on https://lvgl.io

LVGL remains free under the same conditions (MIT license) and a company is created to manage LVGL and offer services.

New drawing system

Complete rework of LVGL's draw engine to use "masks" for more advanced and higher quality graphical effects.
A possible use-case of this system is to remove the overflowing content from the rounded edges.
It also allows drawing perfectly anti-aliased circles, lines, and arcs.
Internally, the drawings happen by defining masks (such as rounded rectangle, line, angle).
When something is drawn the currently active masks can make some pixels transparent.
For example, rectangle borders are drawn by using 2 rectangle masks: one mask removes the inner part and another the outer part.

The API in this regard remained the same but some new functions were added:

  • lv_img_set_zoom: set image object's zoom factor
  • lv_img_set_angle: set image object's angle without using canvas
  • lv_img_set_pivot: set the pivot point of rotation

The new drawing engine brought new drawing features too. They are highlighted in the "style" section.

New style system

The old style system is replaced with a new more flexible and lightweighted one.
It uses an approach similar to CSS: support cascading styles, inheriting properties and local style properties per object.
As part of these updates, a lot of objects were reworked and the APIs have been changed.

  • more shadows options: offset and spread
  • gradient stop position to shift the gradient area and horizontal gradient
  • LV_BLEND_MODE_NORMAL/ADDITIVE/SUBTRACTIVE blending modes
  • clip corner: crop the content on the rounded corners
  • text underline and strikethrough
  • dashed vertical and horizontal lines (dash gap, dash_width)
  • outline: a border-like part drawn out of the background. Can have spacing to the background.
  • pattern: display and image in the middle of the background or repeat it
  • value display a text which is stored in the style. It can be used e.g. as a lightweighted text on buttons too.
  • margin: similar to padding but used to keep space outside of the object

Read the Style section of the documentation to learn how the new styles system works.

GPU integration

To better utilize GPUs, from this version GPU usage can be integrated into LVGL. In lv_conf.h any supported GPUs can be enabled with a single configuration option.

Right now, only ST's DMA2D (Chrom-ART) is integrated. More will in the upcoming releases.

Renames

The following object types are renamed:

  • sw -> switch
  • ta -> textarea
  • cb -> checkbox
  • lmeter -> linemeter
  • mbox -> msgbox
  • ddlist -> dropdown
  • btnm -> btnmatrix
  • kb -> keyboard
  • preload -> spinner
  • lv_objx folder -> lv_widgets
  • LV_FIT_FILL -> LV_FIT_PARENT
  • LV_FIT_FLOOD -> LV_FLOOD_MAX
  • LV_LAYOUT_COL_L/M/R -> LV_LAYOUT_COLUMN_LEFT/MID/RIGHT
  • LV_LAYOUT_ROW_T/M/B -> LV_LAYOUT_ROW_TOP/MID/BOTTOM

Reworked and improved object

  • dropdown: Completely reworked. Now creates a separate list when opened and can be dropped to down/up/left/right.
  • label: body_draw is removed, instead, if its style has a visible background/border/shadow etc it will be drawn. Padding really makes the object larger (not just virtually as before)
  • arc: can draw bacground too.
  • btn: doesn't store styles for each state because it's done naturally in the new style system.
  • calendar: highlight the pressed datum. The used styles are changed: use LV_CALENDAR_PART_DATE normal for normal dates, checked for highlighted, focused for today, pressed for the being pressed. (checked+pressed, focused+pressed also work)
  • chart: only has LINE and COLUMN types because with new styles all the others can be described. LV_CHART_PART_SERIES sets the style of the series. bg_opa > 0 draws an area in LINE mode. LV_CHART_PART_SERIES_BG also added to set a different style for the series area. Padding in LV_CHART_PART_BG makes the series area smaller, and it ensures space for axis labels/numbers.
  • linemeter, gauge: can have background if the related style properties are set. Padding makes the scale/lines smaller. scale_border_width and scale_end_border_width allow to draw an arc on the outer part of the scale lines.
  • gauge: lv_gauge_set_needle_img allows use image as needle
  • canvas: allow drawing to true color alpha and alpha only canvas, add lv_canvas_blur_hor/ver and rename lv_canvas_rotate to lv_canvas_transform
  • textarea: If available in the font use bullet (U+2022) character in text area password

New object types

  • lv_objmask: masks can be added to it. The children will be masked accordingly.

Others

  • Change the built-in fonts to Montserrat and add built-in fonts from 12 px to 48 px for every 2nd size.
  • Add example CJK and Arabic/Persian/Hebrew built-in font
  • Add ° and "bullet" to the built-in fonts
  • Add Arabic/Persian script support: change the character according to its position in the text.
  • Add playback_time to animations.
  • Add repeat_count to animations instead of the current "repeat forever".
  • Replace LV_LAYOUT_PRETTY with LV_LAYOUT_PRETTY_TOP/MID/BOTTOM

Demos

  • lv_examples was reworked and new examples and demos were added

New release policy

  • Maintain this Changelog for every release
  • Save old major version in new branches. E.g. release/v6
  • Merge new features and fixes directly into master and release a patch or minor releases every 2 weeks.

Migrating from v6 to v7

  • First and foremost, create a new lv_conf.h based on lv_conf_templ.h.
  • To try the new version it suggested using a simulator project and see the examples.
  • If you have a running project, the most difficult part of the migration is updating to the new style system. Unfortunately, there is no better way than manually updating to the new format.
  • The other parts are mainly minor renames and refactoring as described above.

[v6.1.2] Bugfixes

26 Feb 22:36
Compare
Choose a tag to compare
Release v6.1.2

[v6.1.1] Hotfixes for v6.1

06 Dec 13:11
Compare
Choose a tag to compare

Fix warnings and minor issues.

[v6.1] New font and text feature and many more

25 Nov 13:48
bd049d1
Compare
Choose a tag to compare

Compatibility

It's a minor release so it's compatible with v6.0. You can simply replace the lvgl folder with the new version.

You should update your lv_conf.h from lv_conf_templ.h to see the new config options.

Main new features

Bidirections support

Add support to Right-to-Left and mixed writing directions. Learn more here.

Subpixel rendering

Make font rendering on lower resolution displays smoother. Learn more here

Font compression

Store the bitmaps of the fonts in a compressed way. Learn more here.

Higher quality fonts

The algorithm of the font converter is updated to produce better quality fonts.

New symbols

The following symbols are added to the built fonts:
See all the symbols here.

Asserts in API functions

Add sanity check to the API functions. They can be configured in lv_conf.h. You can use a different configuration for development and for production.

Color picker object

A color picker object type is added.
See it here.

Other updates

  • Horizontal list: #1138 (implemented in #1140)
  • Add lv_slider_set_sym
  • Add lv_lmeter_set_angle #1262
  • Add lv_printf and lv_label_set_text_fmt for efficiently putting formatted text on labels

Credits

[v6.0.2] More bugfixes

06 Aug 13:35
d4a22cb
Compare
Choose a tag to compare

This release adds a few more bugfixes, plus another tag for PlatformIO.

[v6.0.1] Bugfixes

01 Aug 12:55
Compare
Choose a tag to compare

Various bugfixes after v6.0

[v6.0] General events, better fonts, multi-display support, image rotation and more

30 Jun 04:43
Compare
Choose a tag to compare

Improvements

General events

In v5.3 you could add actions to only a few object types (like a button). In v6.0 you can do it for an object type using Events.

Use lv_obj_set_event_cb(obj, event_handler) to set an event callback for an object.
In event_handler you will get the caller object and the event like LV_EVENT_CLICKED/PRESSED/VALUE_CHANGED etc.

Learn more here.

Better fonts

A new font converter is created which supports kerning and some other features. It is written in Node.JS so it should be easy to use offline.

You can choose more fonts and ranges to include them in the final font file.

The new Online font converter: https://littlevgl.com/ttf-font-to-c-array
The source code of the Font converter: https://github.com/littlevgl/lv_font_conv

Multi-display support

In v6.0 you can have multiple displays each with its own drivers and objects.

To learn more about multi-display support visit https://docs.littlevgl.com/en/html/overview/display.html

MicroPython

A lot of improvements happened to smoothly support MicroPython.
Click here to learn more about it MicroPython with LittlevGL

New forum

Not really a LittlevGL feature but it happens along with v6.0. We have launched a new, more modern forum: https://forum.littlevgl.com/

You can easily log in with your GitHub or Google account.

The old forum will be moved to http://forumold.littlevgl.com

Migrating from v5.3 to v6.0

v6.0 is not fully compatible with v5.3 because some API and even conceptual changes have happened:

The most important things

Actions vs Events

  • lv_obj_set_event_cb(obj, callback) is used instead of lv_btn_set_action(btn, LV_BTN_ACTION_..., callback). Event callbacks are used to handle all the former actions (i.e. long pressed, released are handled by a single function).
  • Objects now automatically detect if they've been deleted, no need for returning LV_RES_OK/LV_RES_INV in your lv_event_cb_t. For this reason, lv_event_cb_t functions return void.

Driver level

  • Driver function signatures now take an initial first parameter, the driver objects itself. This allows your driver functions to work with more than one physical device without requiring two separate drivers to be written.
  • (i.e. indev callbacks now take an initial first parameter of lv_indev_t *)
  • disp_flush is now flush_cb. Instead of directly taking x/y coordinates, it takes in an lv_area_t which has x1, y1, x2, y2 fields
  • The mem_fill (called gpu_fill_cb in v6.0) fills an area instead of a line
  • Dynamically changeable display config. Instead of hardcoded in lv_conf.h.
  • Need to explicitly initialize your display buffer and add it to your display driver. It replaces the VDB in v5.3. so there is no LV_VDB_SIZE in v6.0 but you should use this display buffers.
  • LV_HOR_RES and LV_VER_RES are replaced with LV_HOR_RES_MAX and LV_VER_RES_MAX, which define the maximum horizontal and vertical resolution of your display, respectively. LV_HOR_RES and LV_VER_RES still work but always reflects the resolution of the lastly created display. (No difference with only one display).

Renames

  • All the macros like USE_LV_BTN now are like LV_USE_BTN.
  • Rename symbols: SYMBOL_HOME --> LV_SYMBOL_HOME
  • Rename LV_GROUP_KEY_... to LV_KEY_...
  • Several minor function API changes. Nearly all features are still present so you should find every v5.3 function but maybe with a slightly different name or usage

Animations

  • Renames in lv_anim_t. The ready_cb get's lv_anim_t * as argument.
  • lv_anim_set_...(&a) function are added to replace manual initialization of ```lv_anim_t`
  • lv_style_anim_t is removed. Use lv_anim_t a; and lv_style_anim_set_...(&a, ...) instead.

Objects and Styles

  • lv_obj_get_free_ptr and lv_obj_get_free_num are replaced lv_obj_get_user_data. The type of the user data can be changed in lv_conf.h
  • All padding and fits are left, right, top, bottom instead of ver and hor.
  • lv_canvas: use lv_draw_... functions

Fonts

  • Font system is updated and now supports kerning. You can generate your fonts again with the new converter.
  • Use the new Online font converter to generate new fonts
  • Built-in fonts have changed

Others

  • User data is now available for some other structures as well, like driver objects.
  • Callbacks of lv_task now receive a pointer to the task itself instead of the user data. The user data can be accessed as task->user_data
  • The img_decoder is improved to cache the opened images. So e.g. PNG images are not decoded all the time but left open. Learn more here

Credits

@embeddedt for tirelessly supporting users and professional help in the development
@amirgon for creating and maintaining the MicroPython binding
@puzrin for creating the new font converter

And for every contributor who helped with pull requests, ideas and suggestion, testing and feedback,

Thank you very much for all of you!

[v5.3] Micropython support, New object types, new features

01 Feb 04:30
Compare
Choose a tag to compare

Micropython support

Thanks to @amirgon, from mow you can use LittlevGL with Micropython (a Python implementation for embedded systems). Read more here. You can try it on Linux and or with ESP32 using this ready to use repository.

New objects:

  • lv_tileview container for smartwatch like designs
  • lv_spinbox set numeric value with + and - buttons or keys
  • lv_table create lightweight tables
  • lv_canvas draw to a buffer and display it as an image

New object features

  • lv_obj add realign feature (save the last lv_obj_align data and re-apply)
  • lv_obj add lv_obj_align_origo to align the center of the object (work with realign)
  • lv_chart LV_CHART_TYPE_VERTICAL_LINE when the point count is equal to the chart width to draw only vertical lines
  • lv_chart lv_chart: add LV_CHART_POINT_DEF special value to not draw a point
  • lv_sw animated move (lv_sw_set_anim_time(), lv_sw_on/off_anim())
  • lv_btnm add lv_btnm_get_pressed()
  • lv_btnm add recolor feature with lv_btnm_set_recolor
  • lv_ta support LV_GROUP_KEY_BACKSPACE
  • lv_ddlist add down arrow symbol option with lv_ddlist_set_draw_arrow
  • lv_ddlist add ability to set label alignment
  • lv_list remeber the last seleceted button (only if the list is in a group)
  • lv_list allow single button selection mode
  • lv_list, lv_ta, lv_page scroll propagation feature to scroll the parent on "overscrolling"
  • lv_list, lv_ta, lv_page edge flash effect to show circle on the edge on "overscrolling"
  • lv_preload add lv_preload_set_animation_type() and LV_PRELOAD_TYPE_FILLSPIN_ARC
  • lv_imgbtn add tiled option to set width dynamically by repeating the middle part
  • lv_calendar add lv_calendar_get_pressed_date
  • lv_tabview add lv_tabview_set_hidden to hidet tab buttons

New other features

  • lv_lang multi-langue interface to change UI's language run-time
  • lv_group add LV_GROUP_KEY_BACKSPACE
  • lv_anim add overshoot and bounce path
  • lv_anim add add lv_anim_count_running
  • lv_anim lv_anim: add lv_anim_count_running
  • lv_indev add lv_indev_set_feeback to add callback when something happened with an object
  • lv_vdb add true double bufferig feature to work woth only frame buffer address swapping
  • lv_style add LV_BORDER_INTERNAL to remove the borders on teh edges
  • lv_porting add display, indev, file siystem porting skeleton function

[v5.2] Bugfixes for v5.2-rc

14 Nov 23:45
Compare
Choose a tag to compare