summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2022-07-11 00:27:54 +0200
committerAndreas Kling <kling@serenityos.org>2022-07-11 18:57:45 +0200
commit557006f5bef959a14fc773427ea2a4f1e7867bb0 (patch)
tree095d31a90a443a19828b83182e7b6ed6c060f925 /Userland
parente1dab7b63d2e3168bf9940f736046c5ddf4eac38 (diff)
downloadserenity-557006f5bef959a14fc773427ea2a4f1e7867bb0.zip
LibWeb: Cache reference to <svg> element in SVGFormattingContext
Diffstat (limited to 'Userland')
-rw-r--r--Userland/Libraries/LibWeb/Layout/SVGFormattingContext.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/Userland/Libraries/LibWeb/Layout/SVGFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/SVGFormattingContext.cpp
index f2a2a83354..9010f11f77 100644
--- a/Userland/Libraries/LibWeb/Layout/SVGFormattingContext.cpp
+++ b/Userland/Libraries/LibWeb/Layout/SVGFormattingContext.cpp
@@ -22,6 +22,8 @@ SVGFormattingContext::~SVGFormattingContext() = default;
void SVGFormattingContext::run(Box const& box, LayoutMode)
{
+ auto& svg_svg_element = verify_cast<SVG::SVGSVGElement>(*box.dom_node());
+
box.for_each_in_subtree_of_type<SVGBox>([&](SVGBox const& descendant) {
if (is<SVGGeometryBox>(descendant)) {
auto const& geometry_box = static_cast<SVGGeometryBox const&>(descendant);
@@ -30,11 +32,9 @@ void SVGFormattingContext::run(Box const& box, LayoutMode)
auto& dom_node = const_cast<SVGGeometryBox&>(geometry_box).dom_node();
- SVG::SVGSVGElement* svg_element = dom_node.first_ancestor_of_type<SVG::SVGSVGElement>();
-
- if (svg_element->has_attribute(HTML::AttributeNames::width) && svg_element->has_attribute(HTML::AttributeNames::height)) {
+ if (svg_svg_element.has_attribute(HTML::AttributeNames::width) && svg_svg_element.has_attribute(HTML::AttributeNames::height)) {
geometry_box_state.offset = { 0, 0 };
- auto& layout_node = static_cast<Layout::Node&>(*(svg_element->layout_node()));
+ auto& layout_node = *svg_svg_element.layout_node();
// FIXME: Allow for relative lengths here
geometry_box_state.content_width = layout_node.computed_values().width().resolved(layout_node, { 0, CSS::Length::Type::Px }).to_px(layout_node);
@@ -44,10 +44,10 @@ void SVGFormattingContext::run(Box const& box, LayoutMode)
}
// FIXME: Allow for one of {width, height} to not be specified}
- if (svg_element->has_attribute(HTML::AttributeNames::width)) {
+ if (svg_svg_element.has_attribute(HTML::AttributeNames::width)) {
}
- if (svg_element->has_attribute(HTML::AttributeNames::height)) {
+ if (svg_svg_element.has_attribute(HTML::AttributeNames::height)) {
}
auto& path = dom_node.get_path();
@@ -57,7 +57,7 @@ void SVGFormattingContext::run(Box const& box, LayoutMode)
auto stroke_width = geometry_box.dom_node().stroke_width().value_or(0);
path_bounding_box.inflate(stroke_width, stroke_width);
- auto& maybe_view_box = svg_element->view_box();
+ auto& maybe_view_box = svg_svg_element.view_box();
if (maybe_view_box.has_value()) {
auto view_box = maybe_view_box.value();