Display crosshair cursor in bezier_tool example

This commit is contained in:
Héctor Ramón Jiménez 2020-04-29 03:23:27 +02:00
parent 475a2779a7
commit 5586034d66

View file

@ -70,7 +70,8 @@ impl Sandbox for Example {
mod bezier { mod bezier {
use iced::{ use iced::{
canvas::{self, Canvas, Event, Frame, Geometry, Path, Stroke}, canvas::{self, Canvas, Event, Frame, Geometry, Path, Stroke},
mouse, ButtonState, Element, Length, Point, Rectangle, Size, mouse, ButtonState, Element, Length, MouseCursor, Point, Rectangle,
Size,
}; };
#[derive(Default)] #[derive(Default)]
@ -106,8 +107,6 @@ mod bezier {
impl<'a> canvas::Program<Curve> for Bezier<'a> { impl<'a> canvas::Program<Curve> for Bezier<'a> {
fn update(&mut self, event: Event, bounds: Size) -> Option<Curve> { fn update(&mut self, event: Event, bounds: Size) -> Option<Curve> {
let bounds = Rectangle::new(Point::ORIGIN, bounds);
match event { match event {
Event::Mouse(mouse_event) => match mouse_event { Event::Mouse(mouse_event) => match mouse_event {
mouse::Event::CursorMoved { x, y } => { mouse::Event::CursorMoved { x, y } => {
@ -118,7 +117,9 @@ mod bezier {
mouse::Event::Input { mouse::Event::Input {
button: mouse::Button::Left, button: mouse::Button::Left,
state: ButtonState::Pressed, state: ButtonState::Pressed,
} if bounds.contains(self.state.cursor_position) => { } if Rectangle::with_size(bounds)
.contains(self.state.cursor_position) =>
{
match self.state.pending { match self.state.pending {
None => { None => {
self.state.pending = Some(Pending::One { self.state.pending = Some(Pending::One {
@ -169,6 +170,15 @@ mod bezier {
vec![content] vec![content]
} }
} }
fn mouse_cursor(&self, bounds: Size) -> MouseCursor {
if Rectangle::with_size(bounds).contains(self.state.cursor_position)
{
MouseCursor::Crosshair
} else {
MouseCursor::default()
}
}
} }
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]