Fix rendering of gutter diff hunks that extend to EOF, w/o newline (#23790)
Release Notes: - N/A
This commit is contained in:
parent
47dcbdfe51
commit
7b901caf8f
1 changed files with 13 additions and 18 deletions
|
@ -78,7 +78,7 @@ use workspace::{item::Item, notifications::NotifyTaskExt, Workspace};
|
|||
const INLINE_BLAME_PADDING_EM_WIDTHS: f32 = 7.;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub enum DisplayDiffHunk {
|
||||
enum DisplayDiffHunk {
|
||||
Folded {
|
||||
display_row: DisplayRow,
|
||||
},
|
||||
|
@ -1552,16 +1552,19 @@ impl EditorElement {
|
|||
let hunk_display_start = snapshot.point_to_display_point(hunk_start_point, Bias::Left);
|
||||
let hunk_display_end = snapshot.point_to_display_point(hunk_end_point, Bias::Right);
|
||||
|
||||
let display_hunk = if hunk_display_start.column() != 0 || hunk_display_end.column() != 0
|
||||
{
|
||||
let display_hunk = if hunk_display_start.column() != 0 {
|
||||
DisplayDiffHunk::Folded {
|
||||
display_row: hunk_display_start.row(),
|
||||
}
|
||||
} else {
|
||||
let mut end_row = hunk_display_end.row();
|
||||
if hunk_display_end.column() > 0 {
|
||||
end_row.0 += 1;
|
||||
}
|
||||
DisplayDiffHunk::Unfolded {
|
||||
status: hunk.status(),
|
||||
diff_base_byte_range: hunk.diff_base_byte_range,
|
||||
display_row_range: hunk_display_start.row()..hunk_display_end.row(),
|
||||
display_row_range: hunk_display_start.row()..end_row,
|
||||
multi_buffer_range: Anchor::range_in_buffer(
|
||||
hunk.excerpt_id,
|
||||
hunk.buffer_id,
|
||||
|
@ -4225,7 +4228,7 @@ impl EditorElement {
|
|||
});
|
||||
}
|
||||
|
||||
pub(super) fn diff_hunk_bounds(
|
||||
fn diff_hunk_bounds(
|
||||
snapshot: &EditorSnapshot,
|
||||
line_height: Pixels,
|
||||
gutter_bounds: Bounds<Pixels>,
|
||||
|
@ -4233,15 +4236,14 @@ impl EditorElement {
|
|||
) -> Bounds<Pixels> {
|
||||
let scroll_position = snapshot.scroll_position();
|
||||
let scroll_top = scroll_position.y * line_height;
|
||||
let gutter_strip_width = (0.275 * line_height).floor();
|
||||
|
||||
match hunk {
|
||||
DisplayDiffHunk::Folded { display_row, .. } => {
|
||||
let start_y = display_row.as_f32() * line_height - scroll_top;
|
||||
let end_y = start_y + line_height;
|
||||
|
||||
let width = Self::diff_hunk_strip_width(line_height);
|
||||
let highlight_origin = gutter_bounds.origin + point(px(0.), start_y);
|
||||
let highlight_size = size(width, end_y - start_y);
|
||||
let highlight_size = size(gutter_strip_width, end_y - start_y);
|
||||
Bounds::new(highlight_origin, highlight_size)
|
||||
}
|
||||
DisplayDiffHunk::Unfolded {
|
||||
|
@ -4283,21 +4285,14 @@ impl EditorElement {
|
|||
let start_y = start_row.as_f32() * line_height - scroll_top;
|
||||
let end_y = end_row_in_current_excerpt.as_f32() * line_height - scroll_top;
|
||||
|
||||
let width = Self::diff_hunk_strip_width(line_height);
|
||||
let highlight_origin = gutter_bounds.origin + point(px(0.), start_y);
|
||||
let highlight_size = size(width, end_y - start_y);
|
||||
let highlight_size = size(gutter_strip_width, end_y - start_y);
|
||||
Bounds::new(highlight_origin, highlight_size)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the width of the diff strip that will be displayed in the gutter.
|
||||
pub(super) fn diff_hunk_strip_width(line_height: Pixels) -> Pixels {
|
||||
// We floor the value to prevent pixel rounding.
|
||||
(0.275 * line_height).floor()
|
||||
}
|
||||
|
||||
fn paint_gutter_indicators(
|
||||
&self,
|
||||
layout: &mut EditorLayout,
|
||||
|
@ -5213,7 +5208,7 @@ impl EditorElement {
|
|||
let editor = self.editor.clone();
|
||||
let text_hitbox = layout.text_hitbox.clone();
|
||||
let gutter_hitbox = layout.gutter_hitbox.clone();
|
||||
let hovered_hunk =
|
||||
let multi_buffer_range =
|
||||
layout
|
||||
.display_hunks
|
||||
.iter()
|
||||
|
@ -5242,7 +5237,7 @@ impl EditorElement {
|
|||
Self::mouse_left_down(
|
||||
editor,
|
||||
event,
|
||||
hovered_hunk.clone(),
|
||||
multi_buffer_range.clone(),
|
||||
&position_map,
|
||||
&text_hitbox,
|
||||
&gutter_hitbox,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue