Make the edit predictions popover avoid overlapping the cursor (#23860)
Release Notes: - N/A
This commit is contained in:
parent
bd21334013
commit
943d46c465
1 changed files with 30 additions and 7 deletions
|
@ -3410,6 +3410,7 @@ impl EditorElement {
|
||||||
line_layouts: &[LineWithInvisibles],
|
line_layouts: &[LineWithInvisibles],
|
||||||
line_height: Pixels,
|
line_height: Pixels,
|
||||||
scroll_pixel_position: gpui::Point<Pixels>,
|
scroll_pixel_position: gpui::Point<Pixels>,
|
||||||
|
newest_selection_head: Option<DisplayPoint>,
|
||||||
editor_width: Pixels,
|
editor_width: Pixels,
|
||||||
style: &EditorStyle,
|
style: &EditorStyle,
|
||||||
window: &mut Window,
|
window: &mut Window,
|
||||||
|
@ -3568,14 +3569,35 @@ impl EditorElement {
|
||||||
edit_start.row().as_f32() * line_height - scroll_pixel_position.y,
|
edit_start.row().as_f32() * line_height - scroll_pixel_position.y,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
let target_above =
|
// Avoid overlapping both the edited rows and the user's cursor.
|
||||||
DisplayRow(edit_start.row().0.saturating_sub(line_count as u32));
|
let target_above = DisplayRow(
|
||||||
let row_target = if visible_row_range
|
edit_start
|
||||||
.contains(&DisplayRow(target_above.0.saturating_sub(1)))
|
.row()
|
||||||
{
|
.0
|
||||||
target_above
|
.min(
|
||||||
|
newest_selection_head
|
||||||
|
.map_or(u32::MAX, |cursor_row| cursor_row.row().0),
|
||||||
|
)
|
||||||
|
.saturating_sub(line_count as u32),
|
||||||
|
);
|
||||||
|
let mut row_target;
|
||||||
|
if visible_row_range.contains(&DisplayRow(target_above.0.saturating_sub(1))) {
|
||||||
|
row_target = target_above;
|
||||||
} else {
|
} else {
|
||||||
DisplayRow(edit_end.row().0 + 1)
|
row_target = DisplayRow(
|
||||||
|
edit_end.row().0.max(
|
||||||
|
newest_selection_head.map_or(0, |cursor_row| cursor_row.row().0),
|
||||||
|
) + 1,
|
||||||
|
);
|
||||||
|
if !visible_row_range.contains(&row_target) {
|
||||||
|
// Not visible, so fallback on displaying immediately below the cursor.
|
||||||
|
if let Some(cursor) = newest_selection_head {
|
||||||
|
row_target = DisplayRow(cursor.row().0 + 1);
|
||||||
|
} else {
|
||||||
|
// Not visible and no cursor visible, so fallback on displaying at the top of the editor.
|
||||||
|
row_target = DisplayRow(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
text_bounds.origin
|
text_bounds.origin
|
||||||
|
@ -7089,6 +7111,7 @@ impl Element for EditorElement {
|
||||||
&line_layouts,
|
&line_layouts,
|
||||||
line_height,
|
line_height,
|
||||||
scroll_pixel_position,
|
scroll_pixel_position,
|
||||||
|
newest_selection_head,
|
||||||
editor_width,
|
editor_width,
|
||||||
&style,
|
&style,
|
||||||
window,
|
window,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue