diff --git a/Base/res/html/misc/canvas-gradients.html b/Base/res/html/misc/canvas-gradients.html index 1a71069acb..145467d76e 100644 --- a/Base/res/html/misc/canvas-gradients.html +++ b/Base/res/html/misc/canvas-gradients.html @@ -18,7 +18,7 @@

Linear Gradients

This time in a path to spice things up!
- + diff --git a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp index 8e7ff2b9c0..11863844dd 100644 --- a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp +++ b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp @@ -95,26 +95,22 @@ void CanvasRenderingContext2D::clear_rect(float x, float y, float width, float h void CanvasRenderingContext2D::stroke_rect(float x, float y, float width, float height) { - draw_clipped([&](auto& painter) { - auto& drawing_state = this->drawing_state(); + auto& drawing_state = this->drawing_state(); - auto rect = drawing_state.transform.map(Gfx::FloatRect(x, y, width, height)); - // We could remove the rounding here, but the lines look better when they have whole number pixel endpoints. - auto top_left = drawing_state.transform.map(Gfx::FloatPoint(x, y)).to_rounded(); - auto top_right = drawing_state.transform.map(Gfx::FloatPoint(x + width - 1, y)).to_rounded(); - auto bottom_left = drawing_state.transform.map(Gfx::FloatPoint(x, y + height - 1)).to_rounded(); - auto bottom_right = drawing_state.transform.map(Gfx::FloatPoint(x + width - 1, y + height - 1)).to_rounded(); + // We could remove the rounding here, but the lines look better when they have whole number pixel endpoints. + auto top_left = drawing_state.transform.map(Gfx::FloatPoint(x, y)).to_rounded(); + auto top_right = drawing_state.transform.map(Gfx::FloatPoint(x + width - 1, y)).to_rounded(); + auto bottom_left = drawing_state.transform.map(Gfx::FloatPoint(x, y + height - 1)).to_rounded(); + auto bottom_right = drawing_state.transform.map(Gfx::FloatPoint(x + width - 1, y + height - 1)).to_rounded(); - Gfx::Path path; - path.move_to(top_left); - path.line_to(top_right); - path.line_to(bottom_right); - path.line_to(bottom_left); - path.line_to(top_left); - painter.stroke_path(path, drawing_state.stroke_style.to_color_but_fixme_should_accept_any_paint_style(), drawing_state.line_width); + Gfx::Path path; + path.move_to(top_left); + path.line_to(top_right); + path.line_to(bottom_right); + path.line_to(bottom_left); + path.line_to(top_left); - return rect; - }); + stroke_internal(path); } // 4.12.5.1.14 Drawing images, https://html.spec.whatwg.org/multipage/canvas.html#drawing-images @@ -237,8 +233,11 @@ void CanvasRenderingContext2D::stroke_internal(Gfx::Path const& path) { draw_clipped([&](auto& painter) { auto& drawing_state = this->drawing_state(); - - painter.stroke_path(path, drawing_state.stroke_style.to_color_but_fixme_should_accept_any_paint_style(), drawing_state.line_width); + if (auto color = drawing_state.stroke_style.as_color(); color.has_value()) { + painter.stroke_path(path, *color, drawing_state.line_width); + } else { + painter.stroke_path(path, drawing_state.stroke_style.to_gfx_paint_style(), drawing_state.line_width); + } return path.bounding_box(); }); }