summaryrefslogtreecommitdiffstats
path: root/examples/bezier_tool
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-10-28 16:58:00 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-11-05 23:52:58 +0100
commit920596ed6f44acf8d87d2135c1b8967bab23d5b9 (patch)
treeca3f673c01bf9abba79f6b5f172df189788d50de /examples/bezier_tool
parenta84b328dcc3e2f941f9595a2f8c3b1d061442722 (diff)
downloadiced-920596ed6f44acf8d87d2135c1b8967bab23d5b9.tar.gz
iced-920596ed6f44acf8d87d2135c1b8967bab23d5b9.tar.bz2
iced-920596ed6f44acf8d87d2135c1b8967bab23d5b9.zip
Implement `reactive-rendering` for `canvas`
Diffstat (limited to 'examples/bezier_tool')
-rw-r--r--examples/bezier_tool/src/main.rs78
1 files changed, 39 insertions, 39 deletions
diff --git a/examples/bezier_tool/src/main.rs b/examples/bezier_tool/src/main.rs
index 949bfad7..5e4da0c2 100644
--- a/examples/bezier_tool/src/main.rs
+++ b/examples/bezier_tool/src/main.rs
@@ -57,8 +57,9 @@ 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, Canvas, Event, Frame, Geometry, Path, Stroke,
+ };
use iced::{Element, Fill, Point, Rectangle, Renderer, Theme};
#[derive(Default)]
@@ -96,48 +97,47 @@ mod bezier {
event: Event,
bounds: Rectangle,
cursor: mouse::Cursor,
- ) -> (event::Status, Option<Curve>) {
- let Some(cursor_position) = cursor.position_in(bounds) else {
- return (event::Status::Ignored, None);
- };
+ ) -> Option<canvas::Action<Curve>> {
+ let cursor_position = cursor.position_in(bounds)?;
match event {
- Event::Mouse(mouse_event) => {
- let message = match mouse_event {
- mouse::Event::ButtonPressed(mouse::Button::Left) => {
- match *state {
- None => {
- *state = Some(Pending::One {
- from: cursor_position,
- });
-
- None
- }
- Some(Pending::One { from }) => {
- *state = Some(Pending::Two {
- from,
- to: cursor_position,
- });
-
- None
- }
- Some(Pending::Two { from, to }) => {
- *state = None;
-
- Some(Curve {
- from,
- to,
- control: cursor_position,
- })
- }
- }
+ Event::Mouse(mouse::Event::ButtonPressed(
+ mouse::Button::Left,
+ )) => Some(
+ match *state {
+ None => {
+ *state = Some(Pending::One {
+ from: cursor_position,
+ });
+
+ canvas::Action::request_redraw()
}
- _ => None,
- };
+ Some(Pending::One { from }) => {
+ *state = Some(Pending::Two {
+ from,
+ to: cursor_position,
+ });
- (event::Status::Captured, message)
+ canvas::Action::request_redraw()
+ }
+ Some(Pending::Two { from, to }) => {
+ *state = None;
+
+ canvas::Action::publish(Curve {
+ from,
+ to,
+ control: cursor_position,
+ })
+ }
+ }
+ .and_capture(),
+ ),
+ Event::Mouse(mouse::Event::CursorMoved { .. })
+ if state.is_some() =>
+ {
+ Some(canvas::Action::request_redraw())
}
- _ => (event::Status::Ignored, None),
+ _ => None,
}
}