diff options
| author | 2023-05-19 03:32:21 +0200 | |
|---|---|---|
| committer | 2023-05-19 03:32:21 +0200 | |
| commit | 4c1a082f0468a59099bbf8aa8991420a41234948 (patch) | |
| tree | 42308071bc180f364c71cdc0bb0011235c01fe14 /graphics/src | |
| parent | 6551a0b2ab6c831dd1d3646ecf55180339275e22 (diff) | |
| download | iced-4c1a082f0468a59099bbf8aa8991420a41234948.tar.gz iced-4c1a082f0468a59099bbf8aa8991420a41234948.tar.bz2 iced-4c1a082f0468a59099bbf8aa8991420a41234948.zip | |
Remove `Builder` abstractions for gradients
Diffstat (limited to '')
| -rw-r--r-- | graphics/src/geometry.rs | 2 | ||||
| -rw-r--r-- | graphics/src/geometry/fill.rs | 15 | ||||
| -rw-r--r-- | graphics/src/gradient.rs | 145 | ||||
| -rw-r--r-- | graphics/src/lib.rs | 2 | 
4 files changed, 71 insertions, 93 deletions
| diff --git a/graphics/src/geometry.rs b/graphics/src/geometry.rs index 88997288..729c3d44 100644 --- a/graphics/src/geometry.rs +++ b/graphics/src/geometry.rs @@ -12,7 +12,7 @@ pub use stroke::{LineCap, LineDash, LineJoin, Stroke};  pub use style::Style;  pub use text::Text; -pub use crate::core::gradient::{self, Gradient}; +pub use crate::gradient::{self, Gradient};  use crate::Primitive; diff --git a/graphics/src/geometry/fill.rs b/graphics/src/geometry/fill.rs index 6aa1f28b..b773c99b 100644 --- a/graphics/src/geometry/fill.rs +++ b/graphics/src/geometry/fill.rs @@ -1,8 +1,8 @@  //! Fill [crate::widget::canvas::Geometry] with a certain style. -use iced_core::Color; -  pub use crate::geometry::Style; -use crate::Gradient; + +use crate::core::Color; +use crate::gradient::{self, Gradient};  /// The style used to fill geometry.  #[derive(Debug, Clone)] @@ -50,6 +50,15 @@ impl From<Gradient> for Fill {      }  } +impl From<gradient::Linear> for Fill { +    fn from(gradient: gradient::Linear) -> Self { +        Fill { +            style: Style::Gradient(Gradient::Linear(gradient)), +            ..Default::default() +        } +    } +} +  /// The fill rule defines how to determine what is inside and what is outside of  /// a shape.  /// diff --git a/graphics/src/gradient.rs b/graphics/src/gradient.rs index 21bcd2c6..3e88d9de 100644 --- a/graphics/src/gradient.rs +++ b/graphics/src/gradient.rs @@ -1,10 +1,11 @@ -//! A gradient that can be used as a [`Fill`] for a mesh. +//! A gradient that can be used as a [`Fill`] for some geometry.  //!  //! For a gradient that you can use as a background variant for a widget, see [`Gradient`].  //!  //! [`Gradient`]: crate::core::Gradient; -use crate::core::Point; -pub use linear::Linear; +use crate::core::gradient::ColorStop; +use crate::core::{Color, Point}; +use std::cmp::Ordering;  #[derive(Debug, Clone, PartialEq)]  /// A fill which linearly interpolates colors along a direction. @@ -16,104 +17,72 @@ pub enum Gradient {      Linear(Linear),  } -impl Gradient { -    /// Creates a new linear [`linear::Builder`]. -    /// -    /// The `start` and `end` [`Point`]s define the absolute position of the [`Gradient`]. -    pub fn linear(start: Point, end: Point) -> linear::Builder { -        linear::Builder::new(start, end) +impl From<Linear> for Gradient { +    fn from(gradient: Linear) -> Self { +        Self::Linear(gradient)      }  } -pub mod linear { -    //! Linear gradient builder & definition. -    use crate::Gradient; -    use iced_core::gradient::ColorStop; -    use iced_core::{Color, Point}; -    use std::cmp::Ordering; +/// A linear gradient that can be used in the style of [`Fill`] or [`Stroke`]. +/// +/// [`Fill`]: crate::geometry::Fill; +/// [`Stroke`]: crate::geometry::Stroke; +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct Linear { +    /// The absolute starting position of the gradient. +    pub start: Point, -    /// A linear gradient that can be used in the style of [`Fill`] or [`Stroke`]. -    /// -    /// [`Fill`]: crate::geometry::Fill; -    /// [`Stroke`]: crate::geometry::Stroke; -    #[derive(Debug, Clone, Copy, PartialEq)] -    pub struct Linear { -        /// The absolute starting position of the gradient. -        pub start: Point, +    /// The absolute ending position of the gradient. +    pub end: Point, -        /// The absolute ending position of the gradient. -        pub end: Point, +    /// [`ColorStop`]s along the linear gradient direction. +    pub stops: [Option<ColorStop>; 8], +} -        /// [`ColorStop`]s along the linear gradient direction. -        pub color_stops: [Option<ColorStop>; 8], +impl Linear { +    /// Creates a new [`Builder`]. +    pub fn new(start: Point, end: Point) -> Self { +        Self { +            start, +            end, +            stops: [None; 8], +        }      } -    /// A [`Linear`] builder. -    #[derive(Debug)] -    pub struct Builder { -        start: Point, -        end: Point, -        stops: [Option<ColorStop>; 8], -    } +    /// Adds a new [`ColorStop`], defined by an offset and a color, to the gradient. +    /// +    /// Any `offset` that is not within `0.0..=1.0` will be silently ignored. +    /// +    /// Any stop added after the 8th will be silently ignored. +    pub fn add_stop(mut self, offset: f32, color: Color) -> Self { +        if offset.is_finite() && (0.0..=1.0).contains(&offset) { +            let (Ok(index) | Err(index)) = +                self.stops.binary_search_by(|stop| match stop { +                    None => Ordering::Greater, +                    Some(stop) => stop.offset.partial_cmp(&offset).unwrap(), +                }); -    impl Builder { -        /// Creates a new [`Builder`]. -        pub fn new(start: Point, end: Point) -> Self { -            Self { -                start, -                end, -                stops: [None; 8], +            if index < 8 { +                self.stops[index] = Some(ColorStop { offset, color });              } -        } +        } else { +            log::warn!("Gradient: ColorStop must be within 0.0..=1.0 range."); +        }; -        /// Adds a new [`ColorStop`], defined by an offset and a color, to the gradient. -        /// -        /// Any `offset` that is not within `0.0..=1.0` will be silently ignored. -        /// -        /// Any stop added after the 8th will be silently ignored. -        pub fn add_stop(mut self, offset: f32, color: Color) -> Self { -            if offset.is_finite() && (0.0..=1.0).contains(&offset) { -                let (Ok(index) | Err(index)) = -                    self.stops.binary_search_by(|stop| match stop { -                        None => Ordering::Greater, -                        Some(stop) => stop.offset.partial_cmp(&offset).unwrap(), -                    }); - -                if index < 8 { -                    self.stops[index] = Some(ColorStop { offset, color }); -                } -            } else { -                log::warn!( -                    "Gradient: ColorStop must be within 0.0..=1.0 range." -                ); -            }; - -            self -        } - -        /// Adds multiple [`ColorStop`]s to the gradient. -        /// -        /// Any stop added after the 8th will be silently ignored. -        pub fn add_stops( -            mut self, -            stops: impl IntoIterator<Item = ColorStop>, -        ) -> Self { -            for stop in stops.into_iter() { -                self = self.add_stop(stop.offset, stop.color) -            } +        self +    } -            self +    /// Adds multiple [`ColorStop`]s to the gradient. +    /// +    /// Any stop added after the 8th will be silently ignored. +    pub fn add_stops( +        mut self, +        stops: impl IntoIterator<Item = ColorStop>, +    ) -> Self { +        for stop in stops.into_iter() { +            self = self.add_stop(stop.offset, stop.color)          } -        /// Builds the linear [`Gradient`] of this [`Builder`]. -        /// -        /// Returns `BuilderError` if gradient in invalid. -        pub fn build(self) -> Gradient { -            Gradient::Linear(Linear { -                start: self.start, -                end: self.end, -                color_stops: self.stops, -            }) -        } +        self      }  } diff --git a/graphics/src/lib.rs b/graphics/src/lib.rs index ae338936..b44fd603 100644 --- a/graphics/src/lib.rs +++ b/graphics/src/lib.rs @@ -23,13 +23,13 @@  #![cfg_attr(docsrs, feature(doc_cfg))]  mod antialiasing;  mod error; -mod gradient;  mod transformation;  mod viewport;  pub mod backend;  pub mod compositor;  pub mod damage; +pub mod gradient;  pub mod primitive;  pub mod renderer; | 
