Skip to content

Repository files navigation

About the library

roo_display is a feature-rich, fast, and easy to use library intended for building 'smart home' and similar controllers with graphical UI and optionally touch control.

ESP-IDF emulator coverage

The IDF-only SPI display smoke initializes an ILI9341 through ESP-IDF's SPI master API and writes a pixel through the roo_testing driver shim. The matching example initializes a display and draws a small rectangle without using Arduino headers or libraries:

bazel test --config=roo_testing_idf_esp32 //:idf_spi_display_test
bazel build --config=roo_testing_idf_esp32 //examples/espidf/ili9341

Highlights

  • Text: anti-aliasing, kerning, zero-flicker, FreeType-style alignment, font metrics, UTF-8, formatting;
  • Fonts: collection of Google Noto Sans, Serif, and Mono fonts in various styles (regular, bold, condensed, italic, combinations), and multiple sizes included. Extended alphabet. Font import tool available;
  • Shapes: variety of basic and anti-aliased shapes including filled and stroked circles, round-rectangles, triangles, wedges, pies, trapezoids, lines, and arcs, with specified widths and rounded or flat endings;
  • Offscreen: supports drawing to memory buffers, using a rich variety of color modes (ARGB 8888, RGBA 8888, RGB 888, ARGB 6666, ARGB 4444, RGB 565, Gray8, Gray4, GrayAlpha8, Alpha8, Alpha4, Indexed8, Indexed4, Indexed2, Indexed1);
  • Images: JPEG, PNG; custom RLE-encoded as well as uncompressed PROGMEM-compatible image formats, supporting variety of color modes (same as above); image import tool available;
  • Icons: includes a collection of over 34000 Google Material Icons, divided into 4 styles, 18 categories, and 4 sizes;
  • Positioning: flexible alignment options, magnification / stretch, rotation;
  • Clipping: clip rectangles, clip masks;
  • Color: internal 32-bit ARGB; transparency, alpha-blending, alpha-compositing, 140 named HTML colors; multi-node color gradients: linear, radial, angular;
  • Compositing: backgrounds, overlays (sprites), zero-flicker, memory-conservative Porter-Duff and blending modes;
  • Touch: excellent quality drivers with noise filtering and smoothing; supports multi-touch on compliant devices;
  • Extensibility: clean abstractions, including drawable objects, device drivers, fonts; supports arbitrary extensions (e.g. user-defined drawables, third-party drivers) as first-class entities;
  • Excellent performance: highly optimized SPI transport, vectorized interfaces;
  • Low footprint: memory-conscious implementation;
  • Documentation: comprehensive programming guide;
  • See also: a companion roo_windows library for building complex touch-based UI applications with scroll, animation, etc.

Compatibility

  • Supported SPI display drivers: GC9A01A, ILI9341, ILI9486, ILI9488, SSD1327, ST7735, ST7789, ST7796s;
  • ESP32S3 DMA parallel driver harness;
  • Adapter driver for TFT_eSPI-supported displays;
  • Supported touch drivers: XPT2046, FT6x36, GT911;
  • Supported integrated devices (microcontroller + touch display): LilyGo T-Display-S3, Makerfabs: 3.5in, 4.3in, 5in, and 7in, ILI9488 SPI-based capacitive touch combo; 4.3in, parallel DMA-based capacitive touch combo.

Gallery

img2 img9 img10 img18 img21 img22 img25 img29 img30 img31 img32 img35 img65 img65 img42 img43 img45 img48 img49 img50 img51 img52 img54 img56 img58 img59 img60 img61 img62

User documentation

Host emulation

Host builds support both Arduino and ESP-IDF through roo_testing 2.0. With Bazelisk 1.21 or newer, a plain command defaults to Arduino and prints a notice:

bazel test ...
bazel test ... --config=asan
bazel test ... --config=roo_testing_arduino_esp32
bazel test ... --config=roo_testing_idf_esp32
.roo_testing/bin/test_all_profiles ...

The files under .roo_testing are vendored from roo_testing; follow their canonical-source headers when refreshing them.

Arduino examples are native runnable targets in their source packages. For example:

bazel run //examples/programming_guide/part1_1_basic_setup:part1_1_basic_setup

About

Arduino-compliant library, targeted at ESP32 and related boards, for driving display devices and touch panels, e.g. ILI9486, ILI9341, or ST7789. Powerful and fast.

Resources

Stars

173 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages