mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-08 17:19:13 +00:00
LibWeb/SVG: Move path data into Path.{h,cpp}
More things need this than just the `<path>` element, so let's avoid having to include `SVGPathElement.h` in places that don't need it. Minor changes at the same time: - Wrap it in a Path class - Specify underlying type for PathInstructionType - Make a couple of free functions into methods - Give PathInstruction an operator== No functionality changes.
This commit is contained in:
parent
07b5b7ffb6
commit
6b53454b68
Notes:
github-actions[bot]
2025-07-17 18:00:44 +00:00
Author: https://github.com/AtkinsSJ
Commit: 6b53454b68
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5491
Reviewed-by: https://github.com/kalenikaliaksandr ✅
9 changed files with 322 additions and 272 deletions
60
Libraries/LibWeb/SVG/Path.h
Normal file
60
Libraries/LibWeb/SVG/Path.h
Normal file
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright (c) 2020, Matthew Olsson <mattco@serenityos.org>
|
||||
* Copyright (c) 2022-2025, Sam Atkins <sam@ladybird.org>
|
||||
* Copyright (c) 2024, Tim Ledbetter <timledbetter@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/Span.h>
|
||||
#include <AK/Types.h>
|
||||
#include <AK/Vector.h>
|
||||
#include <LibGfx/Forward.h>
|
||||
|
||||
namespace Web::SVG {
|
||||
|
||||
enum class PathInstructionType : u8 {
|
||||
Move,
|
||||
ClosePath,
|
||||
Line,
|
||||
HorizontalLine,
|
||||
VerticalLine,
|
||||
Curve,
|
||||
SmoothCurve,
|
||||
QuadraticBezierCurve,
|
||||
SmoothQuadraticBezierCurve,
|
||||
EllipticalArc,
|
||||
Invalid,
|
||||
};
|
||||
|
||||
struct PathInstruction {
|
||||
PathInstructionType type;
|
||||
bool absolute;
|
||||
Vector<float> data;
|
||||
|
||||
bool operator==(PathInstruction const&) const = default;
|
||||
|
||||
void dump() const;
|
||||
};
|
||||
|
||||
class Path {
|
||||
public:
|
||||
Path() = default;
|
||||
|
||||
explicit Path(Vector<PathInstruction> instructions)
|
||||
: m_instructions(move(instructions))
|
||||
{
|
||||
}
|
||||
ReadonlySpan<PathInstruction> instructions() const { return m_instructions; }
|
||||
|
||||
[[nodiscard]] Gfx::Path to_gfx_path() const;
|
||||
|
||||
bool operator==(Path const&) const = default;
|
||||
|
||||
private:
|
||||
Vector<PathInstruction> m_instructions;
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue