Files
novem/src/app.rs

53 lines
1.3 KiB
Rust
Raw Normal View History

2026-05-06 01:42:38 +08:00
use gpui::AppContext;
use gpui::BorrowAppContext;
2026-04-26 16:06:49 +01:00
use crate::api;
2026-04-21 11:50:04 +01:00
use crate::query;
2026-04-20 15:13:26 +01:00
use crate::theme;
pub struct Global {
pub safe_area: gpui::Bounds<gpui::Pixels>,
2026-04-26 00:46:11 +01:00
pub theme_family: theme::ThemeFamily,
2026-04-20 15:13:26 +01:00
pub current_theme: theme::Theme,
2026-04-23 11:18:43 +01:00
pub rng: rand::prelude::ThreadRng,
2026-04-20 15:13:26 +01:00
}
impl gpui::Global for Global {}
2026-04-23 11:18:43 +01:00
pub fn current_theme(cx: &gpui::App) -> &theme::Theme {
2026-04-20 15:13:26 +01:00
&cx.global::<Global>().current_theme
}
2026-04-23 11:18:43 +01:00
pub fn rng(cx: &mut gpui::App) -> &mut rand::prelude::ThreadRng {
&mut cx.global_mut::<Global>().rng
}
2026-04-24 19:22:25 +01:00
pub fn query_store(cx: &gpui::App) -> &query::Store<api::QueryContext> {
2026-04-21 11:50:04 +01:00
cx.global::<query::Store<api::QueryContext>>()
2026-04-20 15:13:26 +01:00
}
2026-05-06 01:42:38 +08:00
pub fn open_window<V>(
cx: &mut gpui::App,
options: gpui::WindowOptions,
screen: impl FnOnce(&mut gpui::Window, &mut gpui::Context<V>) -> V,
) -> anyhow::Result<()>
where
V: gpui::Render,
{
cx.open_window(options, |window, cx| {
cx.new(|cx| {
cx.observe_window_appearance(window, |_, window, cx| {
cx.update_global::<Global, ()>(|global, cx| {
global.current_theme = global
.theme_family
.theme_for_appearance(window.appearance());
cx.notify();
});
})
.detach();
screen(window, cx)
})
})
.map(|_| ())
}