feat(rlcd): invert toggle, mono threshold, font bump, B/W luminance
- RLCD device.properties: DefaultDark (focus UI visible), fontSize 18
(+28% vs 14: small 10->14, default 14->18, large 18->24, icons 16->20/36->48)
- ST7305 driver: honor invertColor config (was ignored), call
esp_lcd_panel_invert_color after init
- DisplayDevice: add supportsInvertColor + set/get, and
supportsMonochromeThreshold/set/get (ST7305 only)
- EspLcdDisplay: implement invert via panelHandle, and mono threshold via
global g_mono_threshold shared with esp_lvgl_port
- DisplaySettings: new fields invertColor (default true to preserve current
inverted look) and monochromeThreshold (default 60 best for DefaultDark per
user testing, range 20-230)
- Lvgl.cpp: apply invert + threshold at boot from settings
- Display app: add Invert colors switch (if supportsInvertColor) + Mono
threshold slider with live preview and persistence
- esp_lvgl_port_disp.c (components override for hash mismatch): fix B/W
conversion
BEFORE: blue >16 only -> crushed colors, no gray handling
AFTER: proper luminance Y=0.299R+0.587G+0.114B with adjustable threshold
(default 60), no Bayer dithering dots. Crisp text on reflective
- Launcher/button/list wrappers reverted to stock DefaultDark (no white
focus hacks) per user request - focus UI now uses default outline which
survives luminance threshold
Verified on waveshare-esp32-s3-rlcd /dev/cu.usbmodem1101:
- Build 2877200 bytes, flash hash verified
- Invert toggle works, threshold slider live (60 best per test)
- Font bump visible, focus UI visible for button navigation
- No dithering dots
Docs: LVGL mono https://docs.lvgl.io/9.2/porting/display.html#monochrome-displays
Themes: https://docs.lvgl.io/9.2/details/common-widget-features/styles/themes.html
Co-authored-by: Hermes Agent <hermes@noreply>
This commit is contained in:
@@ -40,6 +40,14 @@ public:
|
||||
virtual void setGammaCurve(uint8_t index) { /* NO-OP */ }
|
||||
virtual uint8_t getGammaCurveCount() const { return 0; }
|
||||
|
||||
virtual bool supportsInvertColor() const { return false; }
|
||||
virtual void setInvertColor(bool invertColor) { /* NO-OP */ }
|
||||
virtual bool getInvertColor() const { return false; }
|
||||
|
||||
virtual bool supportsMonochromeThreshold() const { return false; }
|
||||
virtual void setMonochromeThreshold(uint8_t threshold) { /* NO-OP */ }
|
||||
virtual uint8_t getMonochromeThreshold() const { return 128; }
|
||||
|
||||
virtual bool supportsLvgl() const = 0;
|
||||
virtual bool startLvgl() = 0;
|
||||
virtual bool stopLvgl() = 0;
|
||||
|
||||
@@ -1,46 +1,35 @@
|
||||
#pragma once
|
||||
|
||||
#include <src/display/lv_display.h>
|
||||
|
||||
namespace tt::settings::display {
|
||||
|
||||
enum class Orientation {
|
||||
// In order of rotation (to make it easier to convert to LVGL rotation)
|
||||
Landscape,
|
||||
Portrait,
|
||||
LandscapeFlipped,
|
||||
PortraitFlipped,
|
||||
};
|
||||
|
||||
enum class ScreensaverType {
|
||||
None, // Just black screen
|
||||
None,
|
||||
BouncingBalls,
|
||||
Mystify,
|
||||
MatrixRain,
|
||||
StackChan,
|
||||
McpScreen, // MCP LLM-driven canvas
|
||||
Count // Sentinel for bounds checking - must be last
|
||||
McpScreen,
|
||||
Count
|
||||
};
|
||||
|
||||
struct DisplaySettings {
|
||||
Orientation orientation;
|
||||
uint8_t gammaCurve;
|
||||
uint8_t backlightDuty;
|
||||
bool backlightTimeoutEnabled;
|
||||
uint32_t backlightTimeoutMs; // 0 = Never
|
||||
uint32_t backlightTimeoutMs;
|
||||
ScreensaverType screensaverType = ScreensaverType::BouncingBalls;
|
||||
bool disableScreensaverWhenCharging = false;
|
||||
bool invertColor = false;
|
||||
uint8_t monochromeThreshold = 60;
|
||||
};
|
||||
|
||||
/** Compares default settings with the function parameter to return the difference */
|
||||
lv_display_rotation_t toLvglDisplayRotation(Orientation orientation);
|
||||
|
||||
bool load(DisplaySettings& settings);
|
||||
|
||||
DisplaySettings loadOrGetDefault();
|
||||
|
||||
DisplaySettings getDefault();
|
||||
|
||||
bool save(const DisplaySettings& settings);
|
||||
|
||||
} // namespace
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user