/* * Copyright (c) 2024, Aliaksandr Kalenik * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::Painting { class SVGForeignObjectPaintable final : public PaintableWithLines , public SVGMaskable { GC_CELL(SVGForeignObjectPaintable, PaintableWithLines); GC_DECLARE_ALLOCATOR(SVGForeignObjectPaintable); public: static GC::Ref create(Layout::SVGForeignObjectBox const&); virtual TraversalDecision hit_test(CSSPixelPoint, HitTestType, Function const& callback) const override; virtual void paint(PaintContext&, PaintPhase) const override; Layout::SVGForeignObjectBox const& layout_box() const; virtual GC::Ptr dom_node_of_svg() const override { return dom_node(); } virtual Optional get_masking_area() const override { return get_masking_area_of_svg(); } virtual Optional get_mask_type() const override { return get_mask_type_of_svg(); } virtual RefPtr calculate_mask(PaintContext& paint_context, CSSPixelRect const& masking_area) const override { return calculate_mask_of_svg(paint_context, masking_area); } protected: SVGForeignObjectPaintable(Layout::SVGForeignObjectBox const&); }; }