summaryrefslogtreecommitdiffstats
path: root/examples/bezier_tool
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-03-21 22:27:17 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-03-21 22:27:17 +0100
commit3645d34d6a1ba1247238e830e9eefd52d9e5b986 (patch)
tree2d38961161df0a85c1667474b2b696aab86b7160 /examples/bezier_tool
parent7e4ae8450e1f28c15717ca5ca9748981af9c9541 (diff)
downloadiced-3645d34d6a1ba1247238e830e9eefd52d9e5b986.tar.gz
iced-3645d34d6a1ba1247238e830e9eefd52d9e5b986.tar.bz2
iced-3645d34d6a1ba1247238e830e9eefd52d9e5b986.zip
Implement composable, type-safe renderer fallback
Diffstat (limited to 'examples/bezier_tool')
-rw-r--r--examples/bezier_tool/src/main.rs33
1 files changed, 14 insertions, 19 deletions
diff --git a/examples/bezier_tool/src/main.rs b/examples/bezier_tool/src/main.rs
index cf70bd40..e51f2a31 100644
--- a/examples/bezier_tool/src/main.rs
+++ b/examples/bezier_tool/src/main.rs
@@ -52,7 +52,7 @@ impl Example {
mod bezier {
use iced::mouse;
use iced::widget::canvas::event::{self, Event};
- use iced::widget::canvas::{self, Canvas, Frame, Geometry, Path, Stroke};
+ use iced::widget::canvas::{self, frame, Canvas, Frame, Path, Stroke};
use iced::{Element, Length, Point, Rectangle, Renderer, Theme};
#[derive(Default)]
@@ -138,30 +138,25 @@ mod bezier {
fn draw(
&self,
state: &Self::State,
- renderer: &Renderer,
+ renderer: &mut Renderer,
_theme: &Theme,
bounds: Rectangle,
cursor: mouse::Cursor,
- ) -> Vec<Geometry> {
- let content = self.state.cache.draw(
- renderer,
- bounds.size(),
- |frame: &mut Frame| {
+ ) {
+ let content =
+ self.state.cache.draw(renderer, bounds.size(), |frame| {
Curve::draw_all(self.curves, frame);
frame.stroke(
&Path::rectangle(Point::ORIGIN, frame.size()),
Stroke::default().with_width(2.0),
);
- },
- );
+ });
- if let Some(pending) = state {
- let pending_curve = pending.draw(renderer, bounds, cursor);
+ renderer.draw_geometry([content]);
- vec![content, pending_curve]
- } else {
- vec![content]
+ if let Some(pending) = state {
+ pending.draw(renderer, bounds, cursor);
}
}
@@ -187,7 +182,7 @@ mod bezier {
}
impl Curve {
- fn draw_all(curves: &[Curve], frame: &mut Frame) {
+ fn draw_all(curves: &[Curve], frame: &mut impl Frame) {
let curves = Path::new(|p| {
for curve in curves {
p.move_to(curve.from);
@@ -208,11 +203,11 @@ mod bezier {
impl Pending {
fn draw(
&self,
- renderer: &Renderer,
+ renderer: &mut Renderer,
bounds: Rectangle,
cursor: mouse::Cursor,
- ) -> Geometry {
- let mut frame = Frame::new(renderer, bounds.size());
+ ) {
+ let mut frame = frame(renderer, bounds.size());
if let Some(cursor_position) = cursor.position_in(bounds) {
match *self {
@@ -232,7 +227,7 @@ mod bezier {
};
}
- frame.into_geometry()
+ renderer.draw_geometry([frame]);
}
}
}