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:
12
src/main.cpp
12
src/main.cpp
@@ -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) {
|
if (forceRedraw || millis() - lastPollMs >= POLL_INTERVAL_MS) {
|
||||||
lastPollMs = millis();
|
lastPollMs = millis();
|
||||||
uint32_t currentVersion = AircraftTable::version();
|
uint32_t currentVersion = AircraftTable::version();
|
||||||
@@ -691,11 +700,13 @@ void loop() {
|
|||||||
lastSweepMs = millis();
|
lastSweepMs = millis();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t nowMs = millis();
|
uint32_t nowMs = millis();
|
||||||
|
|
||||||
RadarScreen::updateProximityAlert(nowMs);
|
RadarScreen::updateProximityAlert(nowMs);
|
||||||
|
|
||||||
|
if (!screensaverShowing) {
|
||||||
if (nowMs - lastSweepMs >= SWEEP_TICK_MS) {
|
if (nowMs - lastSweepMs >= SWEEP_TICK_MS) {
|
||||||
uint32_t deltaMs = nowMs - lastSweepMs;
|
uint32_t deltaMs = nowMs - lastSweepMs;
|
||||||
lastSweepMs = nowMs;
|
lastSweepMs = nowMs;
|
||||||
@@ -708,6 +719,7 @@ void loop() {
|
|||||||
updateStatusLine();
|
updateStatusLine();
|
||||||
updateNightDimming();
|
updateNightDimming();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t timeoutMin = SettingsStore::screenTimeoutMinutes();
|
uint8_t timeoutMin = SettingsStore::screenTimeoutMinutes();
|
||||||
if (!screenDimmed && timeoutMin > 0) {
|
if (!screenDimmed && timeoutMin > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user