Skip to content

Commit 11bc83c

Browse files
authored
Merge pull request rust-skia#816 from pragmatrix/canvas-shared
Refactor Canvas so that all functions can be used on shared references
2 parents 88c38b5 + 4bb8f17 commit 11bc83c

32 files changed

+210
-290
lines changed

skia-org/src/artifact.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ pub fn draw_image_on_surface(
55
surface: &mut Surface,
66
path: &Path,
77
name: &str,
8-
func: impl Fn(&mut Canvas),
8+
func: impl Fn(&Canvas),
99
) {
1010
let canvas = surface.canvas();
1111

skia-org/src/drivers.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ pub trait DrawingDriver {
3535

3636
fn new() -> Self;
3737

38-
fn draw_image(&mut self, size: (i32, i32), path: &Path, name: &str, func: impl Fn(&mut Canvas));
38+
fn draw_image(&mut self, size: (i32, i32), path: &Path, name: &str, func: impl Fn(&Canvas));
3939

40-
fn draw_image_256(&mut self, path: &Path, name: &str, func: impl Fn(&mut Canvas)) {
40+
fn draw_image_256(&mut self, path: &Path, name: &str, func: impl Fn(&Canvas)) {
4141
self.draw_image((256, 256), path, name, func)
4242
}
4343
}

skia-org/src/drivers/cpu.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ impl DrawingDriver for Cpu {
1818
(width, height): (i32, i32),
1919
path: &Path,
2020
name: &str,
21-
func: impl Fn(&mut Canvas),
21+
func: impl Fn(&Canvas),
2222
) {
2323
let mut surface = surfaces::raster_n32_premul((width * 2, height * 2)).unwrap();
2424
artifact::draw_image_on_surface(&mut surface, path, name, func);

skia-org/src/drivers/d3d.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ impl DrawingDriver for D3D {
7171
(width, height): (i32, i32),
7272
path: &Path,
7373
name: &str,
74-
func: impl Fn(&mut Canvas),
74+
func: impl Fn(&Canvas),
7575
) {
7676
let image_info = ImageInfo::new_n32_premul((width * 2, height * 2), None);
7777
let mut surface = gpu::surfaces::render_target(
@@ -88,7 +88,7 @@ impl DrawingDriver for D3D {
8888
artifact::draw_image_on_surface(&mut surface, path, name, func);
8989
}
9090

91-
fn draw_image_256(&mut self, path: &Path, name: &str, func: impl Fn(&mut Canvas)) {
91+
fn draw_image_256(&mut self, path: &Path, name: &str, func: impl Fn(&Canvas)) {
9292
self.draw_image((256, 256), path, name, func)
9393
}
9494
}

skia-org/src/drivers/gl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ impl DrawingDriver for OpenGl {
2222
(width, height): (i32, i32),
2323
path: &Path,
2424
name: &str,
25-
func: impl Fn(&mut Canvas),
25+
func: impl Fn(&Canvas),
2626
) {
2727
let image_info = ImageInfo::new_n32_premul((width * 2, height * 2), None);
2828
let mut surface = gpu::surfaces::render_target(

skia-org/src/drivers/metal.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ impl DrawingDriver for Metal {
5151
(width, height): (i32, i32),
5252
path: &Path,
5353
name: &str,
54-
func: impl Fn(&mut Canvas),
54+
func: impl Fn(&Canvas),
5555
) {
5656
let _image_pool = AutoreleasePool::new();
5757

skia-org/src/drivers/pdf.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,7 @@ impl DrawingDriver for Pdf {
1111
Self
1212
}
1313

14-
fn draw_image(
15-
&mut self,
16-
size: (i32, i32),
17-
path: &Path,
18-
name: &str,
19-
func: impl Fn(&mut Canvas),
20-
) {
14+
fn draw_image(&mut self, size: (i32, i32), path: &Path, name: &str, func: impl Fn(&Canvas)) {
2115
let mut document = skia_safe::pdf::new_document(None).begin_page(size, None);
2216
func(document.canvas());
2317
let data = document.end_page().close();

skia-org/src/drivers/render_svg.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ impl DrawingDriver for RenderSvg {
1818
size @ (width, height): (i32, i32),
1919
path: &Path,
2020
name: &str,
21-
draw: impl Fn(&mut Canvas),
21+
draw: impl Fn(&Canvas),
2222
) {
23-
let mut canvas = svg::Canvas::new(Rect::from_size(size), None);
24-
draw(&mut canvas);
23+
let canvas = svg::Canvas::new(Rect::from_size(size), None);
24+
draw(&canvas);
2525
let data = canvas.end();
2626
let svg = data.as_bytes();
2727

skia-org/src/drivers/svg.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,10 @@ impl DrawingDriver for Svg {
1111
Self
1212
}
1313

14-
fn draw_image(
15-
&mut self,
16-
size: (i32, i32),
17-
path: &Path,
18-
name: &str,
19-
func: impl Fn(&mut Canvas),
20-
) {
14+
fn draw_image(&mut self, size: (i32, i32), path: &Path, name: &str, func: impl Fn(&Canvas)) {
2115
use skia_safe::Rect;
22-
let mut canvas = skia_safe::svg::Canvas::new(Rect::from_size(size), None);
23-
func(&mut canvas);
16+
let canvas = skia_safe::svg::Canvas::new(Rect::from_size(size), None);
17+
func(&canvas);
2418
let data = canvas.end();
2519
artifact::write_file(data.as_bytes(), path, name, "svg");
2620
}

skia-org/src/drivers/vulkan.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ impl DrawingDriver for Vulkan {
5858
(width, height): (i32, i32),
5959
path: &Path,
6060
name: &str,
61-
func: impl Fn(&mut Canvas),
61+
func: impl Fn(&Canvas),
6262
) {
6363
let image_info = ImageInfo::new_n32_premul((width * 2, height * 2), None);
6464
let mut surface = gpu::surfaces::render_target(

skia-org/src/skcanvas_overview.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub fn draw(driver: &mut impl DrawingDriver, path: &path::Path) {
1111
driver.draw_image_256(&path, "hello-skia", draw_hello_skia);
1212
}
1313

14-
fn draw_heptagram(canvas: &mut Canvas) {
14+
fn draw_heptagram(canvas: &Canvas) {
1515
const SCALE: scalar = 256.0;
1616
const R: scalar = 0.45 * SCALE;
1717
#[allow(clippy::excessive_precision)]
@@ -32,7 +32,7 @@ fn draw_heptagram(canvas: &mut Canvas) {
3232
.draw_path(&path, &p);
3333
}
3434

35-
fn draw_rotated_rectangle(canvas: &mut Canvas) {
35+
fn draw_rotated_rectangle(canvas: &Canvas) {
3636
canvas.save();
3737
canvas.translate((128.0, 128.0)).rotate(45.0, None);
3838
let rect = Rect::from_point_and_size((-90.5, -90.5), (181.0, 181.0));
@@ -42,7 +42,7 @@ fn draw_rotated_rectangle(canvas: &mut Canvas) {
4242
canvas.restore();
4343
}
4444

45-
fn draw_hello_skia(canvas: &mut Canvas) {
45+
fn draw_hello_skia(canvas: &Canvas) {
4646
let image = resources::color_wheel();
4747

4848
canvas.draw_color(Color::WHITE, BlendMode::default());

skia-org/src/skpaint_overview.rs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ pub fn draw(driver: &mut impl DrawingDriver, path: &path::Path) {
5050
driver.draw_image_256(path, "22-sum-path-effect", draw_sum_path_effect);
5151
}
5252

53-
fn draw_three_paints(canvas: &mut Canvas) {
53+
fn draw_three_paints(canvas: &Canvas) {
5454
let (paint1, paint2, paint3) = (
5555
&mut Paint::default(),
5656
&mut Paint::default(),
@@ -90,7 +90,7 @@ fn draw_three_paints(canvas: &mut Canvas) {
9090
.draw_text_blob(&blob2, (20.0, 224.0), paint3);
9191
}
9292

93-
fn draw_fill_and_stroke(canvas: &mut Canvas) {
93+
fn draw_fill_and_stroke(canvas: &Canvas) {
9494
let fill_paint = &mut Paint::default();
9595
let stroke_paint = &mut Paint::default();
9696
stroke_paint
@@ -113,7 +113,7 @@ fn draw_fill_and_stroke(canvas: &mut Canvas) {
113113
canvas.draw_text_blob(&blob, (20, 220), fill_paint);
114114
}
115115

116-
fn draw_gradient(canvas: &mut Canvas) {
116+
fn draw_gradient(canvas: &Canvas) {
117117
let points: (Point, Point) = ((0.0, 0.0).into(), (256.0, 256.0).into());
118118
let colors = [Color::BLUE, Color::YELLOW];
119119
let paint = &mut Paint::default();
@@ -129,8 +129,8 @@ fn draw_gradient(canvas: &mut Canvas) {
129129
canvas.draw_paint(paint);
130130
}
131131

132-
fn draw_transfer_modes(canvas: &mut Canvas) {
133-
fn draw_str(c: &mut Canvas, text: &str, x: scalar, y: scalar, font: &Font, paint: &Paint) {
132+
fn draw_transfer_modes(canvas: &Canvas) {
133+
fn draw_str(c: &Canvas, text: &str, x: scalar, y: scalar, font: &Font, paint: &Paint) {
134134
c.draw_text_blob(TextBlob::from_str(text, font).unwrap(), (x, y), paint);
135135
}
136136

@@ -213,7 +213,7 @@ fn draw_transfer_modes(canvas: &mut Canvas) {
213213
}
214214
}
215215

216-
fn draw_bitmap_shader(canvas: &mut Canvas) {
216+
fn draw_bitmap_shader(canvas: &Canvas) {
217217
let image = resources::color_wheel();
218218

219219
canvas.clear(Color::WHITE);
@@ -228,7 +228,7 @@ fn draw_bitmap_shader(canvas: &mut Canvas) {
228228
canvas.draw_paint(paint);
229229
}
230230

231-
fn draw_radial_gradient_shader(canvas: &mut Canvas) {
231+
fn draw_radial_gradient_shader(canvas: &Canvas) {
232232
let colors = [Color::BLUE, Color::YELLOW];
233233
let mut paint = Paint::default();
234234
paint.set_shader(gradient_shader::radial(
@@ -243,7 +243,7 @@ fn draw_radial_gradient_shader(canvas: &mut Canvas) {
243243
canvas.draw_paint(&paint);
244244
}
245245

246-
fn draw_two_point_conical_shader(canvas: &mut Canvas) {
246+
fn draw_two_point_conical_shader(canvas: &Canvas) {
247247
let colors = [Color::BLUE, Color::YELLOW];
248248
let paint = &mut Paint::default();
249249
paint.set_shader(gradient_shader::two_point_conical(
@@ -260,7 +260,7 @@ fn draw_two_point_conical_shader(canvas: &mut Canvas) {
260260
canvas.draw_paint(paint);
261261
}
262262

263-
fn draw_sweep_gradient_shader(canvas: &mut Canvas) {
263+
fn draw_sweep_gradient_shader(canvas: &Canvas) {
264264
let colors = [Color::CYAN, Color::MAGENTA, Color::YELLOW, Color::CYAN];
265265
let paint = &mut Paint::default();
266266
paint.set_shader(gradient_shader::sweep(
@@ -275,21 +275,21 @@ fn draw_sweep_gradient_shader(canvas: &mut Canvas) {
275275
canvas.draw_paint(paint);
276276
}
277277

278-
fn draw_fractal_perlin_noise_shader(canvas: &mut Canvas) {
278+
fn draw_fractal_perlin_noise_shader(canvas: &Canvas) {
279279
canvas.clear(Color::WHITE);
280280
let paint = &mut Paint::default();
281281
paint.set_shader(shaders::fractal_noise((0.05, 0.05), 4, 0.0, None));
282282
canvas.draw_paint(paint);
283283
}
284284

285-
fn draw_turbulence_perlin_noise_shader(canvas: &mut Canvas) {
285+
fn draw_turbulence_perlin_noise_shader(canvas: &Canvas) {
286286
canvas.clear(Color::WHITE);
287287
let paint = &mut Paint::default();
288288
paint.set_shader(shaders::turbulence((0.05, 0.05), 4, 0.0, None));
289289
canvas.draw_paint(paint);
290290
}
291291

292-
fn draw_compose_shader(canvas: &mut Canvas) {
292+
fn draw_compose_shader(canvas: &Canvas) {
293293
let colors = [Color::BLUE, Color::YELLOW];
294294
let paint = &mut Paint::default();
295295
paint.set_shader(shaders::blend(
@@ -309,7 +309,7 @@ fn draw_compose_shader(canvas: &mut Canvas) {
309309
canvas.draw_paint(paint);
310310
}
311311

312-
fn draw_mask_filter(canvas: &mut Canvas) {
312+
fn draw_mask_filter(canvas: &Canvas) {
313313
// TODO: make BlendMode optional in draw_color.
314314
canvas.draw_color(
315315
Color::from_argb(0xFF, 0xFF, 0xFF, 0xFF),
@@ -322,8 +322,8 @@ fn draw_mask_filter(canvas: &mut Canvas) {
322322
canvas.draw_text_blob(blob, (0, 160), paint);
323323
}
324324

325-
fn draw_color_filter(c: &mut Canvas) {
326-
fn f(c: &mut Canvas, (x, y): (scalar, scalar), color_matrix: &[scalar; 20]) {
325+
fn draw_color_filter(c: &Canvas) {
326+
fn f(c: &Canvas, (x, y): (scalar, scalar), color_matrix: &[scalar; 20]) {
327327
let paint = &mut Paint::default();
328328
paint.set_color_filter(color_filters::matrix_row_major(color_matrix));
329329

@@ -346,7 +346,7 @@ fn draw_color_filter(c: &mut Canvas) {
346346
f(c, (512.0, 0.0), &grayscale);
347347
}
348348

349-
fn draw_color_table_color_filter(canvas: &mut Canvas) {
349+
fn draw_color_table_color_filter(canvas: &Canvas) {
350350
let image = resources::mandrill();
351351

352352
canvas.scale((0.5, 0.5));
@@ -361,7 +361,7 @@ fn draw_color_table_color_filter(canvas: &mut Canvas) {
361361
canvas.draw_image(&image, (0, 0), Some(&paint));
362362
}
363363

364-
fn draw_path_2d_effect(canvas: &mut Canvas) {
364+
fn draw_path_2d_effect(canvas: &Canvas) {
365365
let scale = 10.0;
366366
let path = &mut Path::default();
367367
let pts: [i8; 28] = [
@@ -385,7 +385,7 @@ fn draw_path_2d_effect(canvas: &mut Canvas) {
385385
canvas.draw_rect(bounds, paint);
386386
}
387387

388-
fn draw_line_2d_effect(canvas: &mut Canvas) {
388+
fn draw_line_2d_effect(canvas: &Canvas) {
389389
let paint = &mut Paint::default();
390390
let lattice = &mut Matrix::default();
391391
lattice.set_scale((8.0, 8.0), None).pre_rotate(30.0, None);
@@ -397,7 +397,7 @@ fn draw_line_2d_effect(canvas: &mut Canvas) {
397397
canvas.draw_rect(bounds, paint);
398398
}
399399

400-
fn draw_path_1d_effect(canvas: &mut Canvas) {
400+
fn draw_path_1d_effect(canvas: &Canvas) {
401401
let paint = &mut Paint::default();
402402
let path = &mut Path::default();
403403
path.add_oval(Rect::from_size((16.0, 6.0)), None);
@@ -427,7 +427,7 @@ fn star() -> Path {
427427
path
428428
}
429429

430-
fn draw_corner_path_effect(canvas: &mut Canvas) {
430+
fn draw_corner_path_effect(canvas: &Canvas) {
431431
let paint = &mut Paint::default();
432432
paint
433433
.set_path_effect(corner_path_effect::new(32.0))
@@ -437,7 +437,7 @@ fn draw_corner_path_effect(canvas: &mut Canvas) {
437437
canvas.draw_path(&star(), paint);
438438
}
439439

440-
fn draw_dash_path_effect(canvas: &mut Canvas) {
440+
fn draw_dash_path_effect(canvas: &Canvas) {
441441
const INTERVALS: [scalar; 4] = [10.0, 5.0, 2.0, 5.0];
442442
let paint = &mut Paint::default();
443443
paint
@@ -449,7 +449,7 @@ fn draw_dash_path_effect(canvas: &mut Canvas) {
449449
canvas.draw_path(&star(), paint);
450450
}
451451

452-
fn draw_discrete_path_effect(canvas: &mut Canvas) {
452+
fn draw_discrete_path_effect(canvas: &Canvas) {
453453
let paint = &mut Paint::default();
454454
paint
455455
.set_path_effect(discrete_path_effect::new(10.0, 4.0, None))
@@ -460,7 +460,7 @@ fn draw_discrete_path_effect(canvas: &mut Canvas) {
460460
canvas.draw_path(&star(), paint);
461461
}
462462

463-
fn draw_compose_path_effect(canvas: &mut Canvas) {
463+
fn draw_compose_path_effect(canvas: &Canvas) {
464464
const INTERVALS: [scalar; 4] = [10.0, 5.0, 2.0, 5.0];
465465
let paint = &mut Paint::default();
466466
paint
@@ -475,7 +475,7 @@ fn draw_compose_path_effect(canvas: &mut Canvas) {
475475
canvas.draw_path(&star(), paint);
476476
}
477477

478-
fn draw_sum_path_effect(canvas: &mut Canvas) {
478+
fn draw_sum_path_effect(canvas: &Canvas) {
479479
let paint = &mut Paint::default();
480480
paint
481481
.set_path_effect(PathEffect::sum(

skia-org/src/skparagraph_example.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pub fn draw(driver: &mut impl DrawingDriver, path: &path::Path) {
1010
driver.draw_image_256(&path, "lorem-ipsum", draw_lorem_ipsum);
1111
}
1212

13-
fn draw_lorem_ipsum(canvas: &mut Canvas) {
13+
fn draw_lorem_ipsum(canvas: &Canvas) {
1414
let mut font_collection = FontCollection::new();
1515
font_collection.set_default_font_manager(FontMgr::new(), None);
1616
let paragraph_style = ParagraphStyle::new();

0 commit comments

Comments
 (0)