summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar shan <shankern@protonmail.com>2022-10-07 16:55:55 -0700
committerLibravatar shan <shankern@protonmail.com>2022-10-07 16:55:55 -0700
commitfd5e1e5ab0b712cd6719733b5a68602176ae5ec4 (patch)
tree40c054f30aaebb1befeb25fb8852fd1fe70402b8
parenta4a1262fa2d625be5ad7a37e409e0e9c399b09b6 (diff)
downloadiced-fd5e1e5ab0b712cd6719733b5a68602176ae5ec4.tar.gz
iced-fd5e1e5ab0b712cd6719733b5a68602176ae5ec4.tar.bz2
iced-fd5e1e5ab0b712cd6719733b5a68602176ae5ec4.zip
Adjusted gradient transform function to be more readable.
-rw-r--r--graphics/src/gradient.rs8
-rw-r--r--graphics/src/widget/canvas/fill.rs10
-rw-r--r--graphics/src/widget/canvas/frame.rs19
-rw-r--r--graphics/src/widget/canvas/stroke.rs16
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()),
+ ),
}
}
}