mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-07 00:19:27 +00:00
LibWeb: Add layout node and paintable for SVGForeignObjectElement
Introduces separate layout and paintable type for foreign element. It is necessary to inherit SVGForeignObjectPaintable from SVGMaskable in upcoming changes.
This commit is contained in:
parent
acd5369774
commit
7d05fe84bc
|
@ -483,6 +483,7 @@ set(SOURCES
|
|||
Layout/ReplacedBox.cpp
|
||||
Layout/SVGBox.cpp
|
||||
Layout/SVGFormattingContext.cpp
|
||||
Layout/SVGForeignObjectBox.cpp
|
||||
Layout/SVGGeometryBox.cpp
|
||||
Layout/SVGGraphicsBox.cpp
|
||||
Layout/SVGSVGBox.cpp
|
||||
|
@ -540,6 +541,7 @@ set(SOURCES
|
|||
Painting/PaintableFragment.cpp
|
||||
Painting/RadioButtonPaintable.cpp
|
||||
Painting/RecordingPainter.cpp
|
||||
Painting/SVGForeignObjectPaintable.cpp
|
||||
Painting/SVGPathPaintable.cpp
|
||||
Painting/SVGGraphicsPaintable.cpp
|
||||
Painting/SVGMaskPaintable.cpp
|
||||
|
|
25
Userland/Libraries/LibWeb/Layout/SVGForeignObjectBox.cpp
Normal file
25
Userland/Libraries/LibWeb/Layout/SVGForeignObjectBox.cpp
Normal file
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibWeb/Layout/SVGForeignObjectBox.h>
|
||||
#include <LibWeb/Painting/SVGForeignObjectPaintable.h>
|
||||
#include <LibWeb/SVG/SVGSVGElement.h>
|
||||
|
||||
namespace Web::Layout {
|
||||
|
||||
JS_DEFINE_ALLOCATOR(SVGForeignObjectBox);
|
||||
|
||||
SVGForeignObjectBox::SVGForeignObjectBox(DOM::Document& document, SVG::SVGForeignObjectElement& element, NonnullRefPtr<CSS::StyleProperties> properties)
|
||||
: BlockContainer(document, &element, properties)
|
||||
{
|
||||
}
|
||||
|
||||
JS::GCPtr<Painting::Paintable> SVGForeignObjectBox::create_paintable() const
|
||||
{
|
||||
return Painting::SVGForeignObjectPaintable::create(*this);
|
||||
}
|
||||
|
||||
}
|
30
Userland/Libraries/LibWeb/Layout/SVGForeignObjectBox.h
Normal file
30
Userland/Libraries/LibWeb/Layout/SVGForeignObjectBox.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/Optional.h>
|
||||
#include <LibWeb/Layout/BlockContainer.h>
|
||||
#include <LibWeb/Layout/SVGGraphicsBox.h>
|
||||
#include <LibWeb/SVG/SVGForeignObjectElement.h>
|
||||
|
||||
namespace Web::Layout {
|
||||
|
||||
class SVGForeignObjectBox final : public BlockContainer {
|
||||
JS_CELL(SVGForeignObjectBox, BlockContainer);
|
||||
JS_DECLARE_ALLOCATOR(SVGForeignObjectBox);
|
||||
|
||||
public:
|
||||
SVGForeignObjectBox(DOM::Document&, SVG::SVGForeignObjectElement&, NonnullRefPtr<CSS::StyleProperties>);
|
||||
virtual ~SVGForeignObjectBox() override = default;
|
||||
|
||||
SVG::SVGForeignObjectElement& dom_node() { return static_cast<SVG::SVGForeignObjectElement&>(*BlockContainer::dom_node()); }
|
||||
SVG::SVGForeignObjectElement const& dom_node() const { return static_cast<SVG::SVGForeignObjectElement const&>(*BlockContainer::dom_node()); }
|
||||
|
||||
virtual JS::GCPtr<Painting::Paintable> create_paintable() const override;
|
||||
};
|
||||
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibWeb/Painting/SVGForeignObjectPaintable.h>
|
||||
#include <LibWeb/SVG/SVGSVGElement.h>
|
||||
|
||||
namespace Web::Painting {
|
||||
|
||||
JS_DEFINE_ALLOCATOR(SVGForeignObjectPaintable);
|
||||
|
||||
JS::NonnullGCPtr<SVGForeignObjectPaintable> SVGForeignObjectPaintable::create(Layout::SVGForeignObjectBox const& layout_box)
|
||||
{
|
||||
return layout_box.heap().allocate_without_realm<SVGForeignObjectPaintable>(layout_box);
|
||||
}
|
||||
|
||||
SVGForeignObjectPaintable::SVGForeignObjectPaintable(Layout::SVGForeignObjectBox const& layout_box)
|
||||
: PaintableWithLines(layout_box)
|
||||
{
|
||||
}
|
||||
|
||||
Layout::SVGForeignObjectBox const& SVGForeignObjectPaintable::layout_box() const
|
||||
{
|
||||
return static_cast<Layout::SVGForeignObjectBox const&>(layout_node());
|
||||
}
|
||||
|
||||
TraversalDecision SVGForeignObjectPaintable::hit_test(CSSPixelPoint position, HitTestType type, Function<TraversalDecision(HitTestResult)> const& callback) const
|
||||
{
|
||||
return PaintableWithLines::hit_test(position, type, callback);
|
||||
}
|
||||
|
||||
void SVGForeignObjectPaintable::paint(PaintContext& context, PaintPhase phase) const
|
||||
{
|
||||
PaintableWithLines::paint(context, phase);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibWeb/Layout/SVGForeignObjectBox.h>
|
||||
#include <LibWeb/Painting/PaintableBox.h>
|
||||
|
||||
namespace Web::Painting {
|
||||
|
||||
class SVGForeignObjectPaintable final : public PaintableWithLines {
|
||||
JS_CELL(SVGForeignObjectPaintable, PaintableWithLines);
|
||||
JS_DECLARE_ALLOCATOR(SVGForeignObjectPaintable);
|
||||
|
||||
public:
|
||||
static JS::NonnullGCPtr<SVGForeignObjectPaintable> create(Layout::SVGForeignObjectBox const&);
|
||||
|
||||
virtual TraversalDecision hit_test(CSSPixelPoint, HitTestType, Function<TraversalDecision(HitTestResult)> const& callback) const override;
|
||||
|
||||
virtual void paint(PaintContext&, PaintPhase) const override;
|
||||
|
||||
Layout::SVGForeignObjectBox const& layout_box() const;
|
||||
|
||||
protected:
|
||||
SVGForeignObjectPaintable(Layout::SVGForeignObjectBox const&);
|
||||
};
|
||||
|
||||
}
|
|
@ -8,6 +8,7 @@
|
|||
#include <LibWeb/Bindings/Intrinsics.h>
|
||||
#include <LibWeb/CSS/Parser/Parser.h>
|
||||
#include <LibWeb/Layout/BlockContainer.h>
|
||||
#include <LibWeb/Layout/SVGForeignObjectBox.h>
|
||||
#include <LibWeb/SVG/AttributeNames.h>
|
||||
#include <LibWeb/SVG/SVGAnimatedLength.h>
|
||||
#include <LibWeb/SVG/SVGForeignObjectElement.h>
|
||||
|
@ -47,7 +48,7 @@ void SVGForeignObjectElement::visit_edges(Cell::Visitor& visitor)
|
|||
|
||||
JS::GCPtr<Layout::Node> SVGForeignObjectElement::create_layout_node(NonnullRefPtr<CSS::StyleProperties> style)
|
||||
{
|
||||
return heap().allocate_without_realm<Layout::BlockContainer>(document(), this, move(style));
|
||||
return heap().allocate_without_realm<Layout::SVGForeignObjectBox>(document(), *this, move(style));
|
||||
}
|
||||
|
||||
void SVGForeignObjectElement::apply_presentational_hints(CSS::StyleProperties& style) const
|
||||
|
|
Loading…
Reference in a new issue