1use crate::bridge::ffi;
4use crate::path::Path;
5use crate::PathOp;
6use crate::rect::Rect;
7
8pub fn path_op(path1: &Path, path2: &Path, op: PathOp) -> Option<Path> {
12 let mut result = Path::new();
13 let ok = ffi::boolean_path_op(
14 path1.as_raw(),
15 path2.as_raw(),
16 op,
17 result.as_raw_pin_mut(),
18 );
19 if ok {
20 Some(result)
21 } else {
22 None
23 }
24}
25
26pub fn simplify(path: &Path) -> Option<Path> {
30 let mut result = Path::new();
31 let ok = ffi::simplify_path(path.as_raw(), result.as_raw_pin_mut());
32 if ok {
33 Some(result)
34 } else {
35 None
36 }
37}
38
39pub fn pathops_tight_bounds(path: &Path) -> Option<Rect> {
44 let mut result = ffi::Rect {
45 fLeft: 0.0,
46 fTop: 0.0,
47 fRight: 0.0,
48 fBottom: 0.0,
49 };
50 let ok = ffi::pathops_tight_bounds(path.as_raw(), &mut result);
51 if ok {
52 Some(result.into())
53 } else {
54 None
55 }
56}