1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 11:08:11 +00:00

LibWeb: Ensure transform of SVG <use> updates with x and y attributes

Rather than modify the transform of the parent (which could change
independently), this adds a new override element_transform() where
element specific tranfroms can be applied. This will always stay in
sync with the attributes.

A ref test comparing a .svg and .html version of the same file is
added as due to differences in attribute parsing order, the .svg version
was previously drawn incorrectly.

Fixes #20859
This commit is contained in:
MacDue 2023-08-31 08:58:41 +01:00 committed by Andrew Kaster
parent 90af21aef4
commit 720c27efbd
7 changed files with 38 additions and 6 deletions

View file

@ -111,7 +111,7 @@ Gfx::AffineTransform SVGGraphicsElement::get_transform() const
{
Gfx::AffineTransform transform = m_transform;
for (auto* svg_ancestor = shadow_including_first_ancestor_of_type<SVGGraphicsElement>(); svg_ancestor; svg_ancestor = svg_ancestor->shadow_including_first_ancestor_of_type<SVGGraphicsElement>()) {
transform = Gfx::AffineTransform { svg_ancestor->m_transform }.multiply(transform);
transform = Gfx::AffineTransform { svg_ancestor->element_transform() }.multiply(transform);
}
return transform;
}