diff --git a/Userland/Libraries/LibWeb/Painting/Paintable.h b/Userland/Libraries/LibWeb/Painting/Paintable.h index fb10819514..592102b4c2 100644 --- a/Userland/Libraries/LibWeb/Painting/Paintable.h +++ b/Userland/Libraries/LibWeb/Painting/Paintable.h @@ -117,6 +117,9 @@ public: virtual void before_children_paint(PaintContext&, PaintPhase) const { } virtual void after_children_paint(PaintContext&, PaintPhase) const { } + virtual void apply_scroll_offset(PaintContext&, PaintPhase) const { } + virtual void reset_scroll_offset(PaintContext&, PaintPhase) const { } + virtual void apply_clip_overflow_rect(PaintContext&, PaintPhase) const { } virtual void clear_clip_overflow_rect(PaintContext&, PaintPhase) const { } diff --git a/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp b/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp index 739b8313f0..9d5d50368c 100644 --- a/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp +++ b/Userland/Libraries/LibWeb/Painting/PaintableBox.cpp @@ -430,14 +430,14 @@ Optional PaintableBox::calculate_overflow_clipped_rect() const return m_clip_rect; } -void PaintableBox::before_children_paint(PaintContext& context, PaintPhase) const +void PaintableBox::apply_scroll_offset(PaintContext& context, PaintPhase) const { auto scroll_offset = -this->scroll_offset(); context.translate_scroll_offset_by(scroll_offset); context.recording_painter().translate({ context.enclosing_device_pixels(scroll_offset.x()), context.enclosing_device_pixels(scroll_offset.y()) }); } -void PaintableBox::after_children_paint(PaintContext& context, PaintPhase) const +void PaintableBox::reset_scroll_offset(PaintContext& context, PaintPhase) const { auto scroll_offset = this->scroll_offset(); context.translate_scroll_offset_by(scroll_offset); diff --git a/Userland/Libraries/LibWeb/Painting/PaintableBox.h b/Userland/Libraries/LibWeb/Painting/PaintableBox.h index 0d1e023d46..094d0512ea 100644 --- a/Userland/Libraries/LibWeb/Painting/PaintableBox.h +++ b/Userland/Libraries/LibWeb/Painting/PaintableBox.h @@ -133,8 +133,8 @@ public: DOM::Document const& document() const { return layout_box().document(); } DOM::Document& document() { return layout_box().document(); } - virtual void before_children_paint(PaintContext&, PaintPhase) const override; - virtual void after_children_paint(PaintContext&, PaintPhase) const override; + virtual void apply_scroll_offset(PaintContext&, PaintPhase) const override; + virtual void reset_scroll_offset(PaintContext&, PaintPhase) const override; virtual void apply_clip_overflow_rect(PaintContext&, PaintPhase) const override; virtual void clear_clip_overflow_rect(PaintContext&, PaintPhase) const override; diff --git a/Userland/Libraries/LibWeb/Painting/StackingContext.cpp b/Userland/Libraries/LibWeb/Painting/StackingContext.cpp index cb5b9d6ddd..837a48693b 100644 --- a/Userland/Libraries/LibWeb/Painting/StackingContext.cpp +++ b/Userland/Libraries/LibWeb/Painting/StackingContext.cpp @@ -90,6 +90,7 @@ void StackingContext::paint_node_as_stacking_context(Paintable const& paintable, void StackingContext::paint_descendants(PaintContext& context, Paintable const& paintable, StackingContextPaintPhase phase) { + paintable.apply_scroll_offset(context, to_paint_phase(phase)); paintable.before_children_paint(context, to_paint_phase(phase)); paintable.apply_clip_overflow_rect(context, to_paint_phase(phase)); @@ -174,6 +175,7 @@ void StackingContext::paint_descendants(PaintContext& context, Paintable const& paintable.clear_clip_overflow_rect(context, to_paint_phase(phase)); paintable.after_children_paint(context, to_paint_phase(phase)); + paintable.reset_scroll_offset(context, to_paint_phase(phase)); } void StackingContext::paint_child(PaintContext& context, StackingContext const& child)