Rename top_excerpt to sticky_header_excerpt and improve docs

Co-authored-by: Michael <michael@zed.dev>
This commit is contained in:
Agus Zubiaga 2024-12-23 16:40:05 -03:00
parent 71e9898113
commit 9eb4958fa6
3 changed files with 33 additions and 31 deletions

View file

@ -32,7 +32,7 @@ use crate::{
pub use block_map::{ pub use block_map::{
Block, BlockBufferRows, BlockChunks as DisplayChunks, BlockContext, BlockId, BlockMap, Block, BlockBufferRows, BlockChunks as DisplayChunks, BlockContext, BlockId, BlockMap,
BlockPlacement, BlockPoint, BlockProperties, BlockStyle, CustomBlockId, RenderBlock, BlockPlacement, BlockPoint, BlockProperties, BlockStyle, CustomBlockId, RenderBlock,
TopExcerptInfo, StickyHeaderExcerpt,
}; };
use block_map::{BlockRow, BlockSnapshot}; use block_map::{BlockRow, BlockSnapshot};
use collections::{HashMap, HashSet}; use collections::{HashMap, HashSet};
@ -1106,8 +1106,8 @@ impl DisplaySnapshot {
.map(|(row, block)| (DisplayRow(row), block)) .map(|(row, block)| (DisplayRow(row), block))
} }
pub fn top_excerpt(&self, row: DisplayRow) -> Option<TopExcerptInfo<'_>> { pub fn sticky_header_excerpt(&self, row: DisplayRow) -> Option<StickyHeaderExcerpt<'_>> {
self.block_snapshot.top_excerpt(row.0) self.block_snapshot.sticky_header_excerpt(row.0)
} }
pub fn block_for_id(&self, id: BlockId) -> Option<Block> { pub fn block_for_id(&self, id: BlockId) -> Option<Block> {

View file

@ -1411,7 +1411,7 @@ impl BlockSnapshot {
}) })
} }
pub fn top_excerpt(&self, top_row: u32) -> Option<TopExcerptInfo<'_>> { pub fn sticky_header_excerpt(&self, top_row: u32) -> Option<StickyHeaderExcerpt<'_>> {
let mut cursor = self.transforms.cursor::<BlockRow>(&()); let mut cursor = self.transforms.cursor::<BlockRow>(&());
cursor.seek(&BlockRow(top_row), Bias::Left, &()); cursor.seek(&BlockRow(top_row), Bias::Left, &());
@ -1434,7 +1434,7 @@ impl BlockSnapshot {
}; };
if matches_start && top_row <= end { if matches_start && top_row <= end {
return next_excerpt.as_ref().map(|excerpt| TopExcerptInfo { return next_excerpt.as_ref().map(|excerpt| StickyHeaderExcerpt {
next_buffer_row: None, next_buffer_row: None,
next_excerpt_controls_present: *show_excerpt_controls, next_excerpt_controls_present: *show_excerpt_controls,
excerpt, excerpt,
@ -1443,7 +1443,7 @@ impl BlockSnapshot {
let next_buffer_row = if *starts_new_buffer { Some(end) } else { None }; let next_buffer_row = if *starts_new_buffer { Some(end) } else { None };
return prev_excerpt.as_ref().map(|excerpt| TopExcerptInfo { return prev_excerpt.as_ref().map(|excerpt| StickyHeaderExcerpt {
excerpt, excerpt,
next_buffer_row, next_buffer_row,
next_excerpt_controls_present: *show_excerpt_controls, next_excerpt_controls_present: *show_excerpt_controls,
@ -1452,18 +1452,19 @@ impl BlockSnapshot {
Some(Block::FoldedBuffer { Some(Block::FoldedBuffer {
prev_excerpt: Some(excerpt), prev_excerpt: Some(excerpt),
.. ..
}) => { }) if top_row <= start => {
if top_row <= start { return Some(StickyHeaderExcerpt {
return Some(TopExcerptInfo { next_buffer_row: Some(end),
next_buffer_row: Some(end), next_excerpt_controls_present: false,
next_excerpt_controls_present: false, excerpt,
excerpt, });
});
}
} }
_ => {} Some(Block::FoldedBuffer { .. }) | Some(Block::Custom(_)) | None => {}
} }
// This is needed to iterate past None / FoldedBuffer / Custom blocks. For FoldedBuffer,
// if scrolled slightly past the header of a folded block, the next block is needed for
// the sticky header.
cursor.next(&()); cursor.next(&());
} }
@ -1753,7 +1754,7 @@ impl<'a> BlockChunks<'a> {
} }
} }
pub struct TopExcerptInfo<'a> { pub struct StickyHeaderExcerpt<'a> {
pub excerpt: &'a ExcerptInfo, pub excerpt: &'a ExcerptInfo,
pub next_excerpt_controls_present: bool, pub next_excerpt_controls_present: bool,
pub next_buffer_row: Option<u32>, pub next_buffer_row: Option<u32>,

View file

@ -22,7 +22,7 @@ use crate::{
EditorSnapshot, EditorStyle, ExpandExcerpts, FocusedBlock, GutterDimensions, HalfPageDown, EditorSnapshot, EditorStyle, ExpandExcerpts, FocusedBlock, GutterDimensions, HalfPageDown,
HalfPageUp, HandleInput, HoveredCursor, HoveredHunk, InlineCompletion, JumpData, LineDown, HalfPageUp, HandleInput, HoveredCursor, HoveredHunk, InlineCompletion, JumpData, LineDown,
LineUp, OpenExcerpts, PageDown, PageUp, Point, RowExt, RowRangeExt, SelectPhase, Selection, LineUp, OpenExcerpts, PageDown, PageUp, Point, RowExt, RowRangeExt, SelectPhase, Selection,
SoftWrap, ToPoint, ToggleFold, TopExcerptInfo, CURSORS_VISIBLE_FOR, FILE_HEADER_HEIGHT, SoftWrap, StickyHeaderExcerpt, ToPoint, ToggleFold, CURSORS_VISIBLE_FOR, FILE_HEADER_HEIGHT,
GIT_BLAME_MAX_AUTHOR_CHARS_DISPLAYED, MAX_LINE_LEN, MULTI_BUFFER_EXCERPT_HEADER_HEIGHT, GIT_BLAME_MAX_AUTHOR_CHARS_DISPLAYED, MAX_LINE_LEN, MULTI_BUFFER_EXCERPT_HEADER_HEIGHT,
MULTI_BUFFER_EXCERPT_HEADER_PADDING, MULTI_BUFFER_EXCERPT_HEADER_PADDING,
}; };
@ -2210,7 +2210,7 @@ impl EditorElement {
resized_blocks: &mut HashMap<CustomBlockId, u32>, resized_blocks: &mut HashMap<CustomBlockId, u32>,
selections: &[Selection<Point>], selections: &[Selection<Point>],
is_row_soft_wrapped: impl Copy + Fn(usize) -> bool, is_row_soft_wrapped: impl Copy + Fn(usize) -> bool,
top_excerpt_id: Option<ExcerptId>, sticky_header_excerpt_id: Option<ExcerptId>,
cx: &mut WindowContext, cx: &mut WindowContext,
) -> (AnyElement, Size<Pixels>) { ) -> (AnyElement, Size<Pixels>) {
let mut element = match block { let mut element = match block {
@ -2340,7 +2340,7 @@ impl EditorElement {
if let Some(next_excerpt) = next_excerpt { if let Some(next_excerpt) = next_excerpt {
let jump_data = jump_data(snapshot, block_row_start, *height, next_excerpt, cx); let jump_data = jump_data(snapshot, block_row_start, *height, next_excerpt, cx);
if *starts_new_buffer { if *starts_new_buffer {
if top_excerpt_id != Some(next_excerpt.id) { if sticky_header_excerpt_id != Some(next_excerpt.id) {
result = result.child(self.render_buffer_header( result = result.child(self.render_buffer_header(
next_excerpt, next_excerpt,
false, false,
@ -2683,7 +2683,7 @@ impl EditorElement {
line_layouts: &[LineWithInvisibles], line_layouts: &[LineWithInvisibles],
selections: &[Selection<Point>], selections: &[Selection<Point>],
is_row_soft_wrapped: impl Copy + Fn(usize) -> bool, is_row_soft_wrapped: impl Copy + Fn(usize) -> bool,
top_excerpt_id: Option<ExcerptId>, sticky_header_excerpt_id: Option<ExcerptId>,
cx: &mut WindowContext, cx: &mut WindowContext,
) -> Result<Vec<BlockLayout>, HashMap<CustomBlockId, u32>> { ) -> Result<Vec<BlockLayout>, HashMap<CustomBlockId, u32>> {
let (fixed_blocks, non_fixed_blocks) = snapshot let (fixed_blocks, non_fixed_blocks) = snapshot
@ -2722,7 +2722,7 @@ impl EditorElement {
&mut resized_blocks, &mut resized_blocks,
selections, selections,
is_row_soft_wrapped, is_row_soft_wrapped,
top_excerpt_id, sticky_header_excerpt_id,
cx, cx,
); );
fixed_block_max_width = fixed_block_max_width.max(element_size.width + em_width); fixed_block_max_width = fixed_block_max_width.max(element_size.width + em_width);
@ -2770,7 +2770,7 @@ impl EditorElement {
&mut resized_blocks, &mut resized_blocks,
selections, selections,
is_row_soft_wrapped, is_row_soft_wrapped,
top_excerpt_id, sticky_header_excerpt_id,
cx, cx,
); );
@ -2818,7 +2818,7 @@ impl EditorElement {
&mut resized_blocks, &mut resized_blocks,
selections, selections,
is_row_soft_wrapped, is_row_soft_wrapped,
top_excerpt_id, sticky_header_excerpt_id,
cx, cx,
); );
@ -2887,11 +2887,11 @@ impl EditorElement {
fn layout_sticky_buffer_header( fn layout_sticky_buffer_header(
&self, &self,
TopExcerptInfo { StickyHeaderExcerpt {
excerpt, excerpt,
next_excerpt_controls_present, next_excerpt_controls_present,
next_buffer_row, next_buffer_row,
}: TopExcerptInfo<'_>, }: StickyHeaderExcerpt<'_>,
scroll_position: f32, scroll_position: f32,
line_height: Pixels, line_height: Pixels,
snapshot: &EditorSnapshot, snapshot: &EditorSnapshot,
@ -6116,12 +6116,13 @@ impl Element for EditorElement {
let scroll_range_bounds = scrollbar_range_data.scroll_range; let scroll_range_bounds = scrollbar_range_data.scroll_range;
let mut scroll_width = scroll_range_bounds.size.width; let mut scroll_width = scroll_range_bounds.size.width;
let top_excerpt = if snapshot.buffer_snapshot.show_headers() { let sticky_header_excerpt = if snapshot.buffer_snapshot.show_headers() {
snapshot.top_excerpt(start_row) snapshot.sticky_header_excerpt(start_row)
} else { } else {
None None
}; };
let top_excerpt_id = top_excerpt.as_ref().map(|top| top.excerpt.id); let sticky_header_excerpt_id =
sticky_header_excerpt.as_ref().map(|top| top.excerpt.id);
let blocks = cx.with_element_namespace("blocks", |cx| { let blocks = cx.with_element_namespace("blocks", |cx| {
self.render_blocks( self.render_blocks(
@ -6138,7 +6139,7 @@ impl Element for EditorElement {
&line_layouts, &line_layouts,
&local_selections, &local_selections,
is_row_soft_wrapped, is_row_soft_wrapped,
top_excerpt_id, sticky_header_excerpt_id,
cx, cx,
) )
}); });
@ -6152,10 +6153,10 @@ impl Element for EditorElement {
} }
}; };
let sticky_buffer_header = top_excerpt.map(|top_excerpt| { let sticky_buffer_header = sticky_header_excerpt.map(|sticky_header_excerpt| {
cx.with_element_namespace("blocks", |cx| { cx.with_element_namespace("blocks", |cx| {
self.layout_sticky_buffer_header( self.layout_sticky_buffer_header(
top_excerpt, sticky_header_excerpt,
scroll_position.y, scroll_position.y,
line_height, line_height,
&snapshot, &snapshot,