Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit decba20

Browse files
[canvaskit] Do not double-apply ImageFilter transform to children (#46336)
Fixes an issue seen in the "widgets.image_filter_matrix" golden here: https://flutter-gold.skia.org/search?crs=github&issue=135249&patchsets=3 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide] and the [C++, Objective-C, Java style guides]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I added new tests to check the change I am making or feature I am adding, or the PR is [test-exempt]. See [testing the engine] for instructions on writing and running engine tests. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I signed the [CLA]. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/wiki/Tree-hygiene#overview [Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene [test-exempt]: https://github.com/flutter/flutter/wiki/Tree-hygiene#tests [Flutter Style Guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style [testing the engine]: https://github.com/flutter/flutter/wiki/Testing-the-engine [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/wiki/Chat
1 parent 91ccb7d commit decba20

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

lib/web_ui/lib/src/engine/canvaskit/layer.dart

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -400,13 +400,14 @@ class ImageFilterEngineLayer extends ContainerLayer
400400

401401
@override
402402
void preroll(PrerollContext prerollContext, Matrix4 matrix) {
403-
final Matrix4 transform =
404-
(_filter as CkManagedSkImageFilterConvertible).transform;
405-
final Matrix4 childMatrix = matrix.multiplied(transform);
406-
prerollContext.mutatorsStack.pushTransform(transform);
403+
final Matrix4 childMatrix = Matrix4.copy(matrix);
404+
childMatrix.translate(_offset.dx, _offset.dy);
405+
prerollContext.mutatorsStack
406+
.pushTransform(Matrix4.translationValues(_offset.dx, _offset.dy, 0.0));
407407
final ui.Rect childPaintBounds =
408408
prerollChildren(prerollContext, childMatrix);
409-
_filter.imageFilter((SkImageFilter filter) {
409+
(_filter as CkManagedSkImageFilterConvertible)
410+
.imageFilter((SkImageFilter filter) {
410411
paintBounds =
411412
rectFromSkIRect(filter.getOutputBounds(toSkRect(childPaintBounds)));
412413
});

lib/web_ui/test/ui/filters_test.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,16 @@ Future<void> testMain() async {
7878
await matchGoldenFile('ui_filter_matrix_imagefilter.png', region: region);
7979
});
8080

81+
test('resizing matrix filter', () async {
82+
await drawTestImageWithPaint(ui.Paint()
83+
..imageFilter = ui.ImageFilter.matrix(
84+
Matrix4.diagonal3Values(0.5, 0.5, 1).toFloat64(),
85+
filterQuality: ui.FilterQuality.high,
86+
));
87+
await matchGoldenFile('ui_filter_matrix_imagefilter_scaled.png',
88+
region: region);
89+
});
90+
8191
test('composed filters', () async {
8292
final ui.ImageFilter filter = ui.ImageFilter.compose(
8393
outer: ui.ImageFilter.matrix(

0 commit comments

Comments
 (0)