From a77592e281aad3df23e38fcc574059a31c37f30c Mon Sep 17 00:00:00 2001 From: Steven Novaryo <65610990+stevennovaryo@users.noreply.github.com> Date: Tue, 1 Apr 2025 19:22:00 +0800 Subject: canvas: Implement line dash setters and getters (#36257) Implement `setLineDash`, `getLineDash`, and `lineDashOffset` from `CanvasPathDrawingStyles` mixin, according to the spec https://html.spec.whatwg.org/multipage/canvas.html#canvaspathdrawingstyles. Testing: Existing WPT. --------- Signed-off-by: stevennovaryo --- components/canvas/canvas_data.rs | 8 ++++++++ components/canvas/canvas_paint_thread.rs | 4 ++++ components/canvas/raqote_backend.rs | 10 ++++++++++ 3 files changed, 22 insertions(+) (limited to 'components/canvas') diff --git a/components/canvas/canvas_data.rs b/components/canvas/canvas_data.rs index 5462098abf5..34942388c23 100644 --- a/components/canvas/canvas_data.rs +++ b/components/canvas/canvas_data.rs @@ -1366,6 +1366,14 @@ impl<'a> CanvasData<'a> { self.state.stroke_opts.set_miter_limit(limit); } + pub fn set_line_dash(&mut self, items: Vec) { + self.state.stroke_opts.set_line_dash(items); + } + + pub fn set_line_dash_offset(&mut self, offset: f32) { + self.state.stroke_opts.set_line_dash_offset(offset); + } + pub fn get_transform(&self) -> Transform2D { self.drawtarget.get_transform() } diff --git a/components/canvas/canvas_paint_thread.rs b/components/canvas/canvas_paint_thread.rs index 09d670d5274..1c6877772d3 100644 --- a/components/canvas/canvas_paint_thread.rs +++ b/components/canvas/canvas_paint_thread.rs @@ -230,6 +230,10 @@ impl<'a> CanvasPaintThread<'a> { Canvas2dMsg::SetLineCap(cap) => self.canvas(canvas_id).set_line_cap(cap), Canvas2dMsg::SetLineJoin(join) => self.canvas(canvas_id).set_line_join(join), Canvas2dMsg::SetMiterLimit(limit) => self.canvas(canvas_id).set_miter_limit(limit), + Canvas2dMsg::SetLineDash(items) => self.canvas(canvas_id).set_line_dash(items), + Canvas2dMsg::SetLineDashOffset(offset) => { + self.canvas(canvas_id).set_line_dash_offset(offset) + }, Canvas2dMsg::GetTransform(sender) => { let transform = self.canvas(canvas_id).get_transform(); sender.send(transform).unwrap(); diff --git a/components/canvas/raqote_backend.rs b/components/canvas/raqote_backend.rs index bc8d20e9dcf..e40367a4ee8 100644 --- a/components/canvas/raqote_backend.rs +++ b/components/canvas/raqote_backend.rs @@ -298,6 +298,16 @@ impl StrokeOptions { StrokeOptions::Raqote(options) => options.cap = val.to_raqote_style(), } } + pub fn set_line_dash(&mut self, items: Vec) { + match self { + StrokeOptions::Raqote(options) => options.dash_array = items, + } + } + pub fn set_line_dash_offset(&mut self, offset: f32) { + match self { + StrokeOptions::Raqote(options) => options.dash_offset = offset, + } + } pub fn as_raqote(&self) -> &raqote::StrokeStyle { match self { StrokeOptions::Raqote(options) => options, -- cgit v1.2.3