/* * 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); JS_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) override; ClipPathUnits clip_path_units() const { return m_clip_path_units.value_or(ClipPathUnits::UserSpaceOnUse); } virtual JS::GCPtr create_layout_node(NonnullRefPtr) override; private: SVGClipPathElement(DOM::Document&, DOM::QualifiedName); virtual void initialize(JS::Realm&) override; Optional m_clip_path_units = {}; }; }