diff --git a/src/main.rs b/src/main.rs index 95e79ef..912299d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,22 +1,27 @@ use osui::{ - elements::grid::{HGrid, VGrid}, - extensions::{id::IdExtension, tick::TickExtension}, + elements::{ + div::Div, + grid::{HGrid, VGrid}, + }, style::Transform, Screen, }; fn main() { let mut screen = Screen::new(); - let document = IdExtension::new(); - screen.extension(document.clone()); - screen.extension(TickExtension(10)); - let vgrid = VGrid::new(0xff0000, 1); + let container = Div::new(0xffff00); - screen.draw(vgrid.clone()).component(Transform::center()); + screen + .draw(container.clone()) + .component(Transform::center().dimensions(70, 11)); + + let vgrid = VGrid::new(0x0000ff, 1); + + container.draw(screen.draw(vgrid.clone()).component(Transform::center())); for _ in 1..6 { - let row = HGrid::new(0xff0000, 1); + let row = HGrid::new(0xff00ff, 1); vgrid.draw(screen.draw(row.clone())); diff --git a/src/style.rs b/src/style.rs index 5e3e112..71dd4e4 100644 --- a/src/style.rs +++ b/src/style.rs @@ -110,16 +110,30 @@ impl Dimension { impl Position { pub fn use_position(&self, size: u16, parent: u16, m: i32, r: &mut u16) { - match self { - Self::Center => *r = (parent - size) / 2, - Self::Const(n) => *r = *n, - Self::End => *r = parent - size, - } + let base = match self { + Self::Center => { + if parent < size { + return; + } + (parent - size) / 2 + } + Self::Const(n) => *n, + Self::End => { + if parent < size { + return; + } + parent - size + } + }; - if m > 0 { - *r += m as u16; + let adjusted = if m >= 0 { + base.checked_add(m as u16) } else { - *r -= -m as u16; + base.checked_sub((-m) as u16) + }; + + if let Some(val) = adjusted { + *r = val; } } }