diff options
author | 2023-05-19 03:53:23 +0200 | |
---|---|---|
committer | 2023-05-19 03:53:23 +0200 | |
commit | 49353bc4ea2e93e5d70f026e7eda169987b7c1c7 (patch) | |
tree | 5ae1f91086556a5b7d13074d8b9545359c6771eb /tiny_skia | |
parent | 3d44de9547c770787edf6de3b683fe2b7e92ee09 (diff) | |
download | iced-49353bc4ea2e93e5d70f026e7eda169987b7c1c7.tar.gz iced-49353bc4ea2e93e5d70f026e7eda169987b7c1c7.tar.bz2 iced-49353bc4ea2e93e5d70f026e7eda169987b7c1c7.zip |
Inline `into_gradient` in `tiny_skia::backend`
... since it's not really reused anywhere else.
Diffstat (limited to 'tiny_skia')
-rw-r--r-- | tiny_skia/src/backend.rs | 84 |
1 files changed, 41 insertions, 43 deletions
diff --git a/tiny_skia/src/backend.rs b/tiny_skia/src/backend.rs index 9495d2fc..d55b9dab 100644 --- a/tiny_skia/src/backend.rs +++ b/tiny_skia/src/backend.rs @@ -184,8 +184,47 @@ impl Backend { *color, )) } - Background::Gradient(gradient) => { - into_gradient(*gradient, *bounds) + Background::Gradient(Gradient::Linear(linear)) => { + let (start, end) = + linear.angle.to_distance(&bounds); + + let stops: Vec<tiny_skia::GradientStop> = + linear + .stops + .into_iter() + .flatten() + .map(|stop| { + tiny_skia::GradientStop::new( + stop.offset, + tiny_skia::Color::from_rgba( + stop.color.b, + stop.color.g, + stop.color.r, + stop.color.a, + ) + .expect("Create color"), + ) + }) + .collect(); + + tiny_skia::LinearGradient::new( + tiny_skia::Point { + x: start.x, + y: start.y, + }, + tiny_skia::Point { x: end.x, y: end.y }, + if stops.is_empty() { + vec![tiny_skia::GradientStop::new( + 0.0, + tiny_skia::Color::BLACK, + )] + } else { + stops + }, + tiny_skia::SpreadMode::Pad, + tiny_skia::Transform::identity(), + ) + .expect("Create linear gradient") } }, anti_alias: true, @@ -456,47 +495,6 @@ fn into_color(color: Color) -> tiny_skia::Color { .expect("Convert color from iced to tiny_skia") } -fn into_gradient<'a>( - gradient: Gradient, - bounds: Rectangle, -) -> tiny_skia::Shader<'a> { - let Gradient::Linear(linear) = gradient; - let (start, end) = linear.angle.to_distance(&bounds); - let stops: Vec<tiny_skia::GradientStop> = linear - .stops - .into_iter() - .flatten() - .map(|stop| { - tiny_skia::GradientStop::new( - stop.offset, - tiny_skia::Color::from_rgba( - stop.color.b, - stop.color.g, - stop.color.r, - stop.color.a, - ) - .expect("Create color"), - ) - }) - .collect(); - - tiny_skia::LinearGradient::new( - tiny_skia::Point { - x: start.x, - y: start.y, - }, - tiny_skia::Point { x: end.x, y: end.y }, - if stops.is_empty() { - vec![tiny_skia::GradientStop::new(0.0, tiny_skia::Color::BLACK)] - } else { - stops - }, - tiny_skia::SpreadMode::Pad, - tiny_skia::Transform::identity(), - ) - .expect("Create linear gradient") -} - fn rounded_rectangle( bounds: Rectangle, border_radius: [f32; 4], |