-
Notifications
You must be signed in to change notification settings - Fork 3.4k
[vector_graphics_compiler] Set the m4_10 (Z scale) value to 1 when constructing an AffineMatrix from an SVG matrix #9813
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…nstructing an AffineMatrix from an SVG matrix The 4x4 matrix produced by the SVG matrix() function should have its 10th element set to 1. (see https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix) The SVG matrix parser constructs an AffineMatrix from the SVG input. The AffineMatrix is then converted into a list that is given to Flutter engine APIs. Before flutter/engine@62cb2c9, the Flutter engine was implicitly overriding the 10th element of the matrix with a 1 value. After that commit, the engine uses the matrix contents as is and does not override any values. This PR changes the SVG matrix parser to explicitly set the AffineMatrix m4_10 parameter to 1. This reflects the SVG spec and produces output that matches the original engine behavior. See flutter/flutter#171854
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request corrects the SVG matrix()
transform parsing by explicitly setting the Z-scale component of the AffineMatrix
to 1.0
, aligning it with the SVG specification. Previously, it incorrectly defaulted to the X-scale value. The tests are updated to reflect this fix. Since this issue originated from the AffineMatrix
constructor's default behavior, it may be beneficial to review other transform parsers in the same file for similar issues.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
Should we also file a bug against the package that other (implicit?) uses of m4_10
and how it is maintained through various operations are likely suspect as well?
Your understanding of this is better than mine. Can you file an issue in https://github.com/flutter/flutter/issues and tag it with |
|
… 1 when constructing an AffineMatrix from an SVG matrix (flutter/packages#9813)
… 1 when constructing an AffineMatrix from an SVG matrix (flutter/packages#9813)
flutter/packages@09533b7...5c52c55 2025-08-15 stuartmorgan@google.com [video_player] Move Android buffer updates to Dart (flutter/packages#9771) 2025-08-15 sfprhythnn@gmail.com [webview_flutter] Add support for payment requests on Android (flutter/packages#9679) 2025-08-15 jason-simmons@users.noreply.github.com [vector_graphics_compiler] Set the m4_10 (Z scale) value to 1 when constructing an AffineMatrix from an SVG matrix (flutter/packages#9813) 2025-08-15 magder@google.com [url_launcher_ios] Fix test button text to work on iOS 26 (flutter/packages#9766) 2025-08-15 stuartmorgan@google.com [video_player] Simplify native iOS code (flutter/packages#9800) 2025-08-14 stuartmorgan@google.com [image_picker] Add the ability to pick multiple videos - platform_interface (flutter/packages#9804) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages-flutter-autoroll Please CC flutter-ecosystem@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
* main: (24 commits) Roll Flutter from 0a2906b81d5e to b3fb4c786d80 (5 revisions) (flutter#9840) Update repo for 3.35 stable release (flutter#9816) Roll Flutter from 52af7a504025 to 0a2906b81d5e (16 revisions) (flutter#9836) [image_picker] Updates min SDK to 3.29 (flutter#9830) [image_picker] Add the ability to pick multiple videos (flutter#9775) [image_picker] Add the ability to pick multiple videos - platform implementations (flutter#9818) [various] Updates min SDK for third_party/packages to 3.29 (flutter#9819) [vector_graphics] Updates min SDK to 3.29 (flutter#9820) [google_maps_flutter] Updates min SDK to 3.29 (flutter#9821) [video_player] Updates min SDK to 3.29 (flutter#9826) [shared_preferences] Updates min SDK to 3.29 (flutter#9829) [image_picker_ios] Add photo to simulator Photos library during test (flutter#9759) [interactive_media_ads] Updates `README` with information about enabling desugaring on Android (flutter#9790) [in_app_purchase] Updates min SDK to 3.29 (flutter#9825) Roll Flutter from f4334d27934b to 52af7a504025 (29 revisions) (flutter#9832) [go_router] Update generated output format (flutter#9817) [video_player] Move Android buffer updates to Dart (flutter#9771) [webview_flutter] Add support for payment requests on Android (flutter#9679) [vector_graphics_compiler] Set the m4_10 (Z scale) value to 1 when constructing an AffineMatrix from an SVG matrix (flutter#9813) [url_launcher_ios] Fix test button text to work on iOS 26 (flutter#9766) ... # Conflicts: # packages/go_router_builder/CHANGELOG.md # packages/go_router_builder/example/lib/all_types.g.dart # packages/go_router_builder/example/lib/main.g.dart # packages/go_router_builder/example/lib/shell_route_with_keys_example.g.dart # packages/go_router_builder/example/lib/shell_route_with_observers_example.g.dart
The 4x4 matrix produced by the SVG matrix() function should have its 10th element set to 1. (see https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix)
The SVG matrix parser constructs an AffineMatrix from the SVG input. The AffineMatrix is then converted into a list that is given to Flutter engine APIs.
Before flutter/engine@62cb2c9, the Flutter engine was implicitly overriding the 10th element of the matrix with a 1 value. After that commit, the engine uses the matrix contents as is and does not override any values.
This PR changes the SVG matrix parser to explicitly set the AffineMatrix m4_10 parameter to 1. This reflects the SVG spec and produces output that matches the original engine behavior.
See flutter/flutter#171854