| name | gpui-context |
| description | Context management in GPUI including App, Window, and AsyncApp. Use when working with contexts, entity updates, or window operations. Different context types provide different capabilities for UI rendering, entity management, and async operations. |
Overview
GPUI uses different context types for different scenarios:
Context Types:
App: Global app state, entity creation
Window: Window-specific operations, painting, layout
Context<T>: Entity-specific context for component T
AsyncApp: Async context for foreground tasks
AsyncWindowContext: Async context with window access
Quick Start
Context - Component Context
impl MyComponent {
fn update_state(&mut self, cx: &mut Context<Self>) {
self.value = 42;
cx.notify();
cx.spawn(async move |cx| {
}).detach();
let entity = cx.entity();
}
}
App - Global Context
fn main() {
let app = Application::new();
app.run(|cx: &mut App| {
let entity = cx.new(|cx| MyState::default());
cx.open_window(WindowOptions::default(), |window, cx| {
cx.new(|cx| Root::new(view, window, cx))
});
});
}
Window - Window Context
impl Render for MyView {
fn render(&mut self, window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
let is_focused = window.is_window_focused();
let bounds = window.bounds();
div().child("Content")
}
}
AsyncApp - Async Context
cx.spawn(async move |cx: &mut AsyncApp| {
let data = fetch_data().await;
entity.update(cx, |state, inner_cx| {
state.data = data;
inner_cx.notify();
}).ok();
}).detach();
Common Operations
Entity Operations
let entity = cx.new(|cx| MyState::default());
entity.update(cx, |state, cx| {
state.value = 42;
cx.notify();
});
let value = entity.read(cx).value;
Notifications and Events
cx.notify();
cx.emit(MyEvent::Updated);
cx.observe(&entity, |this, observed, cx| {
}).detach();
cx.subscribe(&entity, |this, source, event, cx| {
}).detach();
Window Operations
let focused = window.is_window_focused();
let bounds = window.bounds();
let scale = window.scale_factor();
window.remove_window();
Async Operations
cx.spawn(async move |cx| {
}).detach();
cx.background_spawn(async move {
}).detach();
Context Hierarchy
App (Global)
└─ Window (Per-window)
└─ Context<T> (Per-component)
└─ AsyncApp (In async tasks)
└─ AsyncWindowContext (Async + Window)
Reference Documentation
- API Reference: See api-reference.md
- Complete context API, methods, conversions
- Entity operations, window operations
- Async contexts, best practices