WIP
This commit is contained in:
@@ -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<dyn Platform>,
|
||||
pub(crate) entities: SlotMap<EntityId, Option<Box<dyn Any>>>,
|
||||
pub(crate) windows: SlotMap<WindowId, Option<Window>>,
|
||||
// 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<dyn Platform>) -> 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<S: 'static>(
|
||||
&mut self,
|
||||
build_root_view: impl FnOnce(&mut WindowContext) -> View<S>,
|
||||
|
||||
@@ -31,7 +31,7 @@ unsafe impl<T: Clone + Debug + Zeroable + Pod> Zeroable for Point<T> {}
|
||||
|
||||
unsafe impl<T: Clone + Debug + Zeroable + Pod> Pod for Point<T> {}
|
||||
|
||||
#[derive(Refineable, Default, Clone, Copy, Debug)]
|
||||
#[derive(Refineable, Default, Clone, Copy, Debug, PartialEq)]
|
||||
#[refineable(debug)]
|
||||
pub struct Size<T: Clone + Debug> {
|
||||
pub width: T,
|
||||
@@ -65,7 +65,7 @@ impl Size<Length> {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Refineable, Clone, Default, Debug)]
|
||||
#[derive(Refineable, Clone, Default, Debug, PartialEq)]
|
||||
#[refineable(debug)]
|
||||
pub struct Bounds<T: Clone + Debug> {
|
||||
pub origin: Point<T>,
|
||||
|
||||
@@ -3,6 +3,7 @@ mod color;
|
||||
mod element;
|
||||
mod elements;
|
||||
mod geometry;
|
||||
mod platform;
|
||||
mod renderer;
|
||||
mod scene;
|
||||
mod style;
|
||||
|
||||
@@ -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<dyn PlatformWindow>;
|
||||
}
|
||||
|
||||
pub trait PlatformWindow: HasRawWindowHandle + HasRawDisplayHandle {}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct WindowOptions<'a> {
|
||||
pub bounds: WindowBounds,
|
||||
pub titlebar: Option<TitlebarOptions<'a>>,
|
||||
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<Point<f32>>,
|
||||
}
|
||||
|
||||
#[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<f32>),
|
||||
}
|
||||
@@ -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<S> WindowHandle<S> {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct AnyWindowHandle {
|
||||
id: WindowId,
|
||||
state_type: TypeId,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct Layout {
|
||||
pub order: u32,
|
||||
|
||||
Reference in New Issue
Block a user