mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-12 05:27:07 +00:00
Hook up mouse_down function handler
Co-authored-by: Antonio <antonio@zed.dev>
This commit is contained in:
parent
e30449e61a
commit
dd20032eab
1 changed files with 62 additions and 59 deletions
|
@ -8,8 +8,8 @@ use crate::{
|
|||
},
|
||||
scroll::scroll_amount::ScrollAmount,
|
||||
CursorShape, DisplayPoint, Editor, EditorMode, EditorSettings, EditorSnapshot, EditorStyle,
|
||||
HalfPageDown, HalfPageUp, LineDown, LineUp, MoveDown, PageDown, PageUp, Point, Selection,
|
||||
SoftWrap, ToPoint, MAX_LINE_LEN,
|
||||
HalfPageDown, HalfPageUp, LineDown, LineUp, MoveDown, PageDown, PageUp, Point, SelectPhase,
|
||||
Selection, SoftWrap, ToPoint, MAX_LINE_LEN,
|
||||
};
|
||||
use anyhow::Result;
|
||||
use collections::{BTreeMap, HashMap};
|
||||
|
@ -17,8 +17,8 @@ use gpui::{
|
|||
black, hsla, point, px, relative, size, transparent_black, Action, AnyElement,
|
||||
BorrowAppContext, BorrowWindow, Bounds, ContentMask, Corners, DispatchContext, DispatchPhase,
|
||||
Edges, Element, ElementId, Entity, Hsla, KeyDownEvent, KeyListener, KeyMatch, Line, Modifiers,
|
||||
MouseMoveEvent, Pixels, ScrollWheelEvent, ShapedGlyph, Size, StatefulInteraction, Style,
|
||||
TextRun, TextStyle, TextSystem, ViewContext, WindowContext,
|
||||
MouseDownEvent, MouseMoveEvent, Pixels, ScrollWheelEvent, ShapedGlyph, Size,
|
||||
StatefulInteraction, Style, TextRun, TextStyle, TextSystem, ViewContext, WindowContext,
|
||||
};
|
||||
use itertools::Itertools;
|
||||
use language::language_settings::ShowWhitespaceSetting;
|
||||
|
@ -242,63 +242,54 @@ impl EditorElement {
|
|||
// )
|
||||
// }
|
||||
|
||||
// fn mouse_down(
|
||||
// editor: &mut Editor,
|
||||
// MouseButtonEvent {
|
||||
// position,
|
||||
// modifiers:
|
||||
// Modifiers {
|
||||
// shift,
|
||||
// ctrl,
|
||||
// alt,
|
||||
// cmd,
|
||||
// ..
|
||||
// },
|
||||
// mut click_count,
|
||||
// ..
|
||||
// }: MouseButtonEvent,
|
||||
// position_map: &PositionMap,
|
||||
// text_bounds: Bounds<Pixels>,
|
||||
// gutter_bounds: Bounds<Pixels>,
|
||||
// cx: &mut EventContext<Editor>,
|
||||
// ) -> bool {
|
||||
// if gutter_bounds.contains_point(position) {
|
||||
// click_count = 3; // Simulate triple-click when clicking the gutter to select lines
|
||||
// } else if !text_bounds.contains_point(position) {
|
||||
// return false;
|
||||
// }
|
||||
fn mouse_down(
|
||||
editor: &mut Editor,
|
||||
event: &MouseDownEvent,
|
||||
position_map: &PositionMap,
|
||||
text_bounds: Bounds<Pixels>,
|
||||
gutter_bounds: Bounds<Pixels>,
|
||||
cx: &mut ViewContext<Editor>,
|
||||
) -> bool {
|
||||
let mut click_count = event.click_count;
|
||||
let modifiers = event.modifiers;
|
||||
|
||||
// let point_for_position = position_map.point_for_position(text_bounds, position);
|
||||
// let position = point_for_position.previous_valid;
|
||||
// if shift && alt {
|
||||
// editor.select(
|
||||
// SelectPhase::BeginColumnar {
|
||||
// position,
|
||||
// goal_column: point_for_position.exact_unclipped.column(),
|
||||
// },
|
||||
// cx,
|
||||
// );
|
||||
// } else if shift && !ctrl && !alt && !cmd {
|
||||
// editor.select(
|
||||
// SelectPhase::Extend {
|
||||
// position,
|
||||
// click_count,
|
||||
// },
|
||||
// cx,
|
||||
// );
|
||||
// } else {
|
||||
// editor.select(
|
||||
// SelectPhase::Begin {
|
||||
// position,
|
||||
// add: alt,
|
||||
// click_count,
|
||||
// },
|
||||
// cx,
|
||||
// );
|
||||
// }
|
||||
if gutter_bounds.contains_point(&event.position) {
|
||||
click_count = 3; // Simulate triple-click when clicking the gutter to select lines
|
||||
} else if !text_bounds.contains_point(&event.position) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// true
|
||||
// }
|
||||
let point_for_position = position_map.point_for_position(text_bounds, event.position);
|
||||
let position = point_for_position.previous_valid;
|
||||
if modifiers.shift && modifiers.alt {
|
||||
editor.select(
|
||||
SelectPhase::BeginColumnar {
|
||||
position,
|
||||
goal_column: point_for_position.exact_unclipped.column(),
|
||||
},
|
||||
cx,
|
||||
);
|
||||
} else if modifiers.shift && !modifiers.control && !modifiers.alt && !modifiers.command {
|
||||
editor.select(
|
||||
SelectPhase::Extend {
|
||||
position,
|
||||
click_count,
|
||||
},
|
||||
cx,
|
||||
);
|
||||
} else {
|
||||
editor.select(
|
||||
SelectPhase::Begin {
|
||||
position,
|
||||
add: modifiers.alt,
|
||||
click_count,
|
||||
},
|
||||
cx,
|
||||
);
|
||||
}
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
// fn mouse_right_down(
|
||||
// editor: &mut Editor,
|
||||
|
@ -2796,6 +2787,18 @@ impl Element<Editor> for EditorElement {
|
|||
}
|
||||
}
|
||||
});
|
||||
cx.on_mouse_event({
|
||||
let position_map = layout.position_map.clone();
|
||||
move |editor, event: &MouseDownEvent, phase, cx| {
|
||||
if phase != DispatchPhase::Bubble {
|
||||
return;
|
||||
}
|
||||
|
||||
if Self::mouse_down(editor, event, &position_map, text_bounds, gutter_bounds, cx) {
|
||||
cx.stop_propagation()
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if editor.focus_handle.is_focused(cx) {
|
||||
cx.handle_text_input();
|
||||
|
|
Loading…
Reference in a new issue