60 lines
1.4 KiB
Rust
60 lines
1.4 KiB
Rust
use gpui::{div, prelude::*};
|
|
|
|
use crate::dashboard;
|
|
use crate::query;
|
|
use crate::theme;
|
|
use crate::titlebar;
|
|
use crate::{api, app};
|
|
|
|
pub struct Global {
|
|
pub safe_area: gpui::Bounds<gpui::Pixels>,
|
|
pub current_theme: theme::Theme,
|
|
}
|
|
|
|
pub struct Chrome {}
|
|
|
|
impl Chrome {
|
|
pub fn new(window: &mut gpui::Window, cx: &mut gpui::Context<Self>) -> Self {
|
|
cx.observe_window_appearance(window, |_, window, cx| {
|
|
cx.update_global::<app::Global, ()>(|global, cx| {
|
|
global.current_theme = window.appearance().into();
|
|
cx.notify();
|
|
});
|
|
})
|
|
.detach();
|
|
|
|
Self {}
|
|
}
|
|
}
|
|
|
|
impl gpui::Render for Chrome {
|
|
fn render(
|
|
&mut self,
|
|
_window: &mut gpui::Window,
|
|
cx: &mut gpui::Context<Self>,
|
|
) -> impl gpui::IntoElement {
|
|
let title_bar = cx.new(|cx| titlebar::TitleBar::new(cx));
|
|
|
|
let dashboard = cx.new(|_| dashboard::Screen {
|
|
text: "World".into(),
|
|
});
|
|
|
|
div()
|
|
.flex()
|
|
.flex_col()
|
|
.size_full()
|
|
.child(title_bar)
|
|
.child(dashboard)
|
|
}
|
|
}
|
|
|
|
impl gpui::Global for Global {}
|
|
|
|
pub fn current_theme<'a, E>(cx: &'a gpui::Context<E>) -> &'a theme::Theme {
|
|
&cx.global::<Global>().current_theme
|
|
}
|
|
|
|
pub fn query_store<'a, E>(cx: &'a gpui::Context<E>) -> &'a query::Store<api::QueryContext> {
|
|
cx.global::<query::Store<api::QueryContext>>()
|
|
}
|