carbide_core 0.70.1

An easy-to-use, 100% Rust, extensible 2D GUI library.
Documentation
use crate::position::Dimensions;
use crate::render::primitive::Primitive;
use crate::render::primitive_walker::PrimitiveWalker;
use crate::state::environment::Environment;
use crate::widget::primitive::Widget;
use crate::state::global_state::GlobalState;

pub struct CPrimitives {
    pub primitives: Vec<Primitive>
}

impl CPrimitives {
    pub fn new<S: GlobalState>(window_dimensions: Dimensions, root: &mut Box<dyn Widget<S>>, environment: &mut Environment<S>) -> Self {
        root.calculate_size(window_dimensions, environment);

        root.set_x(window_dimensions[0] / 2.0 - root.get_width() / 2.0);
        root.set_y(window_dimensions[1]/2.0-root.get_height()/2.0);

        root.position_children();

        let prims: Vec<Primitive> = root.get_primitives(environment.get_fonts_map());
        CPrimitives {
            primitives: prims
        }
    }
}

impl PrimitiveWalker for CPrimitives {
    fn next_primitive(&mut self) -> Option<Primitive> {
        return if !self.primitives.is_empty() {
            Some(self.primitives.remove(0))
        } else {
            None
        }
    }
}