diff options
author | 2022-10-07 16:55:55 -0700 | |
---|---|---|
committer | 2022-10-07 16:55:55 -0700 | |
commit | fd5e1e5ab0b712cd6719733b5a68602176ae5ec4 (patch) | |
tree | 40c054f30aaebb1befeb25fb8852fd1fe70402b8 /graphics | |
parent | a4a1262fa2d625be5ad7a37e409e0e9c399b09b6 (diff) | |
download | iced-fd5e1e5ab0b712cd6719733b5a68602176ae5ec4.tar.gz iced-fd5e1e5ab0b712cd6719733b5a68602176ae5ec4.tar.bz2 iced-fd5e1e5ab0b712cd6719733b5a68602176ae5ec4.zip |
Adjusted gradient transform function to be more readable.
Diffstat (limited to '')
-rw-r--r-- | graphics/src/gradient.rs | 8 | ||||
-rw-r--r-- | graphics/src/widget/canvas/fill.rs | 10 | ||||
-rw-r--r-- | graphics/src/widget/canvas/frame.rs | 19 | ||||
-rw-r--r-- | graphics/src/widget/canvas/stroke.rs | 16 |
4 files changed, 25 insertions, 28 deletions
diff --git a/graphics/src/gradient.rs b/graphics/src/gradient.rs index 1446d7cf..da0f911d 100644 --- a/graphics/src/gradient.rs +++ b/graphics/src/gradient.rs @@ -2,7 +2,7 @@ mod linear; pub use crate::gradient::linear::{Linear, Location, Position}; -use crate::{Color, Point}; +use crate::Color; #[derive(Debug, Clone, PartialEq)] /// A fill which transitions colors progressively along a direction, either linearly, radially (TBD), @@ -27,10 +27,4 @@ impl Gradient { pub fn linear(position: impl Into<Position>) -> linear::Builder { linear::Builder::new(position.into()) } - - pub(crate) fn coords(&mut self) -> (&mut Point, &mut Point) { - match self { - Gradient::Linear(gradient) => (&mut gradient.start, &mut gradient.end) - } - } } diff --git a/graphics/src/widget/canvas/fill.rs b/graphics/src/widget/canvas/fill.rs index 477a7020..34cc5e50 100644 --- a/graphics/src/widget/canvas/fill.rs +++ b/graphics/src/widget/canvas/fill.rs @@ -67,13 +67,9 @@ impl<'a> Style<'a> { Style::Solid(color) => { mesh::Style::Solid(*color) }, - Style::Gradient(gradient) => { - let mut gradient = (*gradient).clone(); - let coordinates = gradient.coords(); - transform.transform_point(coordinates.0); - transform.transform_point(coordinates.1); - mesh::Style::Gradient(gradient) - } + Style::Gradient(gradient) => mesh::Style::Gradient( + transform.transform_gradient((*gradient).clone()), + ), } } } diff --git a/graphics/src/widget/canvas/frame.rs b/graphics/src/widget/canvas/frame.rs index d505cef7..1660fd6e 100644 --- a/graphics/src/widget/canvas/frame.rs +++ b/graphics/src/widget/canvas/frame.rs @@ -3,12 +3,13 @@ use std::borrow::Cow; use iced_native::{Point, Rectangle, Size, Vector}; +use crate::gradient::Gradient; +use crate::layer::mesh; use crate::triangle; +use crate::triangle::Vertex2D; use crate::widget::canvas::{path, Fill, Geometry, Path, Stroke, Text}; use crate::Primitive; -use crate::layer::mesh; -use crate::triangle::Vertex2D; use lyon::tessellation; /// The frame of a [`Canvas`]. @@ -38,12 +39,24 @@ pub(crate) struct Transform { impl Transform { /// Transforms the given [Point] by the transformation matrix. - pub(crate) fn transform_point(&self, point: &mut Point) { + fn transform_point(&self, point: &mut Point) { let transformed = self.raw.transform_point(Point2D::new(point.x, point.y)); point.x = transformed.x; point.y = transformed.y; } + + pub(crate) fn transform_gradient( + &self, + mut gradient: Gradient, + ) -> Gradient { + let coords = match &mut gradient { + Gradient::Linear(linear) => (&mut linear.start, &mut linear.end), + }; + self.transform_point(coords.0); + self.transform_point(coords.1); + gradient + } } impl Frame { diff --git a/graphics/src/widget/canvas/stroke.rs b/graphics/src/widget/canvas/stroke.rs index 6e49f994..2f02a2f3 100644 --- a/graphics/src/widget/canvas/stroke.rs +++ b/graphics/src/widget/canvas/stroke.rs @@ -1,9 +1,9 @@ //! Create lines from a [crate::widget::canvas::Path] and assigns them various attributes/styles. -use iced_native::Color; use crate::gradient::Gradient; use crate::layer::mesh; use crate::widget::canvas::frame::Transform; +use iced_native::Color; /// The style of a stroke. #[derive(Debug, Clone)] @@ -73,16 +73,10 @@ impl<'a> Style<'a> { /// Converts a fill's [Style] to a [mesh::Style] for use in the renderer's shader. pub(crate) fn as_mesh_style(&self, transform: &Transform) -> mesh::Style { match self { - Style::Solid(color) => { - mesh::Style::Solid(*color) - }, - Style::Gradient(gradient) => { - let mut gradient = (*gradient).clone(); - let coordinates = gradient.coords(); - transform.transform_point(coordinates.0); - transform.transform_point(coordinates.1); - mesh::Style::Gradient(gradient) - } + Style::Solid(color) => mesh::Style::Solid(*color), + Style::Gradient(gradient) => mesh::Style::Gradient( + transform.transform_gradient((*gradient).clone()), + ), } } } |