Uncomment mouse_dragged event
Co-authored-by: Antonio <antonio@zed.dev>
This commit is contained in:
parent
1b085bd618
commit
e5f78ec122
1 changed files with 50 additions and 93 deletions
|
@ -17,7 +17,7 @@ use gpui::{
|
||||||
black, hsla, point, px, relative, size, transparent_black, Action, AnyElement,
|
black, hsla, point, px, relative, size, transparent_black, Action, AnyElement,
|
||||||
BorrowAppContext, BorrowWindow, Bounds, ContentMask, Corners, DispatchContext, DispatchPhase,
|
BorrowAppContext, BorrowWindow, Bounds, ContentMask, Corners, DispatchContext, DispatchPhase,
|
||||||
Edges, Element, ElementId, Entity, Hsla, KeyDownEvent, KeyListener, KeyMatch, Line, Modifiers,
|
Edges, Element, ElementId, Entity, Hsla, KeyDownEvent, KeyListener, KeyMatch, Line, Modifiers,
|
||||||
MouseDownEvent, MouseMoveEvent, Pixels, ScrollWheelEvent, ShapedGlyph, Size,
|
MouseButton, MouseDownEvent, MouseMoveEvent, Pixels, ScrollWheelEvent, ShapedGlyph, Size,
|
||||||
StatefulInteraction, Style, TextRun, TextStyle, TextSystem, ViewContext, WindowContext,
|
StatefulInteraction, Style, TextRun, TextStyle, TextSystem, ViewContext, WindowContext,
|
||||||
};
|
};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
@ -343,103 +343,60 @@ impl EditorElement {
|
||||||
// end_selection
|
// end_selection
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// fn mouse_dragged(
|
|
||||||
// editor: &mut Editor,
|
|
||||||
// MouseMovedEvent {
|
|
||||||
// modifiers: Modifiers { cmd, shift, .. },
|
|
||||||
// position,
|
|
||||||
// ..
|
|
||||||
// }: MouseMovedEvent,
|
|
||||||
// position_map: &PositionMap,
|
|
||||||
// text_bounds: Bounds<Pixels>,
|
|
||||||
// cx: &mut EventContext<Editor>,
|
|
||||||
// ) -> bool {
|
|
||||||
// // This will be handled more correctly once https://github.com/zed-industries/zed/issues/1218 is completed
|
|
||||||
// // Don't trigger hover popover if mouse is hovering over context menu
|
|
||||||
// let point = if text_bounds.contains_point(position) {
|
|
||||||
// position_map
|
|
||||||
// .point_for_position(text_bounds, position)
|
|
||||||
// .as_valid()
|
|
||||||
// } else {
|
|
||||||
// None
|
|
||||||
// };
|
|
||||||
|
|
||||||
// update_go_to_definition_link(
|
|
||||||
// editor,
|
|
||||||
// point.map(GoToDefinitionTrigger::Text),
|
|
||||||
// cmd,
|
|
||||||
// shift,
|
|
||||||
// cx,
|
|
||||||
// );
|
|
||||||
|
|
||||||
// if editor.has_pending_selection() {
|
|
||||||
// let mut scroll_delta = gpui::Point::<Pixels>::zero();
|
|
||||||
|
|
||||||
// let vertical_margin = position_map.line_height.min(text_bounds.height() / 3.0);
|
|
||||||
// let top = text_bounds.origin.y + vertical_margin;
|
|
||||||
// let bottom = text_bounds.lower_left().y - vertical_margin;
|
|
||||||
// if position.y < top {
|
|
||||||
// scroll_delta.set_y(-scale_vertical_mouse_autoscroll_delta(top - position.y))
|
|
||||||
// }
|
|
||||||
// if position.y > bottom {
|
|
||||||
// scroll_delta.set_y(scale_vertical_mouse_autoscroll_delta(position.y - bottom))
|
|
||||||
// }
|
|
||||||
|
|
||||||
// let horizontal_margin = position_map.line_height.min(text_bounds.width() / 3.0);
|
|
||||||
// let left = text_bounds.origin.x + horizontal_margin;
|
|
||||||
// let right = text_bounds.upper_right().x - horizontal_margin;
|
|
||||||
// if position.x < left {
|
|
||||||
// scroll_delta.set_x(-scale_horizontal_mouse_autoscroll_delta(
|
|
||||||
// left - position.x,
|
|
||||||
// ))
|
|
||||||
// }
|
|
||||||
// if position.x > right {
|
|
||||||
// scroll_delta.set_x(scale_horizontal_mouse_autoscroll_delta(
|
|
||||||
// position.x - right,
|
|
||||||
// ))
|
|
||||||
// }
|
|
||||||
|
|
||||||
// let point_for_position = position_map.point_for_position(text_bounds, position);
|
|
||||||
|
|
||||||
// editor.select(
|
|
||||||
// SelectPhase::Update {
|
|
||||||
// position: point_for_position.previous_valid,
|
|
||||||
// goal_column: point_for_position.exact_unclipped.column(),
|
|
||||||
// scroll_position: (position_map.snapshot.scroll_position() + scroll_delta)
|
|
||||||
// .clamp(gpui::Point::<Pixels>::zero(), position_map.scroll_max),
|
|
||||||
// },
|
|
||||||
// cx,
|
|
||||||
// );
|
|
||||||
// hover_at(editor, point, cx);
|
|
||||||
// true
|
|
||||||
// } else {
|
|
||||||
// hover_at(editor, point, cx);
|
|
||||||
// false
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
fn mouse_moved(
|
fn mouse_moved(
|
||||||
editor: &mut Editor,
|
editor: &mut Editor,
|
||||||
MouseMoveEvent {
|
event: &MouseMoveEvent,
|
||||||
modifiers: Modifiers { shift, command, .. },
|
|
||||||
position,
|
|
||||||
..
|
|
||||||
}: &MouseMoveEvent,
|
|
||||||
position_map: &PositionMap,
|
position_map: &PositionMap,
|
||||||
text_bounds: Bounds<Pixels>,
|
text_bounds: Bounds<Pixels>,
|
||||||
cx: &mut ViewContext<Editor>,
|
cx: &mut ViewContext<Editor>,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
|
let modifiers = event.modifiers;
|
||||||
|
if editor.has_pending_selection() && event.pressed_button == Some(MouseButton::Left) {
|
||||||
|
let point_for_position = position_map.point_for_position(text_bounds, event.position);
|
||||||
|
let mut scroll_delta = gpui::Point::<f32>::zero();
|
||||||
|
let vertical_margin = position_map.line_height.min(text_bounds.size.height / 3.0);
|
||||||
|
let top = text_bounds.origin.y + vertical_margin;
|
||||||
|
let bottom = text_bounds.lower_left().y - vertical_margin;
|
||||||
|
if event.position.y < top {
|
||||||
|
scroll_delta.y = -scale_vertical_mouse_autoscroll_delta(top - event.position.y);
|
||||||
|
}
|
||||||
|
if event.position.y > bottom {
|
||||||
|
scroll_delta.y = scale_vertical_mouse_autoscroll_delta(event.position.y - bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
let horizontal_margin = position_map.line_height.min(text_bounds.size.width / 3.0);
|
||||||
|
let left = text_bounds.origin.x + horizontal_margin;
|
||||||
|
let right = text_bounds.upper_right().x - horizontal_margin;
|
||||||
|
if event.position.x < left {
|
||||||
|
scroll_delta.x = -scale_horizontal_mouse_autoscroll_delta(left - event.position.x);
|
||||||
|
}
|
||||||
|
if event.position.x > right {
|
||||||
|
scroll_delta.x = scale_horizontal_mouse_autoscroll_delta(event.position.x - right);
|
||||||
|
}
|
||||||
|
|
||||||
|
editor.select(
|
||||||
|
SelectPhase::Update {
|
||||||
|
position: point_for_position.previous_valid,
|
||||||
|
goal_column: point_for_position.exact_unclipped.column(),
|
||||||
|
scroll_position: (position_map.snapshot.scroll_position() + scroll_delta)
|
||||||
|
.clamp(&gpui::Point::zero(), &position_map.scroll_max),
|
||||||
|
},
|
||||||
|
cx,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// This will be handled more correctly once https://github.com/zed-industries/zed/issues/1218 is completed
|
// This will be handled more correctly once https://github.com/zed-industries/zed/issues/1218 is completed
|
||||||
// Don't trigger hover popover if mouse is hovering over context menu
|
// Don't trigger hover popover if mouse is hovering over context menu
|
||||||
if text_bounds.contains_point(position) {
|
if text_bounds.contains_point(&event.position) {
|
||||||
let point_for_position = position_map.point_for_position(text_bounds, position.clone());
|
let point_for_position = position_map.point_for_position(text_bounds, event.position);
|
||||||
|
|
||||||
match point_for_position.as_valid() {
|
match point_for_position.as_valid() {
|
||||||
Some(point) => {
|
Some(point) => {
|
||||||
update_go_to_definition_link(
|
update_go_to_definition_link(
|
||||||
editor,
|
editor,
|
||||||
Some(GoToDefinitionTrigger::Text(point)),
|
Some(GoToDefinitionTrigger::Text(point)),
|
||||||
*command,
|
modifiers.command,
|
||||||
*shift,
|
modifiers.shift,
|
||||||
cx,
|
cx,
|
||||||
);
|
);
|
||||||
hover_at(editor, Some(point), cx);
|
hover_at(editor, Some(point), cx);
|
||||||
|
@ -449,14 +406,14 @@ impl EditorElement {
|
||||||
&position_map.snapshot,
|
&position_map.snapshot,
|
||||||
point_for_position,
|
point_for_position,
|
||||||
editor,
|
editor,
|
||||||
*command,
|
modifiers.command,
|
||||||
*shift,
|
modifiers.shift,
|
||||||
cx,
|
cx,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
update_go_to_definition_link(editor, None, *command, *shift, cx);
|
update_go_to_definition_link(editor, None, modifiers.command, modifiers.shift, cx);
|
||||||
hover_at(editor, None, cx);
|
hover_at(editor, None, cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2339,8 +2296,8 @@ impl EditorElement {
|
||||||
fn paint_mouse_listeners(
|
fn paint_mouse_listeners(
|
||||||
&mut self,
|
&mut self,
|
||||||
bounds: Bounds<Pixels>,
|
bounds: Bounds<Pixels>,
|
||||||
text_bounds: Bounds<Pixels>,
|
|
||||||
gutter_bounds: Bounds<Pixels>,
|
gutter_bounds: Bounds<Pixels>,
|
||||||
|
text_bounds: Bounds<Pixels>,
|
||||||
position_map: &Arc<PositionMap>,
|
position_map: &Arc<PositionMap>,
|
||||||
cx: &mut ViewContext<Editor>,
|
cx: &mut ViewContext<Editor>,
|
||||||
) {
|
) {
|
||||||
|
@ -3849,12 +3806,12 @@ impl HighlightedRange {
|
||||||
// bounds.into_iter()
|
// bounds.into_iter()
|
||||||
// }
|
// }
|
||||||
|
|
||||||
pub fn scale_vertical_mouse_autoscroll_delta(delta: f32) -> f32 {
|
pub fn scale_vertical_mouse_autoscroll_delta(delta: Pixels) -> f32 {
|
||||||
delta.powf(1.5) / 100.0
|
(delta.pow(1.5) / 100.0).into()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn scale_horizontal_mouse_autoscroll_delta(delta: f32) -> f32 {
|
fn scale_horizontal_mouse_autoscroll_delta(delta: Pixels) -> f32 {
|
||||||
delta.powf(1.2) / 300.0
|
(delta.pow(1.2) / 300.0).into()
|
||||||
}
|
}
|
||||||
|
|
||||||
// #[cfg(test)]
|
// #[cfg(test)]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue