simple-render 0.1.0

a simple immediate mode wayland ui renderer inspired by clay
Documentation
use super::runtime::run_inner;
use super::*;

#[derive(Debug, Clone)]
pub struct LayerOptions {
    pub namespace: String,
    pub width: u32,
    pub height: u32,
    pub output: Option<OutputTarget>,
    pub layer: Layer,
    pub anchor: Anchor,
    pub margins: Margins,
    pub exclusive_zone: i32,
    pub keyboard_interactivity: KeyboardInteractivity,
}

impl Default for LayerOptions {
    fn default() -> Self {
        Self {
            namespace: "simple-render".to_owned(),
            width: 256,
            height: 256,
            output: None,
            layer: Layer::Top,
            anchor: Anchor::Top,
            margins: Margins::default(),
            exclusive_zone: 0,
            keyboard_interactivity: KeyboardInteractivity::None,
        }
    }
}

impl LayerOptions {
    pub fn show<R>(self, renderer: R) -> Result<()>
    where
        R: Renderer + 'static,
    {
        run_inner(renderer, Some((DEFAULT_SURFACE_ID, self)), None, true)
    }

    pub fn show_with_commands<R>(self, renderer: R, receiver: RenderReceiver) -> Result<()>
    where
        R: Renderer + 'static,
    {
        run_inner(
            renderer,
            Some((DEFAULT_SURFACE_ID, self)),
            Some(receiver),
            true,
        )
    }
}

#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct Margins {
    pub top: i32,
    pub right: i32,
    pub bottom: i32,
    pub left: i32,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum OutputTarget {
    Any,
    Id(u32),
    Name(String),
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Layer {
    Background,
    Bottom,
    Top,
    Overlay,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum KeyboardInteractivity {
    None,
    Exclusive,
    OnDemand,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Anchor {
    Center,
    Top,
    TopLeft,
    TopRight,
    Bottom,
    BottomLeft,
    BottomRight,
    Left,
    Right,
    Fill,
    Position { x: i32, y: i32 },
}