WIP

Antonio Scandurra created

Change summary

crates/editor2/src/display_map/block_map.rs |  3 +
crates/editor2/src/editor.rs                | 30 +++++++++++++++++++++-
crates/editor2/src/element.rs               |  7 +++++
3 files changed, 37 insertions(+), 3 deletions(-)

Detailed changes

crates/editor2/src/display_map/block_map.rs 🔗

@@ -2,7 +2,7 @@ use super::{
     wrap_map::{self, WrapEdit, WrapPoint, WrapSnapshot},
     Highlights,
 };
-use crate::{Anchor, Editor, ExcerptId, ExcerptRange, ToPoint as _};
+use crate::{Anchor, Editor, EditorStyle, ExcerptId, ExcerptRange, ToPoint as _};
 use collections::{Bound, HashMap, HashSet};
 use gpui::{AnyElement, Pixels, ViewContext};
 use language::{BufferSnapshot, Chunk, Patch, Point};
@@ -88,6 +88,7 @@ pub struct BlockContext<'a, 'b> {
     pub em_width: Pixels,
     pub line_height: Pixels,
     pub block_id: usize,
+    pub editor_style: &'b EditorStyle,
 }
 
 #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]

crates/editor2/src/editor.rs 🔗

@@ -7796,9 +7796,35 @@ impl Editor {
                             position: range.start.clone(),
                             height: 1,
                             render: Arc::new({
-                                let editor = rename_editor.clone();
+                                let rename_editor = rename_editor.clone();
                                 move |cx: &mut BlockContext| {
-                                    div().pl(cx.anchor_x).child(editor.clone()).render()
+                                    let text_style = if let Some(highlight_style) = old_highlight_id
+                                        .and_then(|h| h.style(&cx.editor_style.syntax))
+                                    {
+                                        cx.editor_style
+                                            .text
+                                            .clone()
+                                            .highlight(highlight_style)
+                                            .unwrap_or_else(|_| cx.editor_style.text.clone())
+                                    } else {
+                                        cx.editor_style.text.clone()
+                                    };
+                                    div().pl(cx.anchor_x).child(with_view(
+                                        &rename_editor,
+                                        |_, _| {
+                                            EditorElement::new(EditorStyle {
+                                                background: cx.theme().system().transparent,
+                                                local_player: cx.editor_style.local_player,
+                                                text: text_style,
+                                                scrollbar_width: cx.editor_style.scrollbar_width,
+                                                syntax: cx.editor_style.syntax.clone(),
+                                                diagnostic_style: cx
+                                                    .editor_style
+                                                    .diagnostic_style
+                                                    .clone(),
+                                            })
+                                        },
+                                    ))
                                 }
                             }),
                             disposition: BlockDisposition::Below,

crates/editor2/src/element.rs 🔗

@@ -2010,6 +2010,7 @@ impl EditorElement {
                         gutter_width,
                         em_width,
                         block_id,
+                        editor_style: &self.style,
                     })
                 }
                 TransformBlock::ExcerptHeader {
@@ -2658,6 +2659,12 @@ impl Element<Editor> for EditorElement {
     }
 }
 
+impl Component<Editor> for EditorElement {
+    fn render(self) -> AnyElement<Editor> {
+        AnyElement::new(self)
+    }
+}
+
 // impl EditorElement {
 //     type LayoutState = LayoutState;
 //     type PaintState = ();