ladybird/Libraries/LibWeb/Painting/SVGSVGPaintable.h
Aliaksandr Kalenik 773d19b406 LibWeb: Apply either enclosing or own clip rect depending on PaintPhase
Previously, we always applied the enclosing clip rectangle for all paint
phases except overlays, and the own clip rectangle for the background
and foreground phases. The problem is that applying a clip rectangle
means emitting an AddClipRect display list item for each clip rectangle
in the containing block. With this change, we choose whether to include
the own clip based on the paint phase and this way avoid emitting
AddClipRect for enclosing clip rectangles twice.
2025-07-07 18:55:30 +02:00

39 lines
1.1 KiB
C++

/*
* Copyright (c) 2022, Andreas Kling <andreas@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibWeb/Layout/SVGSVGBox.h>
#include <LibWeb/Painting/PaintableBox.h>
namespace Web::Painting {
class SVGSVGPaintable final : public PaintableBox {
GC_CELL(SVGSVGPaintable, PaintableBox);
GC_DECLARE_ALLOCATOR(SVGSVGPaintable);
public:
static GC::Ref<SVGSVGPaintable> create(Layout::SVGSVGBox const&);
Layout::SVGSVGBox const& layout_box() const;
static void paint_svg_box(PaintContext& context, PaintableBox const& svg_box, PaintPhase phase);
static void paint_descendants(PaintContext& context, PaintableBox const& paintable, PaintPhase phase);
virtual void before_paint(PaintContext&, PaintPhase) const override;
virtual void after_paint(PaintContext&, PaintPhase) const override;
protected:
SVGSVGPaintable(Layout::SVGSVGBox const&);
private:
virtual bool is_svg_svg_paintable() const final { return true; }
};
template<>
inline bool Paintable::fast_is<SVGSVGPaintable>() const { return is_svg_svg_paintable(); }
}