From 2f328f6762d7d21f81125567f8d2e1806866f046 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 5 Jul 2025 09:13:05 -0500 Subject: [PATCH] working grid dimensions --- src/elements/grid.rs | 72 +++++++++++++++++++++++++++++++------------- src/main.rs | 14 +++------ 2 files changed, 55 insertions(+), 31 deletions(-) diff --git a/src/elements/grid.rs b/src/elements/grid.rs index d9b0578..ad0b36a 100644 --- a/src/elements/grid.rs +++ b/src/elements/grid.rs @@ -26,27 +26,14 @@ impl Element for Arc { } fn after_render(&mut self, scope: &crate::render_scope::RenderScope) { - *self.transform.lock().unwrap() = scope.get_transform().clone(); - } + let mut t = self.transform.lock().unwrap(); + let st = scope.get_transform(); - fn as_any(&self) -> &dyn std::any::Any { - self - } + t.x = st.x; + t.y = st.y; - fn as_any_mut(&mut self) -> &mut dyn std::any::Any { - self - } -} - -impl Element for Arc { - fn render(&mut self, scope: &mut crate::render_scope::RenderScope) { - let transform = self.transform.lock().unwrap(); - let (w, h) = scope.get_size_or(transform.width, transform.height); - scope.draw_rect(w, h, self.color); - } - - fn after_render(&mut self, scope: &crate::render_scope::RenderScope) { - *self.transform.lock().unwrap() = scope.get_transform().clone(); + t.width = 0; + t.height = 0; } fn as_any(&self) -> &dyn std::any::Any { @@ -90,7 +77,15 @@ impl VGrid { } let elem_transform = scope.get_transform_mut(); - elem_transform.x += transform.x; + + transform.height += if transform.height == 0 { + elem_transform.height + } else { + elem_transform.height + r2.gap + }; + transform.width = transform.width.max(elem_transform.width); + + elem_transform.x = transform.x; elem_transform.y = transform.y; transform.y += elem_transform.height + r2.gap; @@ -103,6 +98,33 @@ impl VGrid { } } +impl Element for Arc { + fn render(&mut self, scope: &mut crate::render_scope::RenderScope) { + let transform = self.transform.lock().unwrap(); + let (w, h) = scope.get_size_or(transform.width, transform.height); + scope.draw_rect(w, h, self.color); + } + + fn after_render(&mut self, scope: &crate::render_scope::RenderScope) { + let mut t = self.transform.lock().unwrap(); + let st = scope.get_transform(); + + t.x = st.x; + t.y = st.y; + + t.width = 0; + t.height = 0; + } + + fn as_any(&self) -> &dyn std::any::Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn std::any::Any { + self + } +} + impl HGrid { pub fn new(color: u32, gap: u16) -> Arc { Arc::new(Self { @@ -135,8 +157,16 @@ impl HGrid { } let elem_transform = scope.get_transform_mut(); + + transform.width += if transform.width == 0 { + elem_transform.width + } else { + elem_transform.width + r2.gap + }; + transform.height = transform.height.max(elem_transform.height); + elem_transform.x = transform.x; - elem_transform.y += transform.y; + elem_transform.y = transform.y; transform.x += elem_transform.width + r2.gap; scope.draw(); diff --git a/src/main.rs b/src/main.rs index 89796ce..95e79ef 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,20 +13,14 @@ fn main() { let vgrid = VGrid::new(0xff0000, 1); - screen - .draw(vgrid.clone()) - .component(Transform::center().dimensions(34, 9)); + screen.draw(vgrid.clone()).component(Transform::center()); for _ in 1..6 { - let row = HGrid::new(0x000000, 1); + let row = HGrid::new(0xff0000, 1); - vgrid.draw( - screen - .draw(row.clone()) - .component(Transform::new().dimensions(5, 1)), - ); + vgrid.draw(screen.draw(row.clone())); - for i in 1..6 { + for i in 1..10 { row.draw( screen .draw((format!("Item {i}"), 0xff0000))