faststep 0.1.0

UIKit-inspired embedded UI framework built on embedded-graphics
Documentation
#[path = "support/mod.rs"]
mod support;

use embedded_graphics::{
    prelude::{Point, Size},
    primitives::Rectangle,
};
use faststep::{
    Localized, SplitAxis, SplitView, StackView, TabSpec, TabView, TouchEvent, TouchPhase,
};

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
enum Screen {
    Devices,
    DeviceDetail,
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
enum TabId {
    Home,
    Logs,
    Settings,
}

fn main() {
    let bounds = Rectangle::new(Point::zero(), Size::new(320, 240));
    let split = SplitView::new(SplitAxis::Horizontal, 620, 12);
    let _layout = split.layout(bounds);

    let mut stack = StackView::<Screen, _, 4>::new(Screen::Devices, |screen| match screen {
        Screen::Devices => Localized::new("screen.devices", "Devices"),
        Screen::DeviceDetail => Localized::new("screen.detail", "Device"),
    });
    let _ = stack.push_view(Screen::DeviceDetail);
    let _ = stack.motion(bounds);
    let _ = stack.handle_touch(
        TouchEvent::new(Point::new(12, 12), TouchPhase::Start, 1),
        bounds,
    );

    let tabs = [
        TabSpec {
            key: TabId::Home,
            icon: "H",
            title: Localized::new("tab.home", "Home"),
        },
        TabSpec {
            key: TabId::Logs,
            icon: "L",
            title: Localized::new("tab.logs", "Logs"),
        },
        TabSpec {
            key: TabId::Settings,
            icon: "S",
            title: Localized::new("tab.settings", "Settings"),
        },
    ];
    let mut tab_view = TabView::new(tabs, 0);
    let _ = tab_view.content_frame(bounds, &support::theme());
    let _ = tab_view.handle_touch(
        TouchEvent::new(Point::new(200, 220), TouchPhase::End, 2),
        bounds,
        &support::theme(),
    );
}