LittlevGL bindings for Rust. A powerful and easy-to-use embedded GUI with many widgets, advanced visual effects (opacity, antialiasing, animations) and low memory requirements (16K RAM, 64K Flash).
Go to file
Rafael Caricio bcd771df47 Disable lvgl original comments in bindings
We disable the comments generation here because some comments
cause the `cargo test` command to fail. Some of the original
comments have invalid tokens like `TYPEDEFS` causing issues.
We should recommend users to look the original comments in the
original lvgl in their C API docs.
2021-03-06 21:50:39 +01:00
.github/workflows Run apt-get update in CI 2020-06-19 15:48:44 +02:00
examples Simplify examples, don't use threads 2020-06-19 15:48:44 +02:00
lvgl Expose RGB values from Color 2020-08-27 11:40:08 +02:00
lvgl-codegen Fix compile error 2021-02-15 18:58:36 +01:00
lvgl-sys Disable lvgl original comments in bindings 2021-03-06 21:50:39 +01:00
.gitignore Use bindgen output to generate code 2020-06-14 11:10:29 +02:00
.gitmodules LVGL 7.0.1 basic setup 2020-06-04 20:47:40 +02:00
Cargo.toml Generate code for styles properties 2020-06-04 20:47:40 +02:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2020-05-31 00:13:57 +02:00
demo.png Sync code with image 2020-05-30 09:42:42 +02:00
LICENSE Initial commit 2020-04-10 15:00:21 +02:00
lv_demo.png Update images and links in README 2020-05-30 09:37:40 +02:00
README.md Disable lvgl original comments in bindings 2021-03-06 21:50:39 +01:00

LittlevGL - Open-source Embedded GUI Library in Rust

Original LittlevGL demo image

LittlevGL provides everything you need to create a Graphical User Interface (GUI) on embedded systems with easy-to-use graphical elements, beautiful visual effects and low memory footprint.

LittlevGL is compatible with #![no_std] environments by default.

Official LittlevGL Website · C library repository · Live demo


Rust bindings usage demo code.

System Build Dependencies

In order to build the lvgl project you will need the following system dependencies to be installed:

$ sudo apt install build-essential llvm clang

If you want to build the examples, then you will need to install SDL2 as well.

$ sudo apt install libsdl2-dev

Usage

Edit your Cargo.toml file dependencies with:

$ cargo add lvgl

The build requires the environment variable bellow to be set:

  • DEP_LV_CONFIG_PATH: Path to the directory containing the lv_conf.h header file used for configuration of LittlevGL library.

We recommend the lv_conf.h file to be in your project's root directory. If so, the command to build your project would be:

$ DEP_LV_CONFIG_PATH=`pwd` cargo build

Building for embedded environments

We make use of bindgen for generating the bindings to LittlevGL at build time. There is a problem in cargo when building for no_std, so we need to use a workaround to build "lvgl-rs". The mainstrem issue in cargo is being tracked at rust-lang/cargo#7915.

$ DEP_LV_CONFIG_PATH=`pwd` cargo build -Zfeatures=build_dep

Running the demo

Hint for macOS users: Before you run the demos you need to make sure you have libsdl installed on your machine. To install it, use HomeBrew:

$ brew install sdl2

This project contains examples that can run in a desktop simulator.

First, make sure to pull lvgl-rs submodules:

$ git submodule init
$ git submodule update 

Then run the demo example:

$ DEP_LV_CONFIG_PATH=`pwd`/examples/include cargo run --example demo

Feature Support

The bindings are still in development. There are many features of LVGL that needs to be exposed by lvgl-rs. In this section you can check what is implemented at the moment.

Features

List of LVGL features that impacts the library usage in general.

  • Displays: We use embedded_graphics library to draw to the display. You can use lvgl-rs with any of the embedded_graphics supported displays.
  • Events: You can listen and trigger events in widget objects.
  • Styles: You can set styles in any exposed object. We are still missing the possibility of defining global base styles.
  • Input Devices
  • Fonts
  • Images
  • File system
  • Animations
  • Tasks

Widgets

Widgets currently implemented might have some missing features. If the widget you want to use is not exposed or is missing a feature you want to make use, please send a Pull Request or open an issue.