From ec5d5918c4f9f6e389f16154e24450a2bb170876 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 18 Apr 2023 18:56:06 +0200 Subject: [PATCH] LibWeb: Make SVG elements generate a SVGGraphicsPaintable ...instead of defaulting to a PaintableBox. This way it gets the same behavior as other SVG boxes during paint. --- Userland/Libraries/LibWeb/Layout/SVGGraphicsBox.cpp | 6 ++++++ Userland/Libraries/LibWeb/Layout/SVGGraphicsBox.h | 2 ++ Userland/Libraries/LibWeb/Painting/SVGGraphicsPaintable.cpp | 5 +++++ Userland/Libraries/LibWeb/Painting/SVGGraphicsPaintable.h | 2 ++ 4 files changed, 15 insertions(+) diff --git a/Userland/Libraries/LibWeb/Layout/SVGGraphicsBox.cpp b/Userland/Libraries/LibWeb/Layout/SVGGraphicsBox.cpp index 723fca2fb8..8b1d01632d 100644 --- a/Userland/Libraries/LibWeb/Layout/SVGGraphicsBox.cpp +++ b/Userland/Libraries/LibWeb/Layout/SVGGraphicsBox.cpp @@ -5,6 +5,7 @@ */ #include +#include #include namespace Web::Layout { @@ -14,4 +15,9 @@ SVGGraphicsBox::SVGGraphicsBox(DOM::Document& document, SVG::SVGGraphicsElement& { } +JS::GCPtr SVGGraphicsBox::create_paintable() const +{ + return Painting::SVGGraphicsPaintable::create(*this); +} + } diff --git a/Userland/Libraries/LibWeb/Layout/SVGGraphicsBox.h b/Userland/Libraries/LibWeb/Layout/SVGGraphicsBox.h index 1411ef93dd..9d223980a0 100644 --- a/Userland/Libraries/LibWeb/Layout/SVGGraphicsBox.h +++ b/Userland/Libraries/LibWeb/Layout/SVGGraphicsBox.h @@ -21,6 +21,8 @@ public: SVG::SVGGraphicsElement& dom_node() { return verify_cast(SVGBox::dom_node()); } SVG::SVGGraphicsElement const& dom_node() const { return verify_cast(SVGBox::dom_node()); } + + virtual JS::GCPtr create_paintable() const override; }; } diff --git a/Userland/Libraries/LibWeb/Painting/SVGGraphicsPaintable.cpp b/Userland/Libraries/LibWeb/Painting/SVGGraphicsPaintable.cpp index 52e5e06c79..cceaeb3cab 100644 --- a/Userland/Libraries/LibWeb/Painting/SVGGraphicsPaintable.cpp +++ b/Userland/Libraries/LibWeb/Painting/SVGGraphicsPaintable.cpp @@ -9,6 +9,11 @@ namespace Web::Painting { +JS::NonnullGCPtr SVGGraphicsPaintable::create(Layout::SVGGraphicsBox const& layout_box) +{ + return layout_box.heap().allocate_without_realm(layout_box); +} + SVGGraphicsPaintable::SVGGraphicsPaintable(Layout::SVGGraphicsBox const& layout_box) : SVGPaintable(layout_box) { diff --git a/Userland/Libraries/LibWeb/Painting/SVGGraphicsPaintable.h b/Userland/Libraries/LibWeb/Painting/SVGGraphicsPaintable.h index 61c7ad01b0..ee811b7c52 100644 --- a/Userland/Libraries/LibWeb/Painting/SVGGraphicsPaintable.h +++ b/Userland/Libraries/LibWeb/Painting/SVGGraphicsPaintable.h @@ -15,6 +15,8 @@ class SVGGraphicsPaintable : public SVGPaintable { JS_CELL(SVGGraphicsPaintable, SVGPaintable); public: + static JS::NonnullGCPtr create(Layout::SVGGraphicsBox const&); + virtual void before_children_paint(PaintContext&, PaintPhase) const override; Layout::SVGGraphicsBox const& layout_box() const;