pierro 0.1.0

An immediate mode UI library for Rust
Documentation

use crate::{Axis, Margin, PerAxis, Response, Size, UINodeParams, UI};

use super::{h_spacing, horizontal, v_spacing, vertical, Theme};

fn line_params(ui: &mut UI, axis: Axis) -> UINodeParams {
    let theme = ui.style::<Theme>(); 
    let stroke_color = theme.stroke;
    let stroke_width = theme.widget_stroke_width;
    UINodeParams::new_per_axis(PerAxis::along_across(axis, Size::fr(1.0), Size::px(stroke_width).no_shrink()))
        .with_fill(stroke_color)
}

pub fn h_line(ui: &mut UI) {
    let params = line_params(ui, Axis::X);
    ui.node(params);
}

pub fn v_line(ui: &mut UI) {
    let params = line_params(ui, Axis::Y);
    ui.node(params);
}

pub fn h_divider(ui: &mut UI) {
    let theme = ui.style::<Theme>();
    let margin = theme.widget_margin;
    horizontal(ui, |ui| {
        h_spacing(ui, margin);
        h_line(ui);
        h_spacing(ui, margin);
    });
}

pub fn v_divider(ui: &mut UI) {
    let theme = ui.style::<Theme>();
    let margin = theme.widget_margin;
    vertical(ui, |ui| {
        v_spacing(ui, margin);
        h_line(ui);
        v_spacing(ui, margin);
    });
}

const INTERACTION_MARGIN: Margin = Margin::same(5.0);

pub fn h_draggable_line(ui: &mut UI) -> Response {
    let params = line_params(ui, Axis::X)
        .with_interaction_margin(INTERACTION_MARGIN)
        .sense_mouse()
        .with_interaction_priority();
    ui.node(params)
}

pub fn v_draggable_line(ui: &mut UI) -> Response {
    let params = line_params(ui, Axis::Y)
        .with_interaction_margin(INTERACTION_MARGIN)
        .sense_mouse()
        .with_interaction_priority();
    ui.node(params)
}