fix issue with not rendering correctly when wrapped relative: false

Thomas Heartman created

Change summary

crates/editor/src/display_map/wrap_map.rs     | 4 ++--
crates/editor/src/element.rs                  | 8 ++++----
crates/multi_buffer/src/multi_buffer.rs       | 8 ++++----
crates/multi_buffer/src/multi_buffer_tests.rs | 3 +++
4 files changed, 13 insertions(+), 10 deletions(-)

Detailed changes

crates/editor/src/display_map/wrap_map.rs 🔗

@@ -1020,11 +1020,11 @@ impl Iterator for WrapRows<'_> {
         Some(if soft_wrapped {
             RowInfo {
                 buffer_id: None,
-                buffer_row: buffer_row.buffer_row,
+                buffer_row: None,
                 multibuffer_row: None,
                 diff_status,
                 expand_info: None,
-                wrapped: true,
+                wrapped: buffer_row.buffer_row,
             }
         } else {
             buffer_row

crates/editor/src/element.rs 🔗

@@ -3170,9 +3170,9 @@ impl EditorElement {
         let mut i = head_idx + 1;
         let should_count_line = |row_info: &RowInfo| {
             if use_display_offset {
-                row_info.buffer_row.is_some()
+                row_info.buffer_row.is_some() || row_info.wrapped.is_some()
             } else {
-                row_info.buffer_row.is_some() && !row_info.wrapped
+                row_info.buffer_row.is_some()
             }
         };
         while i < buffer_rows.len() as u32 {
@@ -3266,8 +3266,8 @@ impl EditorElement {
         let segments = buffer_rows.iter().enumerate().flat_map(|(ix, row_info)| {
             let display_row = DisplayRow(rows.start.0 + ix as u32);
             line_number.clear();
-            let non_relative_number = if !use_relative_for_wrapped_lines && row_info.wrapped {
-                return None;
+            let non_relative_number = if use_relative_for_wrapped_lines {
+                row_info.buffer_row.or(row_info.wrapped)? + 1
             } else {
                 row_info.buffer_row? + 1
             };

crates/multi_buffer/src/multi_buffer.rs 🔗

@@ -395,7 +395,7 @@ pub struct RowInfo {
     pub multibuffer_row: Option<MultiBufferRow>,
     pub diff_status: Option<buffer_diff::DiffHunkStatus>,
     pub expand_info: Option<ExpandInfo>,
-    pub wrapped: bool,
+    pub wrapped: Option<u32>,
 }
 
 /// A slice into a [`Buffer`] that is being edited in a [`MultiBuffer`].
@@ -7498,7 +7498,7 @@ impl Iterator for MultiBufferRows<'_> {
                 multibuffer_row: Some(MultiBufferRow(0)),
                 diff_status: None,
                 expand_info: None,
-                wrapped: false,
+                wrapped: None,
             });
         }
 
@@ -7556,7 +7556,7 @@ impl Iterator for MultiBufferRows<'_> {
                     buffer_row: Some(last_row),
                     multibuffer_row: Some(multibuffer_row),
                     diff_status: None,
-                    wrapped: false,
+                    wrapped: None,
                     expand_info,
                 });
             } else {
@@ -7601,7 +7601,7 @@ impl Iterator for MultiBufferRows<'_> {
                 .diff_hunk_status
                 .filter(|_| self.point < region.range.end),
             expand_info,
-            wrapped: false,
+            wrapped: None,
         });
         self.point += Point::new(1, 0);
         result

crates/multi_buffer/src/multi_buffer_tests.rs 🔗

@@ -31,6 +31,7 @@ fn test_empty_singleton(cx: &mut App) {
             multibuffer_row: Some(MultiBufferRow(0)),
             diff_status: None,
             expand_info: None,
+            wrapped: None,
         }]
     );
 }
@@ -2431,6 +2432,8 @@ impl ReferenceMultibuffer {
                             buffer_id: region.buffer_id,
                             diff_status: region.status,
                             buffer_row,
+                            wrapped: None,
+
                             multibuffer_row: Some(MultiBufferRow(
                                 text[..ix].matches('\n').count() as u32
                             )),