From 66d1b783481752f13e0cb431f1d46a091c2214c3 Mon Sep 17 00:00:00 2001 From: MacDue Date: Tue, 18 Apr 2023 18:51:00 +0100 Subject: [PATCH] LibWeb: Implement SVGAnimatedNumber See https://www.w3.org/TR/2013/WD-SVG2-20130409/types.html#InterfaceSVGAnimatedNumber --- Userland/Libraries/LibWeb/CMakeLists.txt | 1 + .../LibWeb/SVG/SVGAnimatedNumber.cpp | 34 +++++++++++++++++ .../Libraries/LibWeb/SVG/SVGAnimatedNumber.h | 37 +++++++++++++++++++ .../LibWeb/SVG/SVGAnimatedNumber.idl | 6 +++ Userland/Libraries/LibWeb/idl_files.cmake | 1 + 5 files changed, 79 insertions(+) create mode 100644 Userland/Libraries/LibWeb/SVG/SVGAnimatedNumber.cpp create mode 100644 Userland/Libraries/LibWeb/SVG/SVGAnimatedNumber.h create mode 100644 Userland/Libraries/LibWeb/SVG/SVGAnimatedNumber.idl diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 71742b11ce..249aeebcd3 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -488,6 +488,7 @@ set(SOURCES SVG/AttributeNames.cpp SVG/AttributeParser.cpp SVG/SVGAnimatedLength.cpp + SVG/SVGAnimatedNumber.cpp SVG/SVGClipPathElement.cpp SVG/SVGDefsElement.cpp SVG/SVGElement.cpp diff --git a/Userland/Libraries/LibWeb/SVG/SVGAnimatedNumber.cpp b/Userland/Libraries/LibWeb/SVG/SVGAnimatedNumber.cpp new file mode 100644 index 0000000000..987c61e73f --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGAnimatedNumber.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2023, MacDue + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +namespace Web::SVG { + +WebIDL::ExceptionOr> SVGAnimatedNumber::create(JS::Realm& realm, float base_val, float anim_val) +{ + return MUST_OR_THROW_OOM(realm.heap().allocate(realm, realm, base_val, anim_val)); +} + +SVGAnimatedNumber::SVGAnimatedNumber(JS::Realm& realm, float base_val, float anim_val) + : PlatformObject(realm) + , m_base_val(base_val) + , m_anim_val(anim_val) +{ +} + +SVGAnimatedNumber::~SVGAnimatedNumber() = default; + +JS::ThrowCompletionOr SVGAnimatedNumber::initialize(JS::Realm& realm) +{ + MUST_OR_THROW_OOM(Base::initialize(realm)); + set_prototype(&Bindings::ensure_web_prototype(realm, "SVGAnimatedNumber")); + + return {}; +} + +} diff --git a/Userland/Libraries/LibWeb/SVG/SVGAnimatedNumber.h b/Userland/Libraries/LibWeb/SVG/SVGAnimatedNumber.h new file mode 100644 index 0000000000..f0997a59a2 --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGAnimatedNumber.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023, MacDue + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace Web::SVG { + +// https://www.w3.org/TR/SVG11/types.html#InterfaceSVGAnimatedNumber +class SVGAnimatedNumber final : public Bindings::PlatformObject { + WEB_PLATFORM_OBJECT(SVGAnimatedNumber, Bindings::PlatformObject); + +public: + static WebIDL::ExceptionOr> create(JS::Realm&, float base_val, float anim_val); + virtual ~SVGAnimatedNumber() override; + + float base_val() const { return m_base_val; } + float anim_val() const { return m_anim_val; } + + void set_base_val(float base_val) { m_base_val = base_val; } + void set_anim_val(float anim_val) { m_anim_val = anim_val; } + +private: + SVGAnimatedNumber(JS::Realm&, float base_val, float anim_val); + + virtual JS::ThrowCompletionOr initialize(JS::Realm&) override; + + float m_base_val; + float m_anim_val; +}; + +} diff --git a/Userland/Libraries/LibWeb/SVG/SVGAnimatedNumber.idl b/Userland/Libraries/LibWeb/SVG/SVGAnimatedNumber.idl new file mode 100644 index 0000000000..8c716400ea --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGAnimatedNumber.idl @@ -0,0 +1,6 @@ +// https://svgwg.org/svg2-draft/types.html#InterfaceSVGAnimatedNumber +[Exposed=Window] +interface SVGAnimatedNumber { + attribute float baseVal; + readonly attribute float animVal; +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index a18f942088..8427632f08 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -191,6 +191,7 @@ libweb_js_bindings(Streams/ReadableStreamDefaultReader) libweb_js_bindings(Streams/WritableStream) libweb_js_bindings(Streams/WritableStreamDefaultWriter) libweb_js_bindings(SVG/SVGAnimatedLength) +libweb_js_bindings(SVG/SVGAnimatedNumber) libweb_js_bindings(SVG/SVGClipPathElement) libweb_js_bindings(SVG/SVGDefsElement) libweb_js_bindings(SVG/SVGElement)