Start on context_menu crate

Nathan Sobo created

Change summary

Cargo.lock                              |  8 +++++++
crates/context_menu/Cargo.toml          | 12 +++++++++++
crates/context_menu/src/context_menu.rs | 28 +++++++++++++++++++++++++++
3 files changed, 48 insertions(+)

Detailed changes

Cargo.lock 🔗

@@ -974,6 +974,14 @@ dependencies = [
  "workspace",
 ]
 
+[[package]]
+name = "context_menu"
+version = "0.1.0"
+dependencies = [
+ "gpui",
+ "theme",
+]
+
 [[package]]
 name = "core-foundation"
 version = "0.9.3"

crates/context_menu/Cargo.toml 🔗

@@ -0,0 +1,12 @@
+[package]
+name = "context_menu"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+path = "src/context_menu.rs"
+doctest = false
+
+[dependencies]
+gpui = { path = "../gpui" }
+theme = { path = "../theme" }

crates/context_menu/src/context_menu.rs 🔗

@@ -0,0 +1,28 @@
+use gpui::{Entity, View};
+
+enum ContextMenuItem {
+    Item {
+        label: String,
+        action: Box<dyn Action>,
+    },
+    Separator,
+}
+
+pub struct ContextMenu {
+    position: Vector2F,
+    items: Vec<ContextMenuItem>,
+}
+
+impl Entity for ContextMenu {
+    type Event = ();
+}
+
+impl View for ContextMenu {
+    fn ui_name() -> &'static str {
+        "ContextMenu"
+    }
+
+    fn render(&mut self, cx: &mut gpui::RenderContext<'_, Self>) -> gpui::ElementBox {
+        Overlay::new().with_abs_position(self.position).boxed()
+    }
+}