rgx 0.9.0

A 2D graphics toolkit for rust
Documentation
use rgx::gfx::*;
use rgx::math::*;
use rgx::ui::text::{FontFormat, FontId, Text};
use rgx::ui::widgets::{Align, Painter, SizedBox, ZStack};
use rgx::ui::Interact;

#[derive(Default)]
struct Data {
    red: (u64, bool),
    blue: (u64, bool),
    green: (u64, bool),
}

const DEFAULT_FONT: &[u8] = include_bytes!("assets/monospace.uf2");

fn main() -> anyhow::Result<()> {
    let ui = ZStack::new()
        .push(Align::new(
            SizedBox::new(Painter::new(|mut c, data: &Data| {
                c.fill(Rect::origin(c.size), Rgba8::BLUE.alpha(0x55));
                c.paint(Text::new(format!("{} ({})", data.blue.0, data.blue.1)));
            }))
            .width(256.)
            .height(256.)
            .on_click(|_, data| {
                eprintln!("CLICK");
                data.blue.0 += 1;
            })
            .on_hover(|hovered, _, data| {
                data.blue.1 = hovered;
            }),
        ))
        .push(Align::new(
            SizedBox::new(Painter::new(|mut c, data: &Data| {
                c.fill(Rect::origin(c.size), Rgba8::RED.alpha(0x55));
                c.paint(Text::new(format!("{} ({})", data.red.0, data.red.1)));
            }))
            .width(192.)
            .height(192.)
            .on_click(|_, data| {
                data.red.0 += 1;
            })
            .on_hover(|hovered, _, data| {
                data.red.1 = hovered;
            }),
        ))
        .push(Align::new(
            SizedBox::new(Painter::new(|mut c, data: &Data| {
                c.fill(Rect::origin(c.size), Rgba8::GREEN.alpha(0x55));
                c.paint(Text::new(format!("{} ({})", data.green.0, data.green.1)));
            }))
            .width(128.)
            .height(128.)
            .on_click(|_, data| {
                data.green.0 += 1;
            })
            .on_hover(|hovered, _, data| {
                data.green.1 = hovered;
            }),
        ));

    rgx::logger::init(log::Level::Debug)?;
    rgx::Application::new("button")
        .fonts([(FontId::default(), DEFAULT_FONT, FontFormat::UF2)])?
        .launch(ui, Data::default())
        .map_err(Into::into)
}