From 9e60b23334dfdd12d8c5ba89344ef05cabbab1bf Mon Sep 17 00:00:00 2001 From: Jason P Date: Mon, 3 Aug 2026 09:13:52 -0500 Subject: [PATCH] Targeted build fixes, especially Heltec T1 (#11345) --- src/graphics/SharedUIDisplay.cpp | 13 +++++++------ src/graphics/draw/UIRenderer.cpp | 10 +++++----- src/modules/CannedMessageModule.cpp | 8 ++++---- variants/nrf52840/heltec_mesh_node_t1/variant.h | 2 ++ 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/graphics/SharedUIDisplay.cpp b/src/graphics/SharedUIDisplay.cpp index 88ba3f96b..0a9ef95fd 100644 --- a/src/graphics/SharedUIDisplay.cpp +++ b/src/graphics/SharedUIDisplay.cpp @@ -118,11 +118,11 @@ void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const char *ti const int screenW = display->getWidth(); const int screenH = display->getHeight(); const int headerHeight = highlightHeight + 2; - const uint16_t headerColorForRoles = getThemeHeaderBg(); // Color TFT headers use a fixed dark background + white glyphs. // Keep legacy inverted bitmap behavior only for monochrome displays. const bool useInvertedHeaderStyle = (isInverted && !force_no_invert && !isTFTColoringEnabled() && !transparent_background); #if GRAPHICS_TFT_COLORING_ENABLED + const uint16_t headerColorForRoles = getThemeHeaderBg(); int statusLeftEndX = 0; int statusRightStartX = screenW; const bool isClockHeader = transparent_background && show_date && (!titleStr || titleStr[0] == '\0'); @@ -131,11 +131,12 @@ void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const char *ti #endif { +#if GRAPHICS_TFT_COLORING_ENABLED const uint16_t headerColor = getThemeHeaderBg(); const uint16_t headerTextColor = getThemeHeaderText(); const uint16_t headerTitleColorForRole = use_title_color_override ? title_color_override : headerTextColor; uint16_t headerStatusColor = getThemeHeaderStatus(); -#if GRAPHICS_TFT_COLORING_ENABLED + // Clock frame uses transparent header + date + empty title. // For accent clock themes (Pink/Creamsicle + classic monochrome), tint // status items (battery outline, %, date, mail icon) to the header accent. @@ -232,12 +233,12 @@ void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const char *ti bool useHorizontalBattery = (currentResolution == ScreenResolution::High && screenW >= screenH); const int textY = y + (highlightHeight - FONT_HEIGHT_SMALL) / 2; +#if GRAPHICS_TFT_COLORING_ENABLED bool hasBatteryFillRegion = false; int16_t batteryFillRegionX = 0; int16_t batteryFillRegionY = 0; int16_t batteryFillRegionW = 0; int16_t batteryFillRegionH = 0; -#if GRAPHICS_TFT_COLORING_ENABLED uint16_t batteryFillColor = getThemeBatteryFillColor(chargePercent); if (useClockHeaderAccent) { batteryFillColor = getThemeHeaderBg(); @@ -316,11 +317,11 @@ void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const char *ti char chargeStr[4]; snprintf(chargeStr, sizeof(chargeStr), "%d", chargePercent); int chargeNumWidth = display->getStringWidth(chargeStr); - const int percentWidth = display->getStringWidth("%"); const int percentX = batteryX + chargeNumWidth - 1; display->drawString(batteryX, textY, chargeStr); display->drawString(percentX, textY, "%"); #if GRAPHICS_TFT_COLORING_ENABLED + const int percentWidth = display->getStringWidth("%"); statusLeftEndX = percentX + percentWidth + 2; #endif if (isBold) { @@ -569,10 +570,10 @@ void drawCommonFooter(OLEDDisplay *display, int16_t x, int16_t y) const int footerH = (connection_icon_height * scale) + (2 * scale); const int iconX = 0; const int iconY = SCREEN_HEIGHT - (connection_icon_height * scale); - const int iconW = connection_icon_width * scale; - const int iconH = connection_icon_height * scale; #if GRAPHICS_TFT_COLORING_ENABLED + const int iconW = connection_icon_width * scale; + const int iconH = connection_icon_height * scale; // Only tint the link glyph itself on TFT; keep the footer background black. setAndRegisterTFTColorRole(TFTColorRole::ConnectionIcon, TFTPalette::Blue, TFTPalette::Black, iconX, iconY, iconW, iconH); #endif diff --git a/src/graphics/draw/UIRenderer.cpp b/src/graphics/draw/UIRenderer.cpp index c9c4ba9f0..065a7ff47 100644 --- a/src/graphics/draw/UIRenderer.cpp +++ b/src/graphics/draw/UIRenderer.cpp @@ -1170,7 +1170,7 @@ void UIRenderer::drawDeviceFocused(OLEDDisplay *display, OLEDDisplayUiState *sta // === Node Identity === int textWidth = 0; int nameX = 0; - const char *shortName = owner.short_name ? owner.short_name : ""; + const char *shortName = owner.short_name[0] ? owner.short_name : ""; // === ShortName Centered === textWidth = UIRenderer::measureStringWithEmotes(display, shortName); @@ -1259,7 +1259,7 @@ void UIRenderer::drawDeviceFocused(OLEDDisplay *display, OLEDDisplayUiState *sta int nameX = 0; int yOffset = (currentResolution == ScreenResolution::High) ? 0 : 5; const char *longName = (nodeInfoLiteHasUser(ourNode) && ourNode->long_name[0]) ? ourNode->long_name : ""; - const char *shortName = owner.short_name ? owner.short_name : ""; + const char *shortName = owner.short_name[0] ? owner.short_name : ""; char combinedName[96]; if (longName[0] && shortName[0]) { snprintf(combinedName, sizeof(combinedName), "%s (%s)", longName, shortName); @@ -1444,7 +1444,7 @@ void UIRenderer::drawIconScreen(const char *upperMsg, OLEDDisplay *display, OLED } // Draw version and short name in bottom middle char footer[64]; - if (owner.short_name && owner.short_name[0]) { + if (owner.short_name[0]) { snprintf(footer, sizeof(footer), "%s %s", xstr(APP_VERSION_SHORT), owner.short_name); } else { snprintf(footer, sizeof(footer), "%s", xstr(APP_VERSION_SHORT)); @@ -1499,7 +1499,7 @@ void UIRenderer::drawIconScreen(const char *upperMsg, OLEDDisplay *display, OLED if (gBootSplashBoldPass) { display->drawString(versionX + 1, y + 5, version); } - if (owner.short_name && owner.short_name[0]) { + if (owner.short_name[0]) { const char *shortName = owner.short_name; int shortNameW = UIRenderer::measureStringWithEmotes(display, shortName); int shortNameX = x + SCREEN_WIDTH - shortNameW - 5; @@ -1727,7 +1727,7 @@ void UIRenderer::drawOEMIconScreen(const char *upperMsg, OLEDDisplay *display, O const char *version = xstr(APP_VERSION_SHORT); int versionX = x + SCREEN_WIDTH - display->getStringWidth(version); display->drawString(versionX, y + 0, version); - if (owner.short_name && owner.short_name[0]) { + if (owner.short_name[0]) { const char *shortName = owner.short_name; int shortNameW = UIRenderer::measureStringWithEmotes(display, shortName); int shortNameX = x + SCREEN_WIDTH - shortNameW; diff --git a/src/modules/CannedMessageModule.cpp b/src/modules/CannedMessageModule.cpp index 24e8339e3..c05a67497 100644 --- a/src/modules/CannedMessageModule.cpp +++ b/src/modules/CannedMessageModule.cpp @@ -2229,19 +2229,19 @@ ProcessMessage CannedMessageModule::handleReceived(const meshtastic_MeshPacket & snprintf(buf, sizeof(buf), "Message sent to\n#%s\n\nSignal: %s", (channelName && channelName[0]) ? channelName : "unknown", qualityLabel); } else { - snprintf(buf, sizeof(buf), "DM sent to\n@%s\n\nSignal: %s", - (nodeName && nodeName[0]) ? nodeName : "unknown", qualityLabel); + snprintf(buf, sizeof(buf), "DM sent to\n@%s\n\nSignal: %s", nodeName[0] ? nodeName : "unknown", + qualityLabel); } } else if (isAck && !isFromDest) { // Relay ACK banner snprintf(buf, sizeof(buf), "DM Relayed\n(Status Unknown)\n%s\n\nSignal: %s", - (nodeName && nodeName[0]) ? nodeName : "unknown", qualityLabel); + nodeName[0] ? nodeName : "unknown", qualityLabel); } else { if (this->lastSentNode == NODENUM_BROADCAST) { snprintf(buf, sizeof(buf), "Message failed to\n#%s", (channelName && channelName[0]) ? channelName : "unknown"); } else { - snprintf(buf, sizeof(buf), "DM failed to\n@%s", (nodeName && nodeName[0]) ? nodeName : "unknown"); + snprintf(buf, sizeof(buf), "DM failed to\n@%s", nodeName[0] ? nodeName : "unknown"); } } diff --git a/variants/nrf52840/heltec_mesh_node_t1/variant.h b/variants/nrf52840/heltec_mesh_node_t1/variant.h index 88a2c8b4c..8cfa6f65c 100644 --- a/variants/nrf52840/heltec_mesh_node_t1/variant.h +++ b/variants/nrf52840/heltec_mesh_node_t1/variant.h @@ -28,7 +28,9 @@ extern "C" { #endif // __cplusplus +#ifndef HELTEC_MESH_NODE_T1 #define HELTEC_MESH_NODE_T1 +#endif // Display (ST7735, 80x160 TFT via SPI1) #define HAS_SPI_TFT 1