From cdfb8b30680de164280b8b90fbc08a1638e597e2 Mon Sep 17 00:00:00 2001 From: Nick Senger Date: Tue, 6 Jun 2023 21:12:41 -0700 Subject: feat: add progress indicators example --- examples/progress_indicators/src/easing.rs | 67 ++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 examples/progress_indicators/src/easing.rs (limited to 'examples/progress_indicators/src/easing.rs') diff --git a/examples/progress_indicators/src/easing.rs b/examples/progress_indicators/src/easing.rs new file mode 100644 index 00000000..10479659 --- /dev/null +++ b/examples/progress_indicators/src/easing.rs @@ -0,0 +1,67 @@ +use flo_curves::bezier::Curve; +use flo_curves::*; +use lazy_static::lazy_static; + +use std::borrow::Cow; + +lazy_static! { + pub static ref EXAMPLES: [Easing; 3] = [ + Easing::CubicBezier(Curve::from_points( + Coord2(0.0, 0.0), + (Coord2(0.05, 0.7), Coord2(0.1, 1.0)), + Coord2(1.0, 1.0), + )), + Easing::CubicBezier(Curve::from_points( + Coord2(0.0, 0.0), + (Coord2(0.3, 0.0), Coord2(0.8, 0.15)), + Coord2(1.0, 1.0), + )), + Easing::CubicBezier(Curve::from_points( + Coord2(0.0, 0.0), + (Coord2(0.2, 0.0), Coord2(0.0, 1.0)), + Coord2(1.0, 1.0), + )) + ]; + pub static ref STANDARD: Easing = { + Easing::CubicBezier(Curve::from_points( + Coord2(0.0, 0.0), + (Coord2(0.2, 0.0), Coord2(0.0, 1.0)), + Coord2(1.0, 1.0), + )) + }; +} + +#[derive(Clone, Debug)] +pub enum Easing { + BezierPath(Vec>), + CubicBezier(Curve), +} + +impl Easing { + pub fn y_at_x(&self, x: f32) -> f32 { + let x = x as f64; + + match self { + Self::BezierPath(curves) => curves + .iter() + .find_map(|curve| { + (curve.start_point().0 <= x && curve.end_point().0 >= x) + .then(|| curve.point_at_pos(x).1 as f32) + }) + .unwrap_or_default(), + Self::CubicBezier(curve) => curve.point_at_pos(x).1 as f32, + } + } +} + +impl<'a> From for Cow<'a, Easing> { + fn from(easing: Easing) -> Self { + Cow::Owned(easing) + } +} + +impl<'a> From<&'a Easing> for Cow<'a, Easing> { + fn from(easing: &'a Easing) -> Self { + Cow::Borrowed(easing) + } +} -- cgit