mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-24 18:02:20 +00:00
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.
39 lines
1.1 KiB
C++
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(); }
|
|
|
|
}
|