fix(vegas): a static pause redraws its plugin for the whole pause

The pause called display(force_clear=True) once and slept out the
duration, so a plugin that rotates its screens or animates (Fantasy
Blitz's playlist) was frozen on its first frame. The pause now calls
display() again at the rotation's rate: once a second, or the high-FPS
interval for a plugin that declares needs_high_fps (or scrolls). Only
the first call clears. A redraw that finds update() holding the plugin
lock is skipped; the pause carries on. Interrupt checks and the
watchdog beat still run every 0.1 s; a raise still ends the pause.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Chuck
2026-10-15 18:06:48 -04:00
co-authored by Claude Opus 5.5
parent 397333ae59
commit 37d2280a15
6 changed files with 170 additions and 17 deletions
+5 -2
View File
@@ -21,7 +21,10 @@ Each plugin has a *Vegas participation*:
**`pause`:**
- The scroll stops when the plugin's turn comes round
- The plugin draws the whole panel for its display duration, then the
scroll resumes
scroll resumes. `display()` is called again through the pause at the
rotation's rate (once a second, or the high-FPS rate for a plugin that
declares `needs_high_fps`), so a plugin can rotate screens or animate in
it; only the first call passes `force_clear=True`
- Best for content that needs to be read in full, or alerts
**`exclude`:**
@@ -362,7 +365,7 @@ Vegas mode consists of four core components working together to provide smooth 1
**Main Loop:**
1. Check for interrupts (live priority, on-demand, config updates)
2. If static pause active, wait for duration
2. If a static pause is due, redraw that plugin for its duration
3. Otherwise, delegate to render pipeline for frame rendering
4. Sleep to maintain target FPS
+1 -1
View File
@@ -328,7 +328,7 @@ Each plugin takes part in Vegas mode in one of three ways:
| Participation | What Vegas does |
|---|---|
| `'scroll'` | The plugin's content (`get_vegas_content()`) scrolls by with everything else |
| `'pause'` | The scroll stops when the plugin's turn comes round; its `display()` draws it full screen for `get_display_duration()` seconds, then the scroll resumes |
| `'pause'` | The scroll stops when the plugin's turn comes round; its `display()` draws it full screen for `get_display_duration()` seconds, then the scroll resumes. `display()` is called again through the pause, as in the rotation: once a second, or at the high-FPS rate if the plugin declares `needs_high_fps`; the first call passes `force_clear=True` |
| `'exclude'` | The plugin is left out of Vegas mode |
Declare the plugin's default in `manifest.json`: