mirror of
https://github.com/zed-industries/zed.git
synced 2024-12-25 01:34:02 +00:00
Layout git gutters inclusively
This commit is contained in:
parent
c8fbc0d348
commit
7ac45379eb
3 changed files with 22 additions and 21 deletions
|
@ -605,7 +605,7 @@ impl EditorElement {
|
||||||
|
|
||||||
//TODO: This rendering is entirely a horrible hack
|
//TODO: This rendering is entirely a horrible hack
|
||||||
DiffHunkStatus::Removed => {
|
DiffHunkStatus::Removed => {
|
||||||
let row = display_row_range.start;
|
let row = *display_row_range.start();
|
||||||
|
|
||||||
let offset = line_height / 2.;
|
let offset = line_height / 2.;
|
||||||
let start_y = row as f32 * line_height - offset - scroll_top;
|
let start_y = row as f32 * line_height - offset - scroll_top;
|
||||||
|
@ -627,11 +627,11 @@ impl EditorElement {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let start_row = display_row_range.start;
|
let start_row = *display_row_range.start();
|
||||||
let end_row = display_row_range.end;
|
let end_row = *display_row_range.end();
|
||||||
|
|
||||||
let start_y = start_row as f32 * line_height - scroll_top;
|
let start_y = start_row as f32 * line_height - scroll_top;
|
||||||
let end_y = end_row as f32 * line_height - scroll_top;
|
let end_y = end_row as f32 * line_height - scroll_top + line_height;
|
||||||
|
|
||||||
let width = diff_style.width_em * line_height;
|
let width = diff_style.width_em * line_height;
|
||||||
let highlight_origin = bounds.origin() + vec2f(-width, start_y);
|
let highlight_origin = bounds.origin() + vec2f(-width, start_y);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use std::ops::Range;
|
use std::ops::RangeInclusive;
|
||||||
|
|
||||||
use git::diff::{DiffHunk, DiffHunkStatus};
|
use git::diff::{DiffHunk, DiffHunkStatus};
|
||||||
use language::Point;
|
use language::Point;
|
||||||
|
@ -15,7 +15,7 @@ pub enum DisplayDiffHunk {
|
||||||
},
|
},
|
||||||
|
|
||||||
Unfolded {
|
Unfolded {
|
||||||
display_row_range: Range<u32>,
|
display_row_range: RangeInclusive<u32>,
|
||||||
status: DiffHunkStatus,
|
status: DiffHunkStatus,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ impl DisplayDiffHunk {
|
||||||
&DisplayDiffHunk::Folded { display_row } => display_row,
|
&DisplayDiffHunk::Folded { display_row } => display_row,
|
||||||
DisplayDiffHunk::Unfolded {
|
DisplayDiffHunk::Unfolded {
|
||||||
display_row_range, ..
|
display_row_range, ..
|
||||||
} => display_row_range.start,
|
} => *display_row_range.start(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,13 +36,7 @@ impl DisplayDiffHunk {
|
||||||
|
|
||||||
DisplayDiffHunk::Unfolded {
|
DisplayDiffHunk::Unfolded {
|
||||||
display_row_range, ..
|
display_row_range, ..
|
||||||
} => {
|
} => display_row_range.clone(),
|
||||||
if display_row_range.len() == 0 {
|
|
||||||
display_row_range.start..=display_row_range.end
|
|
||||||
} else {
|
|
||||||
display_row_range.start..=display_row_range.end - 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
range.contains(&display_row)
|
range.contains(&display_row)
|
||||||
|
@ -51,7 +45,6 @@ impl DisplayDiffHunk {
|
||||||
|
|
||||||
pub fn diff_hunk_to_display(hunk: DiffHunk<u32>, snapshot: &DisplaySnapshot) -> DisplayDiffHunk {
|
pub fn diff_hunk_to_display(hunk: DiffHunk<u32>, snapshot: &DisplaySnapshot) -> DisplayDiffHunk {
|
||||||
let hunk_start_point = Point::new(hunk.buffer_range.start, 0);
|
let hunk_start_point = Point::new(hunk.buffer_range.start, 0);
|
||||||
let hunk_end_point = Point::new(hunk.buffer_range.end, 0);
|
|
||||||
let hunk_start_point_sub = Point::new(hunk.buffer_range.start.saturating_sub(1), 0);
|
let hunk_start_point_sub = Point::new(hunk.buffer_range.start.saturating_sub(1), 0);
|
||||||
let hunk_end_point_sub = Point::new(
|
let hunk_end_point_sub = Point::new(
|
||||||
hunk.buffer_range
|
hunk.buffer_range
|
||||||
|
@ -83,9 +76,17 @@ pub fn diff_hunk_to_display(hunk: DiffHunk<u32>, snapshot: &DisplaySnapshot) ->
|
||||||
DisplayDiffHunk::Folded { display_row: row }
|
DisplayDiffHunk::Folded { display_row: row }
|
||||||
} else {
|
} else {
|
||||||
let start = hunk_start_point.to_display_point(snapshot).row();
|
let start = hunk_start_point.to_display_point(snapshot).row();
|
||||||
|
|
||||||
|
let hunk_end_row_inclusive = hunk
|
||||||
|
.buffer_range
|
||||||
|
.end
|
||||||
|
.saturating_sub(1)
|
||||||
|
.max(hunk.buffer_range.start);
|
||||||
|
let hunk_end_point = Point::new(hunk_end_row_inclusive, 0);
|
||||||
let end = hunk_end_point.to_display_point(snapshot).row();
|
let end = hunk_end_point.to_display_point(snapshot).row();
|
||||||
|
|
||||||
DisplayDiffHunk::Unfolded {
|
DisplayDiffHunk::Unfolded {
|
||||||
display_row_range: start..end,
|
display_row_range: start..=end,
|
||||||
status: hunk.status(),
|
status: hunk.status(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -177,7 +177,7 @@ impl BufferDiff {
|
||||||
|
|
||||||
let mut first_deletion_buffer_row: Option<u32> = None;
|
let mut first_deletion_buffer_row: Option<u32> = None;
|
||||||
let mut buffer_row_range: Option<Range<u32>> = None;
|
let mut buffer_row_range: Option<Range<u32>> = None;
|
||||||
let mut head_byte_range: Option<Range<usize>> = None;
|
let mut diff_base_byte_range: Option<Range<usize>> = None;
|
||||||
|
|
||||||
for line_index in 0..line_item_count {
|
for line_index in 0..line_item_count {
|
||||||
let line = patch.line_in_hunk(hunk_index, line_index).unwrap();
|
let line = patch.line_in_hunk(hunk_index, line_index).unwrap();
|
||||||
|
@ -198,9 +198,9 @@ impl BufferDiff {
|
||||||
if kind == GitDiffLineType::Deletion {
|
if kind == GitDiffLineType::Deletion {
|
||||||
let end = content_offset + content_len;
|
let end = content_offset + content_len;
|
||||||
|
|
||||||
match &mut head_byte_range {
|
match &mut diff_base_byte_range {
|
||||||
Some(head_byte_range) => head_byte_range.end = end as usize,
|
Some(head_byte_range) => head_byte_range.end = end as usize,
|
||||||
None => head_byte_range = Some(content_offset as usize..end as usize),
|
None => diff_base_byte_range = Some(content_offset as usize..end as usize),
|
||||||
}
|
}
|
||||||
|
|
||||||
if first_deletion_buffer_row.is_none() {
|
if first_deletion_buffer_row.is_none() {
|
||||||
|
@ -221,14 +221,14 @@ impl BufferDiff {
|
||||||
});
|
});
|
||||||
|
|
||||||
//unwrap_or addition without deletion
|
//unwrap_or addition without deletion
|
||||||
let head_byte_range = head_byte_range.unwrap_or(0..0);
|
let diff_base_byte_range = diff_base_byte_range.unwrap_or(0..0);
|
||||||
|
|
||||||
let start = Point::new(buffer_row_range.start, 0);
|
let start = Point::new(buffer_row_range.start, 0);
|
||||||
let end = Point::new(buffer_row_range.end, 0);
|
let end = Point::new(buffer_row_range.end, 0);
|
||||||
let buffer_range = buffer.anchor_before(start)..buffer.anchor_before(end);
|
let buffer_range = buffer.anchor_before(start)..buffer.anchor_before(end);
|
||||||
DiffHunk {
|
DiffHunk {
|
||||||
buffer_range,
|
buffer_range,
|
||||||
diff_base_byte_range: head_byte_range,
|
diff_base_byte_range,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue