Fix screensaver flicker: pause radar render/tick/status-line while active

Radar rendering, sweep tick, and status-line updates ran regardless
of screensaver state, so each aircraft-update cycle or sweep tick
repainted the full radar over the dimmed starfield while the clock
kept redrawing on top - visible as flicker between the two. Both
drawing blocks now skip entirely while screensaverShowing is true;
updateProximityAlert() (LED/sound only, no display writes) keeps
running unaffected.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Eiswolf-BG
2026-08-12 23:22:38 +02:00
parent 7b31a92606
commit c08a66e2b2

View File

@@ -681,6 +681,15 @@ void loop() {
}
}
// Waehrend der Ruhebildschirm aktiv ist (screensaverShowing), duerfen
// Radar-Rendering/Sweep/Statuszeile den Bildschirm NICHT mehr
// ueberschreiben - sonst wuerde der naechste Aircraft-Update-Zyklus
// (oder der Sweep-Tick) den gedimmten Sternenhimmel jederzeit wieder mit
// dem vollen Radarbild uebermalen, waehrend gleichzeitig
// drawScreensaverClock() im Sekundentakt seinen Streifen drueberzeichnet
// - das Ergebnis war sichtbares Geflacker zwischen Radarbild und Uhr
// statt eines ruhigen Sternenhimmels.
if (!screensaverShowing) {
if (forceRedraw || millis() - lastPollMs >= POLL_INTERVAL_MS) {
lastPollMs = millis();
uint32_t currentVersion = AircraftTable::version();
@@ -691,11 +700,13 @@ void loop() {
lastSweepMs = millis();
}
}
}
uint32_t nowMs = millis();
RadarScreen::updateProximityAlert(nowMs);
if (!screensaverShowing) {
if (nowMs - lastSweepMs >= SWEEP_TICK_MS) {
uint32_t deltaMs = nowMs - lastSweepMs;
lastSweepMs = nowMs;
@@ -708,6 +719,7 @@ void loop() {
updateStatusLine();
updateNightDimming();
}
}
uint8_t timeoutMin = SettingsStore::screenTimeoutMinutes();
if (!screenDimmed && timeoutMin > 0) {