buoyant 0.6.1

SwiftUI-like UIs in Rust for embedded devices
Documentation
use core::time::Duration;

use embedded_touch::{Tool, Touch};

use buoyant::{
    environment::DefaultEnvironment,
    event::Event,
    primitives::{Point, Size},
    view::prelude::*,
};

#[test]
fn nonzero_opacity_hands_off_event() {
    let view = Button::new(|x: &mut u32| *x += 1, |_| Rectangle).opacity(1);
    let mut x = 0;
    let mut state = view.build_state(&mut x);
    let layout = view.layout(
        &Size::new(100, 20).into(),
        &DefaultEnvironment::default(),
        &mut x,
        &mut state,
    );
    let mut tree = view.render_tree(
        &layout,
        Point::zero(),
        &DefaultEnvironment::default(),
        &mut x,
        &mut state,
    );

    view.handle_event(
        &Event::Touch(Touch::new(
            0,
            Point::zero().into(),
            embedded_touch::Phase::Started,
            Tool::Finger,
        )),
        &buoyant::event::EventContext::new(Duration::ZERO),
        &mut tree,
        &mut x,
        &mut state,
    );
    view.handle_event(
        &Event::Touch(Touch::new(
            0,
            Point::zero().into(),
            embedded_touch::Phase::Ended,
            Tool::Finger,
        )),
        &buoyant::event::EventContext::new(Duration::ZERO),
        &mut tree,
        &mut x,
        &mut state,
    );

    assert_eq!(x, 1);
}

#[test]
fn zero_opacity_skips_event_handling() {
    let view = Button::new(|x: &mut u32| *x += 1, |_| Rectangle).opacity(0);
    let mut x = 0;
    let mut state = view.build_state(&mut x);
    let layout = view.layout(
        &Size::new(100, 20).into(),
        &DefaultEnvironment::default(),
        &mut x,
        &mut state,
    );
    let mut tree = view.render_tree(
        &layout,
        Point::zero(),
        &DefaultEnvironment::default(),
        &mut x,
        &mut state,
    );

    view.handle_event(
        &Event::Touch(Touch::new(
            0,
            Point::zero().into(),
            embedded_touch::Phase::Started,
            Tool::Finger,
        )),
        &buoyant::event::EventContext::new(Duration::ZERO),
        &mut tree,
        &mut x,
        &mut state,
    );
    view.handle_event(
        &Event::Touch(Touch::new(
            0,
            Point::zero().into(),
            embedded_touch::Phase::Ended,
            Tool::Finger,
        )),
        &buoyant::event::EventContext::new(Duration::ZERO),
        &mut tree,
        &mut x,
        &mut state,
    );

    assert_eq!(x, 0);
}