aboutsummaryrefslogtreecommitdiffstats
path: root/components/canvas
diff options
context:
space:
mode:
authorSteven Novaryo <65610990+stevennovaryo@users.noreply.github.com>2025-04-01 19:22:00 +0800
committerGitHub <noreply@github.com>2025-04-01 11:22:00 +0000
commita77592e281aad3df23e38fcc574059a31c37f30c (patch)
tree29864dca24b1e8f699400b0264a4a7d199fa1d0e /components/canvas
parentbc6926d1feea04b41879d43507509636db29b377 (diff)
downloadservo-a77592e281aad3df23e38fcc574059a31c37f30c.tar.gz
servo-a77592e281aad3df23e38fcc574059a31c37f30c.zip
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 <steven.novaryo@gmail.com>
Diffstat (limited to 'components/canvas')
-rw-r--r--components/canvas/canvas_data.rs8
-rw-r--r--components/canvas/canvas_paint_thread.rs4
-rw-r--r--components/canvas/raqote_backend.rs10
3 files changed, 22 insertions, 0 deletions
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<f32>) {
+ 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<f32> {
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<f32>) {
+ 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,