pub struct PathBuilder { /* private fields */ }
Expand description
A path builder.
Implementations§
Source§impl PathBuilder
impl PathBuilder
Sourcepub fn new() -> PathBuilder
pub fn new() -> PathBuilder
Creates a new builder.
Examples found in repository?
29fn crate_triangle() -> Pixmap {
30 let mut paint = Paint::default();
31 paint.set_color_rgba8(50, 127, 150, 200);
32 paint.anti_alias = true;
33
34 let mut pb = PathBuilder::new();
35 pb.move_to(0.0, 20.0);
36 pb.line_to(20.0, 20.0);
37 pb.line_to(10.0, 0.0);
38 pb.close();
39 let path = pb.finish().unwrap();
40
41 let mut pixmap = Pixmap::new(20, 20).unwrap();
42 pixmap.fill_path(
43 &path,
44 &paint,
45 FillRule::Winding,
46 Transform::identity(),
47 None,
48 );
49 pixmap
50}
More examples
5fn main() {
6 let mut pb = PathBuilder::new();
7 pb.move_to(50.0, 100.0);
8 pb.cubic_to(130.0, 20.0, 390.0, 120.0, 450.0, 30.0);
9 let path = pb.finish().unwrap();
10
11 let mut paint = Paint::default();
12 paint.set_color_rgba8(50, 127, 150, 200);
13 paint.anti_alias = true;
14
15 let mut pixmap = Pixmap::new(500, 500).unwrap();
16 let mut transform = Transform::identity();
17 for i in 0..20 {
18 let mut stroke = Stroke::default();
19 stroke.width = 2.0 - (i as f32 / 10.0);
20 pixmap.stroke_path(&path, &paint, &stroke, transform, None);
21 transform = transform.pre_translate(0.0, 20.0);
22 }
23
24 pixmap.save_png("image.png").unwrap();
25}
30fn create_triangle() -> Pixmap {
31 let mut paint = Paint::default();
32 paint.set_color_rgba8(50, 127, 150, 200);
33 paint.anti_alias = true;
34
35 let mut pb = PathBuilder::new();
36 pb.move_to(0.0, 200.0);
37 pb.line_to(200.0, 200.0);
38 pb.line_to(100.0, 0.0);
39 pb.close();
40 let path = pb.finish().unwrap();
41
42 let mut pixmap = Pixmap::new(200, 200).unwrap();
43
44 pixmap.fill_path(
45 &path,
46 &paint,
47 FillRule::Winding,
48 Transform::identity(),
49 None,
50 );
51
52 let path = PathBuilder::from_rect(Rect::from_ltrb(0.0, 0.0, 200.0, 200.0).unwrap());
53 let stroke = Stroke::default();
54 paint.set_color_rgba8(200, 0, 0, 220);
55
56 pixmap.stroke_path(&path, &paint, &stroke, Transform::identity(), None); // TODO: stroke_rect
57
58 pixmap
59}
3fn main() {
4 let clip_path = {
5 let mut pb = PathBuilder::new();
6 pb.push_circle(250.0, 250.0, 200.0);
7 pb.push_circle(250.0, 250.0, 100.0);
8 pb.finish().unwrap()
9 };
10
11 let clip_path = clip_path
12 .transform(Transform::from_row(1.0, -0.3, 0.0, 1.0, 0.0, 75.0))
13 .unwrap();
14
15 let mut mask = Mask::new(500, 500).unwrap();
16 mask.fill_path(&clip_path, FillRule::EvenOdd, true, Transform::default());
17
18 let mut paint = Paint::default();
19 paint.anti_alias = false;
20 paint.set_color_rgba8(50, 127, 150, 200);
21
22 let mut pixmap = Pixmap::new(500, 500).unwrap();
23 pixmap.fill_rect(
24 Rect::from_xywh(0.0, 0.0, 500.0, 500.0).unwrap(),
25 &paint,
26 Transform::identity(),
27 Some(&mask),
28 );
29 pixmap.save_png("image.png").unwrap();
30}
5fn main() {
6 let mut paint = Paint::default();
7 paint.set_color_rgba8(0, 127, 0, 200);
8 paint.anti_alias = true;
9
10 let path = {
11 let mut pb = PathBuilder::new();
12 const RADIUS: f32 = 250.0;
13 const CENTER: f32 = 250.0;
14 pb.move_to(CENTER + RADIUS, CENTER);
15 for i in 1..8 {
16 let a = 2.6927937 * i as f32;
17 pb.line_to(CENTER + RADIUS * a.cos(), CENTER + RADIUS * a.sin());
18 }
19 pb.finish().unwrap()
20 };
21
22 let mut stroke = Stroke::default();
23 stroke.width = 6.0;
24 stroke.line_cap = LineCap::Round;
25 stroke.dash = StrokeDash::new(vec![20.0, 40.0], 0.0);
26
27 let mut pixmap = Pixmap::new(500, 500).unwrap();
28 pixmap.stroke_path(&path, &paint, &stroke, Transform::identity(), None);
29 pixmap.save_png("image.png").unwrap();
30}
3fn main() {
4 let mut paint = Paint::default();
5 paint.anti_alias = false;
6 paint.shader = LinearGradient::new(
7 Point::from_xy(100.0, 100.0),
8 Point::from_xy(900.0, 900.0),
9 vec![
10 GradientStop::new(0.0, Color::from_rgba8(50, 127, 150, 200)),
11 GradientStop::new(1.0, Color::from_rgba8(220, 140, 75, 180)),
12 ],
13 SpreadMode::Pad,
14 Transform::identity(),
15 )
16 .unwrap();
17
18 let mut pb = PathBuilder::new();
19 pb.move_to(60.0, 60.0);
20 pb.line_to(160.0, 940.0);
21 pb.cubic_to(380.0, 840.0, 660.0, 800.0, 940.0, 800.0);
22 pb.cubic_to(740.0, 460.0, 440.0, 160.0, 60.0, 60.0);
23 pb.close();
24 let path = pb.finish().unwrap();
25
26 let mut pixmap = Pixmap::new(1000, 1000).unwrap();
27 pixmap.fill_path(
28 &path,
29 &paint,
30 FillRule::Winding,
31 Transform::identity(),
32 None,
33 );
34 pixmap.save_png("image.png").unwrap();
35}
Sourcepub fn with_capacity(
verbs_capacity: usize,
points_capacity: usize,
) -> PathBuilder
pub fn with_capacity( verbs_capacity: usize, points_capacity: usize, ) -> PathBuilder
Creates a new builder with a specified capacity.
Number of points depends on a verb type:
- Move - 1
- Line - 1
- Quad - 2
- Cubic - 3
- Close - 0
Sourcepub fn from_rect(rect: Rect) -> Path
pub fn from_rect(rect: Rect) -> Path
Creates a new Path
from Rect
.
Never fails since Rect
is always valid.
Segments are created clockwise: TopLeft -> TopRight -> BottomRight -> BottomLeft
The contour is closed.
Examples found in repository?
30fn create_triangle() -> Pixmap {
31 let mut paint = Paint::default();
32 paint.set_color_rgba8(50, 127, 150, 200);
33 paint.anti_alias = true;
34
35 let mut pb = PathBuilder::new();
36 pb.move_to(0.0, 200.0);
37 pb.line_to(200.0, 200.0);
38 pb.line_to(100.0, 0.0);
39 pb.close();
40 let path = pb.finish().unwrap();
41
42 let mut pixmap = Pixmap::new(200, 200).unwrap();
43
44 pixmap.fill_path(
45 &path,
46 &paint,
47 FillRule::Winding,
48 Transform::identity(),
49 None,
50 );
51
52 let path = PathBuilder::from_rect(Rect::from_ltrb(0.0, 0.0, 200.0, 200.0).unwrap());
53 let stroke = Stroke::default();
54 paint.set_color_rgba8(200, 0, 0, 220);
55
56 pixmap.stroke_path(&path, &paint, &stroke, Transform::identity(), None); // TODO: stroke_rect
57
58 pixmap
59}
Sourcepub fn from_circle(cx: f32, cy: f32, radius: f32) -> Option<Path>
pub fn from_circle(cx: f32, cy: f32, radius: f32) -> Option<Path>
Creates a new Path
from a circle.
See PathBuilder::push_circle
for details.
Examples found in repository?
3fn main() {
4 let triangle = crate_triangle();
5
6 let mut paint = Paint::default();
7 paint.anti_alias = true;
8 paint.shader = Pattern::new(
9 triangle.as_ref(),
10 SpreadMode::Repeat,
11 FilterQuality::Bicubic,
12 1.0,
13 Transform::from_row(1.5, -0.4, 0.0, -0.8, 5.0, 1.0),
14 );
15
16 let path = PathBuilder::from_circle(200.0, 200.0, 180.0).unwrap();
17
18 let mut pixmap = Pixmap::new(400, 400).unwrap();
19 pixmap.fill_path(
20 &path,
21 &paint,
22 FillRule::Winding,
23 Transform::identity(),
24 None,
25 );
26 pixmap.save_png("image.png").unwrap();
27}
Sourcepub fn from_oval(oval: Rect) -> Option<Path>
pub fn from_oval(oval: Rect) -> Option<Path>
Creates a new Path
from an oval.
See PathBuilder::push_oval
for details.
Sourcepub fn move_to(&mut self, x: f32, y: f32)
pub fn move_to(&mut self, x: f32, y: f32)
Adds beginning of a contour.
Multiple continuous MoveTo segments are not allowed. If the previous segment was also MoveTo, it will be overwritten with the current one.
Examples found in repository?
29fn crate_triangle() -> Pixmap {
30 let mut paint = Paint::default();
31 paint.set_color_rgba8(50, 127, 150, 200);
32 paint.anti_alias = true;
33
34 let mut pb = PathBuilder::new();
35 pb.move_to(0.0, 20.0);
36 pb.line_to(20.0, 20.0);
37 pb.line_to(10.0, 0.0);
38 pb.close();
39 let path = pb.finish().unwrap();
40
41 let mut pixmap = Pixmap::new(20, 20).unwrap();
42 pixmap.fill_path(
43 &path,
44 &paint,
45 FillRule::Winding,
46 Transform::identity(),
47 None,
48 );
49 pixmap
50}
More examples
5fn main() {
6 let mut pb = PathBuilder::new();
7 pb.move_to(50.0, 100.0);
8 pb.cubic_to(130.0, 20.0, 390.0, 120.0, 450.0, 30.0);
9 let path = pb.finish().unwrap();
10
11 let mut paint = Paint::default();
12 paint.set_color_rgba8(50, 127, 150, 200);
13 paint.anti_alias = true;
14
15 let mut pixmap = Pixmap::new(500, 500).unwrap();
16 let mut transform = Transform::identity();
17 for i in 0..20 {
18 let mut stroke = Stroke::default();
19 stroke.width = 2.0 - (i as f32 / 10.0);
20 pixmap.stroke_path(&path, &paint, &stroke, transform, None);
21 transform = transform.pre_translate(0.0, 20.0);
22 }
23
24 pixmap.save_png("image.png").unwrap();
25}
30fn create_triangle() -> Pixmap {
31 let mut paint = Paint::default();
32 paint.set_color_rgba8(50, 127, 150, 200);
33 paint.anti_alias = true;
34
35 let mut pb = PathBuilder::new();
36 pb.move_to(0.0, 200.0);
37 pb.line_to(200.0, 200.0);
38 pb.line_to(100.0, 0.0);
39 pb.close();
40 let path = pb.finish().unwrap();
41
42 let mut pixmap = Pixmap::new(200, 200).unwrap();
43
44 pixmap.fill_path(
45 &path,
46 &paint,
47 FillRule::Winding,
48 Transform::identity(),
49 None,
50 );
51
52 let path = PathBuilder::from_rect(Rect::from_ltrb(0.0, 0.0, 200.0, 200.0).unwrap());
53 let stroke = Stroke::default();
54 paint.set_color_rgba8(200, 0, 0, 220);
55
56 pixmap.stroke_path(&path, &paint, &stroke, Transform::identity(), None); // TODO: stroke_rect
57
58 pixmap
59}
5fn main() {
6 let mut paint = Paint::default();
7 paint.set_color_rgba8(0, 127, 0, 200);
8 paint.anti_alias = true;
9
10 let path = {
11 let mut pb = PathBuilder::new();
12 const RADIUS: f32 = 250.0;
13 const CENTER: f32 = 250.0;
14 pb.move_to(CENTER + RADIUS, CENTER);
15 for i in 1..8 {
16 let a = 2.6927937 * i as f32;
17 pb.line_to(CENTER + RADIUS * a.cos(), CENTER + RADIUS * a.sin());
18 }
19 pb.finish().unwrap()
20 };
21
22 let mut stroke = Stroke::default();
23 stroke.width = 6.0;
24 stroke.line_cap = LineCap::Round;
25 stroke.dash = StrokeDash::new(vec![20.0, 40.0], 0.0);
26
27 let mut pixmap = Pixmap::new(500, 500).unwrap();
28 pixmap.stroke_path(&path, &paint, &stroke, Transform::identity(), None);
29 pixmap.save_png("image.png").unwrap();
30}
3fn main() {
4 let mut paint = Paint::default();
5 paint.anti_alias = false;
6 paint.shader = LinearGradient::new(
7 Point::from_xy(100.0, 100.0),
8 Point::from_xy(900.0, 900.0),
9 vec![
10 GradientStop::new(0.0, Color::from_rgba8(50, 127, 150, 200)),
11 GradientStop::new(1.0, Color::from_rgba8(220, 140, 75, 180)),
12 ],
13 SpreadMode::Pad,
14 Transform::identity(),
15 )
16 .unwrap();
17
18 let mut pb = PathBuilder::new();
19 pb.move_to(60.0, 60.0);
20 pb.line_to(160.0, 940.0);
21 pb.cubic_to(380.0, 840.0, 660.0, 800.0, 940.0, 800.0);
22 pb.cubic_to(740.0, 460.0, 440.0, 160.0, 60.0, 60.0);
23 pb.close();
24 let path = pb.finish().unwrap();
25
26 let mut pixmap = Pixmap::new(1000, 1000).unwrap();
27 pixmap.fill_path(
28 &path,
29 &paint,
30 FillRule::Winding,
31 Transform::identity(),
32 None,
33 );
34 pixmap.save_png("image.png").unwrap();
35}
3fn main() {
4 let mut paint1 = Paint::default();
5 paint1.set_color_rgba8(50, 127, 150, 200);
6 paint1.anti_alias = true;
7
8 let mut paint2 = Paint::default();
9 paint2.set_color_rgba8(220, 140, 75, 180);
10 paint2.anti_alias = false;
11
12 let path1 = {
13 let mut pb = PathBuilder::new();
14 pb.move_to(60.0, 60.0);
15 pb.line_to(160.0, 940.0);
16 pb.cubic_to(380.0, 840.0, 660.0, 800.0, 940.0, 800.0);
17 pb.cubic_to(740.0, 460.0, 440.0, 160.0, 60.0, 60.0);
18 pb.close();
19 pb.finish().unwrap()
20 };
21
22 let path2 = {
23 let mut pb = PathBuilder::new();
24 pb.move_to(940.0, 60.0);
25 pb.line_to(840.0, 940.0);
26 pb.cubic_to(620.0, 840.0, 340.0, 800.0, 60.0, 800.0);
27 pb.cubic_to(260.0, 460.0, 560.0, 160.0, 940.0, 60.0);
28 pb.close();
29 pb.finish().unwrap()
30 };
31
32 let mut pixmap = Pixmap::new(1000, 1000).unwrap();
33 pixmap.fill_path(
34 &path1,
35 &paint1,
36 FillRule::Winding,
37 Transform::identity(),
38 None,
39 );
40 pixmap.fill_path(
41 &path2,
42 &paint2,
43 FillRule::Winding,
44 Transform::identity(),
45 None,
46 );
47 pixmap.save_png("image.png").unwrap();
48}
Sourcepub fn line_to(&mut self, x: f32, y: f32)
pub fn line_to(&mut self, x: f32, y: f32)
Adds a line from the last point.
- If
Path
is empty - adds Move(0, 0) first. - If
Path
ends with Close - adds Move(last_x, last_y) first.
Examples found in repository?
29fn crate_triangle() -> Pixmap {
30 let mut paint = Paint::default();
31 paint.set_color_rgba8(50, 127, 150, 200);
32 paint.anti_alias = true;
33
34 let mut pb = PathBuilder::new();
35 pb.move_to(0.0, 20.0);
36 pb.line_to(20.0, 20.0);
37 pb.line_to(10.0, 0.0);
38 pb.close();
39 let path = pb.finish().unwrap();
40
41 let mut pixmap = Pixmap::new(20, 20).unwrap();
42 pixmap.fill_path(
43 &path,
44 &paint,
45 FillRule::Winding,
46 Transform::identity(),
47 None,
48 );
49 pixmap
50}
More examples
30fn create_triangle() -> Pixmap {
31 let mut paint = Paint::default();
32 paint.set_color_rgba8(50, 127, 150, 200);
33 paint.anti_alias = true;
34
35 let mut pb = PathBuilder::new();
36 pb.move_to(0.0, 200.0);
37 pb.line_to(200.0, 200.0);
38 pb.line_to(100.0, 0.0);
39 pb.close();
40 let path = pb.finish().unwrap();
41
42 let mut pixmap = Pixmap::new(200, 200).unwrap();
43
44 pixmap.fill_path(
45 &path,
46 &paint,
47 FillRule::Winding,
48 Transform::identity(),
49 None,
50 );
51
52 let path = PathBuilder::from_rect(Rect::from_ltrb(0.0, 0.0, 200.0, 200.0).unwrap());
53 let stroke = Stroke::default();
54 paint.set_color_rgba8(200, 0, 0, 220);
55
56 pixmap.stroke_path(&path, &paint, &stroke, Transform::identity(), None); // TODO: stroke_rect
57
58 pixmap
59}
5fn main() {
6 let mut paint = Paint::default();
7 paint.set_color_rgba8(0, 127, 0, 200);
8 paint.anti_alias = true;
9
10 let path = {
11 let mut pb = PathBuilder::new();
12 const RADIUS: f32 = 250.0;
13 const CENTER: f32 = 250.0;
14 pb.move_to(CENTER + RADIUS, CENTER);
15 for i in 1..8 {
16 let a = 2.6927937 * i as f32;
17 pb.line_to(CENTER + RADIUS * a.cos(), CENTER + RADIUS * a.sin());
18 }
19 pb.finish().unwrap()
20 };
21
22 let mut stroke = Stroke::default();
23 stroke.width = 6.0;
24 stroke.line_cap = LineCap::Round;
25 stroke.dash = StrokeDash::new(vec![20.0, 40.0], 0.0);
26
27 let mut pixmap = Pixmap::new(500, 500).unwrap();
28 pixmap.stroke_path(&path, &paint, &stroke, Transform::identity(), None);
29 pixmap.save_png("image.png").unwrap();
30}
3fn main() {
4 let mut paint = Paint::default();
5 paint.anti_alias = false;
6 paint.shader = LinearGradient::new(
7 Point::from_xy(100.0, 100.0),
8 Point::from_xy(900.0, 900.0),
9 vec![
10 GradientStop::new(0.0, Color::from_rgba8(50, 127, 150, 200)),
11 GradientStop::new(1.0, Color::from_rgba8(220, 140, 75, 180)),
12 ],
13 SpreadMode::Pad,
14 Transform::identity(),
15 )
16 .unwrap();
17
18 let mut pb = PathBuilder::new();
19 pb.move_to(60.0, 60.0);
20 pb.line_to(160.0, 940.0);
21 pb.cubic_to(380.0, 840.0, 660.0, 800.0, 940.0, 800.0);
22 pb.cubic_to(740.0, 460.0, 440.0, 160.0, 60.0, 60.0);
23 pb.close();
24 let path = pb.finish().unwrap();
25
26 let mut pixmap = Pixmap::new(1000, 1000).unwrap();
27 pixmap.fill_path(
28 &path,
29 &paint,
30 FillRule::Winding,
31 Transform::identity(),
32 None,
33 );
34 pixmap.save_png("image.png").unwrap();
35}
3fn main() {
4 let mut paint1 = Paint::default();
5 paint1.set_color_rgba8(50, 127, 150, 200);
6 paint1.anti_alias = true;
7
8 let mut paint2 = Paint::default();
9 paint2.set_color_rgba8(220, 140, 75, 180);
10 paint2.anti_alias = false;
11
12 let path1 = {
13 let mut pb = PathBuilder::new();
14 pb.move_to(60.0, 60.0);
15 pb.line_to(160.0, 940.0);
16 pb.cubic_to(380.0, 840.0, 660.0, 800.0, 940.0, 800.0);
17 pb.cubic_to(740.0, 460.0, 440.0, 160.0, 60.0, 60.0);
18 pb.close();
19 pb.finish().unwrap()
20 };
21
22 let path2 = {
23 let mut pb = PathBuilder::new();
24 pb.move_to(940.0, 60.0);
25 pb.line_to(840.0, 940.0);
26 pb.cubic_to(620.0, 840.0, 340.0, 800.0, 60.0, 800.0);
27 pb.cubic_to(260.0, 460.0, 560.0, 160.0, 940.0, 60.0);
28 pb.close();
29 pb.finish().unwrap()
30 };
31
32 let mut pixmap = Pixmap::new(1000, 1000).unwrap();
33 pixmap.fill_path(
34 &path1,
35 &paint1,
36 FillRule::Winding,
37 Transform::identity(),
38 None,
39 );
40 pixmap.fill_path(
41 &path2,
42 &paint2,
43 FillRule::Winding,
44 Transform::identity(),
45 None,
46 );
47 pixmap.save_png("image.png").unwrap();
48}
6fn main() {
7 let path1 = {
8 let mut pb = PathBuilder::new();
9 pb.move_to(1200.0, 1200.0);
10 pb.line_to(3200.0, 18800.0);
11 pb.cubic_to(7600.0, 16800.0, 13200.0, 16000.0, 18800.0, 16000.0);
12 pb.cubic_to(14800.0, 9200.0, 8800.0, 3200.0, 1200.0, 1200.0);
13 pb.close();
14 pb.finish().unwrap()
15 };
16
17 let path2 = {
18 let mut pb = PathBuilder::new();
19 pb.move_to(18800.0, 1200.0);
20 pb.line_to(16800.0, 18800.0);
21 pb.cubic_to(12400.0, 16800.0, 6800.0, 16000.0, 1200.0, 16000.0);
22 pb.cubic_to(5200.0, 9200.0, 11200.0, 3200.0, 18800.0, 1200.0);
23 pb.close();
24 pb.finish().unwrap()
25 };
26
27 let mut pixmap = Pixmap::new(20000, 20000).unwrap();
28
29 let clip_path = {
30 let mut pb = PathBuilder::new();
31 pb.push_circle(10000.0, 10000.0, 7000.0);
32 pb.finish().unwrap()
33 };
34
35 let mut mask = Mask::new(20000, 20000).unwrap();
36 mask.fill_path(&clip_path, FillRule::Winding, true, Transform::default());
37
38 let mut paint = Paint::default();
39 paint.set_color_rgba8(90, 175, 100, 150);
40 paint.anti_alias = true;
41 let large_rect = Rect::from_xywh(500.0, 500.0, 19000.0, 19000.0).unwrap();
42 pixmap.fill_rect(large_rect, &paint, Transform::identity(), None);
43
44 paint.set_color_rgba8(50, 127, 150, 200);
45 paint.anti_alias = true;
46 pixmap.fill_path(
47 &path1,
48 &paint,
49 FillRule::Winding,
50 Transform::default(),
51 Some(&mask),
52 );
53
54 paint.set_color_rgba8(220, 140, 75, 180);
55 paint.anti_alias = false;
56 pixmap.fill_path(
57 &path2,
58 &paint,
59 FillRule::Winding,
60 Transform::default(),
61 None,
62 );
63
64 paint.set_color_rgba8(255, 10, 15, 180);
65 paint.anti_alias = true;
66 let mut stroke = Stroke::default();
67 stroke.width = 0.8; // hairline
68 pixmap.stroke_path(&path2, &paint, &stroke, Transform::default(), None);
69
70 pixmap.save_png("image.png").unwrap();
71}
Sourcepub fn quad_to(&mut self, x1: f32, y1: f32, x: f32, y: f32)
pub fn quad_to(&mut self, x1: f32, y1: f32, x: f32, y: f32)
Adds a quad curve from the last point to x
, y
.
- If
Path
is empty - adds Move(0, 0) first. - If
Path
ends with Close - adds Move(last_x, last_y) first.
Sourcepub fn cubic_to(&mut self, x1: f32, y1: f32, x2: f32, y2: f32, x: f32, y: f32)
pub fn cubic_to(&mut self, x1: f32, y1: f32, x2: f32, y2: f32, x: f32, y: f32)
Adds a cubic curve from the last point to x
, y
.
- If
Path
is empty - adds Move(0, 0) first. - If
Path
ends with Close - adds Move(last_x, last_y) first.
Examples found in repository?
5fn main() {
6 let mut pb = PathBuilder::new();
7 pb.move_to(50.0, 100.0);
8 pb.cubic_to(130.0, 20.0, 390.0, 120.0, 450.0, 30.0);
9 let path = pb.finish().unwrap();
10
11 let mut paint = Paint::default();
12 paint.set_color_rgba8(50, 127, 150, 200);
13 paint.anti_alias = true;
14
15 let mut pixmap = Pixmap::new(500, 500).unwrap();
16 let mut transform = Transform::identity();
17 for i in 0..20 {
18 let mut stroke = Stroke::default();
19 stroke.width = 2.0 - (i as f32 / 10.0);
20 pixmap.stroke_path(&path, &paint, &stroke, transform, None);
21 transform = transform.pre_translate(0.0, 20.0);
22 }
23
24 pixmap.save_png("image.png").unwrap();
25}
More examples
3fn main() {
4 let mut paint = Paint::default();
5 paint.anti_alias = false;
6 paint.shader = LinearGradient::new(
7 Point::from_xy(100.0, 100.0),
8 Point::from_xy(900.0, 900.0),
9 vec![
10 GradientStop::new(0.0, Color::from_rgba8(50, 127, 150, 200)),
11 GradientStop::new(1.0, Color::from_rgba8(220, 140, 75, 180)),
12 ],
13 SpreadMode::Pad,
14 Transform::identity(),
15 )
16 .unwrap();
17
18 let mut pb = PathBuilder::new();
19 pb.move_to(60.0, 60.0);
20 pb.line_to(160.0, 940.0);
21 pb.cubic_to(380.0, 840.0, 660.0, 800.0, 940.0, 800.0);
22 pb.cubic_to(740.0, 460.0, 440.0, 160.0, 60.0, 60.0);
23 pb.close();
24 let path = pb.finish().unwrap();
25
26 let mut pixmap = Pixmap::new(1000, 1000).unwrap();
27 pixmap.fill_path(
28 &path,
29 &paint,
30 FillRule::Winding,
31 Transform::identity(),
32 None,
33 );
34 pixmap.save_png("image.png").unwrap();
35}
3fn main() {
4 let mut paint1 = Paint::default();
5 paint1.set_color_rgba8(50, 127, 150, 200);
6 paint1.anti_alias = true;
7
8 let mut paint2 = Paint::default();
9 paint2.set_color_rgba8(220, 140, 75, 180);
10 paint2.anti_alias = false;
11
12 let path1 = {
13 let mut pb = PathBuilder::new();
14 pb.move_to(60.0, 60.0);
15 pb.line_to(160.0, 940.0);
16 pb.cubic_to(380.0, 840.0, 660.0, 800.0, 940.0, 800.0);
17 pb.cubic_to(740.0, 460.0, 440.0, 160.0, 60.0, 60.0);
18 pb.close();
19 pb.finish().unwrap()
20 };
21
22 let path2 = {
23 let mut pb = PathBuilder::new();
24 pb.move_to(940.0, 60.0);
25 pb.line_to(840.0, 940.0);
26 pb.cubic_to(620.0, 840.0, 340.0, 800.0, 60.0, 800.0);
27 pb.cubic_to(260.0, 460.0, 560.0, 160.0, 940.0, 60.0);
28 pb.close();
29 pb.finish().unwrap()
30 };
31
32 let mut pixmap = Pixmap::new(1000, 1000).unwrap();
33 pixmap.fill_path(
34 &path1,
35 &paint1,
36 FillRule::Winding,
37 Transform::identity(),
38 None,
39 );
40 pixmap.fill_path(
41 &path2,
42 &paint2,
43 FillRule::Winding,
44 Transform::identity(),
45 None,
46 );
47 pixmap.save_png("image.png").unwrap();
48}
6fn main() {
7 let path1 = {
8 let mut pb = PathBuilder::new();
9 pb.move_to(1200.0, 1200.0);
10 pb.line_to(3200.0, 18800.0);
11 pb.cubic_to(7600.0, 16800.0, 13200.0, 16000.0, 18800.0, 16000.0);
12 pb.cubic_to(14800.0, 9200.0, 8800.0, 3200.0, 1200.0, 1200.0);
13 pb.close();
14 pb.finish().unwrap()
15 };
16
17 let path2 = {
18 let mut pb = PathBuilder::new();
19 pb.move_to(18800.0, 1200.0);
20 pb.line_to(16800.0, 18800.0);
21 pb.cubic_to(12400.0, 16800.0, 6800.0, 16000.0, 1200.0, 16000.0);
22 pb.cubic_to(5200.0, 9200.0, 11200.0, 3200.0, 18800.0, 1200.0);
23 pb.close();
24 pb.finish().unwrap()
25 };
26
27 let mut pixmap = Pixmap::new(20000, 20000).unwrap();
28
29 let clip_path = {
30 let mut pb = PathBuilder::new();
31 pb.push_circle(10000.0, 10000.0, 7000.0);
32 pb.finish().unwrap()
33 };
34
35 let mut mask = Mask::new(20000, 20000).unwrap();
36 mask.fill_path(&clip_path, FillRule::Winding, true, Transform::default());
37
38 let mut paint = Paint::default();
39 paint.set_color_rgba8(90, 175, 100, 150);
40 paint.anti_alias = true;
41 let large_rect = Rect::from_xywh(500.0, 500.0, 19000.0, 19000.0).unwrap();
42 pixmap.fill_rect(large_rect, &paint, Transform::identity(), None);
43
44 paint.set_color_rgba8(50, 127, 150, 200);
45 paint.anti_alias = true;
46 pixmap.fill_path(
47 &path1,
48 &paint,
49 FillRule::Winding,
50 Transform::default(),
51 Some(&mask),
52 );
53
54 paint.set_color_rgba8(220, 140, 75, 180);
55 paint.anti_alias = false;
56 pixmap.fill_path(
57 &path2,
58 &paint,
59 FillRule::Winding,
60 Transform::default(),
61 None,
62 );
63
64 paint.set_color_rgba8(255, 10, 15, 180);
65 paint.anti_alias = true;
66 let mut stroke = Stroke::default();
67 stroke.width = 0.8; // hairline
68 pixmap.stroke_path(&path2, &paint, &stroke, Transform::default(), None);
69
70 pixmap.save_png("image.png").unwrap();
71}
Sourcepub fn close(&mut self)
pub fn close(&mut self)
Closes the current contour.
A closed contour connects the first and the last Point with a line, forming a continuous loop.
Does nothing when Path
is empty or already closed.
Open and closed contour will be filled the same way. Stroking an open contour will add LineCap at contour’s start and end. Stroking an closed contour will add LineJoin at contour’s start and end.
Examples found in repository?
29fn crate_triangle() -> Pixmap {
30 let mut paint = Paint::default();
31 paint.set_color_rgba8(50, 127, 150, 200);
32 paint.anti_alias = true;
33
34 let mut pb = PathBuilder::new();
35 pb.move_to(0.0, 20.0);
36 pb.line_to(20.0, 20.0);
37 pb.line_to(10.0, 0.0);
38 pb.close();
39 let path = pb.finish().unwrap();
40
41 let mut pixmap = Pixmap::new(20, 20).unwrap();
42 pixmap.fill_path(
43 &path,
44 &paint,
45 FillRule::Winding,
46 Transform::identity(),
47 None,
48 );
49 pixmap
50}
More examples
30fn create_triangle() -> Pixmap {
31 let mut paint = Paint::default();
32 paint.set_color_rgba8(50, 127, 150, 200);
33 paint.anti_alias = true;
34
35 let mut pb = PathBuilder::new();
36 pb.move_to(0.0, 200.0);
37 pb.line_to(200.0, 200.0);
38 pb.line_to(100.0, 0.0);
39 pb.close();
40 let path = pb.finish().unwrap();
41
42 let mut pixmap = Pixmap::new(200, 200).unwrap();
43
44 pixmap.fill_path(
45 &path,
46 &paint,
47 FillRule::Winding,
48 Transform::identity(),
49 None,
50 );
51
52 let path = PathBuilder::from_rect(Rect::from_ltrb(0.0, 0.0, 200.0, 200.0).unwrap());
53 let stroke = Stroke::default();
54 paint.set_color_rgba8(200, 0, 0, 220);
55
56 pixmap.stroke_path(&path, &paint, &stroke, Transform::identity(), None); // TODO: stroke_rect
57
58 pixmap
59}
3fn main() {
4 let mut paint = Paint::default();
5 paint.anti_alias = false;
6 paint.shader = LinearGradient::new(
7 Point::from_xy(100.0, 100.0),
8 Point::from_xy(900.0, 900.0),
9 vec![
10 GradientStop::new(0.0, Color::from_rgba8(50, 127, 150, 200)),
11 GradientStop::new(1.0, Color::from_rgba8(220, 140, 75, 180)),
12 ],
13 SpreadMode::Pad,
14 Transform::identity(),
15 )
16 .unwrap();
17
18 let mut pb = PathBuilder::new();
19 pb.move_to(60.0, 60.0);
20 pb.line_to(160.0, 940.0);
21 pb.cubic_to(380.0, 840.0, 660.0, 800.0, 940.0, 800.0);
22 pb.cubic_to(740.0, 460.0, 440.0, 160.0, 60.0, 60.0);
23 pb.close();
24 let path = pb.finish().unwrap();
25
26 let mut pixmap = Pixmap::new(1000, 1000).unwrap();
27 pixmap.fill_path(
28 &path,
29 &paint,
30 FillRule::Winding,
31 Transform::identity(),
32 None,
33 );
34 pixmap.save_png("image.png").unwrap();
35}
3fn main() {
4 let mut paint1 = Paint::default();
5 paint1.set_color_rgba8(50, 127, 150, 200);
6 paint1.anti_alias = true;
7
8 let mut paint2 = Paint::default();
9 paint2.set_color_rgba8(220, 140, 75, 180);
10 paint2.anti_alias = false;
11
12 let path1 = {
13 let mut pb = PathBuilder::new();
14 pb.move_to(60.0, 60.0);
15 pb.line_to(160.0, 940.0);
16 pb.cubic_to(380.0, 840.0, 660.0, 800.0, 940.0, 800.0);
17 pb.cubic_to(740.0, 460.0, 440.0, 160.0, 60.0, 60.0);
18 pb.close();
19 pb.finish().unwrap()
20 };
21
22 let path2 = {
23 let mut pb = PathBuilder::new();
24 pb.move_to(940.0, 60.0);
25 pb.line_to(840.0, 940.0);
26 pb.cubic_to(620.0, 840.0, 340.0, 800.0, 60.0, 800.0);
27 pb.cubic_to(260.0, 460.0, 560.0, 160.0, 940.0, 60.0);
28 pb.close();
29 pb.finish().unwrap()
30 };
31
32 let mut pixmap = Pixmap::new(1000, 1000).unwrap();
33 pixmap.fill_path(
34 &path1,
35 &paint1,
36 FillRule::Winding,
37 Transform::identity(),
38 None,
39 );
40 pixmap.fill_path(
41 &path2,
42 &paint2,
43 FillRule::Winding,
44 Transform::identity(),
45 None,
46 );
47 pixmap.save_png("image.png").unwrap();
48}
6fn main() {
7 let path1 = {
8 let mut pb = PathBuilder::new();
9 pb.move_to(1200.0, 1200.0);
10 pb.line_to(3200.0, 18800.0);
11 pb.cubic_to(7600.0, 16800.0, 13200.0, 16000.0, 18800.0, 16000.0);
12 pb.cubic_to(14800.0, 9200.0, 8800.0, 3200.0, 1200.0, 1200.0);
13 pb.close();
14 pb.finish().unwrap()
15 };
16
17 let path2 = {
18 let mut pb = PathBuilder::new();
19 pb.move_to(18800.0, 1200.0);
20 pb.line_to(16800.0, 18800.0);
21 pb.cubic_to(12400.0, 16800.0, 6800.0, 16000.0, 1200.0, 16000.0);
22 pb.cubic_to(5200.0, 9200.0, 11200.0, 3200.0, 18800.0, 1200.0);
23 pb.close();
24 pb.finish().unwrap()
25 };
26
27 let mut pixmap = Pixmap::new(20000, 20000).unwrap();
28
29 let clip_path = {
30 let mut pb = PathBuilder::new();
31 pb.push_circle(10000.0, 10000.0, 7000.0);
32 pb.finish().unwrap()
33 };
34
35 let mut mask = Mask::new(20000, 20000).unwrap();
36 mask.fill_path(&clip_path, FillRule::Winding, true, Transform::default());
37
38 let mut paint = Paint::default();
39 paint.set_color_rgba8(90, 175, 100, 150);
40 paint.anti_alias = true;
41 let large_rect = Rect::from_xywh(500.0, 500.0, 19000.0, 19000.0).unwrap();
42 pixmap.fill_rect(large_rect, &paint, Transform::identity(), None);
43
44 paint.set_color_rgba8(50, 127, 150, 200);
45 paint.anti_alias = true;
46 pixmap.fill_path(
47 &path1,
48 &paint,
49 FillRule::Winding,
50 Transform::default(),
51 Some(&mask),
52 );
53
54 paint.set_color_rgba8(220, 140, 75, 180);
55 paint.anti_alias = false;
56 pixmap.fill_path(
57 &path2,
58 &paint,
59 FillRule::Winding,
60 Transform::default(),
61 None,
62 );
63
64 paint.set_color_rgba8(255, 10, 15, 180);
65 paint.anti_alias = true;
66 let mut stroke = Stroke::default();
67 stroke.width = 0.8; // hairline
68 pixmap.stroke_path(&path2, &paint, &stroke, Transform::default(), None);
69
70 pixmap.save_png("image.png").unwrap();
71}
Sourcepub fn last_point(&self) -> Option<Point>
pub fn last_point(&self) -> Option<Point>
Returns the last point if any.
Sourcepub fn push_rect(&mut self, rect: Rect)
pub fn push_rect(&mut self, rect: Rect)
Adds a rectangle contour.
The contour is closed and has a clock-wise direction.
Sourcepub fn push_oval(&mut self, oval: Rect)
pub fn push_oval(&mut self, oval: Rect)
Adds an oval contour bounded by the provided rectangle.
The contour is closed and has a clock-wise direction.
Sourcepub fn push_circle(&mut self, x: f32, y: f32, r: f32)
pub fn push_circle(&mut self, x: f32, y: f32, r: f32)
Adds a circle contour.
The contour is closed and has a clock-wise direction.
Does nothing when:
radius
<= 0- any value is not finite or really large
Examples found in repository?
3fn main() {
4 let clip_path = {
5 let mut pb = PathBuilder::new();
6 pb.push_circle(250.0, 250.0, 200.0);
7 pb.push_circle(250.0, 250.0, 100.0);
8 pb.finish().unwrap()
9 };
10
11 let clip_path = clip_path
12 .transform(Transform::from_row(1.0, -0.3, 0.0, 1.0, 0.0, 75.0))
13 .unwrap();
14
15 let mut mask = Mask::new(500, 500).unwrap();
16 mask.fill_path(&clip_path, FillRule::EvenOdd, true, Transform::default());
17
18 let mut paint = Paint::default();
19 paint.anti_alias = false;
20 paint.set_color_rgba8(50, 127, 150, 200);
21
22 let mut pixmap = Pixmap::new(500, 500).unwrap();
23 pixmap.fill_rect(
24 Rect::from_xywh(0.0, 0.0, 500.0, 500.0).unwrap(),
25 &paint,
26 Transform::identity(),
27 Some(&mask),
28 );
29 pixmap.save_png("image.png").unwrap();
30}
More examples
6fn main() {
7 let path1 = {
8 let mut pb = PathBuilder::new();
9 pb.move_to(1200.0, 1200.0);
10 pb.line_to(3200.0, 18800.0);
11 pb.cubic_to(7600.0, 16800.0, 13200.0, 16000.0, 18800.0, 16000.0);
12 pb.cubic_to(14800.0, 9200.0, 8800.0, 3200.0, 1200.0, 1200.0);
13 pb.close();
14 pb.finish().unwrap()
15 };
16
17 let path2 = {
18 let mut pb = PathBuilder::new();
19 pb.move_to(18800.0, 1200.0);
20 pb.line_to(16800.0, 18800.0);
21 pb.cubic_to(12400.0, 16800.0, 6800.0, 16000.0, 1200.0, 16000.0);
22 pb.cubic_to(5200.0, 9200.0, 11200.0, 3200.0, 18800.0, 1200.0);
23 pb.close();
24 pb.finish().unwrap()
25 };
26
27 let mut pixmap = Pixmap::new(20000, 20000).unwrap();
28
29 let clip_path = {
30 let mut pb = PathBuilder::new();
31 pb.push_circle(10000.0, 10000.0, 7000.0);
32 pb.finish().unwrap()
33 };
34
35 let mut mask = Mask::new(20000, 20000).unwrap();
36 mask.fill_path(&clip_path, FillRule::Winding, true, Transform::default());
37
38 let mut paint = Paint::default();
39 paint.set_color_rgba8(90, 175, 100, 150);
40 paint.anti_alias = true;
41 let large_rect = Rect::from_xywh(500.0, 500.0, 19000.0, 19000.0).unwrap();
42 pixmap.fill_rect(large_rect, &paint, Transform::identity(), None);
43
44 paint.set_color_rgba8(50, 127, 150, 200);
45 paint.anti_alias = true;
46 pixmap.fill_path(
47 &path1,
48 &paint,
49 FillRule::Winding,
50 Transform::default(),
51 Some(&mask),
52 );
53
54 paint.set_color_rgba8(220, 140, 75, 180);
55 paint.anti_alias = false;
56 pixmap.fill_path(
57 &path2,
58 &paint,
59 FillRule::Winding,
60 Transform::default(),
61 None,
62 );
63
64 paint.set_color_rgba8(255, 10, 15, 180);
65 paint.anti_alias = true;
66 let mut stroke = Stroke::default();
67 stroke.width = 0.8; // hairline
68 pixmap.stroke_path(&path2, &paint, &stroke, Transform::default(), None);
69
70 pixmap.save_png("image.png").unwrap();
71}
Sourcepub fn finish(self) -> Option<Path>
pub fn finish(self) -> Option<Path>
Finishes the builder and returns a Path
.
Returns None
when Path
is empty or has invalid bounds.
Examples found in repository?
29fn crate_triangle() -> Pixmap {
30 let mut paint = Paint::default();
31 paint.set_color_rgba8(50, 127, 150, 200);
32 paint.anti_alias = true;
33
34 let mut pb = PathBuilder::new();
35 pb.move_to(0.0, 20.0);
36 pb.line_to(20.0, 20.0);
37 pb.line_to(10.0, 0.0);
38 pb.close();
39 let path = pb.finish().unwrap();
40
41 let mut pixmap = Pixmap::new(20, 20).unwrap();
42 pixmap.fill_path(
43 &path,
44 &paint,
45 FillRule::Winding,
46 Transform::identity(),
47 None,
48 );
49 pixmap
50}
More examples
5fn main() {
6 let mut pb = PathBuilder::new();
7 pb.move_to(50.0, 100.0);
8 pb.cubic_to(130.0, 20.0, 390.0, 120.0, 450.0, 30.0);
9 let path = pb.finish().unwrap();
10
11 let mut paint = Paint::default();
12 paint.set_color_rgba8(50, 127, 150, 200);
13 paint.anti_alias = true;
14
15 let mut pixmap = Pixmap::new(500, 500).unwrap();
16 let mut transform = Transform::identity();
17 for i in 0..20 {
18 let mut stroke = Stroke::default();
19 stroke.width = 2.0 - (i as f32 / 10.0);
20 pixmap.stroke_path(&path, &paint, &stroke, transform, None);
21 transform = transform.pre_translate(0.0, 20.0);
22 }
23
24 pixmap.save_png("image.png").unwrap();
25}
30fn create_triangle() -> Pixmap {
31 let mut paint = Paint::default();
32 paint.set_color_rgba8(50, 127, 150, 200);
33 paint.anti_alias = true;
34
35 let mut pb = PathBuilder::new();
36 pb.move_to(0.0, 200.0);
37 pb.line_to(200.0, 200.0);
38 pb.line_to(100.0, 0.0);
39 pb.close();
40 let path = pb.finish().unwrap();
41
42 let mut pixmap = Pixmap::new(200, 200).unwrap();
43
44 pixmap.fill_path(
45 &path,
46 &paint,
47 FillRule::Winding,
48 Transform::identity(),
49 None,
50 );
51
52 let path = PathBuilder::from_rect(Rect::from_ltrb(0.0, 0.0, 200.0, 200.0).unwrap());
53 let stroke = Stroke::default();
54 paint.set_color_rgba8(200, 0, 0, 220);
55
56 pixmap.stroke_path(&path, &paint, &stroke, Transform::identity(), None); // TODO: stroke_rect
57
58 pixmap
59}
3fn main() {
4 let clip_path = {
5 let mut pb = PathBuilder::new();
6 pb.push_circle(250.0, 250.0, 200.0);
7 pb.push_circle(250.0, 250.0, 100.0);
8 pb.finish().unwrap()
9 };
10
11 let clip_path = clip_path
12 .transform(Transform::from_row(1.0, -0.3, 0.0, 1.0, 0.0, 75.0))
13 .unwrap();
14
15 let mut mask = Mask::new(500, 500).unwrap();
16 mask.fill_path(&clip_path, FillRule::EvenOdd, true, Transform::default());
17
18 let mut paint = Paint::default();
19 paint.anti_alias = false;
20 paint.set_color_rgba8(50, 127, 150, 200);
21
22 let mut pixmap = Pixmap::new(500, 500).unwrap();
23 pixmap.fill_rect(
24 Rect::from_xywh(0.0, 0.0, 500.0, 500.0).unwrap(),
25 &paint,
26 Transform::identity(),
27 Some(&mask),
28 );
29 pixmap.save_png("image.png").unwrap();
30}
5fn main() {
6 let mut paint = Paint::default();
7 paint.set_color_rgba8(0, 127, 0, 200);
8 paint.anti_alias = true;
9
10 let path = {
11 let mut pb = PathBuilder::new();
12 const RADIUS: f32 = 250.0;
13 const CENTER: f32 = 250.0;
14 pb.move_to(CENTER + RADIUS, CENTER);
15 for i in 1..8 {
16 let a = 2.6927937 * i as f32;
17 pb.line_to(CENTER + RADIUS * a.cos(), CENTER + RADIUS * a.sin());
18 }
19 pb.finish().unwrap()
20 };
21
22 let mut stroke = Stroke::default();
23 stroke.width = 6.0;
24 stroke.line_cap = LineCap::Round;
25 stroke.dash = StrokeDash::new(vec![20.0, 40.0], 0.0);
26
27 let mut pixmap = Pixmap::new(500, 500).unwrap();
28 pixmap.stroke_path(&path, &paint, &stroke, Transform::identity(), None);
29 pixmap.save_png("image.png").unwrap();
30}
3fn main() {
4 let mut paint = Paint::default();
5 paint.anti_alias = false;
6 paint.shader = LinearGradient::new(
7 Point::from_xy(100.0, 100.0),
8 Point::from_xy(900.0, 900.0),
9 vec![
10 GradientStop::new(0.0, Color::from_rgba8(50, 127, 150, 200)),
11 GradientStop::new(1.0, Color::from_rgba8(220, 140, 75, 180)),
12 ],
13 SpreadMode::Pad,
14 Transform::identity(),
15 )
16 .unwrap();
17
18 let mut pb = PathBuilder::new();
19 pb.move_to(60.0, 60.0);
20 pb.line_to(160.0, 940.0);
21 pb.cubic_to(380.0, 840.0, 660.0, 800.0, 940.0, 800.0);
22 pb.cubic_to(740.0, 460.0, 440.0, 160.0, 60.0, 60.0);
23 pb.close();
24 let path = pb.finish().unwrap();
25
26 let mut pixmap = Pixmap::new(1000, 1000).unwrap();
27 pixmap.fill_path(
28 &path,
29 &paint,
30 FillRule::Winding,
31 Transform::identity(),
32 None,
33 );
34 pixmap.save_png("image.png").unwrap();
35}
Trait Implementations§
Source§impl Clone for PathBuilder
impl Clone for PathBuilder
Source§fn clone(&self) -> PathBuilder
fn clone(&self) -> PathBuilder
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more