/* * Copyright (c) 2022, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::SVG { class SVGClipPathElement final : public SVGElement , public SVGViewport { WEB_PLATFORM_OBJECT(SVGClipPathElement, SVGElement); GC_DECLARE_ALLOCATOR(SVGClipPathElement); public: virtual ~SVGClipPathElement(); virtual Optional view_box() const override { // Same trick as SVGMaskElement. if (clip_path_units() == MaskContentUnits::ObjectBoundingBox) return ViewBox { 0, 0, 1, 1 }; return {}; } virtual Optional preserve_aspect_ratio() const override { return PreserveAspectRatio { PreserveAspectRatio::Align::None, {} }; } virtual void attribute_changed(FlyString const& name, Optional const& old_value, Optional const& value, Optional const& namespace_) override; ClipPathUnits clip_path_units() const { return m_clip_path_units.value_or(ClipPathUnits::UserSpaceOnUse); } virtual GC::Ptr create_layout_node(CSS::StyleProperties) override; private: SVGClipPathElement(DOM::Document&, DOM::QualifiedName); virtual void initialize(JS::Realm&) override; Optional m_clip_path_units = {}; }; }