1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 16:17:45 +00:00

LibWeb: Pass CRC2D fill_rule as enum rather than StringView

This commit is contained in:
MacDue 2023-06-18 18:34:20 +01:00 committed by Andreas Kling
parent 0bb0f2e4fb
commit ff5d530aa3
2 changed files with 11 additions and 12 deletions

View file

@ -262,16 +262,15 @@ static Gfx::Painter::WindingRule parse_fill_rule(StringView fill_rule)
return Gfx::Painter::WindingRule::Nonzero; return Gfx::Painter::WindingRule::Nonzero;
} }
void CanvasRenderingContext2D::fill_internal(Gfx::Path& path, StringView fill_rule_value) void CanvasRenderingContext2D::fill_internal(Gfx::Path& path, Gfx::Painter::WindingRule winding_rule)
{ {
draw_clipped([=, this](auto& painter) mutable { draw_clipped([=, this](auto& painter) mutable {
path.close_all_subpaths(); path.close_all_subpaths();
auto& drawing_state = this->drawing_state(); auto& drawing_state = this->drawing_state();
auto fill_rule = parse_fill_rule(fill_rule_value);
if (auto color = drawing_state.fill_style.as_color(); color.has_value()) { if (auto color = drawing_state.fill_style.as_color(); color.has_value()) {
painter.fill_path(path, *color, fill_rule); painter.fill_path(path, *color, winding_rule);
} else { } else {
painter.fill_path(path, drawing_state.fill_style.to_gfx_paint_style(), 1.0f, fill_rule); painter.fill_path(path, drawing_state.fill_style.to_gfx_paint_style(), 1.0f, winding_rule);
} }
return path.bounding_box(); return path.bounding_box();
}); });
@ -279,13 +278,13 @@ void CanvasRenderingContext2D::fill_internal(Gfx::Path& path, StringView fill_ru
void CanvasRenderingContext2D::fill(DeprecatedString const& fill_rule) void CanvasRenderingContext2D::fill(DeprecatedString const& fill_rule)
{ {
return fill_internal(path(), fill_rule); return fill_internal(path(), parse_fill_rule(fill_rule));
} }
void CanvasRenderingContext2D::fill(Path2D& path, DeprecatedString const& fill_rule) void CanvasRenderingContext2D::fill(Path2D& path, DeprecatedString const& fill_rule)
{ {
auto transformed_path = path.path().copy_transformed(drawing_state().transform); auto transformed_path = path.path().copy_transformed(drawing_state().transform);
return fill_internal(transformed_path, fill_rule); return fill_internal(transformed_path, parse_fill_rule(fill_rule));
} }
JS::GCPtr<ImageData> CanvasRenderingContext2D::create_image_data(int width, int height) const JS::GCPtr<ImageData> CanvasRenderingContext2D::create_image_data(int width, int height) const
@ -490,7 +489,7 @@ CanvasRenderingContext2D::PreparedText CanvasRenderingContext2D::prepare_text(De
return prepared_text; return prepared_text;
} }
void CanvasRenderingContext2D::clip_internal(Gfx::Path& path, StringView fill_rule) void CanvasRenderingContext2D::clip_internal(Gfx::Path& path, Gfx::Painter::WindingRule winding_rule)
{ {
// FIXME: This should calculate the new clip path by intersecting the given path with the current one. // FIXME: This should calculate the new clip path by intersecting the given path with the current one.
// See: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-clip-dev // See: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-clip-dev
@ -498,19 +497,19 @@ void CanvasRenderingContext2D::clip_internal(Gfx::Path& path, StringView fill_ru
if (drawing_state().clip.has_value()) { if (drawing_state().clip.has_value()) {
dbgln("FIXME: CRC2D: Calculate the new clip path by intersecting the given path with the current one."); dbgln("FIXME: CRC2D: Calculate the new clip path by intersecting the given path with the current one.");
} }
drawing_state().clip = CanvasClip { path, parse_fill_rule(fill_rule) }; drawing_state().clip = CanvasClip { path, winding_rule };
} }
void CanvasRenderingContext2D::clip(DeprecatedString const& fill_rule) void CanvasRenderingContext2D::clip(DeprecatedString const& fill_rule)
{ {
auto transformed_path = path().copy_transformed(drawing_state().transform); auto transformed_path = path().copy_transformed(drawing_state().transform);
return clip_internal(transformed_path, fill_rule); return clip_internal(transformed_path, parse_fill_rule(fill_rule));
} }
void CanvasRenderingContext2D::clip(Path2D& path, DeprecatedString const& fill_rule) void CanvasRenderingContext2D::clip(Path2D& path, DeprecatedString const& fill_rule)
{ {
auto transformed_path = path.path().copy_transformed(drawing_state().transform); auto transformed_path = path.path().copy_transformed(drawing_state().transform);
return clip_internal(transformed_path, fill_rule); return clip_internal(transformed_path, parse_fill_rule(fill_rule));
} }
// https://html.spec.whatwg.org/multipage/canvas.html#check-the-usability-of-the-image-argument // https://html.spec.whatwg.org/multipage/canvas.html#check-the-usability-of-the-image-argument

View file

@ -134,8 +134,8 @@ private:
HTMLCanvasElement const& canvas_element() const; HTMLCanvasElement const& canvas_element() const;
void stroke_internal(Gfx::Path const&); void stroke_internal(Gfx::Path const&);
void fill_internal(Gfx::Path&, StringView fill_rule); void fill_internal(Gfx::Path&, Gfx::Painter::WindingRule winding_rule);
void clip_internal(Gfx::Path&, StringView fill_rule); void clip_internal(Gfx::Path&, Gfx::Painter::WindingRule winding_rule);
JS::NonnullGCPtr<HTMLCanvasElement> m_element; JS::NonnullGCPtr<HTMLCanvasElement> m_element;
OwnPtr<Gfx::Painter> m_painter; OwnPtr<Gfx::Painter> m_painter;