Repository navigation
libdmview: unseen boxes draw nothing; dmview keeps the splash screen - #19
Merged
Merged
Conversation
A changed box was redrawn - with what is seen beneath it, up to an opaque box or the root - even when it was not seen: a screen of a page behind the one shown, its opacity 0. The car HMI's speedometer animated on its hidden home screen, and the media screen in front of it - its blurred cover images - was drawn again for every frame of it. A changed box is skipped when a box around it was not seen when last drawn (that box's own opacity changing redraws it with all inside it), or when it was not seen itself and its OPACITY still gives 0 - so a screen fading in is drawn. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The service filled its display black whenever it had no view - also at its start, before any application claimed the display: the splash screen the display driver puts up at boot was wiped for a black screen until the application's view came (dmod-boot's Renode test of the splash screen failed once the board started dmview). Only a view that was shown is cleared away now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
When a box changed, libdmview redrew it, along with whatever is seen beneath it up to an opaque box or the root, even when the box was not seen. A typical case is a page's screen behind the one shown, with opacity 0.
In carhmi-demo, the speedometer keeps animating on the hidden home screen. Every frame of it redrew the media screen in front of it, including its blurred cover images. Profiled on the STM32F746G-DISCO, dmview was drawing continuously (
draw_image,draw_cover,draw_span) while nothing visible changed.A changed box is now skipped when either:
seen == 0). When that box's own opacity changes, that box is dirty itself and is redrawn with everything inside it; orOPACITYstill evaluates to 0. This covers a geometry variable, whose change lands on the parent screen. A screen that is fading in is still drawn.Also: dmview leaves the splash screen when it has no view
The service filled its display black whenever it had no view to show, including at start-up, before any application claimed the display. That wiped the splash screen the display driver shows at boot, leaving a black screen until the application's view arrived. dmod-boot's Renode test of the splash screen fails because of this once the board starts dmview (choco-technologies/dmod-boot#126). Now only a view that was actually shown is cleared away.
Test plan
hidden.dmvsgains a bar and a box driven by$tickon the hidden screen. Changing$tickwhile hidden draws nothing (libdmview_render() == 0). Once the screen is shown, the bar and box are drawn where$tickputs them, and later changes are drawn.🤖 Generated with Claude Code