aura-gui 0.3.0

UI nativa acelerada por GPU para escritorio, Android e iOS, en un solo crate: estilo tipo Tailwind, componentes, sombras, animaciones y agentes de IA. Reposo a cero. Licencia AGPL-3.0 o comercial.
//! `canvas` pinta con su cierre sobre el rectángulo maquetado del elemento.

use aura_ui::core::{Pixels, Rgba, Size};
use aura_ui::view::prelude::*;
use aura_ui::view::test_context::TestWindow;
use std::cell::RefCell;
use std::rc::Rc;

struct Chart {
    seen: Rc<RefCell<Vec<Size>>>,
}

impl Component for Chart {
    fn view(&mut self, _cx: &mut ViewContext<Self>) -> impl IntoElement {
        let seen = self.seen.clone();
        div()
            .p_2()
            .child(
                canvas(move |bounds, cx| {
                    seen.borrow_mut().push(bounds.size);
                    cx.paint_rounded_rect(bounds, Rgba::new(1.0, 0.0, 0.0, 1.0), Pixels(2.0));
                })
                .w(px(120.0))
                .h(px(40.0)),
            )
            .into_element()
    }
}

#[test]
fn el_cierre_recibe_el_tamano_del_elemento() {
    let seen = Rc::new(RefCell::new(Vec::new()));
    let (mut test, _) = TestWindow::new({
        let seen = seen.clone();
        move |_| Chart { seen }
    });
    test.window.draw(None);
    let sizes = seen.borrow();
    assert!(!sizes.is_empty(), "se pintó al menos una vez");
    assert_eq!((sizes[0].width.0, sizes[0].height.0), (120.0, 40.0));
}