Pause Banner for Eink moved to bottom

This commit is contained in:
HarukiToreda 2025-06-24 02:14:01 -04:00
parent 3d28086f68
commit 9de5d170bf

View File

@ -834,44 +834,42 @@ void UIRenderer::drawScreensaverOverlay(OLEDDisplay *display, OLEDDisplayUiState
{ {
LOG_DEBUG("Draw screensaver overlay"); LOG_DEBUG("Draw screensaver overlay");
EINK_ADD_FRAMEFLAG(display, COSMETIC); // Take the opportunity for a full-refresh EINK_ADD_FRAMEFLAG(display, COSMETIC); // Full refresh for screensaver
// Config // Config
display->setFont(FONT_SMALL); display->setFont(FONT_SMALL);
display->setTextAlignment(TEXT_ALIGN_LEFT); display->setTextAlignment(TEXT_ALIGN_LEFT);
const char *pauseText = "Screen Paused"; const char *pauseText = "Screen Paused";
const char *idText = owner.short_name; const char *idText = owner.short_name;
const bool useId = haveGlyphs(idText); // This bool is used to hide the idText box if we can't render the short name const bool useId = haveGlyphs(idText);
constexpr uint16_t padding = 5; constexpr uint8_t padding = 2;
constexpr uint8_t dividerGap = 1; constexpr uint8_t dividerGap = 1;
constexpr uint8_t imprecision = 5; // How far the box origins can drift from center. Combat burn-in.
// Dimensions // Text widths
const uint16_t idTextWidth = display->getStringWidth(idText, strlen(idText), true); // "true": handle utf8 chars const uint16_t idTextWidth = display->getStringWidth(idText, strlen(idText), true);
const uint16_t pauseTextWidth = display->getStringWidth(pauseText, strlen(pauseText)); const uint16_t pauseTextWidth = display->getStringWidth(pauseText, strlen(pauseText));
const uint16_t boxWidth = padding + (useId ? idTextWidth + padding + padding : 0) + pauseTextWidth + padding; const uint16_t boxWidth = padding + (useId ? idTextWidth + padding : 0) + pauseTextWidth + padding;
const uint16_t boxHeight = padding + FONT_HEIGHT_SMALL + padding; const uint16_t boxHeight = FONT_HEIGHT_SMALL + (padding * 2);
// Position // Flush with bottom
const int16_t boxLeft = (display->width() / 2) - (boxWidth / 2) + random(-imprecision, imprecision + 1); const int16_t boxLeft = (display->width() / 2) - (boxWidth / 2);
// const int16_t boxRight = boxLeft + boxWidth - 1; const int16_t boxTop = display->height() - boxHeight;
const int16_t boxTop = (display->height() / 2) - (boxHeight / 2 + random(-imprecision, imprecision + 1)); const int16_t boxBottom = display->height() - 1;
const int16_t boxBottom = boxTop + boxHeight - 1;
const int16_t idTextLeft = boxLeft + padding; const int16_t idTextLeft = boxLeft + padding;
const int16_t idTextTop = boxTop + padding; const int16_t idTextTop = boxTop + padding;
const int16_t pauseTextLeft = boxLeft + (useId ? padding + idTextWidth + padding : 0) + padding; const int16_t pauseTextLeft = boxLeft + (useId ? idTextWidth + (padding * 2) : 0) + padding;
const int16_t pauseTextTop = boxTop + padding; const int16_t pauseTextTop = boxTop + padding;
const int16_t dividerX = boxLeft + padding + idTextWidth + padding; const int16_t dividerX = boxLeft + padding + idTextWidth + padding;
const int16_t dividerTop = boxTop + 1 + dividerGap; const int16_t dividerTop = boxTop + dividerGap;
const int16_t dividerBottom = boxBottom - 1 - dividerGap; const int16_t dividerBottom = boxBottom - dividerGap;
// Draw: box // Draw: box
display->setColor(EINK_WHITE); display->setColor(EINK_WHITE);
display->fillRect(boxLeft - 1, boxTop - 1, boxWidth + 2, boxHeight + 2); // Clear a slightly oversized area for the box display->fillRect(boxLeft, boxTop, boxWidth, boxHeight);
display->setColor(EINK_BLACK); display->setColor(EINK_BLACK);
display->drawRect(boxLeft, boxTop, boxWidth, boxHeight); display->drawRect(boxLeft, boxTop, boxWidth, boxHeight);
// Draw: Text // Draw: text
if (useId) if (useId)
display->drawString(idTextLeft, idTextTop, idText); display->drawString(idTextLeft, idTextTop, idText);
display->drawString(pauseTextLeft, pauseTextTop, pauseText); display->drawString(pauseTextLeft, pauseTextTop, pauseText);