view.rs

 1use crate::{
 2    adapter::AdapterElement,
 3    element::{AnyElement, Element},
 4};
 5use gpui::ViewContext;
 6
 7pub fn view<F, E>(mut render: F) -> ViewFn
 8where
 9    F: 'static + FnMut(&mut ViewContext<ViewFn>) -> E,
10    E: Element<ViewFn>,
11{
12    ViewFn(Box::new(move |cx| (render)(cx).into_any()))
13}
14
15pub struct ViewFn(Box<dyn FnMut(&mut ViewContext<ViewFn>) -> AnyElement<ViewFn>>);
16
17impl gpui::Entity for ViewFn {
18    type Event = ();
19}
20
21impl gpui::View for ViewFn {
22    fn render(&mut self, cx: &mut ViewContext<Self>) -> gpui::AnyElement<Self> {
23        use gpui::Element as _;
24        AdapterElement((self.0)(cx)).into_any()
25    }
26}