mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-17 23:56:55 +00:00
Fix drag events
This commit is contained in:
parent
fd34d1da31
commit
0ee61e214d
1 changed files with 30 additions and 10 deletions
|
@ -696,11 +696,11 @@ impl SplitDirection {
|
|||
|
||||
mod element {
|
||||
|
||||
use std::{iter, sync::Arc};
|
||||
use std::{cell::RefCell, iter, rc::Rc, sync::Arc};
|
||||
|
||||
use gpui::{
|
||||
px, relative, Along, AnyElement, Axis, Bounds, CursorStyle, Element, IntoElement,
|
||||
MouseMoveEvent, ParentElement, Pixels, Style, WindowContext,
|
||||
MouseDownEvent, MouseMoveEvent, MouseUpEvent, ParentElement, Pixels, Style, WindowContext,
|
||||
};
|
||||
use parking_lot::Mutex;
|
||||
use smallvec::SmallVec;
|
||||
|
@ -789,13 +789,11 @@ mod element {
|
|||
}
|
||||
});
|
||||
|
||||
while dbg!(proposed_current_pixel_change).abs() > px(0.) {
|
||||
while proposed_current_pixel_change.abs() > px(0.) {
|
||||
let Some(current_ix) = successors.next() else {
|
||||
break;
|
||||
};
|
||||
|
||||
dbg!(current_ix);
|
||||
|
||||
let next_target_size = Pixels::max(
|
||||
size(current_ix + 1, flexes.as_slice()) - proposed_current_pixel_change,
|
||||
min_size,
|
||||
|
@ -826,6 +824,7 @@ mod element {
|
|||
|
||||
fn push_handle(
|
||||
flexes: Arc<Mutex<Vec<f32>>>,
|
||||
dragged_handle: Rc<RefCell<Option<usize>>>,
|
||||
axis: Axis,
|
||||
ix: usize,
|
||||
pane_bounds: Bounds<Pixels>,
|
||||
|
@ -859,8 +858,17 @@ mod element {
|
|||
gpui::red(),
|
||||
);
|
||||
|
||||
cx.on_mouse_event({
|
||||
let dragged_handle = dragged_handle.clone();
|
||||
move |e: &MouseDownEvent, phase, cx| {
|
||||
if phase.bubble() && handle_bounds.contains(&e.position) {
|
||||
dragged_handle.replace(Some(ix));
|
||||
}
|
||||
}
|
||||
});
|
||||
cx.on_mouse_event(move |e: &MouseMoveEvent, phase, cx| {
|
||||
if phase.bubble() && e.dragging() && handle_bounds.contains(&e.position) {
|
||||
let dragged_handle = dragged_handle.borrow();
|
||||
if *dragged_handle == Some(ix) {
|
||||
Self::compute_resize(&flexes, e, ix, axis, axis_bounds, cx)
|
||||
}
|
||||
});
|
||||
|
@ -872,7 +880,7 @@ mod element {
|
|||
type Element = Self;
|
||||
|
||||
fn element_id(&self) -> Option<ui::prelude::ElementId> {
|
||||
Some("pane axis".into())
|
||||
Some(self.basis.into())
|
||||
}
|
||||
|
||||
fn into_element(self) -> Self::Element {
|
||||
|
@ -881,7 +889,7 @@ mod element {
|
|||
}
|
||||
|
||||
impl Element for PaneAxisElement {
|
||||
type State = ();
|
||||
type State = Rc<RefCell<Option<usize>>>;
|
||||
|
||||
fn layout(
|
||||
&mut self,
|
||||
|
@ -892,8 +900,8 @@ mod element {
|
|||
style.size.width = relative(1.).into();
|
||||
style.size.height = relative(1.).into();
|
||||
let layout_id = cx.request_layout(&style, None);
|
||||
|
||||
(layout_id, ())
|
||||
let dragged_pane = state.unwrap_or_else(|| Rc::new(RefCell::new(None)));
|
||||
(layout_id, dragged_pane)
|
||||
}
|
||||
|
||||
fn paint(
|
||||
|
@ -934,6 +942,7 @@ mod element {
|
|||
if ix < len - 1 {
|
||||
Self::push_handle(
|
||||
self.flexes.clone(),
|
||||
state.clone(),
|
||||
self.axis,
|
||||
ix,
|
||||
child_bounds,
|
||||
|
@ -945,6 +954,17 @@ mod element {
|
|||
|
||||
origin = origin.apply_along(self.axis, |val| val + child_size.along(self.axis));
|
||||
}
|
||||
|
||||
cx.with_z_index(1, |cx| {
|
||||
cx.on_mouse_event({
|
||||
let state = state.clone();
|
||||
move |e: &MouseUpEvent, phase, cx| {
|
||||
if phase.bubble() {
|
||||
state.replace(None);
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue