From 576cabea93171711e27b697092934ee324ba121f Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 28 Jul 2021 18:58:57 +0200 Subject: [PATCH] WIP --- zed/src/editor/display_map.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/zed/src/editor/display_map.rs b/zed/src/editor/display_map.rs index c3b45bee66b89f528bde48b7d9f841b9a7ea2814..5e41412bf165d92aeb6f97d52c2a726013eae332 100644 --- a/zed/src/editor/display_map.rs +++ b/zed/src/editor/display_map.rs @@ -107,6 +107,39 @@ impl DisplayMapSnapshot { self.buffer_snapshot.max_point().row + 1 } + pub fn prev_row_boundary(&self, mut display_point: DisplayPoint) -> (DisplayPoint, Point) { + *display_point.column_mut() = 0; + let mut point = display_point.to_buffer_point(self, Bias::Left); + while point.column != 0 { + point.column = 0; + display_point = point.to_display_point(self); + if display_point.column() != 0 { + *display_point.column_mut() = 0; + point = display_point.to_buffer_point(self, Bias::Left); + } + } + + (display_point, point) + } + + pub fn next_row_boundary(&self, mut display_point: DisplayPoint) -> (DisplayPoint, Point) { + *display_point.row_mut() += 1; + *display_point.column_mut() = 0; + let mut point = display_point.to_buffer_point(self, Bias::Right); + while point.column != 0 { + point.column = 0; + point.row += 1; + display_point = point.to_display_point(self); + if display_point.column() != 0 { + *display_point.row_mut() += 1; + *display_point.column_mut() = 0; + point = display_point.to_buffer_point(self, Bias::Right); + } + } + + (display_point, point) + } + pub fn max_point(&self) -> DisplayPoint { DisplayPoint(self.wraps_snapshot.max_point()) }