diff --git a/Meta/gn/secondary/Userland/Libraries/LibWeb/SVG/BUILD.gn b/Meta/gn/secondary/Userland/Libraries/LibWeb/SVG/BUILD.gn index 41cf97b3e5a..96da1c8ef9c 100644 --- a/Meta/gn/secondary/Userland/Libraries/LibWeb/SVG/BUILD.gn +++ b/Meta/gn/secondary/Userland/Libraries/LibWeb/SVG/BUILD.gn @@ -13,6 +13,7 @@ source_set("SVG") { "SVGClipPathElement.cpp", "SVGDecodedImageData.cpp", "SVGDefsElement.cpp", + "SVGDescElement.cpp", "SVGElement.cpp", "SVGEllipseElement.cpp", "SVGForeignObjectElement.cpp", diff --git a/Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni b/Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni index 3b57613c5fa..60bc05dcdba 100644 --- a/Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni +++ b/Meta/gn/secondary/Userland/Libraries/LibWeb/idl_files.gni @@ -263,6 +263,7 @@ standard_idl_files = [ "//Userland/Libraries/LibWeb/SVG/SVGCircleElement.idl", "//Userland/Libraries/LibWeb/SVG/SVGClipPathElement.idl", "//Userland/Libraries/LibWeb/SVG/SVGDefsElement.idl", + "//Userland/Libraries/LibWeb/SVG/SVGDescElement.idl", "//Userland/Libraries/LibWeb/SVG/SVGElement.idl", "//Userland/Libraries/LibWeb/SVG/SVGEllipseElement.idl", "//Userland/Libraries/LibWeb/SVG/SVGForeignObjectElement.idl", diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 46a8cf83fc2..96c16886064 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -603,6 +603,7 @@ set(SOURCES SVG/SVGClipPathElement.cpp SVG/SVGDecodedImageData.cpp SVG/SVGDefsElement.cpp + SVG/SVGDescElement.cpp SVG/SVGElement.cpp SVG/SVGGElement.cpp SVG/SVGGeometryElement.cpp diff --git a/Userland/Libraries/LibWeb/DOM/ElementFactory.cpp b/Userland/Libraries/LibWeb/DOM/ElementFactory.cpp index b1b3505734a..30e87753a66 100644 --- a/Userland/Libraries/LibWeb/DOM/ElementFactory.cpp +++ b/Userland/Libraries/LibWeb/DOM/ElementFactory.cpp @@ -87,6 +87,7 @@ #include #include #include +#include #include #include #include @@ -439,6 +440,8 @@ static JS::GCPtr create_svg_element(JS::Realm& realm, Document& return realm.heap().allocate(realm, document, move(qualified_name)); if (local_name.equals_ignoring_ascii_case(SVG::TagNames::defs)) return realm.heap().allocate(realm, document, move(qualified_name)); + if (local_name == SVG::TagNames::desc) + return realm.heap().allocate(realm, document, move(qualified_name)); if (local_name == SVG::TagNames::ellipse) return realm.heap().allocate(realm, document, move(qualified_name)); if (local_name.equals_ignoring_ascii_case(SVG::TagNames::foreignObject)) diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 17ac4c7f005..56a658be065 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -637,6 +637,7 @@ class SVGAnimatedRect; class SVGCircleElement; class SVGClipPathElement; class SVGDefsElement; +class SVGDescElement; class SVGElement; class SVGEllipseElement; class SVGForeignObjectElement; diff --git a/Userland/Libraries/LibWeb/SVG/SVGDescElement.cpp b/Userland/Libraries/LibWeb/SVG/SVGDescElement.cpp new file mode 100644 index 00000000000..60f7316b978 --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGDescElement.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2024, Jamie Mansfield + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include + +namespace Web::SVG { + +JS_DEFINE_ALLOCATOR(SVGDescElement); + +SVGDescElement::SVGDescElement(DOM::Document& document, DOM::QualifiedName qualified_name) + : SVGElement(document, move(qualified_name)) +{ +} + +void SVGDescElement::initialize(JS::Realm& realm) +{ + Base::initialize(realm); + WEB_SET_PROTOTYPE_FOR_INTERFACE(SVGDescElement); +} + +JS::GCPtr SVGDescElement::create_layout_node(NonnullRefPtr) +{ + return nullptr; +} + +} diff --git a/Userland/Libraries/LibWeb/SVG/SVGDescElement.h b/Userland/Libraries/LibWeb/SVG/SVGDescElement.h new file mode 100644 index 00000000000..9e5ccd8b48e --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGDescElement.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2024, Jamie Mansfield + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace Web::SVG { + +class SVGDescElement final : public SVGElement { + WEB_PLATFORM_OBJECT(SVGDescElement, SVGElement); + JS_DECLARE_ALLOCATOR(SVGDescElement); + +private: + SVGDescElement(DOM::Document&, DOM::QualifiedName); + + virtual void initialize(JS::Realm&) override; + + virtual JS::GCPtr create_layout_node(NonnullRefPtr) override; +}; + +} diff --git a/Userland/Libraries/LibWeb/SVG/SVGDescElement.idl b/Userland/Libraries/LibWeb/SVG/SVGDescElement.idl new file mode 100644 index 00000000000..33c92de493b --- /dev/null +++ b/Userland/Libraries/LibWeb/SVG/SVGDescElement.idl @@ -0,0 +1,6 @@ +#import + +// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGDescElement +[Exposed=Window] +interface SVGDescElement : SVGElement { +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index 1f9db5188f3..2b5ad67d0cc 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -248,6 +248,7 @@ libweb_js_bindings(SVG/SVGAnimatedString) libweb_js_bindings(SVG/SVGAnimatedTransformList) libweb_js_bindings(SVG/SVGClipPathElement) libweb_js_bindings(SVG/SVGDefsElement) +libweb_js_bindings(SVG/SVGDescElement) libweb_js_bindings(SVG/SVGElement) libweb_js_bindings(SVG/SVGGeometryElement) libweb_js_bindings(SVG/SVGGradientElement)