gpui-base 0.6.0

Behavior, interaction, and infrastructure foundations for GPUI applications.
Documentation
use std::{cell::RefCell, rc::Rc};

use gpui::{Context, IntoElement, Render, Styled as _, TestAppContext, Window, div, px};
use gpui_base::ElementExt as _;

struct PrepaintHarness {
    captured: Rc<RefCell<Option<gpui::Bounds<gpui::Pixels>>>>,
}

impl Render for PrepaintHarness {
    fn render(&mut self, _: &mut Window, _: &mut Context<Self>) -> impl IntoElement {
        let captured = self.captured.clone();
        div()
            .size(px(80.))
            .on_prepaint(move |bounds, _, _| *captured.borrow_mut() = Some(bounds))
    }
}

#[gpui::test]
fn prepaint_callback_observes_the_parent_bounds(cx: &mut TestAppContext) {
    let captured = Rc::new(RefCell::new(None));
    let result = captured.clone();
    let (_, cx) = cx.add_window_view(move |_, _| PrepaintHarness { captured });

    cx.update(|window, cx| window.draw(cx).clear(cx));

    let bounds = result.borrow().expect("prepaint callback should run");
    assert_eq!(bounds.size.width, px(80.));
    assert_eq!(bounds.size.height, px(80.));
}