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,14 +681,24 @@ void loop() {
} }
} }
if (forceRedraw || millis() - lastPollMs >= POLL_INTERVAL_MS) { // Waehrend der Ruhebildschirm aktiv ist (screensaverShowing), duerfen
lastPollMs = millis(); // Radar-Rendering/Sweep/Statuszeile den Bildschirm NICHT mehr
uint32_t currentVersion = AircraftTable::version(); // ueberschreiben - sonst wuerde der naechste Aircraft-Update-Zyklus
if (forceRedraw || currentVersion != lastRenderedVersion) { // (oder der Sweep-Tick) den gedimmten Sternenhimmel jederzeit wieder mit
lastRenderedVersion = currentVersion; // dem vollen Radarbild uebermalen, waehrend gleichzeitig
forceRedraw = false; // drawScreensaverClock() im Sekundentakt seinen Streifen drueberzeichnet
RadarScreen::render(tft, CONTENT_TOP); // - das Ergebnis war sichtbares Geflacker zwischen Radarbild und Uhr
lastSweepMs = millis(); // statt eines ruhigen Sternenhimmels.
if (!screensaverShowing) {
if (forceRedraw || millis() - lastPollMs >= POLL_INTERVAL_MS) {
lastPollMs = millis();
uint32_t currentVersion = AircraftTable::version();
if (forceRedraw || currentVersion != lastRenderedVersion) {
lastRenderedVersion = currentVersion;
forceRedraw = false;
RadarScreen::render(tft, CONTENT_TOP);
lastSweepMs = millis();
}
} }
} }
@@ -696,17 +706,19 @@ void loop() {
RadarScreen::updateProximityAlert(nowMs); RadarScreen::updateProximityAlert(nowMs);
if (nowMs - lastSweepMs >= SWEEP_TICK_MS) { if (!screensaverShowing) {
uint32_t deltaMs = nowMs - lastSweepMs; if (nowMs - lastSweepMs >= SWEEP_TICK_MS) {
lastSweepMs = nowMs; uint32_t deltaMs = nowMs - lastSweepMs;
RadarScreen::tick(tft, CONTENT_TOP, deltaMs); lastSweepMs = nowMs;
updateEmergencyBanner(nowMs); RadarScreen::tick(tft, CONTENT_TOP, deltaMs);
} updateEmergencyBanner(nowMs);
}
if (nowMs - lastStatusLineMs >= STATUS_LINE_UPDATE_MS) { if (nowMs - lastStatusLineMs >= STATUS_LINE_UPDATE_MS) {
lastStatusLineMs = nowMs; lastStatusLineMs = nowMs;
updateStatusLine(); updateStatusLine();
updateNightDimming(); updateNightDimming();
}
} }
uint8_t timeoutMin = SettingsStore::screenTimeoutMinutes(); uint8_t timeoutMin = SettingsStore::screenTimeoutMinutes();