Struct tiny_skia::Path

source ·
pub struct Path { /* private fields */ }
Expand description

A Bezier path.

Can be created via PathBuilder. Where PathBuilder can be created from the Path using clear to reuse the allocation.

Path is immutable and uses compact storage, where segment types and numbers are stored separately. Use can access path segments via Path::verbs and Path::points, or via Path::segments

§Guarantees

  • Has a valid, precomputed bounds.
  • All points are finite.
  • Has at least two segments.
  • Each contour starts with a MoveTo.
  • No duplicated Move.
  • No duplicated Close.
  • Zero-length contours are allowed.

Implementations§

source§

impl Path

source

pub fn dash(&self, dash: &StrokeDash, resolution_scale: f32) -> Option<Path>

Converts the current path into a dashed one.

resolution_scale can be obtained via compute_resolution_scale.

Returns None when more than 1_000_000 dashes had to be produced or when the final path has an invalid bounding box.

source§

impl Path

source

pub fn len(&self) -> usize

Returns the number of segments in the path.

source

pub fn is_empty(&self) -> bool

Return if the path is empty.

source

pub fn bounds(&self) -> Rect

Returns the bounds of the path’s points.

The value is already calculated.

source

pub fn compute_tight_bounds(&self) -> Option<Rect>

Calculates path’s tight bounds.

This operation can be expensive.

source

pub fn verbs(&self) -> &[PathVerb]

Returns an internal vector of verbs.

source

pub fn points(&self) -> &[Point]

Returns an internal vector of points.

source

pub fn transform(self, ts: Transform) -> Option<Path>

Returns a transformed in-place path.

Some points may become NaN/inf therefore this method can fail.

Examples found in repository?
examples/mask.rs (line 12)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
fn main() {
    let clip_path = {
        let mut pb = PathBuilder::new();
        pb.push_circle(250.0, 250.0, 200.0);
        pb.push_circle(250.0, 250.0, 100.0);
        pb.finish().unwrap()
    };

    let clip_path = clip_path
        .transform(Transform::from_row(1.0, -0.3, 0.0, 1.0, 0.0, 75.0))
        .unwrap();

    let mut mask = Mask::new(500, 500).unwrap();
    mask.fill_path(&clip_path, FillRule::EvenOdd, true, Transform::default());

    let mut paint = Paint::default();
    paint.anti_alias = false;
    paint.set_color_rgba8(50, 127, 150, 200);

    let mut pixmap = Pixmap::new(500, 500).unwrap();
    pixmap.fill_rect(
        Rect::from_xywh(0.0, 0.0, 500.0, 500.0).unwrap(),
        &paint,
        Transform::identity(),
        Some(&mask),
    );
    pixmap.save_png("image.png").unwrap();
}
source

pub fn segments(&self) -> PathSegmentsIter<'_>

Returns an iterator over path’s segments.

source

pub fn clear(self) -> PathBuilder

Clears the path and returns a PathBuilder that will reuse an allocated memory.

source§

impl Path

source

pub fn stroke(&self, stroke: &Stroke, resolution_scale: f32) -> Option<Path>

Returns a stoked path.

resolution_scale can be obtained via compute_resolution_scale.

If you plan stroking multiple paths, you can try using PathStroker which will preserve temporary allocations required during stroking. This might improve performance a bit.

Trait Implementations§

source§

impl Clone for Path

source§

fn clone(&self) -> Path

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Path

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl PartialEq for Path

source§

fn eq(&self, other: &Path) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for Path

Auto Trait Implementations§

§

impl RefUnwindSafe for Path

§

impl Send for Path

§

impl Sync for Path

§

impl Unpin for Path

§

impl UnwindSafe for Path

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.