Paint code-action/fold buttons above the gutter

Max Brunsfeld created

Change summary

crates/editor2/src/element.rs | 69 +++++++++++++++++++-----------------
1 file changed, 36 insertions(+), 33 deletions(-)

Detailed changes

crates/editor2/src/element.rs 🔗

@@ -749,44 +749,47 @@ impl EditorElement {
             }
         }
 
-        for (ix, fold_indicator) in layout.fold_indicators.drain(..).enumerate() {
-            if let Some(mut fold_indicator) = fold_indicator {
-                let mut fold_indicator = fold_indicator.into_any_element();
-                let available_space = size(
-                    AvailableSpace::MinContent,
-                    AvailableSpace::Definite(line_height * 0.55),
-                );
-                let fold_indicator_size = fold_indicator.measure(available_space, cx);
+        cx.with_z_index(1, |cx| {
+            for (ix, fold_indicator) in layout.fold_indicators.drain(..).enumerate() {
+                if let Some(mut fold_indicator) = fold_indicator {
+                    let mut fold_indicator = fold_indicator.into_any_element();
+                    let available_space = size(
+                        AvailableSpace::MinContent,
+                        AvailableSpace::Definite(line_height * 0.55),
+                    );
+                    let fold_indicator_size = fold_indicator.measure(available_space, cx);
 
-                let position = point(
-                    bounds.size.width - layout.gutter_padding,
-                    ix as f32 * line_height - (scroll_top % line_height),
-                );
-                let centering_offset = point(
-                    (layout.gutter_padding + layout.gutter_margin - fold_indicator_size.width) / 2.,
-                    (line_height - fold_indicator_size.height) / 2.,
-                );
-                let origin = bounds.origin + position + centering_offset;
-                fold_indicator.draw(origin, available_space, cx);
+                    let position = point(
+                        bounds.size.width - layout.gutter_padding,
+                        ix as f32 * line_height - (scroll_top % line_height),
+                    );
+                    let centering_offset = point(
+                        (layout.gutter_padding + layout.gutter_margin - fold_indicator_size.width)
+                            / 2.,
+                        (line_height - fold_indicator_size.height) / 2.,
+                    );
+                    let origin = bounds.origin + position + centering_offset;
+                    fold_indicator.draw(origin, available_space, cx);
+                }
             }
-        }
 
-        if let Some(indicator) = layout.code_actions_indicator.take() {
-            let mut button = indicator.button.into_any_element();
-            let available_space = size(
-                AvailableSpace::MinContent,
-                AvailableSpace::Definite(line_height),
-            );
-            let indicator_size = button.measure(available_space, cx);
+            if let Some(indicator) = layout.code_actions_indicator.take() {
+                let mut button = indicator.button.into_any_element();
+                let available_space = size(
+                    AvailableSpace::MinContent,
+                    AvailableSpace::Definite(line_height),
+                );
+                let indicator_size = button.measure(available_space, cx);
 
-            let mut x = Pixels::ZERO;
-            let mut y = indicator.row as f32 * line_height - scroll_top;
-            // Center indicator.
-            x += ((layout.gutter_padding + layout.gutter_margin) - indicator_size.width) / 2.;
-            y += (line_height - indicator_size.height) / 2.;
+                let mut x = Pixels::ZERO;
+                let mut y = indicator.row as f32 * line_height - scroll_top;
+                // Center indicator.
+                x += ((layout.gutter_padding + layout.gutter_margin) - indicator_size.width) / 2.;
+                y += (line_height - indicator_size.height) / 2.;
 
-            button.draw(bounds.origin + point(x, y), available_space, cx);
-        }
+                button.draw(bounds.origin + point(x, y), available_space, cx);
+            }
+        });
     }
 
     fn paint_diff_hunks(bounds: Bounds<Pixels>, layout: &LayoutState, cx: &mut WindowContext) {