Show a brighter border around folded blocks with selections (#22114)

Follow-up of https://github.com/zed-industries/zed/pull/22046

Properly [un]fold blocks based on the selections

<img width="1728" alt="image"
src="https://github.com/user-attachments/assets/73f319ee-3005-4a3b-95ee-4c6deb5cd0b8"
/>


Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov 2024-12-17 00:33:43 +02:00 committed by GitHub
parent 53c8b48647
commit 97d9567188
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 57 additions and 61 deletions

View file

@ -2151,8 +2151,20 @@ impl EditorElement {
prev_excerpt,
show_excerpt_controls,
height,
..
} => {
let block_start = DisplayPoint::new(block_row_start, 0).to_point(snapshot);
let block_end = DisplayPoint::new(block_row_start + *height, 0).to_point(snapshot);
let selected = selections
.binary_search_by(|selection| {
if selection.end <= block_start {
Ordering::Less
} else if selection.start >= block_end {
Ordering::Greater
} else {
Ordering::Equal
}
})
.is_ok();
let icon_offset = gutter_dimensions.width
- (gutter_dimensions.left_padding + gutter_dimensions.margin);
@ -2181,6 +2193,7 @@ impl EditorElement {
first_excerpt,
header_padding,
true,
selected,
jump_data,
cx,
))
@ -2192,7 +2205,6 @@ impl EditorElement {
show_excerpt_controls,
height,
starts_new_buffer,
..
} => {
let icon_offset = gutter_dimensions.width
- (gutter_dimensions.left_padding + gutter_dimensions.margin);
@ -2223,6 +2235,7 @@ impl EditorElement {
next_excerpt,
header_padding,
false,
false,
jump_data,
cx,
));
@ -2380,6 +2393,7 @@ impl EditorElement {
for_excerpt: &ExcerptInfo,
header_padding: Pixels,
is_folded: bool,
is_selected: bool,
jump_data: JumpData,
cx: &mut WindowContext,
) -> Div {
@ -2415,7 +2429,14 @@ impl EditorElement {
.rounded_md()
.shadow_md()
.border_1()
.border_color(cx.theme().colors().border)
.map(|div| {
let border_color = if is_selected {
cx.theme().colors().text_accent
} else {
cx.theme().colors().border
};
div.border_color(border_color)
})
.bg(cx.theme().colors().editor_subheader_background)
.hover(|style| style.bg(cx.theme().colors().element_hover))
.map(|header| {