Update to druid's pointer events branch #41

Open
enrico wants to merge 11 commits from pointer_events into master
2 changed files with 23 additions and 40 deletions
Showing only changes of commit bcfc5a55ad - Show all commits

View File

@ -154,44 +154,27 @@ impl Widget<CanvasState> for CanvasWidget {
viewport_transform = Some(Affine::translate((-30.0, 0.0))); viewport_transform = Some(Affine::translate((-30.0, 0.0)));
} }
} }
Event::MouseDown(mouse_event) => { Event::PointerDown(pointer_event) => {
toggle_eraser_event = true; toggle_eraser_event = true;
enable_temporary_erasing = false; //mouse_event.pointer_type == PointerType::Eraser; enable_temporary_erasing = false; //pointer_event.pointer_type == PointerType::Eraser;
} }
Event::MouseMove(mouse_event) => { Event::PointerMove(pointer_event) => {
toggle_eraser_event = true; toggle_eraser_event = true;
enable_temporary_erasing = false; //mouse_event.pointer_type == PointerType::Eraser; enable_temporary_erasing = false; //pointer_event.pointer_type == PointerType::Eraser;
} }
Event::MouseUp(mouse_event) => { Event::PointerUp(pointer_event) => {
toggle_eraser_event = true; toggle_eraser_event = true;
enable_temporary_erasing = false; //mouse_event.pointer_type == PointerType::Eraser; enable_temporary_erasing = false; //pointer_event.pointer_type == PointerType::Eraser;
} }
Event::Wheel(mouse) => { Event::Wheel(pointer) => {
let transform = self.widget_to_viewport(); let transform = self.widget_to_viewport();
viewport_transform = Some( viewport_transform = Some(
Affine::translate( Affine::translate(
(mouse.wheel_delta.to_point()).to_vec2() (pointer.wheel_delta.to_point()).to_vec2()
)
);
}
Event::GestureZoom { zoom, center } => {
let transform = self.widget_to_viewport();
let diff = (transform * *center).to_vec2()
- self.viewport.rect.center().to_vec2();
viewport_transform = Some(
Affine::scale(1.0/(1.0 + zoom))
);
log::debug!("{:#?}", viewport_transform);
}
Event::GesturePan(vec2) => {
let transform = self.widget_to_viewport();
viewport_transform = Some(
Affine::translate(
(vec2.to_point()).to_vec2()
) )
); );
} }
_ => {} _ => {}
} }
// TODO: the first eraser toggle is not handled // TODO: the first eraser toggle is not handled

View File

@ -19,7 +19,7 @@ use crate::canvas::{Canvas, CanvasElement};
use crate::history::VersionedCanvas; use crate::history::VersionedCanvas;
use druid::kurbo::BezPath; use druid::kurbo::BezPath;
use druid::{Affine, Data, Env, Event, EventCtx, MouseButton, MouseEvent, PaintCtx}; use druid::{Affine, Data, Env, Event, EventCtx, PointerButton, PointerEvent, PaintCtx};
#[derive(Clone, Data)] #[derive(Clone, Data)]
pub enum CanvasToolState { pub enum CanvasToolState {
@ -46,9 +46,9 @@ impl CanvasToolParams {
} }
} }
fn pressed(mouse_event: &MouseEvent) -> bool { fn pressed(pointer_event: &PointerEvent) -> bool {
mouse_event.buttons.contains(MouseButton::Left) pointer_event.buttons.contains(PointerButton::Left)
|| mouse_event.button == MouseButton::Left || pointer_event.button == PointerButton::Left
} }
impl CanvasToolCtx { impl CanvasToolCtx {
@ -82,13 +82,13 @@ impl CanvasToolCtx {
_env: &Env, _env: &Env,
) { ) {
match (&mut self.state, event) { match (&mut self.state, event) {
(CanvasToolState::Idle, Event::MouseDown(mouse_event)) if pressed(mouse_event) => { (CanvasToolState::Idle, Event::PointerDown(pointer_event)) if pressed(pointer_event) => {
self.state = CanvasToolState::Erasing; self.state = CanvasToolState::Erasing;
ctx.set_handled(); ctx.set_handled();
} }
(CanvasToolState::Erasing, Event::MouseMove(mouse_event)) if pressed(mouse_event) => { (CanvasToolState::Erasing, Event::PointerMove(pointer_event)) if pressed(pointer_event) => {
let eraser_rect = let eraser_rect =
druid::Rect::from_center_size(transform * mouse_event.pos, (5.0, 5.0)); druid::Rect::from_center_size(transform * pointer_event.pos, (5.0, 5.0));
let old_elements = vcanvas.get().elements(); let old_elements = vcanvas.get().elements();
let mut new_elements = old_elements.clone(); let mut new_elements = old_elements.clone();
new_elements.retain(|elem| { new_elements.retain(|elem| {
@ -107,7 +107,7 @@ impl CanvasToolCtx {
} }
ctx.set_handled(); ctx.set_handled();
} }
(CanvasToolState::Erasing, Event::MouseUp(mouse_event)) if pressed(mouse_event) => { (CanvasToolState::Erasing, Event::PointerUp(pointer_event)) if pressed(pointer_event) => {
self.state = CanvasToolState::Idle; self.state = CanvasToolState::Idle;
ctx.set_handled(); ctx.set_handled();
} }
@ -124,9 +124,9 @@ impl CanvasToolCtx {
_env: &Env, _env: &Env,
) { ) {
match (&mut self.state, event) { match (&mut self.state, event) {
(CanvasToolState::Idle, Event::MouseDown(mouse_event)) if pressed(mouse_event) => { (CanvasToolState::Idle, Event::PointerDown(pointer_event)) if pressed(pointer_event) => {
let mut kurbo_path = BezPath::new(); let mut kurbo_path = BezPath::new();
kurbo_path.move_to((mouse_event.pos.x, mouse_event.pos.y)); kurbo_path.move_to((pointer_event.pos.x, pointer_event.pos.y));
if let CanvasToolParams::Pen { thickness, color } = &self.initial_params { if let CanvasToolParams::Pen { thickness, color } = &self.initial_params {
self.state = CanvasToolState::DrawingFreehand { self.state = CanvasToolState::DrawingFreehand {
pen_params: self.initial_params.clone(), pen_params: self.initial_params.clone(),
@ -144,15 +144,15 @@ impl CanvasToolCtx {
ref mut current_path, ref mut current_path,
.. ..
}, },
Event::MouseMove(mouse_event), Event::PointerMove(pointer_event),
) => if pressed(mouse_event) { ) => if pressed(pointer_event) {
if let CanvasElement::Freehand { ref mut path, .. } = current_path { if let CanvasElement::Freehand { ref mut path, .. } = current_path {
path.kurbo_path path.kurbo_path
.line_to((mouse_event.pos.x, mouse_event.pos.y)); .line_to((pointer_event.pos.x, pointer_event.pos.y));
} }
ctx.set_handled(); ctx.set_handled();
} }
(CanvasToolState::DrawingFreehand { .. }, Event::MouseUp(mouse_event)) if pressed(mouse_event) => { (CanvasToolState::DrawingFreehand { .. }, Event::PointerUp(pointer_event)) if pressed(pointer_event) => {
vcanvas.update(move |canvas: &mut Canvas| { vcanvas.update(move |canvas: &mut Canvas| {
let current_state = std::mem::replace(&mut self.state, CanvasToolState::Idle); let current_state = std::mem::replace(&mut self.state, CanvasToolState::Idle);
if let CanvasToolState::DrawingFreehand { current_path, .. } = current_state { if let CanvasToolState::DrawingFreehand { current_path, .. } = current_state {