mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-01 12:07:14 +02:00
With per-paintable display list command caching now in place, the separate paint-only properties resolution phase is no longer needed. Resolution now happens inline during painting and its cost is amortized since it only runs on cache miss. Move all property resolution to point of consumption: - is_visible() and visible_for_hit_testing() compute on the fly - Filter resolution moved to assign_accumulated_visual_contexts() - Border radii, outlines computed on access - Box shadows, backdrop filter resolved inline during painting - Background resolution moved into paint_background() - Mask resolution moved to StackingContext::paint() - Text fragment and SVG stroke properties resolved during painting
51 lines
1.4 KiB
C++
51 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) 2022, Andreas Kling <andreas@ladybird.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibGfx/Path.h>
|
|
#include <LibWeb/Export.h>
|
|
#include <LibWeb/Layout/SVGGraphicsBox.h>
|
|
#include <LibWeb/Painting/SVGGraphicsPaintable.h>
|
|
|
|
namespace Web::Painting {
|
|
|
|
class WEB_API SVGPathPaintable final : public SVGGraphicsPaintable {
|
|
GC_CELL(SVGPathPaintable, SVGGraphicsPaintable);
|
|
GC_DECLARE_ALLOCATOR(SVGPathPaintable);
|
|
|
|
public:
|
|
static GC::Ref<SVGPathPaintable> create(Layout::SVGGraphicsBox const&);
|
|
|
|
virtual TraversalDecision hit_test(CSSPixelPoint, HitTestType, Function<TraversalDecision(HitTestResult)> const& callback) const override;
|
|
|
|
virtual void paint(DisplayListRecordingContext&, PaintPhase) const override;
|
|
|
|
SVG::SVGGraphicsElement const& dom_node() const { return as<SVG::SVGGraphicsElement>(*Paintable::dom_node()); }
|
|
|
|
void set_computed_path(Gfx::Path path)
|
|
{
|
|
m_computed_path = move(path);
|
|
}
|
|
|
|
Optional<Gfx::Path> const& computed_path() const { return m_computed_path; }
|
|
|
|
virtual void reset_for_relayout() override;
|
|
|
|
protected:
|
|
SVGPathPaintable(Layout::SVGGraphicsBox const&);
|
|
|
|
Optional<Gfx::Path> m_computed_path = {};
|
|
|
|
private:
|
|
virtual bool is_svg_path_paintable() const final { return true; }
|
|
};
|
|
|
|
template<>
|
|
inline bool Paintable::fast_is<SVGPathPaintable>() const { return is_svg_path_paintable(); }
|
|
|
|
}
|