summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-02-03 17:18:05 +0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-02-03 17:18:05 +0700
commitf56c8a7361ceb215bce68e88bd6ce402e2694693 (patch)
treeec4d7ef8a63cf9ce0a77c28c9beeeaa7f3d64efc /graphics
parent76c03de58729783513504f8115d7381f9a52fd23 (diff)
downloadiced-f56c8a7361ceb215bce68e88bd6ce402e2694693.tar.gz
iced-f56c8a7361ceb215bce68e88bd6ce402e2694693.tar.bz2
iced-f56c8a7361ceb215bce68e88bd6ce402e2694693.zip
Ask for a slice of segments instead of ownership in `LineDash`
Diffstat (limited to 'graphics')
-rw-r--r--graphics/src/widget/canvas/frame.rs2
-rw-r--r--graphics/src/widget/canvas/path.rs17
-rw-r--r--graphics/src/widget/canvas/stroke.rs27
3 files changed, 23 insertions, 23 deletions
diff --git a/graphics/src/widget/canvas/frame.rs b/graphics/src/widget/canvas/frame.rs
index b98c3002..357dfa62 100644
--- a/graphics/src/widget/canvas/frame.rs
+++ b/graphics/src/widget/canvas/frame.rs
@@ -153,7 +153,7 @@ impl Frame {
/// Draws the stroke of the given [`Path`] on the [`Frame`] with the
/// provided style.
- pub fn stroke(&mut self, path: &Path, stroke: impl Into<Stroke>) {
+ pub fn stroke<'a>(&mut self, path: &Path, stroke: impl Into<Stroke<'a>>) {
let stroke = stroke.into();
let mut buffers = tessellation::BuffersBuilder::new(
diff --git a/graphics/src/widget/canvas/path.rs b/graphics/src/widget/canvas/path.rs
index bc258b67..cb7e5035 100644
--- a/graphics/src/widget/canvas/path.rs
+++ b/graphics/src/widget/canvas/path.rs
@@ -71,15 +71,11 @@ impl Path {
}
}
-pub(super) fn dashed(path: &Path, line_dash: LineDash) -> Path {
+pub(super) fn dashed(path: &Path, line_dash: LineDash<'_>) -> Path {
Path::new(|builder| {
- let segments_odd = line_dash.segments.len() % 2 == 1;
-
- let segments = segments_odd
- .then(|| {
- [&line_dash.segments[..], &line_dash.segments[..]].concat()
- })
- .unwrap_or(line_dash.segments);
+ let segments_odd = (line_dash.segments.len() % 2 == 1).then(|| {
+ [&line_dash.segments[..], &line_dash.segments[..]].concat()
+ });
let mut draw_line = false;
@@ -106,7 +102,10 @@ pub(super) fn dashed(path: &Path, line_dash: LineDash) -> Path {
true
},
index: line_dash.offset,
- intervals: &segments,
+ intervals: segments_odd
+ .as_ref()
+ .map(Vec::as_slice)
+ .unwrap_or(line_dash.segments),
},
);
})
diff --git a/graphics/src/widget/canvas/stroke.rs b/graphics/src/widget/canvas/stroke.rs
index 5c20405e..6accc2fb 100644
--- a/graphics/src/widget/canvas/stroke.rs
+++ b/graphics/src/widget/canvas/stroke.rs
@@ -1,8 +1,8 @@
use iced_native::Color;
/// The style of a stroke.
-#[derive(Debug, Clone)]
-pub struct Stroke {
+#[derive(Debug, Clone, Copy)]
+pub struct Stroke<'a> {
/// The color of the stroke.
pub color: Color,
/// The distance between the two edges of the stroke.
@@ -13,33 +13,33 @@ pub struct Stroke {
/// are stroked.
pub line_join: LineJoin,
/// The dash pattern used when stroking the line.
- pub line_dash: LineDash,
+ pub line_dash: LineDash<'a>,
}
-impl Stroke {
+impl<'a> Stroke<'a> {
/// Sets the color of the [`Stroke`].
- pub fn with_color(self, color: Color) -> Stroke {
+ pub fn with_color(self, color: Color) -> Self {
Stroke { color, ..self }
}
/// Sets the width of the [`Stroke`].
- pub fn with_width(self, width: f32) -> Stroke {
+ pub fn with_width(self, width: f32) -> Self {
Stroke { width, ..self }
}
/// Sets the [`LineCap`] of the [`Stroke`].
- pub fn with_line_cap(self, line_cap: LineCap) -> Stroke {
+ pub fn with_line_cap(self, line_cap: LineCap) -> Self {
Stroke { line_cap, ..self }
}
/// Sets the [`LineJoin`] of the [`Stroke`].
- pub fn with_line_join(self, line_join: LineJoin) -> Stroke {
+ pub fn with_line_join(self, line_join: LineJoin) -> Self {
Stroke { line_join, ..self }
}
}
-impl Default for Stroke {
- fn default() -> Stroke {
+impl<'a> Default for Stroke<'a> {
+ fn default() -> Self {
Stroke {
color: Color::BLACK,
width: 1.0,
@@ -108,10 +108,11 @@ impl From<LineJoin> for lyon::tessellation::LineJoin {
}
/// The dash pattern used when stroking the line.
-#[derive(Debug, Clone, Default)]
-pub struct LineDash {
+#[derive(Debug, Clone, Copy, Default)]
+pub struct LineDash<'a> {
/// The alternating lengths of lines and gaps which describe the pattern.
- pub segments: Vec<f32>,
+ pub segments: &'a [f32],
+
/// The offset of [`LineDash::segments`] to start the pattern.
pub offset: usize,
}