From 0ced4188b6fd32dfcdb672f2e00caa3477809072 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sat, 31 May 2025 10:52:17 -0500 Subject: [PATCH] Move drawfunctionoverlay --- src/graphics/Screen.cpp | 25 +++++------------- src/graphics/Screen.h | 7 +++++ src/graphics/ScreenGlobals.cpp | 6 +++++ src/graphics/draw/CompassRenderer.cpp | 1 + src/graphics/draw/DebugRenderer.cpp | 1 + src/graphics/draw/ScreenRenderer.cpp | 0 src/graphics/draw/ScreenRenderer.h | 37 --------------------------- src/graphics/draw/UIRenderer.cpp | 15 ++++++++++- src/graphics/draw/UIRenderer.h | 3 +++ 9 files changed, 38 insertions(+), 57 deletions(-) create mode 100644 src/graphics/ScreenGlobals.cpp delete mode 100644 src/graphics/draw/ScreenRenderer.cpp delete mode 100644 src/graphics/draw/ScreenRenderer.h diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 16d63eb3e..4d98430d9 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -114,17 +114,16 @@ uint32_t dopThresholds[5] = {2000, 1000, 500, 200, 100}; // we'll need to hold onto pointers for the modules that can draw a frame. std::vector moduleFrames; +// Global variables for screen function overlay symbols +std::vector functionSymbol; +std::string functionSymbolString; + // Stores the last 4 of our hardware ID, to make finding the device for pairing easier // FIXME: Needs refactoring and getMacAddr needs to be moved to a utility class extern "C" { char ourId[5]; } -// vector where symbols (string) are displayed in bottom corner of display. -std::vector functionSymbol; -// string displayed in bottom right corner of display. Created from elements in functionSymbol vector -std::string functionSymbolString = ""; - #if HAS_GPS // GeoCoord object for the screen GeoCoord geoCoord; @@ -163,18 +162,6 @@ void Screen::showOverlayBanner(const String &message, uint32_t durationMs) alertBannerUntil = (durationMs == 0) ? 0 : millis() + durationMs; } -// draw overlay in bottom right corner of screen to show when notifications are muted or modifier key is active -static void drawFunctionOverlay(OLEDDisplay *display, OLEDDisplayUiState *state) -{ - // LOG_DEBUG("Draw function overlay"); - if (functionSymbol.begin() != functionSymbol.end()) { - char buf[64]; - display->setFont(FONT_SMALL); - snprintf(buf, sizeof(buf), "%s", functionSymbolString.c_str()); - display->drawString(SCREEN_WIDTH - display->getStringWidth(buf), SCREEN_HEIGHT - FONT_HEIGHT_SMALL, buf); - } -} - static void drawModuleFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y) { uint8_t module_frame; @@ -1078,8 +1065,8 @@ void Screen::setup() // === Set custom overlay callbacks === static OverlayCallback overlays[] = { - drawFunctionOverlay, // For mute/buzzer modifiers etc. - graphics::UIRenderer::drawNavigationBar // Custom indicator icons for each frame + graphics::UIRenderer::drawFunctionOverlay, // For mute/buzzer modifiers etc. + graphics::UIRenderer::drawNavigationBar // Custom indicator icons for each frame }; ui->setOverlays(overlays, sizeof(overlays) / sizeof(overlays[0])); diff --git a/src/graphics/Screen.h b/src/graphics/Screen.h index ee59eddfa..c8e2b1ffe 100644 --- a/src/graphics/Screen.h +++ b/src/graphics/Screen.h @@ -5,6 +5,8 @@ #include "detect/ScanI2C.h" #include "mesh/generated/meshtastic/config.pb.h" #include +#include +#include #define getStringCenteredX(s) ((SCREEN_WIDTH - display->getStringWidth(s)) / 2) @@ -66,6 +68,7 @@ class Screen #include "mesh/MeshModule.h" #include "power.h" #include +#include // 0 to 255, though particular variants might define different defaults #ifndef BRIGHTNESS_DEFAULT @@ -701,4 +704,8 @@ class Screen : public concurrency::OSThread extern String alertBannerMessage; extern uint32_t alertBannerUntil; +// Extern declarations for function symbols used in UIRenderer +extern std::vector functionSymbol; +extern std::string functionSymbolString; + #endif \ No newline at end of file diff --git a/src/graphics/ScreenGlobals.cpp b/src/graphics/ScreenGlobals.cpp new file mode 100644 index 000000000..bc139faaf --- /dev/null +++ b/src/graphics/ScreenGlobals.cpp @@ -0,0 +1,6 @@ +#include +#include + +// Global variables for screen function overlay +std::vector functionSymbol; +std::string functionSymbolString; diff --git a/src/graphics/draw/CompassRenderer.cpp b/src/graphics/draw/CompassRenderer.cpp index da763b64d..b55dd5141 100644 --- a/src/graphics/draw/CompassRenderer.cpp +++ b/src/graphics/draw/CompassRenderer.cpp @@ -1,4 +1,5 @@ #include "CompassRenderer.h" +#include "NodeDB.h" #include "UIRenderer.h" #include "configuration.h" #include "gps/GeoCoord.h" diff --git a/src/graphics/draw/DebugRenderer.cpp b/src/graphics/draw/DebugRenderer.cpp index 596a6e022..38549fee2 100644 --- a/src/graphics/draw/DebugRenderer.cpp +++ b/src/graphics/draw/DebugRenderer.cpp @@ -1,6 +1,7 @@ #include "DebugRenderer.h" #include "../Screen.h" #include "FSCommon.h" +#include "NodeDB.h" #include "Throttle.h" #include "UIRenderer.h" #include "airtime.h" diff --git a/src/graphics/draw/ScreenRenderer.cpp b/src/graphics/draw/ScreenRenderer.cpp deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/graphics/draw/ScreenRenderer.h b/src/graphics/draw/ScreenRenderer.h deleted file mode 100644 index 48709396f..000000000 --- a/src/graphics/draw/ScreenRenderer.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -#include "graphics/Screen.h" -#include -#include - -namespace graphics -{ - -/// Forward declarations -class Screen; - -/** - * @brief Screen-specific drawing functions - * - * Contains drawing functions for specific screen types like GPS location, - * memory usage, device info, and other specialized screens. - */ -namespace ScreenRenderer -{ -// Screen frame functions -void drawCompassAndLocationScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y); -void drawMemoryUsage(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y); -void drawDeviceFocused(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y); -void drawLoRaFocused(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y); - -// Text message screen -void drawTextMessageFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y); - -// Module and firmware frames -void drawModuleFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y); -void drawFrameFirmware(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y); -void drawCriticalFaultFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y); - -} // namespace ScreenRenderer - -} // namespace graphics diff --git a/src/graphics/draw/UIRenderer.cpp b/src/graphics/draw/UIRenderer.cpp index 4c784dc27..a379af2e3 100644 --- a/src/graphics/draw/UIRenderer.cpp +++ b/src/graphics/draw/UIRenderer.cpp @@ -1,9 +1,10 @@ #include "UIRenderer.h" -#include "../Screen.h" #include "GPSStatus.h" +#include "NodeDB.h" #include "NodeListRenderer.h" #include "configuration.h" #include "gps/GeoCoord.h" +#include "graphics/Screen.h" #include "graphics/ScreenFonts.h" #include "graphics/SharedUIDisplay.h" #include "graphics/images.h" @@ -1126,6 +1127,18 @@ void drawOEMBootScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t #endif +// Function overlay for showing mute/buzzer modifiers etc. +void drawFunctionOverlay(OLEDDisplay *display, OLEDDisplayUiState *state) +{ + // LOG_DEBUG("Draw function overlay"); + if (functionSymbol.begin() != functionSymbol.end()) { + char buf[64]; + display->setFont(FONT_SMALL); + snprintf(buf, sizeof(buf), "%s", functionSymbolString.c_str()); + display->drawString(SCREEN_WIDTH - display->getStringWidth(buf), SCREEN_HEIGHT - FONT_HEIGHT_SMALL, buf); + } +} + // Navigation bar overlay implementation static int8_t lastFrameIndex = -1; static uint32_t lastFrameChangeTime = 0; diff --git a/src/graphics/draw/UIRenderer.h b/src/graphics/draw/UIRenderer.h index 374360d89..b4c9e6edc 100644 --- a/src/graphics/draw/UIRenderer.h +++ b/src/graphics/draw/UIRenderer.h @@ -48,6 +48,9 @@ void drawScrollbar(OLEDDisplay *display, int visibleItems, int totalItems, int s // Overlay and special screens void drawFrameText(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y, const char *text); +// Function overlay for showing mute/buzzer modifiers etc. +void drawFunctionOverlay(OLEDDisplay *display, OLEDDisplayUiState *state); + // Navigation bar overlay void drawNavigationBar(OLEDDisplay *display, OLEDDisplayUiState *state);