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:
Finn Evers 2025-07-11 19:10:39 +02:00 committed by GitHub
parent d0e01dbd8f
commit af71e15ea0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -216,32 +216,7 @@ impl ScrollManager {
window: &mut Window,
cx: &mut Context<Editor>,
) {
let (new_anchor, top_row) = if scroll_position.y <= 0. && scroll_position.x <= 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 = scroll_position.y.max(0.);
let scroll_top = match EditorSettings::get_global(cx).scroll_beyond_last_line {
ScrollBeyondLastLine::OnePage => scroll_top,
ScrollBeyondLastLine::Off => {
@ -275,7 +250,7 @@ impl ScrollManager {
.buffer_snapshot
.anchor_at(scroll_top_buffer_point, Bias::Right);
(
self.set_anchor(
ScrollAnchor {
anchor: top_anchor,
offset: point(
@ -284,12 +259,6 @@ impl ScrollManager {
),
},
scroll_top_buffer_point.row,
)
};
self.set_anchor(
new_anchor,
top_row,
local,
autoscroll,
workspace_id,