LCDGFX LCD display driver  1.2.0
Lightweight graphics library for SSD1306, SSD1325, SSD1327, SSD1331, SSD1351, SH1106, SH1107, IL9163, ST7735, ST7789, ILI9341, PCD8544 displays over I2C/SPI
Changelog

All notable changes to lcdgfx are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[1.3.1] - 2026-04-29

Fixed

  • GUI widgets
    • LcdGfxMenu / LcdGfxCheckboxMenu — eliminate flicker and scroll artifacts; do not invert checkbox mark itself when row is highlighted (only label text is inverted); checkbox toggle now reflects on screen immediately without needing to move selection.
    • LcdGfxSlider — page-aligned 3-fillRect rendering on SSD1306: knob band lives in full pages strictly between the top/bottom border rows, so border lines are never disturbed and the slider does not flicker.
    • LcdGfxSpinbox — central text band cleared explicitly each frame so value updates do not leave artifacts; border + arrows redrawn cleanly.

[1.3.0] - 2026-04-28

Added

  • GUI widgets
    • LcdGfxSlider — horizontal value slider with bounded range and keyboard navigation (up/down). See examples/gui/slider_demo.
    • LcdGfxSpinbox — bounded integer spinbox with configurable step. See examples/gui/spinbox_demo.
    • LcdGfxTextEntry — single-line text-entry widget with cursor and cycleable charset (ASCII default; UTF-8 charset works with a secondary font). See examples/gui/text_entry_demo.
  • Touch input
    • LcdGfxXpt2046 — templated SPI driver for XPT2046 resistive touch controllers. Median-of-3 sampling, pressure detection, swappable SPI transport. See examples/touch_demo.
    • TouchCalibration — per-axis affine calibration helper with swap/invert and clamping.
    • LcdGfxMenu::onTouch() and itemAtPoint() — touch-driving the existing menu widget without changing its key API. See examples/gui/menu_touch_demo.
  • Core API
    • lcdgfx::color namespace — header-only, constexpr, to_rgb565 / to_rgb332 / from_rgb / gray (BT.601 weights). Bit-identical to the existing RGB_COLOR16 / RGB_COLOR8 macros.
    • nano_utf8_decode() — stateless UTF-8 decoder in canvas/font_utf8.h. Rejects overlongs, surrogates and codepoints above U+10FFFF.
    • ssd1306xled_font6x8_Cyrillic — proof secondary font covering U+0410..U+042F (А..Я). See examples/utf8_demo.
  • Build / CI
    • Opt-in CXXSTD knob in Makefile (defaults to c++11).
    • CI matrix now builds the library and runs the unit tests under c++11, c++14 and c++17.
  • Documentation

Fixed

  • SSD1325::fillRect 4-bit nibble-packing now respects setColor() for odd columns.
  • Linux sysfs GPIO fallback no longer leaks the export handle on early-return error paths.

Tests

  • Unit-test count: 363 → 470 (107 new tests across 7 new test files), all green under make ARCH=linux SDL_EMULATION=y check.

[1.2.0] - prior release

  • ILI9341 SDL emulator 90° CW rotation fix.
  • Comprehensive Doxygen documentation overhaul.
  • Checkbox menu widget and scroll indicators.
  • libgpiod line-ownership bug fix (issue #134).
  • Other fixes covering issues #28, #74, #92, #96, #98, #100, #125, #137.