Fix vertical alignment when jumping from multibuffers (#22613)
Clicking buffer headers and line numbers would sometimes take you to a disorienting scroll position. This PR improves that so the destination line is roughly at the same Y position as it appeared in the multibuffer. https://github.com/user-attachments/assets/3ad71537-cf26-4136-948f-c5a96df57178 **Note**: The alignment won't always be perfect because the multibuffer and target buffer might start at a different absolute Y position (because of open search, breadcrumbs, etc). I wanted to compensate for that, but that requires a fundamental change that I'd prefer to make separately. Release Notes: - Fix vertical alignment when jumping from multibuffers
This commit is contained in:
parent
6e2b6258b1
commit
0599f0fcb6
2 changed files with 26 additions and 9 deletions
|
@ -993,7 +993,10 @@ pub(crate) struct FocusedBlock {
|
|||
|
||||
#[derive(Clone)]
|
||||
enum JumpData {
|
||||
MultiBufferRow(MultiBufferRow),
|
||||
MultiBufferRow {
|
||||
row: MultiBufferRow,
|
||||
line_offset_from_top: u32,
|
||||
},
|
||||
MultiBufferPoint {
|
||||
excerpt_id: ExcerptId,
|
||||
position: Point,
|
||||
|
@ -12487,7 +12490,10 @@ impl Editor {
|
|||
);
|
||||
}
|
||||
}
|
||||
Some(JumpData::MultiBufferRow(row)) => {
|
||||
Some(JumpData::MultiBufferRow {
|
||||
row,
|
||||
line_offset_from_top,
|
||||
}) => {
|
||||
let point = MultiBufferPoint::new(row.0, 0);
|
||||
if let Some((buffer, buffer_point, _)) =
|
||||
self.buffer.read(cx).point_to_buffer_point(point, cx)
|
||||
|
@ -12495,7 +12501,7 @@ impl Editor {
|
|||
let buffer_offset = buffer.read(cx).point_to_offset(buffer_point);
|
||||
new_selections_by_buffer
|
||||
.entry(buffer)
|
||||
.or_insert((Vec::new(), None))
|
||||
.or_insert((Vec::new(), Some(*line_offset_from_top)))
|
||||
.0
|
||||
.push(buffer_offset..buffer_offset)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue