better lockscreen notifications

This commit is contained in:
2025-10-25 23:10:13 +02:00
parent 5c3cdaaae4
commit f5a780c1c8

View File

@@ -130,12 +130,14 @@ private:
if (!notifications.empty() && (upPressed || downPressed)) { if (!notifications.empty() && (upPressed || downPressed)) {
const std::size_t count = notifications.size(); const std::size_t count = notifications.size();
lastNotificationInteractionMs = clock.millis(); lastNotificationInteractionMs = clock.millis();
navPressed = true;
if (count > 1) { if (count > 1) {
if (upPressed) if (upPressed && selectedNotification > 0) {
selectedNotification = (selectedNotification + count - 1) % count; selectedNotification--;
else if (downPressed) navPressed = true;
selectedNotification = (selectedNotification + 1) % count; } else if (downPressed && selectedNotification < count - 1) {
selectedNotification++;
navPressed = true;
}
} }
} }
@@ -500,8 +502,10 @@ private:
const int arrowsTotalWide = arrowWidth * 2 + arrowSpacing; const int arrowsTotalWide = arrowWidth * 2 + arrowSpacing;
const int arrowX = counterX + (counterWidth - arrowsTotalWide) / 2; const int arrowX = counterX + (counterWidth - arrowsTotalWide) / 2;
const int arrowY = cardMarginTop + cardPadding + textLineHeight + 1; const int arrowY = cardMarginTop + cardPadding + textLineHeight + 1;
drawArrow(framebuffer, arrowX, arrowY, true, scaleSmall); if (selectedNotification > 0)
drawArrow(framebuffer, arrowX + arrowWidth + arrowSpacing, arrowY, false, scaleSmall); drawArrow(framebuffer, arrowX, arrowY, true, scaleSmall);
if (selectedNotification < notifications.size() - 1)
drawArrow(framebuffer, arrowX + arrowWidth + arrowSpacing, arrowY, false, scaleSmall);
const int arrowHeight = font16x8::kGlyphHeight * scaleSmall; const int arrowHeight = font16x8::kGlyphHeight * scaleSmall;
cardHeight = std::max(cardHeight, arrowY + arrowHeight - cardMarginTop); cardHeight = std::max(cardHeight, arrowY + arrowHeight - cardMarginTop);
} }
@@ -524,28 +528,13 @@ private:
const int summaryX = (framebuffer.width() - summaryWidth) / 2; const int summaryX = (framebuffer.width() - summaryWidth) / 2;
const int summaryY = cardMarginTop; const int summaryY = cardMarginTop;
font16x8::drawText(framebuffer, summaryX, summaryY, summary, scaleSmall, true, 1); font16x8::drawText(framebuffer, summaryX, summaryY, summary, scaleSmall, true, 1);
if (notifications.size() > 1) {
const int arrowWidth = font16x8::kGlyphWidth * scaleSmall;
const int arrowSpacing = std::max(1, scaleSmall);
const int arrowsTotalWide = arrowWidth * 2 + arrowSpacing;
const int arrowX = (framebuffer.width() - arrowsTotalWide) / 2;
const int arrowY = summaryY + textLineHeight + 1;
drawArrow(framebuffer, arrowX, arrowY, true, scaleSmall);
drawArrow(framebuffer, arrowX + arrowWidth + arrowSpacing, arrowY, false, scaleSmall);
const int arrowHeight = font16x8::kGlyphHeight * scaleSmall;
cardHeight = std::max(cardHeight, arrowY + arrowHeight - cardMarginTop);
}
} }
} }
const int defaultTimeY = (framebuffer.height() - font16x8::kGlyphHeight * scaleTime) / 2 - 8; const int defaultTimeY = (framebuffer.height() - font16x8::kGlyphHeight * scaleTime) / 2 - 8;
int timeY = defaultTimeY; const int minTimeY = (cardHeight > 0) ? (cardMarginTop + cardHeight + 12) : 16;
if (cardHeight > 0) const int maxTimeY = std::max(minTimeY, framebuffer.height() - font16x8::kGlyphHeight * scaleTime - 48);
timeY = cardMarginTop + cardHeight + 16; const int timeY = std::clamp(defaultTimeY, minTimeY, maxTimeY);
const int minTimeY = (cardHeight > 0) ? (cardMarginTop + cardHeight + 12) : 16;
const int maxTimeY = std::max(minTimeY, framebuffer.height() - font16x8::kGlyphHeight * scaleTime - 48);
timeY = std::clamp(timeY, minTimeY, maxTimeY);
char hoursMinutes[6]; char hoursMinutes[6];
std::snprintf(hoursMinutes, sizeof(hoursMinutes), "%02d:%02d", snap.hour24, snap.minute); std::snprintf(hoursMinutes, sizeof(hoursMinutes), "%02d:%02d", snap.hour24, snap.minute);