From 25a66a17229747064344aae16ef098212ab01158 Mon Sep 17 00:00:00 2001 From: Bernhard Kirchen Date: Sat, 10 Feb 2024 12:05:45 +0100 Subject: [PATCH] make efficient use of available display area fix calculation of the text baselines, using getAscent() in favor of getMaxCharHeight(), which includes ascent and descent. this moves the first text up and allows to insert margin between the lines until the display area is fully utilized. on large displays, if the small diagram is selected, keep the first line rather low to avoid collision with the diagram y-axis label. in this mode, there is still more space between the text lines as before, allowing for improved readability. --- src/Display_Graphic.cpp | 12 ++++++++++-- src/WebApi_device.cpp | 2 +- src/main.cpp | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Display_Graphic.cpp b/src/Display_Graphic.cpp index 12b2aa5..951c0cc 100644 --- a/src/Display_Graphic.cpp +++ b/src/Display_Graphic.cpp @@ -67,11 +67,19 @@ void DisplayGraphicClass::init(Scheduler& scheduler, const DisplayType_t type, c void DisplayGraphicClass::calcLineHeights() { - uint8_t yOff = 0; + bool diagram = (_isLarge && _diagram_mode == DiagramMode_t::Small); + // the diagram needs space. we need to keep + // away from the y-axis label in particular. + uint8_t yOff = (diagram?7:0); for (uint8_t i = 0; i < 4; i++) { setFont(i); - yOff += (_display->getMaxCharHeight()); + yOff += _display->getAscent(); _lineOffsets[i] = yOff; + yOff += ((!_isLarge || diagram)?2:3); + // the descent is a negative value and moves the *next* line's + // baseline. the first line never uses a letter with descent and + // we need that space when showing the small diagram. + yOff -= ((i == 0 && diagram)?0:_display->getDescent()); } } diff --git a/src/WebApi_device.cpp b/src/WebApi_device.cpp index 5f43b37..b1efb7c 100644 --- a/src/WebApi_device.cpp +++ b/src/WebApi_device.cpp @@ -166,12 +166,12 @@ void WebApiDeviceClass::onDeviceAdminPost(AsyncWebServerRequest* request) config.Led_Single[i].Brightness = min(100, config.Led_Single[i].Brightness); } + Display.setDiagramMode(static_cast(config.Display.Diagram.Mode)); Display.setOrientation(config.Display.Rotation); Display.enablePowerSafe = config.Display.PowerSafe; Display.enableScreensaver = config.Display.ScreenSaver; Display.setContrast(config.Display.Contrast); Display.setLanguage(config.Display.Language); - Display.setDiagramMode(static_cast(config.Display.Diagram.Mode)); Display.Diagram().updatePeriod(); WebApi.writeConfig(retMsg); diff --git a/src/main.cpp b/src/main.cpp index c3aea78..02025cd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -120,12 +120,12 @@ void setup() pin.display_clk, pin.display_cs, pin.display_reset); + Display.setDiagramMode(static_cast(config.Display.Diagram.Mode)); Display.setOrientation(config.Display.Rotation); Display.enablePowerSafe = config.Display.PowerSafe; Display.enableScreensaver = config.Display.ScreenSaver; Display.setContrast(config.Display.Contrast); Display.setLanguage(config.Display.Language); - Display.setDiagramMode(static_cast(config.Display.Diagram.Mode)); Display.setStartupDisplay(); MessageOutput.println("done");