WIP

Mikayla created

Change summary

crates/editor/src/completions.rs                  | 28 +++++++++++++
crates/editor/src/element.rs                      | 25 ++++++-----
crates/gpui/src/platform/mac/window_appearance.rs | 35 +++++++++++++++++
3 files changed, 77 insertions(+), 11 deletions(-)

Detailed changes

crates/editor/src/completions.rs 🔗

@@ -0,0 +1,28 @@
+use futures::Future;
+use gpui::Task;
+use smallvec::{smallvec, SmallVec};
+use text::Anchor;
+
+use crate::Editor;
+
+struct Completions {
+    trigger_characters: SmallVec<[char; 1]>,
+    language: Option<String>,
+    provider: Box<dyn Fn(&mut Editor, &Anchor, &str) -> Option<Task<String>>>,
+}
+
+impl Completions {
+    fn new(f: impl Fn(&mut Editor, &Anchor, &str) -> Option<Task<String>> + 'static) -> Self {
+        Self {
+            trigger_characters: smallvec![],
+            language: None,
+            provider: Box::new(f),
+        }
+    }
+}
+
+impl Editor {
+    /// Provide completions to the editor when the given character is typed
+    ///
+    fn provide_completions(config: Completions) {}
+}

crates/editor/src/element.rs 🔗

@@ -2543,18 +2543,21 @@ impl EditorElement {
 
             move |event: &MouseUpEvent, phase, cx| {
                 if phase == DispatchPhase::Bubble
-                    && interactive_bounds.visibly_contains(&event.position, cx)
                 {
-                    editor.update(cx, |editor, cx| {
-                        Self::mouse_up(
-                            editor,
-                            event,
-                            &position_map,
-                            text_bounds,
-                            &stacking_order,
-                            cx,
-                        )
-                    });
+                    // if interactive_bounds.visibly_contains(&event.position, cx) {
+                        editor.update(cx, |editor, cx| {
+                            Self::mouse_up(
+                                editor,
+                                event,
+                                &position_map,
+                                text_bounds,
+                                &stacking_order,
+                                cx,
+                            )
+                        });
+                    // } else {
+
+                    // }
                 }
             }
         });

crates/gpui/src/platform/mac/window_appearance.rs 🔗

@@ -0,0 +1,35 @@
+use crate::WindowAppearance;
+use cocoa::{
+    appkit::{NSAppearanceNameVibrantDark, NSAppearanceNameVibrantLight},
+    base::id,
+    foundation::NSString,
+};
+use objc::{msg_send, sel, sel_impl};
+use std::ffi::CStr;
+
+impl WindowAppearance {
+    pub unsafe fn from_native(appearance: id) -> Self {
+        let name: id = msg_send![appearance, name];
+        if name == NSAppearanceNameVibrantLight {
+            Self::VibrantLight
+        } else if name == NSAppearanceNameVibrantDark {
+            Self::VibrantDark
+        } else if name == NSAppearanceNameAqua {
+            Self::Light
+        } else if name == NSAppearanceNameDarkAqua {
+            Self::Dark
+        } else {
+            println!(
+                "unknown appearance: {:?}",
+                CStr::from_ptr(name.UTF8String())
+            );
+            Self::Light
+        }
+    }
+}
+
+#[link(name = "AppKit", kind = "framework")]
+extern "C" {
+    pub static NSAppearanceNameAqua: id;
+    pub static NSAppearanceNameDarkAqua: id;
+}