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) {
|
||||
lastPollMs = millis();
|
||||
uint32_t currentVersion = AircraftTable::version();
|
||||
if (forceRedraw || currentVersion != lastRenderedVersion) {
|
||||
lastRenderedVersion = currentVersion;
|
||||
forceRedraw = false;
|
||||
RadarScreen::render(tft, CONTENT_TOP);
|
||||
lastSweepMs = millis();
|
||||
// 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();
|
||||
if (forceRedraw || currentVersion != lastRenderedVersion) {
|
||||
lastRenderedVersion = currentVersion;
|
||||
forceRedraw = false;
|
||||
RadarScreen::render(tft, CONTENT_TOP);
|
||||
lastSweepMs = millis();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -696,17 +706,19 @@ void loop() {
|
||||
|
||||
RadarScreen::updateProximityAlert(nowMs);
|
||||
|
||||
if (nowMs - lastSweepMs >= SWEEP_TICK_MS) {
|
||||
uint32_t deltaMs = nowMs - lastSweepMs;
|
||||
lastSweepMs = nowMs;
|
||||
RadarScreen::tick(tft, CONTENT_TOP, deltaMs);
|
||||
updateEmergencyBanner(nowMs);
|
||||
}
|
||||
if (!screensaverShowing) {
|
||||
if (nowMs - lastSweepMs >= SWEEP_TICK_MS) {
|
||||
uint32_t deltaMs = nowMs - lastSweepMs;
|
||||
lastSweepMs = nowMs;
|
||||
RadarScreen::tick(tft, CONTENT_TOP, deltaMs);
|
||||
updateEmergencyBanner(nowMs);
|
||||
}
|
||||
|
||||
if (nowMs - lastStatusLineMs >= STATUS_LINE_UPDATE_MS) {
|
||||
lastStatusLineMs = nowMs;
|
||||
updateStatusLine();
|
||||
updateNightDimming();
|
||||
if (nowMs - lastStatusLineMs >= STATUS_LINE_UPDATE_MS) {
|
||||
lastStatusLineMs = nowMs;
|
||||
updateStatusLine();
|
||||
updateNightDimming();
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t timeoutMin = SettingsStore::screenTimeoutMinutes();
|
||||
|
||||
Reference in New Issue
Block a user