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:
48
src/main.cpp
48
src/main.cpp
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user