Make Hover Listener respect transforms #32025
Merged
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.

Description
Before this change a
RenderPointerListenerthat had active hover listeners (onPointerEnter,onPointerHover,onPointerExit) would drop any previous transforms on the floor if nobody else in that subtree required compositing. With this changeRenderPointerListeneritself now requests compositing if one of the hover listeners is set.Debugging notes: If Nobody in a subtree requests compositing, the
RenderTransformwill execute the provided transform directly on the canvas instead of introducing aTransformLayer. When theRenderPointerListenerpushes a newAnnotatedRegionLayerto make hover detection work, a new canvas for a newPictureLayeris created and all subsequent render objects draw into this new canvas, which doesn't know anything about the transform. Hence, the transform is ignored for all following draw operations.If you push a layer, you need to request compositing to ensure that everything works correctly. Ideally, we should have an assert somewhere ensuring this.
Related Issues
Fixes #31986.
Tests
I added the following tests:
RenderPointerListenerwith active hover listeners doesn't drop the transforms on the floor.Checklist
Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes (
[x]). This will ensure a smooth and quick review process.///).flutter analyze --flutter-repo) does not report any problems on my PR.Breaking Change
Does your PR require Flutter developers to manually update their apps to accommodate your change?