Ver código fonte

LibWeb: Implement <desc> SVG element

Jamie Mansfield 1 ano atrás
pai
commit
2d90317c20

+ 1 - 0
Meta/gn/secondary/Userland/Libraries/LibWeb/SVG/BUILD.gn

@@ -13,6 +13,7 @@ source_set("SVG") {
     "SVGClipPathElement.cpp",
     "SVGClipPathElement.cpp",
     "SVGDecodedImageData.cpp",
     "SVGDecodedImageData.cpp",
     "SVGDefsElement.cpp",
     "SVGDefsElement.cpp",
+    "SVGDescElement.cpp",
     "SVGElement.cpp",
     "SVGElement.cpp",
     "SVGEllipseElement.cpp",
     "SVGEllipseElement.cpp",
     "SVGForeignObjectElement.cpp",
     "SVGForeignObjectElement.cpp",

+ 1 - 0
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/SVGCircleElement.idl",
   "//Userland/Libraries/LibWeb/SVG/SVGClipPathElement.idl",
   "//Userland/Libraries/LibWeb/SVG/SVGClipPathElement.idl",
   "//Userland/Libraries/LibWeb/SVG/SVGDefsElement.idl",
   "//Userland/Libraries/LibWeb/SVG/SVGDefsElement.idl",
+  "//Userland/Libraries/LibWeb/SVG/SVGDescElement.idl",
   "//Userland/Libraries/LibWeb/SVG/SVGElement.idl",
   "//Userland/Libraries/LibWeb/SVG/SVGElement.idl",
   "//Userland/Libraries/LibWeb/SVG/SVGEllipseElement.idl",
   "//Userland/Libraries/LibWeb/SVG/SVGEllipseElement.idl",
   "//Userland/Libraries/LibWeb/SVG/SVGForeignObjectElement.idl",
   "//Userland/Libraries/LibWeb/SVG/SVGForeignObjectElement.idl",

+ 1 - 0
Userland/Libraries/LibWeb/CMakeLists.txt

@@ -603,6 +603,7 @@ set(SOURCES
     SVG/SVGClipPathElement.cpp
     SVG/SVGClipPathElement.cpp
     SVG/SVGDecodedImageData.cpp
     SVG/SVGDecodedImageData.cpp
     SVG/SVGDefsElement.cpp
     SVG/SVGDefsElement.cpp
+    SVG/SVGDescElement.cpp
     SVG/SVGElement.cpp
     SVG/SVGElement.cpp
     SVG/SVGGElement.cpp
     SVG/SVGGElement.cpp
     SVG/SVGGeometryElement.cpp
     SVG/SVGGeometryElement.cpp

+ 3 - 0
Userland/Libraries/LibWeb/DOM/ElementFactory.cpp

@@ -87,6 +87,7 @@
 #include <LibWeb/SVG/SVGCircleElement.h>
 #include <LibWeb/SVG/SVGCircleElement.h>
 #include <LibWeb/SVG/SVGClipPathElement.h>
 #include <LibWeb/SVG/SVGClipPathElement.h>
 #include <LibWeb/SVG/SVGDefsElement.h>
 #include <LibWeb/SVG/SVGDefsElement.h>
+#include <LibWeb/SVG/SVGDescElement.h>
 #include <LibWeb/SVG/SVGEllipseElement.h>
 #include <LibWeb/SVG/SVGEllipseElement.h>
 #include <LibWeb/SVG/SVGForeignObjectElement.h>
 #include <LibWeb/SVG/SVGForeignObjectElement.h>
 #include <LibWeb/SVG/SVGGElement.h>
 #include <LibWeb/SVG/SVGGElement.h>
@@ -439,6 +440,8 @@ static JS::GCPtr<SVG::SVGElement> create_svg_element(JS::Realm& realm, Document&
         return realm.heap().allocate<SVG::SVGCircleElement>(realm, document, move(qualified_name));
         return realm.heap().allocate<SVG::SVGCircleElement>(realm, document, move(qualified_name));
     if (local_name.equals_ignoring_ascii_case(SVG::TagNames::defs))
     if (local_name.equals_ignoring_ascii_case(SVG::TagNames::defs))
         return realm.heap().allocate<SVG::SVGDefsElement>(realm, document, move(qualified_name));
         return realm.heap().allocate<SVG::SVGDefsElement>(realm, document, move(qualified_name));
+    if (local_name == SVG::TagNames::desc)
+        return realm.heap().allocate<SVG::SVGDescElement>(realm, document, move(qualified_name));
     if (local_name == SVG::TagNames::ellipse)
     if (local_name == SVG::TagNames::ellipse)
         return realm.heap().allocate<SVG::SVGEllipseElement>(realm, document, move(qualified_name));
         return realm.heap().allocate<SVG::SVGEllipseElement>(realm, document, move(qualified_name));
     if (local_name.equals_ignoring_ascii_case(SVG::TagNames::foreignObject))
     if (local_name.equals_ignoring_ascii_case(SVG::TagNames::foreignObject))

+ 1 - 0
Userland/Libraries/LibWeb/Forward.h

@@ -637,6 +637,7 @@ class SVGAnimatedRect;
 class SVGCircleElement;
 class SVGCircleElement;
 class SVGClipPathElement;
 class SVGClipPathElement;
 class SVGDefsElement;
 class SVGDefsElement;
+class SVGDescElement;
 class SVGElement;
 class SVGElement;
 class SVGEllipseElement;
 class SVGEllipseElement;
 class SVGForeignObjectElement;
 class SVGForeignObjectElement;

+ 32 - 0
Userland/Libraries/LibWeb/SVG/SVGDescElement.cpp

@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <LibWeb/Bindings/Intrinsics.h>
+#include <LibWeb/DOM/Document.h>
+#include <LibWeb/Page/Page.h>
+#include <LibWeb/SVG/SVGDescElement.h>
+
+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<Layout::Node> SVGDescElement::create_layout_node(NonnullRefPtr<CSS::StyleProperties>)
+{
+    return nullptr;
+}
+
+}

+ 25 - 0
Userland/Libraries/LibWeb/SVG/SVGDescElement.h

@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibWeb/SVG/SVGElement.h>
+
+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<Layout::Node> create_layout_node(NonnullRefPtr<CSS::StyleProperties>) override;
+};
+
+}

+ 6 - 0
Userland/Libraries/LibWeb/SVG/SVGDescElement.idl

@@ -0,0 +1,6 @@
+#import <SVG/SVGElement.idl>
+
+// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGDescElement
+[Exposed=Window]
+interface SVGDescElement : SVGElement {
+};

+ 1 - 0
Userland/Libraries/LibWeb/idl_files.cmake

@@ -248,6 +248,7 @@ libweb_js_bindings(SVG/SVGAnimatedString)
 libweb_js_bindings(SVG/SVGAnimatedTransformList)
 libweb_js_bindings(SVG/SVGAnimatedTransformList)
 libweb_js_bindings(SVG/SVGClipPathElement)
 libweb_js_bindings(SVG/SVGClipPathElement)
 libweb_js_bindings(SVG/SVGDefsElement)
 libweb_js_bindings(SVG/SVGDefsElement)
+libweb_js_bindings(SVG/SVGDescElement)
 libweb_js_bindings(SVG/SVGElement)
 libweb_js_bindings(SVG/SVGElement)
 libweb_js_bindings(SVG/SVGGeometryElement)
 libweb_js_bindings(SVG/SVGGeometryElement)
 libweb_js_bindings(SVG/SVGGradientElement)
 libweb_js_bindings(SVG/SVGGradientElement)