LibWeb: Preserve paint state when painting stacking contexts indirectly

For layers that require indirect painting (due to opacity, transform,
etc.) we create a nested PaintContext. Until now, that PaintContext
was created fresh without transferring all the state from the parent
PaintContext.
This commit is contained in:
Andreas Kling 2022-03-26 12:33:34 +01:00
parent 2a8c6361aa
commit 54c3053bc3
Notes: sideshowbarker 2024-07-17 16:44:48 +09:00
2 changed files with 11 additions and 1 deletions

View file

@ -37,6 +37,16 @@ public:
bool has_focus() const { return m_focus; }
void set_has_focus(bool focus) { m_focus = focus; }
PaintContext clone() const
{
auto clone = PaintContext(m_painter, m_palette, m_scroll_offset);
clone.m_viewport_rect = m_viewport_rect;
clone.m_should_show_line_box_borders = m_should_show_line_box_borders;
clone.m_focus = m_focus;
clone.m_svg_context = m_svg_context;
return clone;
}
private:
Gfx::Painter& m_painter;
Palette m_palette;

View file

@ -262,7 +262,7 @@ void StackingContext::paint(PaintContext& context) const
return;
auto bitmap = bitmap_or_error.release_value_but_fixme_should_propagate_errors();
Gfx::Painter painter(bitmap);
PaintContext paint_context(painter, context.palette(), context.scroll_offset());
auto paint_context = context.clone();
paint_internal(paint_context);
auto transform_origin = this->transform_origin();