diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp index cc30e8fee4e..8078a902212 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp @@ -68,6 +68,7 @@ static bool is_platform_object(Type const& type) "ReadableStream"sv, "Request"sv, "Selection"sv, + "SVGTransform"sv, "Table"sv, "Text"sv, "TextMetrics"sv, diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 8e4080a6cd6..24a65967211 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -622,6 +622,7 @@ set(SOURCES SVG/SVGTextPathElement.cpp SVG/SVGTextPositioningElement.cpp SVG/SVGTitleElement.cpp + SVG/SVGTransform.cpp SVG/SVGTSpanElement.cpp SVG/SVGUseElement.cpp SVG/TagNames.cpp diff --git a/Userland/Libraries/LibWeb/SVG/SVGTransform.cpp b/Userland/Libraries/LibWeb/SVG/SVGTransform.cpp new file mode 100644 index 00000000000..f1b3ce219a7 --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGTransform.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2024, MacDue + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +namespace Web::SVG { + +JS_DEFINE_ALLOCATOR(SVGTransform); + +JS::NonnullGCPtr SVGTransform::create(JS::Realm& realm) +{ + return realm.heap().allocate(realm, realm); +} + +SVGTransform::SVGTransform(JS::Realm& realm) + : PlatformObject(realm) {}; + +SVGTransform::~SVGTransform() = default; + +void SVGTransform::initialize(JS::Realm& realm) +{ + Base::initialize(realm); + WEB_SET_PROTOTYPE_FOR_INTERFACE(SVGTransform); +} + +} diff --git a/Userland/Libraries/LibWeb/SVG/SVGTransform.h b/Userland/Libraries/LibWeb/SVG/SVGTransform.h new file mode 100644 index 00000000000..4e2c8106003 --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGTransform.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2024, MacDue + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace Web::SVG { + +// FIXME: This class is just a stub. +// https://svgwg.org/svg2-draft/single-page.html#coords-InterfaceSVGTransform +class SVGTransform final : public Bindings::PlatformObject { + WEB_PLATFORM_OBJECT(SVGTransform, Bindings::PlatformObject); + JS_DECLARE_ALLOCATOR(SVGTransform); + +public: + [[nodiscard]] static JS::NonnullGCPtr create(JS::Realm& realm); + virtual ~SVGTransform() override; + +private: + SVGTransform(JS::Realm& realm); + + virtual void initialize(JS::Realm& realm) override; +}; + +} diff --git a/Userland/Libraries/LibWeb/SVG/SVGTransform.idl b/Userland/Libraries/LibWeb/SVG/SVGTransform.idl new file mode 100644 index 00000000000..448f8f008d9 --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGTransform.idl @@ -0,0 +1,24 @@ +// https://svgwg.org/svg2-draft/single-page.html#coords-InterfaceSVGTransform +[Exposed=Window] +interface SVGTransform { + + // Transform Types + const unsigned short SVG_TRANSFORM_UNKNOWN = 0; + const unsigned short SVG_TRANSFORM_MATRIX = 1; + const unsigned short SVG_TRANSFORM_TRANSLATE = 2; + const unsigned short SVG_TRANSFORM_SCALE = 3; + const unsigned short SVG_TRANSFORM_ROTATE = 4; + const unsigned short SVG_TRANSFORM_SKEWX = 5; + const unsigned short SVG_TRANSFORM_SKEWY = 6; + + // FIXME: readonly attribute unsigned short type; + // FIXME: [SameObject] readonly attribute DOMMatrix matrix; + // FIXME: readonly attribute float angle; + + // FIXME: undefined setMatrix(optional DOMMatrix2DInit matrix = {}); + // FIXME: undefined setTranslate(float tx, float ty); + // FIXME: undefined setScale(float sx, float sy); + // FIXME: undefined setRotate(float angle, float cx, float cy); + // FIXME: undefined setSkewX(float angle); + // FIXME: undefined setSkewY(float angle); +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index ee7cab7f602..6e930a8c8ed 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -269,6 +269,7 @@ libweb_js_bindings(SVG/SVGTextElement) libweb_js_bindings(SVG/SVGTextPathElement) libweb_js_bindings(SVG/SVGTextPositioningElement) libweb_js_bindings(SVG/SVGTitleElement) +libweb_js_bindings(SVG/SVGTransform) libweb_js_bindings(SVG/SVGTSpanElement) libweb_js_bindings(SVG/SVGUseElement) libweb_js_bindings(Selection/Selection)