/* * Copyright (c) 2023, MacDue * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::SVG { class SVGRadialGradientElement : public SVGGradientElement { WEB_PLATFORM_OBJECT(SVGRadialGradientElement, SVGGradientElement); JS_DECLARE_ALLOCATOR(SVGRadialGradientElement); public: virtual ~SVGRadialGradientElement() override = default; virtual void attribute_changed(FlyString const& name, Optional const& value) override; virtual Optional to_gfx_paint_style(SVGPaintContext const&) const override; JS::NonnullGCPtr cx() const; JS::NonnullGCPtr cy() const; JS::NonnullGCPtr fx() const; JS::NonnullGCPtr fy() const; JS::NonnullGCPtr fr() const; JS::NonnullGCPtr r() const; protected: SVGRadialGradientElement(DOM::Document&, DOM::QualifiedName); virtual void initialize(JS::Realm&) override; private: JS::GCPtr linked_radial_gradient(HashTable& seen_gradients) const { if (auto gradient = linked_gradient(seen_gradients); gradient && is(*gradient)) return &verify_cast(*gradient); return {}; } NumberPercentage start_circle_x() const; NumberPercentage start_circle_y() const; NumberPercentage start_circle_radius() const; NumberPercentage end_circle_x() const; NumberPercentage end_circle_y() const; NumberPercentage end_circle_radius() const; NumberPercentage start_circle_x_impl(HashTable& seen_gradients) const; NumberPercentage start_circle_y_impl(HashTable& seen_gradients) const; NumberPercentage start_circle_radius_impl(HashTable& seen_gradients) const; NumberPercentage end_circle_x_impl(HashTable& seen_gradients) const; NumberPercentage end_circle_y_impl(HashTable& seen_gradients) const; NumberPercentage end_circle_radius_impl(HashTable& seen_gradients) const; Optional m_cx; Optional m_cy; Optional m_fx; Optional m_fy; Optional m_fr; Optional m_r; mutable RefPtr m_paint_style; }; }