ladybird/Libraries/LibGfx/PathSkia.h
Andreas Kling 321809320b LibWeb+LibGfx: Remove Path::close_all_subpaths()
As it turns out, SkPath already behaves the way we need for SVG and HTML
canvas elements. Less work for us, yay! This removes a 5% item from the
profile when scrolling on https://imdb.com/

Note that there's a tiny screenshot test expectation change due to
minor antialiasing differences when we no longer do our redundant
subpath modifications.
2025-09-25 21:42:52 +02:00

59 lines
2.2 KiB
C++

/*
* Copyright (c) 2024, Andreas Kling <andreas@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibGfx/Path.h>
class SkPath;
namespace Gfx {
class PathImplSkia final : public PathImpl {
public:
static NonnullOwnPtr<Gfx::PathImplSkia> create();
virtual ~PathImplSkia() override;
virtual void clear() override;
virtual void move_to(Gfx::FloatPoint const&) override;
virtual void line_to(Gfx::FloatPoint const&) override;
virtual void close() override;
virtual void elliptical_arc_to(FloatPoint point, FloatSize radii, float x_axis_rotation, bool large_arc, bool sweep) override;
virtual void arc_to(FloatPoint point, float radius, bool large_arc, bool sweep) override;
virtual void quadratic_bezier_curve_to(FloatPoint through, FloatPoint point) override;
virtual void cubic_bezier_curve_to(FloatPoint c1, FloatPoint c2, FloatPoint p2) override;
virtual void text(Utf8View const&, Font const&) override;
virtual void text(Utf16View const&, Font const&) override;
virtual void glyph_run(GlyphRun const&) override;
virtual void offset(Gfx::FloatPoint const&) override;
virtual void append_path(Gfx::Path const&) override;
virtual void intersect(Gfx::Path const&) override;
[[nodiscard]] virtual bool is_empty() const override;
virtual Gfx::FloatPoint last_point() const override;
virtual Gfx::FloatRect bounding_box() const override;
virtual bool contains(FloatPoint point, Gfx::WindingRule) const override;
virtual void set_fill_type(Gfx::WindingRule winding_rule) override;
virtual NonnullOwnPtr<PathImpl> clone() const override;
virtual NonnullOwnPtr<PathImpl> copy_transformed(Gfx::AffineTransform const&) const override;
virtual NonnullOwnPtr<PathImpl> place_text_along(Utf8View const& text, Font const&) const override;
virtual NonnullOwnPtr<PathImpl> place_text_along(Utf16View const& text, Font const&) const override;
SkPath const& sk_path() const { return *m_path; }
SkPath& sk_path() { return *m_path; }
private:
PathImplSkia();
PathImplSkia(PathImplSkia const& other);
Gfx::FloatPoint m_last_move_to;
NonnullOwnPtr<SkPath> m_path;
};
}