diff --git a/Userland/Libraries/LibWeb/Painting/ClippableAndScrollable.cpp b/Userland/Libraries/LibWeb/Painting/ClippableAndScrollable.cpp index f24cb180cc6..cb99bf4ea18 100644 --- a/Userland/Libraries/LibWeb/Painting/ClippableAndScrollable.cpp +++ b/Userland/Libraries/LibWeb/Painting/ClippableAndScrollable.cpp @@ -31,8 +31,7 @@ Optional ClippableAndScrollable::clip_rect() const // Otherwise, the transform will be applied twice to the clip rect. // Similarly, for hit-testing, the transform must be removed from the clip rectangle since the position // includes the transform. - auto combined_transform = compute_combined_css_transform_for_clippable_and_scrollable(); - rect.translate_by(-combined_transform.translation().to_type()); + rect.translate_by(-m_combined_css_transform.translation().to_type()); return rect; } return {}; diff --git a/Userland/Libraries/LibWeb/Painting/ClippableAndScrollable.h b/Userland/Libraries/LibWeb/Painting/ClippableAndScrollable.h index beb1b56e01e..bbe06fc338c 100644 --- a/Userland/Libraries/LibWeb/Painting/ClippableAndScrollable.h +++ b/Userland/Libraries/LibWeb/Painting/ClippableAndScrollable.h @@ -27,11 +27,14 @@ public: [[nodiscard]] Optional clip_rect() const; [[nodiscard]] Span border_radii_clips() const; - virtual Gfx::AffineTransform compute_combined_css_transform_for_clippable_and_scrollable() const = 0; + Gfx::AffineTransform const& combined_css_transform() const { return m_combined_css_transform; } + void set_combined_css_transform(Gfx::AffineTransform const& transform) { m_combined_css_transform = transform; } private: RefPtr m_enclosing_scroll_frame; RefPtr m_enclosing_clip_frame; + + Gfx::AffineTransform m_combined_css_transform; }; } diff --git a/Userland/Libraries/LibWeb/Painting/InlinePaintable.h b/Userland/Libraries/LibWeb/Painting/InlinePaintable.h index a9924ace75b..d1e33106b3f 100644 --- a/Userland/Libraries/LibWeb/Painting/InlinePaintable.h +++ b/Userland/Libraries/LibWeb/Painting/InlinePaintable.h @@ -46,11 +46,6 @@ public: void set_outline_offset(CSSPixels outline_offset) { m_outline_offset = outline_offset; } CSSPixels outline_offset() const { return m_outline_offset; } - virtual Gfx::AffineTransform compute_combined_css_transform_for_clippable_and_scrollable() const override - { - return compute_combined_css_transform(); - } - private: InlinePaintable(Layout::InlineNode const&); diff --git a/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp b/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp index 331c310f290..59210106639 100644 --- a/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp +++ b/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp @@ -483,7 +483,7 @@ void PaintableBox::apply_clip_overflow_rect(PaintContext& context, PaintPhase ph context.recording_painter().add_clip_rect(context.enclosing_device_rect(overflow_clip_rect).to_type()); auto const& border_radii_clips = this->border_radii_clips(); m_corner_clipper_ids.resize(border_radii_clips.size()); - auto combined_transform = compute_combined_css_transform(); + auto const& combined_transform = combined_css_transform(); for (size_t corner_clip_index = 0; corner_clip_index < border_radii_clips.size(); ++corner_clip_index) { auto const& corner_clip = border_radii_clips[corner_clip_index]; auto corners = corner_clip.radii.as_corners(context); @@ -504,7 +504,7 @@ void PaintableBox::clear_clip_overflow_rect(PaintContext& context, PaintPhase ph if (m_clipping_overflow) { m_clipping_overflow = false; - auto combined_transform = compute_combined_css_transform(); + auto const& combined_transform = combined_css_transform(); auto const& border_radii_clips = this->border_radii_clips(); for (size_t corner_clip_index = 0; corner_clip_index < border_radii_clips.size(); ++corner_clip_index) { auto const& corner_clip = border_radii_clips[corner_clip_index]; diff --git a/Userland/Libraries/LibWeb/Painting/PaintableBox.h b/Userland/Libraries/LibWeb/Painting/PaintableBox.h index 4d99d181e39..1c2e5d3ba0d 100644 --- a/Userland/Libraries/LibWeb/Painting/PaintableBox.h +++ b/Userland/Libraries/LibWeb/Painting/PaintableBox.h @@ -203,11 +203,6 @@ public: Optional get_clip_rect() const; - virtual Gfx::AffineTransform compute_combined_css_transform_for_clippable_and_scrollable() const override - { - return compute_combined_css_transform(); - } - protected: explicit PaintableBox(Layout::Box const&); diff --git a/Userland/Libraries/LibWeb/Painting/ViewportPaintable.cpp b/Userland/Libraries/LibWeb/Painting/ViewportPaintable.cpp index dc3c6841296..d788428d5ae 100644 --- a/Userland/Libraries/LibWeb/Painting/ViewportPaintable.cpp +++ b/Userland/Libraries/LibWeb/Painting/ViewportPaintable.cpp @@ -440,6 +440,16 @@ void ViewportPaintable::resolve_paint_only_properties() inline_paintable.set_outline_offset(outline_offset); } + if (is_paintable_box) { + auto& paintable_box = static_cast(paintable); + auto combined_transform = paintable.compute_combined_css_transform(); + paintable_box.set_combined_css_transform(combined_transform); + } else if (is_inline_paintable) { + auto& inline_paintable = static_cast(paintable); + auto combined_transform = paintable.compute_combined_css_transform(); + inline_paintable.set_combined_css_transform(combined_transform); + } + return TraversalDecision::Continue; }); }