LibWeb: Support percentage values in SVG text positioning element

This commit is contained in:
Edwin Hoksberg 2024-07-21 16:21:28 +02:00 committed by Andreas Kling
parent 4795b9206c
commit 356bddbdbb
Notes: github-actions[bot] 2024-07-21 17:57:31 +00:00
5 changed files with 69 additions and 12 deletions

View file

@ -34,19 +34,27 @@ void SVGTextPositioningElement::attribute_changed(FlyString const& name, Optiona
SVGGraphicsElement::attribute_changed(name, old_value, value);
if (name == SVG::AttributeNames::x) {
m_x = AttributeParser::parse_coordinate(value.value_or(String {})).value_or(m_x);
m_x = AttributeParser::parse_number_percentage(value.value_or(String {}));
} else if (name == SVG::AttributeNames::y) {
m_y = AttributeParser::parse_coordinate(value.value_or(String {})).value_or(m_y);
m_y = AttributeParser::parse_number_percentage(value.value_or(String {}));
} else if (name == SVG::AttributeNames::dx) {
m_dx = AttributeParser::parse_coordinate(value.value_or(String {})).value_or(m_dx);
m_dx = AttributeParser::parse_number_percentage(value.value_or(String {}));
} else if (name == SVG::AttributeNames::dy) {
m_dy = AttributeParser::parse_coordinate(value.value_or(String {})).value_or(m_dy);
m_dy = AttributeParser::parse_number_percentage(value.value_or(String {}));
}
}
Gfx::FloatPoint SVGTextPositioningElement::get_offset() const
Gfx::FloatPoint SVGTextPositioningElement::get_offset(CSSPixelSize const& viewport_size) const
{
return { m_x + m_dx, m_y + m_dy };
auto const viewport_width = viewport_size.width().to_float();
auto const viewport_height = viewport_size.height().to_float();
float const x = m_x.value_or({ 0, false }).resolve_relative_to(viewport_width);
float const y = m_y.value_or({ 0, false }).resolve_relative_to(viewport_height);
float const dx = m_dx.value_or({ 0, false }).resolve_relative_to(viewport_width);
float const dy = m_dy.value_or({ 0, false }).resolve_relative_to(viewport_height);
return { x + dx, y + dy };
}
}