LibWeb: Implement <desc> SVG element

This commit is contained in:
Jamie Mansfield 2024-04-15 18:43:01 +01:00 committed by Andreas Kling
parent bb37451fe5
commit 2d90317c20
Notes: sideshowbarker 2024-07-16 23:51:07 +09:00
9 changed files with 71 additions and 0 deletions

View file

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

View file

@ -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",

View file

@ -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

View file

@ -87,6 +87,7 @@
#include <LibWeb/SVG/SVGCircleElement.h>
#include <LibWeb/SVG/SVGClipPathElement.h>
#include <LibWeb/SVG/SVGDefsElement.h>
#include <LibWeb/SVG/SVGDescElement.h>
#include <LibWeb/SVG/SVGEllipseElement.h>
#include <LibWeb/SVG/SVGForeignObjectElement.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));
if (local_name.equals_ignoring_ascii_case(SVG::TagNames::defs))
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)
return realm.heap().allocate<SVG::SVGEllipseElement>(realm, document, move(qualified_name));
if (local_name.equals_ignoring_ascii_case(SVG::TagNames::foreignObject))

View file

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

View file

@ -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;
}
}

View file

@ -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;
};
}

View file

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

View file

@ -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)