diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 38000188006..f0ac1ef82a6 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -592,6 +592,7 @@ set(SOURCES SVG/SVGAnimatedNumber.cpp SVG/SVGAnimatedRect.cpp SVG/SVGAnimatedString.cpp + SVG/SVGAnimatedTransformList.cpp SVG/SVGClipPathElement.cpp SVG/SVGDecodedImageData.cpp SVG/SVGDefsElement.cpp diff --git a/Userland/Libraries/LibWeb/SVG/SVGAnimatedTransformList.cpp b/Userland/Libraries/LibWeb/SVG/SVGAnimatedTransformList.cpp new file mode 100644 index 00000000000..89c4871184d --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGAnimatedTransformList.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2024, MacDue + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +namespace Web::SVG { + +JS_DEFINE_ALLOCATOR(SVGAnimatedTransformList); + +JS::NonnullGCPtr SVGAnimatedTransformList::create(JS::Realm& realm, JS::NonnullGCPtr base_val, JS::NonnullGCPtr anim_val) +{ + return realm.heap().allocate(realm, realm, base_val, anim_val); +} + +SVGAnimatedTransformList::SVGAnimatedTransformList(JS::Realm& realm, JS::NonnullGCPtr base_val, JS::NonnullGCPtr anim_val) + : PlatformObject(realm) + , m_base_val(base_val) + , m_anim_val(anim_val) {}; + +SVGAnimatedTransformList::~SVGAnimatedTransformList() = default; + +void SVGAnimatedTransformList::initialize(JS::Realm& realm) +{ + Base::initialize(realm); + WEB_SET_PROTOTYPE_FOR_INTERFACE(SVGAnimatedTransformList); +} + +void SVGAnimatedTransformList::visit_edges(Cell::Visitor& visitor) +{ + Base::visit_edges(visitor); + visitor.visit(m_base_val); + visitor.visit(m_anim_val); +} + +} diff --git a/Userland/Libraries/LibWeb/SVG/SVGAnimatedTransformList.h b/Userland/Libraries/LibWeb/SVG/SVGAnimatedTransformList.h new file mode 100644 index 00000000000..c3aa4c1e91f --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGAnimatedTransformList.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024, MacDue + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace Web::SVG { + +// https://svgwg.org/svg2-draft/single-page.html#coords-InterfaceSVGTransformList +class SVGAnimatedTransformList final : public Bindings::PlatformObject { + WEB_PLATFORM_OBJECT(SVGAnimatedTransformList, Bindings::PlatformObject); + JS_DECLARE_ALLOCATOR(SVGAnimatedTransformList); + +public: + [[nodiscard]] static JS::NonnullGCPtr create(JS::Realm& realm, JS::NonnullGCPtr base_val, JS::NonnullGCPtr anim_val); + virtual ~SVGAnimatedTransformList() override; + + JS::NonnullGCPtr base_val() const + { + return m_anim_val; + } + + JS::NonnullGCPtr anim_val() const + { + return m_anim_val; + } + +private: + SVGAnimatedTransformList(JS::Realm& realm, JS::NonnullGCPtr base_val, JS::NonnullGCPtr anim_val); + + virtual void initialize(JS::Realm& realm) override; + virtual void visit_edges(Cell::Visitor& visitor) override; + + JS::NonnullGCPtr m_base_val; + JS::NonnullGCPtr m_anim_val; +}; + +} diff --git a/Userland/Libraries/LibWeb/SVG/SVGAnimatedTransformList.idl b/Userland/Libraries/LibWeb/SVG/SVGAnimatedTransformList.idl new file mode 100644 index 00000000000..59d00459628 --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGAnimatedTransformList.idl @@ -0,0 +1,8 @@ +#import + +// https://svgwg.org/svg2-draft/single-page.html#coords-InterfaceSVGAnimatedTransformList +[Exposed=Window] +interface SVGAnimatedTransformList { + [SameObject] readonly attribute SVGTransformList baseVal; + [SameObject] readonly attribute SVGTransformList animVal; +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index 2fc8e6420ae..97e1bd45a78 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -241,6 +241,7 @@ libweb_js_bindings(SVG/SVGAnimatedLength) libweb_js_bindings(SVG/SVGAnimatedNumber) libweb_js_bindings(SVG/SVGAnimatedRect) libweb_js_bindings(SVG/SVGAnimatedString) +libweb_js_bindings(SVG/SVGAnimatedTransformList) libweb_js_bindings(SVG/SVGClipPathElement) libweb_js_bindings(SVG/SVGDefsElement) libweb_js_bindings(SVG/SVGElement)