Use display maps
This commit is contained in:
parent
241d3951b8
commit
b0fc6da55b
2 changed files with 15 additions and 12 deletions
|
@ -7554,7 +7554,7 @@ impl Editor {
|
||||||
search_range: Range<Anchor>,
|
search_range: Range<Anchor>,
|
||||||
display_snapshot: &DisplaySnapshot,
|
display_snapshot: &DisplaySnapshot,
|
||||||
count: usize,
|
count: usize,
|
||||||
) -> Vec<RangeInclusive<u32>> {
|
) -> Vec<RangeInclusive<DisplayPoint>> {
|
||||||
let mut results = Vec::new();
|
let mut results = Vec::new();
|
||||||
let buffer = &display_snapshot.buffer_snapshot;
|
let buffer = &display_snapshot.buffer_snapshot;
|
||||||
let Some((_, ranges)) = self.background_highlights
|
let Some((_, ranges)) = self.background_highlights
|
||||||
|
@ -7573,24 +7573,27 @@ impl Editor {
|
||||||
Ok(i) | Err(i) => i,
|
Ok(i) | Err(i) => i,
|
||||||
};
|
};
|
||||||
let end_ix = count.min(ranges.len());
|
let end_ix = count.min(ranges.len());
|
||||||
let mut push_region = |start, end| {
|
let mut push_region = |start: Option<Point>, end: Option<Point>| {
|
||||||
if let (Some(start_display), Some(end_display)) = (start, end) {
|
if let (Some(start_display), Some(end_display)) = (start, end) {
|
||||||
results.push(start_display..=end_display);
|
results.push(
|
||||||
|
start_display.to_display_point(display_snapshot)
|
||||||
|
..=end_display.to_display_point(display_snapshot),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let mut start_row = None;
|
let mut start_row: Option<Point> = None;
|
||||||
let mut end_row = None;
|
let mut end_row: Option<Point> = None;
|
||||||
for range in &ranges[start_ix..end_ix] {
|
for range in &ranges[start_ix..end_ix] {
|
||||||
if range.start.cmp(&search_range.end, buffer).is_ge() {
|
if range.start.cmp(&search_range.end, buffer).is_ge() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
let end = range.end.to_point(buffer).row;
|
let end = range.end.to_point(buffer);
|
||||||
if let Some(current_row) = &end_row {
|
if let Some(current_row) = &end_row {
|
||||||
if end == *current_row {
|
if end.row == current_row.row {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let start = range.start.to_point(buffer).row;
|
let start = range.start.to_point(buffer);
|
||||||
|
|
||||||
if start_row.is_none() {
|
if start_row.is_none() {
|
||||||
assert_eq!(end_row, None);
|
assert_eq!(end_row, None);
|
||||||
|
@ -7599,7 +7602,7 @@ impl Editor {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if let Some(current_end) = end_row.as_mut() {
|
if let Some(current_end) = end_row.as_mut() {
|
||||||
if start > *current_end + 1 {
|
if start.row > current_end.row + 1 {
|
||||||
push_region(start_row, end_row);
|
push_region(start_row, end_row);
|
||||||
start_row = Some(start);
|
start_row = Some(start);
|
||||||
end_row = Some(end);
|
end_row = Some(end);
|
||||||
|
|
|
@ -1117,9 +1117,9 @@ impl EditorElement {
|
||||||
bottom: false,
|
bottom: false,
|
||||||
left: true,
|
left: true,
|
||||||
};
|
};
|
||||||
let mut push_region = |start: u32, end: u32| {
|
let mut push_region = |start: DisplayPoint, end: DisplayPoint| {
|
||||||
let start_y = y_for_row(start as f32);
|
let start_y = y_for_row(start.row() as f32);
|
||||||
let mut end_y = y_for_row(end as f32);
|
let mut end_y = y_for_row(end.row() as f32);
|
||||||
if end_y - start_y < 1. {
|
if end_y - start_y < 1. {
|
||||||
end_y = start_y + 1.;
|
end_y = start_y + 1.;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue