| 1 | use crate::prelude::*; |
| 2 | use crate::{Matrix, Paint, Path, Rect}; |
| 3 | use skia_bindings as sb; |
| 4 | |
| 5 | /// Returns the filled equivalent of the stroked path. |
| 6 | /// |
| 7 | /// * `src` - [`Path`] read to create a filled version |
| 8 | /// * `paint` - [`Paint`], from which attributes such as stroke cap, width, miter, and join, |
| 9 | /// as well as `path_effect` will be used. |
| 10 | /// * `dst` - resulting [`Path`] |
| 11 | /// * `cull_rect` - optional limit passed to [`crate::PathEffect`] |
| 12 | /// * `matrix` - if scale > 1, increase precision, else if (0 < scale < 1) reduce precision |
| 13 | /// to favor speed and size |
| 14 | /// |
| 15 | /// Returns: `true` if the dst path was updated, `false` if it was not (e.g. if the path |
| 16 | /// represents hairline and cannot be filled). |
| 17 | pub fn fill_path_with_paint<'a>( |
| 18 | src: &Path, |
| 19 | paint: &Paint, |
| 20 | dst: &mut Path, |
| 21 | cull_rect: impl Into<Option<&'a Rect>>, |
| 22 | matrix: impl Into<Option<Matrix>>, |
| 23 | ) -> bool { |
| 24 | let cull_rect: Option<&'a Rect> = cull_rect.into(); |
| 25 | let matrix = matrix.into().unwrap_or(Matrix::scale((1.0, 1.0))); |
| 26 | |
| 27 | unsafe { |
| 28 | sb::C_PathUtils_FillPathWithPaint( |
| 29 | src.native(), |
| 30 | paint.native(), |
| 31 | dst.native_mut(), |
| 32 | cullRect:cull_rect.native_ptr_or_null(), |
| 33 | matrix.native(), |
| 34 | ) |
| 35 | } |
| 36 | } |
| 37 | |