Make the edit predictions popover avoid overlapping the cursor (#23860)

Release Notes:

- N/A
This commit is contained in:
Michael Sloan 2025-01-29 14:33:06 -07:00 committed by GitHub
parent bd21334013
commit 943d46c465
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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,