guiver 0.1.0

GUI programming with Piet
Documentation
/**
This implements the "Counter" task from [7GUIs](https://eugenkiss.github.io/7guis/tasks/).
*/
use druid_shell::kurbo::Size;
use druid_shell::piet::Piet;
use druid_shell::Region;
use guiver::{run, Command, WidgetManager};
use guiver::{Application, SystemEvent};

pub(crate) struct App {
    widget_manager: WidgetManager,
}

impl App {
    pub(crate) fn new() -> Self {
        let mut widget_manager = WidgetManager::new();

        // Create the widgets.
        let padding = widget_manager.new_padding();
        let row = widget_manager.new_row();
        let column1 = widget_manager.new_column();
        let column2 = widget_manager.new_column();
        let placeholder1 = widget_manager.new_placeholder();
        let placeholder2 = widget_manager.new_placeholder();
        let placeholder3 = widget_manager.new_placeholder();
        let placeholder4 = widget_manager.new_placeholder();
        let placeholder5 = widget_manager.new_placeholder();
        let placeholder6 = widget_manager.new_placeholder();

        // Compose the widgets.
        let _ = widget_manager.send_commands(vec![
            Command::SetMainWidget(padding),
            Command::AppendChild(padding, row),
            Command::AppendChild(row, column1),
            Command::AppendChild(column1, placeholder1),
            Command::AppendChild(column1, placeholder2),
            Command::AppendChild(column1, placeholder3),
            Command::AppendChild(row, column2),
            Command::AppendChild(column2, placeholder4),
            Command::AppendChild(column2, placeholder5),
            Command::AppendChild(row, placeholder6),
        ]);

        App { widget_manager }
    }
}

impl Application for App {
    fn handle_system_event(&mut self, _system_event: &SystemEvent) {
        // Do nothing.
    }

    fn paint(&mut self, piet: &mut Piet, region: &Region) {
        // Paint the main widget.
        self.widget_manager.paint(piet, region).unwrap();
    }

    fn resize(&mut self, size: Size) {
        // Resize the main widget.
        self.widget_manager.resize(size);
    }
}

pub fn main() {
    run(Box::new(App::new()), "column", (400.0, 200.0).into());
}