/* * Copyright (c) 2023, MacDue * Copyright (c) 2025, Jelle Raaijmakers * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Web::SVG { // https://svgwg.org/svg2-draft/types.html#InterfaceSVGAnimatedNumber class SVGAnimatedNumber final : public Bindings::PlatformObject { WEB_PLATFORM_OBJECT(SVGAnimatedNumber, Bindings::PlatformObject); GC_DECLARE_ALLOCATOR(SVGAnimatedNumber); public: enum class SupportsSecondValue : u8 { Yes, No, }; enum class ValueRepresented : u8 { First, Second, }; [[nodiscard]] static GC::Ref create(JS::Realm&, GC::Ref, FlyString reflected_attribute, float initial_value, SupportsSecondValue = SupportsSecondValue::No, ValueRepresented = ValueRepresented::First); virtual ~SVGAnimatedNumber() override; float base_val() const; void set_base_val(float); float anim_val() const; private: SVGAnimatedNumber(JS::Realm&, GC::Ref, FlyString, float, SupportsSecondValue, ValueRepresented); virtual void initialize(JS::Realm&) override; virtual void visit_edges(Visitor&) override; float parse_value_or_initial(StringView) const; float get_base_or_anim_value() const; GC::Ref m_element; FlyString m_reflected_attribute; float m_initial_value; SupportsSecondValue m_supports_second_value; ValueRepresented m_value_represented; }; }