Layout edit predictions popover within viewport instead of text bounds (#23865)
This makes the popover more likely to appear to the right of the longest line. Release Notes: - N/A
This commit is contained in:
parent
e970690cfa
commit
508c08bb86
1 changed files with 23 additions and 9 deletions
|
@ -3558,16 +3558,28 @@ impl EditorElement {
|
|||
.child(styled_text)
|
||||
.into_any();
|
||||
|
||||
let viewport_bounds = Bounds::new(Default::default(), window.viewport_size())
|
||||
.extend(Edges {
|
||||
right: -Self::SCROLLBAR_WIDTH,
|
||||
..Default::default()
|
||||
});
|
||||
|
||||
let x_after_longest =
|
||||
text_bounds.origin.x + longest_line_width + PADDING_X - scroll_pixel_position.x;
|
||||
|
||||
let element_bounds = element.layout_as_root(AvailableSpace::min_size(), window, cx);
|
||||
let is_fully_visible =
|
||||
editor_width >= longest_line_width + PADDING_X + element_bounds.width;
|
||||
|
||||
// Fully visible if it can be displayed within the window (allow overlapping other
|
||||
// panes). However, this is only allowed if the popover starts within text_bounds.
|
||||
let is_fully_visible = x_after_longest < text_bounds.right()
|
||||
&& x_after_longest + element_bounds.width < viewport_bounds.right();
|
||||
|
||||
let origin = if is_fully_visible {
|
||||
text_bounds.origin
|
||||
+ point(
|
||||
longest_line_width + PADDING_X - scroll_pixel_position.x,
|
||||
edit_start.row().as_f32() * line_height - scroll_pixel_position.y,
|
||||
)
|
||||
point(
|
||||
x_after_longest,
|
||||
text_bounds.origin.y + edit_start.row().as_f32() * line_height
|
||||
- scroll_pixel_position.y,
|
||||
)
|
||||
} else {
|
||||
// Avoid overlapping both the edited rows and the user's cursor.
|
||||
let target_above = DisplayRow(
|
||||
|
@ -3607,8 +3619,10 @@ impl EditorElement {
|
|||
)
|
||||
};
|
||||
|
||||
element.prepaint_as_root(origin, element_bounds.into(), window, cx);
|
||||
Some(element)
|
||||
window.defer_draw(element, origin, 1);
|
||||
|
||||
// Do not return an element, since it will already be drawn due to defer_draw.
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue