editor: Fix scrolling stuttering at the top of multibuffers (#34295)
Release Notes: - Fixed an issue where scrolling would stutter at the top of multibuffers.
This commit is contained in:
parent
d0e01dbd8f
commit
af71e15ea0
1 changed files with 38 additions and 69 deletions
|
@ -216,32 +216,7 @@ impl ScrollManager {
|
||||||
window: &mut Window,
|
window: &mut Window,
|
||||||
cx: &mut Context<Editor>,
|
cx: &mut Context<Editor>,
|
||||||
) {
|
) {
|
||||||
let (new_anchor, top_row) = if scroll_position.y <= 0. && scroll_position.x <= 0. {
|
let scroll_top = scroll_position.y.max(0.);
|
||||||
(
|
|
||||||
ScrollAnchor {
|
|
||||||
anchor: Anchor::min(),
|
|
||||||
offset: scroll_position.max(&gpui::Point::default()),
|
|
||||||
},
|
|
||||||
0,
|
|
||||||
)
|
|
||||||
} else if scroll_position.y <= 0. {
|
|
||||||
let buffer_point = map
|
|
||||||
.clip_point(
|
|
||||||
DisplayPoint::new(DisplayRow(0), scroll_position.x as u32),
|
|
||||||
Bias::Left,
|
|
||||||
)
|
|
||||||
.to_point(map);
|
|
||||||
let anchor = map.buffer_snapshot.anchor_at(buffer_point, Bias::Right);
|
|
||||||
|
|
||||||
(
|
|
||||||
ScrollAnchor {
|
|
||||||
anchor: anchor,
|
|
||||||
offset: scroll_position.max(&gpui::Point::default()),
|
|
||||||
},
|
|
||||||
0,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
let scroll_top = scroll_position.y;
|
|
||||||
let scroll_top = match EditorSettings::get_global(cx).scroll_beyond_last_line {
|
let scroll_top = match EditorSettings::get_global(cx).scroll_beyond_last_line {
|
||||||
ScrollBeyondLastLine::OnePage => scroll_top,
|
ScrollBeyondLastLine::OnePage => scroll_top,
|
||||||
ScrollBeyondLastLine::Off => {
|
ScrollBeyondLastLine::Off => {
|
||||||
|
@ -275,7 +250,7 @@ impl ScrollManager {
|
||||||
.buffer_snapshot
|
.buffer_snapshot
|
||||||
.anchor_at(scroll_top_buffer_point, Bias::Right);
|
.anchor_at(scroll_top_buffer_point, Bias::Right);
|
||||||
|
|
||||||
(
|
self.set_anchor(
|
||||||
ScrollAnchor {
|
ScrollAnchor {
|
||||||
anchor: top_anchor,
|
anchor: top_anchor,
|
||||||
offset: point(
|
offset: point(
|
||||||
|
@ -284,12 +259,6 @@ impl ScrollManager {
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
scroll_top_buffer_point.row,
|
scroll_top_buffer_point.row,
|
||||||
)
|
|
||||||
};
|
|
||||||
|
|
||||||
self.set_anchor(
|
|
||||||
new_anchor,
|
|
||||||
top_row,
|
|
||||||
local,
|
local,
|
||||||
autoscroll,
|
autoscroll,
|
||||||
workspace_id,
|
workspace_id,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue