/* * Copyright (c) 2026, Tim Ledbetter * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include namespace Web::SVG { class SVGPatternElement : public SVGElement , public SVGFitToViewBox , public SVGURIReferenceMixin { WEB_PLATFORM_OBJECT(SVGPatternElement, SVGElement); GC_DECLARE_ALLOCATOR(SVGPatternElement); public: virtual ~SVGPatternElement() override = default; virtual void attribute_changed(FlyString const& name, Optional const& old_value, Optional const& value, Optional const& namespace_) override; SVGUnits pattern_units() const; SVGUnits pattern_content_units() const; Optional pattern_transform() const; NumberPercentage pattern_x() const; NumberPercentage pattern_y() const; NumberPercentage pattern_width() const; NumberPercentage pattern_height() const; GC::Ref x() const; GC::Ref y() const; GC::Ref width() const; GC::Ref height() const; GC::Ptr pattern_content_element() const; Optional to_gfx_paint_style(SVGPaintContext const&, DisplayListRecordingContext&, Layout::Node const& target_layout_node) const; virtual GC::Ptr create_layout_node(GC::Ref) override { return nullptr; } protected: SVGPatternElement(DOM::Document&, DOM::QualifiedName); virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; private: GC::Ptr linked_pattern(HashTable& seen_patterns) const; GC::Ptr pattern_content_element_impl(HashTable& seen_patterns) const; SVGUnits pattern_units_impl(HashTable& seen_patterns) const; SVGUnits pattern_content_units_impl(HashTable& seen_patterns) const; Optional pattern_transform_impl(HashTable& seen_patterns) const; NumberPercentage pattern_x_impl(HashTable& seen_patterns) const; NumberPercentage pattern_y_impl(HashTable& seen_patterns) const; NumberPercentage pattern_width_impl(HashTable& seen_patterns) const; NumberPercentage pattern_height_impl(HashTable& seen_patterns) const; Optional m_pattern_units; Optional m_pattern_content_units; Optional m_pattern_transform; Optional m_x; Optional m_y; Optional m_width; Optional m_height; }; }