From 89519b152199ed46b3de0c9f1070bdd5d147c7d4 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 19 Sep 2023 08:46:02 -0600 Subject: [PATCH] WIP --- crates/storybook/src/gpui3/app.rs | 11 +++- crates/storybook/src/gpui3/geometry.rs | 4 +- crates/storybook/src/gpui3/mod.rs | 1 + crates/storybook/src/gpui3/platform.rs | 58 +++++++++++++++++++++ crates/storybook/src/gpui3/platform/test.rs | 0 crates/storybook/src/gpui3/window.rs | 10 +++- 6 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 crates/storybook/src/gpui3/platform.rs create mode 100644 crates/storybook/src/gpui3/platform/test.rs diff --git a/crates/storybook/src/gpui3/app.rs b/crates/storybook/src/gpui3/app.rs index 92e498e6adc95955e1593c74910070011ad1d351..2222070888aceb696394680e76666798607c7d95 100644 --- a/crates/storybook/src/gpui3/app.rs +++ b/crates/storybook/src/gpui3/app.rs @@ -1,13 +1,15 @@ use anyhow::{anyhow, Result}; use slotmap::SlotMap; -use std::{any::Any, marker::PhantomData}; +use std::{any::Any, marker::PhantomData, rc::Rc}; use super::{ + platform::Platform, window::{Window, WindowHandle, WindowId}, Context, LayoutId, Reference, View, WindowContext, }; pub struct AppContext { + platform: Rc, pub(crate) entities: SlotMap>>, pub(crate) windows: SlotMap>, // We recycle this memory across layout requests. @@ -15,14 +17,19 @@ pub struct AppContext { } impl AppContext { - pub fn new() -> Self { + pub fn new(platform: Rc) -> Self { AppContext { + platform, entities: SlotMap::with_key(), windows: SlotMap::with_key(), layout_id_buffer: Default::default(), } } + pub fn test() -> Self { + Self::new(TestPlatform::new()) + } + pub fn open_window( &mut self, build_root_view: impl FnOnce(&mut WindowContext) -> View, diff --git a/crates/storybook/src/gpui3/geometry.rs b/crates/storybook/src/gpui3/geometry.rs index f4c517138a2164af47cb32fc619523d0dde40877..64293d121bec6f067bda42e9b77213d2ddc6576d 100644 --- a/crates/storybook/src/gpui3/geometry.rs +++ b/crates/storybook/src/gpui3/geometry.rs @@ -31,7 +31,7 @@ unsafe impl Zeroable for Point {} unsafe impl Pod for Point {} -#[derive(Refineable, Default, Clone, Copy, Debug)] +#[derive(Refineable, Default, Clone, Copy, Debug, PartialEq)] #[refineable(debug)] pub struct Size { pub width: T, @@ -65,7 +65,7 @@ impl Size { } } -#[derive(Refineable, Clone, Default, Debug)] +#[derive(Refineable, Clone, Default, Debug, PartialEq)] #[refineable(debug)] pub struct Bounds { pub origin: Point, diff --git a/crates/storybook/src/gpui3/mod.rs b/crates/storybook/src/gpui3/mod.rs index 36c9040f38e68a9936e5e7a9a66bb73c4e18e633..79fba6f447767e0654ccc390a3c7dfba4fbb131a 100644 --- a/crates/storybook/src/gpui3/mod.rs +++ b/crates/storybook/src/gpui3/mod.rs @@ -3,6 +3,7 @@ mod color; mod element; mod elements; mod geometry; +mod platform; mod renderer; mod scene; mod style; diff --git a/crates/storybook/src/gpui3/platform.rs b/crates/storybook/src/gpui3/platform.rs new file mode 100644 index 0000000000000000000000000000000000000000..f475ce39406ae9322dc278412b44bb3d5ef62eff --- /dev/null +++ b/crates/storybook/src/gpui3/platform.rs @@ -0,0 +1,58 @@ +mod test; +use super::{AnyWindowHandle, Bounds, Point}; +use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle}; + +pub trait Platform { + fn open_window( + &self, + handle: AnyWindowHandle, + options: WindowOptions, + ) -> Box; +} + +pub trait PlatformWindow: HasRawWindowHandle + HasRawDisplayHandle {} + +#[derive(Debug)] +pub struct WindowOptions<'a> { + pub bounds: WindowBounds, + pub titlebar: Option>, + pub center: bool, + pub focus: bool, + pub show: bool, + pub kind: WindowKind, + pub is_movable: bool, +} + +#[derive(Debug, Default)] +pub struct TitlebarOptions<'a> { + pub title: Option<&'a str>, + pub appears_transparent: bool, + pub traffic_light_position: Option>, +} + +#[derive(Copy, Clone, Debug)] +pub enum Appearance { + Light, + VibrantLight, + Dark, + VibrantDark, +} + +impl Default for Appearance { + fn default() -> Self { + Self::Light + } +} + +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub enum WindowKind { + Normal, + PopUp, +} + +#[derive(Copy, Clone, Debug, PartialEq)] +pub enum WindowBounds { + Fullscreen, + Maximized, + Fixed(Bounds), +} diff --git a/crates/storybook/src/gpui3/platform/test.rs b/crates/storybook/src/gpui3/platform/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/crates/storybook/src/gpui3/window.rs b/crates/storybook/src/gpui3/window.rs index 3b0f561643f7b1bd6c54d71503a1d25647e8d0bb..28e0bbb8c4c415c6f51bd5276adff0ce5c221daa 100644 --- a/crates/storybook/src/gpui3/window.rs +++ b/crates/storybook/src/gpui3/window.rs @@ -5,7 +5,10 @@ use super::{ use anyhow::Result; use derive_more::{Deref, DerefMut}; use gpui2::Reference; -use std::{any::Any, marker::PhantomData}; +use std::{ + any::{Any, TypeId}, + marker::PhantomData, +}; pub struct AnyWindow {} @@ -216,6 +219,11 @@ impl WindowHandle { } } +pub struct AnyWindowHandle { + id: WindowId, + state_type: TypeId, +} + #[derive(Clone)] pub struct Layout { pub order: u32,