rgx 0.9.0

A 2D graphics toolkit for rust
Documentation
use std::ops::ControlFlow;

use rgx::gfx::*;
use rgx::ui::text::{FontFormat, FontId, Text};

use rgx::ui::{center, hstack, Widget};
use rgx::ui::{WidgetEvent, WidgetExt};

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

struct Element(Rgba8, f32, usize);

impl<T> Widget<T> for Element {
    fn paint(&mut self, mut canvas: rgx::ui::Canvas<'_>, _data: &T) {
        canvas.fill(canvas.bounds(), self.0);
        canvas.stroke(canvas.bounds(), self.1, Rgba8::WHITE);
        canvas.paint(Text::new(format!("{}", self.2)));
    }

    fn display(&self) -> String {
        format!("Element({})", self.0)
    }

    fn event(
        &mut self,
        event: &rgx::ui::WidgetEvent,
        ctx: &rgx::ui::Context<'_>,
        _data: &mut T,
    ) -> ControlFlow<()> {
        match event {
            WidgetEvent::MouseDown(_) => {
                self.0 = self.0.invert();
            }
            WidgetEvent::MouseUp(_) => {
                if ctx.hot {
                    self.2 += 1;
                } else {
                    self.1 = 0.0;
                }
                self.0 = self.0.invert();

                return ControlFlow::Break(());
            }
            WidgetEvent::MouseEnter => {
                self.1 = 1.0;

                return ControlFlow::Break(());
            }
            WidgetEvent::MouseExit => {
                self.1 = 0.0;

                return ControlFlow::Break(());
            }
            _ => {}
        }
        ControlFlow::Continue(())
    }
}

#[derive(Default, Debug, PartialEq, Eq)]
struct State {
    clicks: u64,
    hot: bool,
}

fn main() -> anyhow::Result<()> {
    let items = vec![
        Element(Rgba8::RED, 0., 0).sized([32., 32.]).boxed(),
        Element(Rgba8::GREEN, 0., 0).sized([32., 32.]).boxed(),
        Element(Rgba8::BLUE, 0., 0).sized([32., 32.]).boxed(),
    ];
    let ui = center(hstack(items).spacing(16.));

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