From 53add253b604cd75ab1574a891d6b31e66b2233d Mon Sep 17 00:00:00 2001 From: K Simmons Date: Thu, 21 Jul 2022 22:23:56 -0700 Subject: [PATCH] wip new mouse region events --- crates/gpui/src/scene/mouse_region.rs | 17 +++++++++++++++++ crates/workspace/src/pane.rs | 13 +++++++++++++ 2 files changed, 30 insertions(+) diff --git a/crates/gpui/src/scene/mouse_region.rs b/crates/gpui/src/scene/mouse_region.rs index 704567450a..01bb9fde69 100644 --- a/crates/gpui/src/scene/mouse_region.rs +++ b/crates/gpui/src/scene/mouse_region.rs @@ -273,10 +273,12 @@ impl HandlerSet { pub enum MouseRegionEvent { Move(MouseMovedEvent), Drag(Vector2F, MouseMovedEvent), + DragOver(Vector2F, MouseMovedEvent), Hover(bool, MouseMovedEvent), Down(MouseButtonEvent), Up(MouseButtonEvent), Click(MouseButtonEvent), + UpOut(MouseButtonEvent), DownOut(MouseButtonEvent), ScrollWheel(ScrollWheelEvent), } @@ -291,6 +293,12 @@ impl MouseRegionEvent { Default::default(), )) } + pub fn drag_over_disc() -> Discriminant { + std::mem::discriminant(&MouseRegionEvent::DragOver( + Default::default(), + Default::default(), + )) + } pub fn hover_disc() -> Discriminant { std::mem::discriminant(&MouseRegionEvent::Hover( Default::default(), @@ -303,6 +311,9 @@ impl MouseRegionEvent { pub fn up_disc() -> Discriminant { std::mem::discriminant(&MouseRegionEvent::Up(Default::default())) } + pub fn up_out_disc() -> Discriminant { + std::mem::discriminant(&MouseRegionEvent::UpOut(Default::default())) + } pub fn click_disc() -> Discriminant { std::mem::discriminant(&MouseRegionEvent::Click(Default::default())) } @@ -319,6 +330,9 @@ impl MouseRegionEvent { MouseRegionEvent::Drag(_, MouseMovedEvent { pressed_button, .. }) => { (Self::drag_disc(), *pressed_button) } + MouseRegionEvent::DragOver(_, MouseMovedEvent { pressed_button, .. }) => { + (Self::drag_over_disc(), *pressed_button) + } MouseRegionEvent::Hover(_, _) => (Self::hover_disc(), None), MouseRegionEvent::Down(MouseButtonEvent { button, .. }) => { (Self::down_disc(), Some(*button)) @@ -329,6 +343,9 @@ impl MouseRegionEvent { MouseRegionEvent::Click(MouseButtonEvent { button, .. }) => { (Self::click_disc(), Some(*button)) } + MouseRegionEvent::UpOut(MouseButtonEvent { button, .. }) => { + (Self::up_out_disc(), Some(*button)) + } MouseRegionEvent::DownOut(MouseButtonEvent { button, .. }) => { (Self::down_out_disc(), Some(*button)) } diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index 34108eef5e..eb21c2ac83 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -1022,6 +1022,19 @@ impl Pane { cx.dispatch_action(ActivateItem(ix)); }) .on_click(MouseButton::Middle, close_tab_callback) + .on_drag(MouseButton::Left, |_, cx| { + cx.global::().dragging(some view handle) + }) + .on_mouse_up_out(MouseButton::Left, |_, cx| { + cx.global::().stopped_dragging(some view handle) + }) + .on_drag_over(MouseButton::Left, |started, _, cx| { + if started { + if let Some(tab) = cx.global::().current_dragged::() { + cx.dispatch_action(ReceivingTab) + } + } + }) .boxed() }) }