You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PointerReleased/PointerExited events after clicking a button result in the full screen being re-rendered and marked as dirty with the software renderer.
What behavior did you expect, and what happened instead?
I expected only the button area to be rendered and marked dirty on release, but instead the full screen is being rendered and marked dirty. This occurs only on PointerReleased/PointerExited. The PointerPressed event on the button does exactly what I'd expect -- render and mark only the button area as dirty, including the subsequent animation updates of the button area.
Steps to reproduce the issue
Dispatch a series of PointerPressed, PointerReleased, and PointerExited events to a button, noting the resulting dirty areas from SoftwareRenderer::render when redrawing.
Any error messages or logs, if available.
My app log output. Note that the initial SoftwareRenderer::render results after dispatching PointerPressed return a dirty area that's 464x100, which is the button area. This is what I expect. However, the SoftwareRenderer::render results after dispatching PointerReleased and PointerExited events always returns a dirty area representing the full screen, 480x320.
@ogoffart and I suspect that this is due to an if() inside the Button implementation, which - upon condition change - ends up destroying a sub-tree of items and causing a full refresh :(.
Bug Description
PointerReleased/PointerExited events after clicking a button result in the full screen being re-rendered and marked as dirty with the software renderer.
I expected only the button area to be rendered and marked dirty on release, but instead the full screen is being rendered and marked dirty. This occurs only on PointerReleased/PointerExited. The PointerPressed event on the button does exactly what I'd expect -- render and mark only the button area as dirty, including the subsequent animation updates of the button area.
Dispatch a series of PointerPressed, PointerReleased, and PointerExited events to a button, noting the resulting dirty areas from
SoftwareRenderer::render
when redrawing.My app log output. Note that the initial
SoftwareRenderer::render
results after dispatching PointerPressed return a dirty area that's 464x100, which is the button area. This is what I expect. However, theSoftwareRenderer::render
results after dispatching PointerReleased and PointerExited events always returns a dirty area representing the full screen, 480x320.Video of this in action is posted here: https://youtu.be/Q77ma-mtZVA?si=XU-Lybd8xA-5LFRA
Reproducible Code (if applicable)
Touch event/repaint loop:
Slint UI code:
Environment Details
Product Impact
An open source nitrox analyzer for scuba diving. Will be publishing to Github, but right now it's in its infancy.
It's a performance-related inconvenience. Full screen repaints take ~100ms, so tapping in quick succession can be noticeably laggy.
The text was updated successfully, but these errors were encountered: