Skip to content

Releases: lvgl/lvgl

[v5.2-rc] New objects, new features!

09 Oct 05:10
Compare
Choose a tag to compare

New objects

  • Image button
  • Calendar
  • Arc
  • Preloader

untitled

Draw and rendering

  • Line draw algorithm is improved to support perpendicular line endings
  • Arc drawing
  • Shadow drawing improvements
  • Custom VDB write function can be registered in the display driver to support non-standard color formats. This the VDB content can be directly flushed to the display.
  • RGB565 swap to swap the two bytes of RGB565 colors. It makes possible to simply send the pixel's data via a 8-bit serial interface (e.g. SPI). It can be enabled in lv_conf.h by setting LV_COLOR_16_SWAP.
  • VDB address can be set in runtime with lv_vdb_set_adr(). Useful if you want to use DMA in the disp_flush function but the VDB need to be allocated in a specific way.
  • New image formats supporting Indexed and Grayscale formats too to save memory
  • Image decoder interface to add support to any image format like PNG
  • Dithering support in Online image converter

New object features

  • lv_obj opa scale attribute added to scale the current opacity of an object and its children (useful to fade in/out a group of objects)
  • lv_label LV_LABEL_ALIGN_RIGHT added to enable right alignmenet of texts.
  • lv_label LV_LABEL_LONG_CROP long mode to simply crop the text out of the label's size.
  • lv_btn Ink effect feature added to play an animation effect when a button is clicked and released. Can be enabled with lv_btn_set_ink_in_time(), lv_btn_set_ink_wait_time(), lv_btn_set_ink_out_time() and LV_BTN_INK_EFFECT` need to be enabled in lv_conf.h.
  • lv_page, lv_win, lv_ta scrolling is added on LV_GROUP_KEY_UP/DOWN/LEFT/RIGHT
  • lv_page temporal scrollbar hide option is added (LV_SB_MODE_HIDE)
  • lv_ta max_length and accepted_chars attributes are added.d to be enabled in lv_conf.h.
  • lv_ta action can be added with lv_ta_set_action()

Other new features:

  • SYMBOL_DUMMY: If added before string then lv_img will display the text. This way where icons need and an image a text can be set as well.
  • Monospace font support (set the width in the Online converter)
  • LV_FONT_CUSTOM define added in lv_conf.h where you can enumerate you custom fonts to make them global
  • LV_CONF_INCLUDE_SIMPLE: define it as a compiler symbol to include lv_conf.h like include "lv_conf.h" instead of using its relative path.
  • Click focus: you can enable focusing on an object in a group when it is clicked by a pointer an input device (mouse or touchpad)
  • Add LV_GROUP_KEY_DEL
  • Log system added to print useful debug info
  • Uniscii monospace font is added as built-in font
  • Edit/Navigate mode can be enabled for objects in a group. Useful for encoder based navigation.
  • Adding a new character encoding interface (other than the built-in UTF-8) made easy
  • LV_INDEV_TYPE_ENCODER: Encoder input device type (Left/Right/Push)
  • Opportunity to use your existing tick handler instead of lv_tick_inc. See lv_conf_templ.h
  • Themes can be changed in runtime (set LV_THEME_LIVE_UPDATE in lv_conf.h)
  • A new theme called: Nemo
  • lv_fs_trunc and lv_fs_rename added

[v5.1.1]

20 May 19:54
Compare
Choose a tag to compare

Bug fixes

  • lv_line: set line.width ext. size to not trim parts on x = 0, y = 0 coordinates
  • lv_conf.h: add LV_COMPILER_VLA_SUPPORTED
  • lv_group_create: init focus_cb
  • fix of 16 bit image drawing with alpha bytes
  • fix text opacity
  • lv_mbox: enable navigation with LV_GROUP_KEY_DOWN/UP too
  • lv_conf.h: add LV_COMPILER_VLA_SUPPORTED
  • lv_slider: inicator draw bugfix
  • lv_slider: draw greater background on negative padding if knob_in == 1
  • mono theme: fix typo
  • style animations: add opacity handling to image, text and line
  • lv_kb: before ok/close action don't deassign the lv_ta if there is user defined action
  • in lv_objx_set_... functions apply the new value only if it's different from the current
  • don't invalide hidden objects
  • lv_group_del: remove the objects from the groups too

[v5.1] 4x Faster Anti-aliasing, Sparse Font Support and more

09 Mar 13:15
Compare
Choose a tag to compare

Here is the new v5.1 release of LittelvGL with a lot of updates including 4x faster anti-aliasing, sparse font support to save ROM for Asian fonts, scalable and beautiful font anti-aliasing, pixel level opacity on images, easy to use online font and image converters and significant code size reduction.

4x faster anti-aliasing

Due to a massive rework in the anti-aliasing system it become 4 times faster then it was in v5.0. It means practically no performance loss for anti-aliasing! In v5.1 anti-aliasing is calculated during the rendering process hence the old "draw everything in double size and downscale" is not required anymore. This way only few pixel will be put to the appropriate position to make lines or curves smooth and even.

The diagram below shows some measurement with v5.0 and v5.1 using the benchmark application. The results are expressed in FPS.
untitled

Setting v5.0 no AA v5.0 AA v5.1 no AA v5.1 AA
Plain 101 23 125 91
Wallpaper 53 12 91 71
Wp. recolor 30 5 25 23
Opacity 84 16 83 83
Shadows 38 4 39 34
All enabled 19 2 16 15

Sparse font support and new font-anti aliasing system

To generate fonts for v5.1 you can use a brand new online TTF font converter tool. Available here: https://littlevgl.com/ttf-font-to-c-array
With this tool you can specify a range of character to convert and optionally you can list the characters to include in the font. It is very useful Asian fonts where only a few characters are used from a big Unicode range.

The former LV_FONT_ANTIALIAS option is removed from lv_conf.h. Instead you can specify a bpp (bit-per-pixel) value for each font (1, 2, 4 or 8 bpp are supported). It result better customization to save memory (high bpp for small fonts, low bpp for larger fonts) and in general gives better result with same font memory footprint. You can enable the built-in fonts with 1, 2, 4 or 8 values to specify their bpp.

Updates on image handling

The old chrma keying (LV_COLOR_TRANSP pixels are transparent) is still available but there is a new feature too: you can assign an Alpha byte to every pixel to realize pixel level opacity. The images with pixel level opacity can have really smooth edges compared to Chroma keying.
To convert images for LittlevGL and other online tool is created: https://littlevgl.com/image-to-c-array

In v5.0 you needed to create a file from image data in the RAMFS and then use the file's path in lv_img_set_file(). Now - in v5.1 - a more general and resource friendly way is introduced. You can use the lv_img_set_src() function to set a new source for an image object. There are 3 image sources:

  • C array compiled in the code. E.g. lv_img_set_src(img1, &wallpaper_img). In the example wallpaper_img is generated by the online converter.
  • Externally stored binary file. E.g. lv_img_set_src(img1, "S:/path/to/image.bin"). image.bin is also created with the online tool and stored for example on an SD card.
  • Symbols (as text): E.g. lv_img_set_src(img1, SYMBOL_CLOSE).

To learn more check the tutorial about the images: https://github.com/littlevgl/lv_examples/tree/master/lv_tutorial/6_images

Code size reduction

The v5.1 can be compiled in less then 50kB with 10 kB RAM usage. In such a configuration you can use a few object types (a new object type needs ~3kB ROM) and buffer drawing (LV_VDB_SIZE 2048). It makes LittlevGL capable to run on simple cheap devices with only 64kB ROM like STM32F103C8

Migrating from v5.0 to v5.1

However its a minor release you need to do a few things when updating to v5.1:

  • Refresh your lv_conf.h from lv_conf_templ.h
  • Regenerate your images and fonts using the online converters

All new features

  • lv_refr_set_roundig_cb(): set a function to modify the invalidated area for special display controllers
  • lv_group_set_focus_cb(): set function to call when a new object is focused #94
  • lv_obj_get_type() return string, e.g. "lv_slider", "lv_btn" etc #91
  • Font handling extension for effective Chiese font handling (cutsom read functions)
  • Remove LV_FONT_ANTIALIAS and add fonts with BPP (bit-per-pixel): 1, 2, 4 and 8
  • lv_img: add pixel level opacity option (ARGB8888 or ARGB8565) (make image upscale pointless)
  • LV_ANTIALIAS rework: meaning anti-alias lines and curves
  • Merge symbol fonts (basic, file and feedback) into one font
  • lv_group: different default style_mod function with LV_COLOR_DEPTH 1
  • lv_img_set_src() to handle file path, symbols and const variables with one function
  • LV_PROTECT_PRESS_LOST: prevent the input devices to NOT find new object when the object's pressing is lost
  • lv_label: draw style.body.padding.hor/ver greater body if body_draw is enabled
  • LV_LAYOUT_PRETTY: in one row align obeóject vertically to middle
  • Add user data option to lv_indev_drv_t and pass it with lv_indev_data_t to the read function. #115
  • LV_GROUP_KEY_ENTER_LONG: sent by the library on long press of LV_GROUP_KEY_ENTER to trigger long press of the object #113
  • LV_INDEV_TYPE_BUTTON: for a hatdware buttons which press a point on a screen

Bugfixes

  • lv_chart: Fix the use of point_num more then 256
  • lv_label: anim. time wasn't applyed for LV_LABEL_LONG_ROLL
  • lv_txt_utf8_size fix for 4 byte characters
  • lv_slider: fix knob_in with not zero min value
  • lv_area_is_on: handled some cases wrong
  • lv_indev: buffered indevs (return true in indev_read) was handled as non-buffered
  • drag: don't invalidate if the object wasn't moved

[v5.0.2] Minor bug fixes

19 Jan 14:58
Compare
Choose a tag to compare

Bug fixes added. The new v5.0.2 is fully backward compatible with v5.0.1

Changes

  • Fix dependencied (Thanks to Zaltora)
  • lv_group: fix memory leak (Thanks to BenQoo)
  • LV_INDEV_READ_PERIOD 0 build bugfix
  • lv_roller: lv_roller_get_selected_str: bugfix (was recursive call)
  • lv_obj_get_style: with NULL style check if the parent is focused and use the focused style
  • lv_roller: add missing action handling
  • Set 24 bit colors upper byte (alpha) to 0xFF

[v5.0.1] Minor bug fixes

02 Jan 12:01
Compare
Choose a tag to compare

Bug fixes added. The new v5.0.1 is fully backward compatible with v5.0.0

Changes

  • lv_list: fixed when mouse and keyboard used together
  • lv_btnm: fix bottom border visibility
  • theme updates
  • line width fix width anti-aliasing
  • lv_conf_templ.h add more info

[v5.0.0] Unicode support, themes, simpler architecture, new object types, bugfixes

21 Dec 02:34
Compare
Choose a tag to compare

Here is the v5.0.0 release with a much simpler architecture. Now the graphics library means only the lvgl repository. Besides the architectural changes Unicode support, style themes, new smart phone-like object types are added. To make easier to get started a tutorial is released in lv_examples repository

Note that it's major release so it's not backward compatible.

To learn the new features its highly recommended to read the basics in the Documentation

Architectural changes

  • Integrate misc into lvlg
  • Integrate hal** into lvlg
  • Convert Applications into simple examples
  • Rename repository from proj_pc to pc_simulator
  • Create a new independent repository for examples (lv_examples)
  • Create a new independent repository for development boards (lv_boards)
  • Create a new independent repository for drivers (lv_drivers)

System level changes

  • Object type inheritance is hidden. Every object have its own API (except lv_obj_set/get_... functions)
  • Rework lv_style_t to be more versatile
  • Rename (and slightly rework) some function, defines and enums to be more descriptive
  • Make styles to global variable for less typing
  • Make fonts to global variables for less typing and easy user-font adding
  • Join symbol fonts into normal built-in fonts (use normal fonts, and lvlg will find symbol fonts too)
  • rename lv_dispi_... to lv_indev_...
  • Simplified action functions: lv_res_t action (lv_obj_t * obj) use lv_indev_act()if required

New features

  • Unicode support with UTF-8 decode
  • Themes with predefined styles
  • lv_tabview: new object type to organize content with tabs
  • lv_sw: new object type, switch, turn on/off by tap (a little slider)
  • lv_roller: new object type, a roller to select a value (like on smartphones)
  • lv_kb: new object type, Keyboard
  • lv_btnm: lv_btnm_set_toggle() to toggle last button
  • lv_btnm: rework width control. Now a control byte is used for width, hide and no long press settings.
  • lv_ta: cursor types
  • lv_gauge_ rework to make it more like line meter (remove background but add scale lines)
  • partial border draw in styles
  • Hide anti-aliasing upscale (no x * LV_DOWSCALE is required)

Bugfixes

Due to lv_tests massive number of bug fixes happened.

[v4.2.0] Double VDB, Style animations, Touchpad-less control and examples

17 Aug 09:26
Compare
Choose a tag to compare

Here is the new release with cool new features like support of double VDB (to copy pixels to display while rendering to an other buffer), style animations, object groups to control without touchpad only with buttons and some minor object level features. See the full list below! In addition a tutorial from examples has begun.

Improvements

  • Double VDB support: one for rendering, another to transfer former rendered image to frame buffer in the background (e.g. with DMA) #15
  • Style animations
  • lv_examples: thematic examples (not finished yet)
  • lv_group: to control without touch pad. Issue #14
  • lv_page: scrl. default fit modification: hor: false, ver: true, and always set its width to parent width
  • lv_btn: add lv_btn_get_..._action functions
  • lv_list: add lv_list_get_element_label/img
  • lv_ta: lv_ta_set_one_line to configure the Text area to one lined input field
  • lv_btnm: besides 0. byte (width dsc) 1. byte: hidden (\177, 0x7F, delete)

Bugfixes

  • lv_slider: don't let indicator or bar to disappear because of hpad/vpad
  • lv_ta: memory leak if deleted in password mode
  • lv_ddlist: copy 'num_opt' attribute too
  • lv_obj_set_parent: send CHILD_CHG signal to the old parent too

Feature plans

In the next release you will get a lot of new *smart phone like * objects.
See them in TODO_MINOR.md or suggest new ones!

[v4.1.1] Mainly WiFi, GSM Benchmark updates

19 Jul 21:55
Compare
Choose a tag to compare

Bug fixes for the new applications Wifi, GSM and Benchmark
WiFi and GSM now support save/load configuration from SD card

[v4.1.0] Support of hardware accelerator, new functionalities, bug fixes

19 Jul 21:48
Compare
Choose a tag to compare

The v4.1.0 version is here! The main new feature is the supporting of graphical hardware accelerator (GPU) besides the already existing software rendering. In addition new applications, object functions and bug fixes are added. This version fully backward compatible with v4.0.0.

Hardware accelerator support

Mixing two buffers with a given opacity typically can be realized by MCUs where GPU is presented. Now you can add the disp_color_cpy(dest_buf, src_buf, length, opa) to in hal/disp.c to copy pixels from a buffer to an other with a given opacity. In hal/disp.h you need to: #define DISP_HW_ACC 1

New applications

GSM, WiFi and Benchmark applications are added.

GSM and WiFi

You can specify a network (SSID + password/APN) and the IP address + port of a TSP server.The application will try to connect to this network. It buffers the latest message and tries to send it until get an answer. If no answer then it reconnects to the network and resend the message.

Benchmark

In the window of the application you can enable/disable graphical features and measure the screen load time.

Object API changes

  • lv_label New long mode: LV_LABEL_LONG_ROLL to move the long text and not the object
  • lv_list The default label long mode is: LV_LABEL_LONG_ROLL. Turn off with: lv_list_set_element_text_roll(element, false)
  • lv_ta Password mode (like on smart phones):lv_ta_set_pwd_mode(ta, true) and lv_ta_get_label(ta) added

[v4.0.0] New style system, font anti-aliasing, optimizations, clearer architecture, bug fixes

19 May 06:34
Compare
Choose a tag to compare

A new major version is released with a lot new functions and improvements. The Littlev Graphics Library follows the rules of Semantic versioning. According to it a major release has to be done if the API is changed. Now the API of the graphics library is really changed to achieve a clearer and more effective architecture.

New website

A brand new website is created besides the new release. Please check it out: www.gl.littlev.hu

Draw Speed Optimizations

Optimization of Low Level drawing functions:

  • Faster rectangle fill
  • Faster letter draw
  • Faster image draw
  • Faster image draw with anti-aliasing
  • Faster filtering during anti-aliasing

Font Anti-aliasing

Font anti-aliasing is introduced for microcontrollers with moderate resources and/or GUIs with a lot of animations, movements. It uses much less CPU power then the already existing Full screen anti-aliasing.

The good thing is font anti-aliasing can be used with Real drawing as well. It means you need only a simple frame buffer to use anti-aliased letters. Keep in mind the Littlev Graphics Library doesn't need to use double buffering to deal with animations, transparency or anti-aliasing. It uses only optionally few kB work memory for every high level effects.

Simplified Style System

Formerly all object type was a unique style type (e.g. lv_labels_t). Now a common style type lv_style_t is used. It describes style properties for:

  • Backgrounds
  • Letters,
  • Images
  • Lines

at once.

It highly simplifies of using styles because you can use the same style for example a rectangle and a label. All object types will uses the style properties which are relevant for itself.

The new style system gives the opportunity to inherit styles from parents by settings the object's style to NULL.
In other words if you specify the style of a container object and create labels and/or images on it with NULL (inherited) styles the objects will use the parent's style. Why is it useful? Because you only have to create one style with great colors (background color, gradient color, text color, image recolor etc.), set is or container and just create objects on it without thinking about styles.

Learn more about the style here: http://www.gl.littlev.hu/objects#style

#Applications
To make Applications more flexible and useful the Phantom application is created. It is able to send/ receive data to/from the Applications.

It creates the opportunity to use Applications individually. For example if you need a terminal you can run a full featured Terminal application and send/receive adta with a Phantom application.

Click here to learn more about the applications: http://www.gl.littlev.hu/applications

Architectural Updates, Object Type Updates, Bug Fixes

  • Simplified HAL (Hardware Abstraction Layer)
  • New repository with an example HAL: https://github.com/littlevgl/hal
  • Instead of built-in icons Symbol fonts are added. The uses much less memory
  • Object dependencies are decreased hence the modularity is increased
  • Simplified object type inheritance because of the simplified style system
  • Function and object attribute renames happend to increase consistency
  • lv_misc moved to the Misc. Library as gfx
  • New object functionalities thanks to the new style system
  • Bug Fixes

Migrating LittlevGL v3.x to v4.0

  1. Rewrite your styles to lv_style_t variables
  2. Solve the minor issues because of renamed functions
  3. Test your GUI.

Feature Plans

  • External GUI control via serial port
  • New applications: WiFi, Music player etc
  • New object types according needs