/* * Copyright (c) 2022, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Web::Painting { class WEB_API SVGPathPaintable final : public SVGGraphicsPaintable { GC_CELL(SVGPathPaintable, SVGGraphicsPaintable); GC_DECLARE_ALLOCATOR(SVGPathPaintable); public: static GC::Ref create(Layout::SVGGraphicsBox const&); virtual TraversalDecision hit_test(CSSPixelPoint, HitTestType, Function const& callback) const override; virtual void paint(DisplayListRecordingContext&, PaintPhase) const override; SVG::SVGGraphicsElement const& dom_node() const { return as(*Paintable::dom_node()); } void set_computed_path(Gfx::Path path) { m_computed_path = move(path); } Optional const& computed_path() const { return m_computed_path; } protected: SVGPathPaintable(Layout::SVGGraphicsBox const&); Optional m_computed_path = {}; private: virtual bool is_svg_path_paintable() const final { return true; } virtual void resolve_paint_properties() override; float m_stroke_thickness { 0 }; float m_stroke_dashoffset { 0 }; Vector m_stroke_dasharray; }; template<> inline bool Paintable::fast_is() const { return is_svg_path_paintable(); } }