diff --git a/src/elements/div.rs b/src/elements/div.rs index 5067fdf..35b75c0 100644 --- a/src/elements/div.rs +++ b/src/elements/div.rs @@ -2,14 +2,14 @@ use std::sync::{Arc, Mutex}; use crate::{ extensions::Handler, - style::RawTransform, widget::{Element, Widget}, RenderWrapperEvent, }; pub struct Div { - transform: Mutex, color: u32, + children: Mutex, + rendered: Mutex, } impl Element for Arc
{ @@ -18,20 +18,16 @@ impl Element for Arc
{ 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(); - } - fn draw_child(&self, element: &Arc) { + *self.children.lock().unwrap() += 1; let r = self.clone(); element.inject(move |w| { let r = r.clone(); w.component(Handler::new(move |elem, e: &RenderWrapperEvent| { let scope = e.get_scope(); + let transform = scope.get_transform().clone(); + scope.clear(); - - let transform = r.transform.lock().unwrap(); - let (w, h) = scope.get_parent_size(); scope.set_parent_size(transform.width, transform.height); @@ -53,6 +49,17 @@ impl Element for Arc
{ elem.0.lock().unwrap().after_render(&scope); scope.set_parent_size(w, h); + + { + let mut rendered = r.rendered.lock().unwrap(); + let children = r.children.lock().unwrap(); + *rendered += 1; + if *rendered < *children { + scope.set_transform_raw(transform); + } else { + *rendered = 0; + } + } })) }) } @@ -69,8 +76,9 @@ impl Element for Arc
{ impl Div { pub fn new(color: u32) -> Arc { Arc::new(Div { - transform: Mutex::new(RawTransform::new()), color, + children: Mutex::new(0), + rendered: Mutex::new(0), }) } } diff --git a/src/render_scope.rs b/src/render_scope.rs index 44fc5e1..6d26d99 100644 --- a/src/render_scope.rs +++ b/src/render_scope.rs @@ -30,6 +30,10 @@ impl RenderScope { } } + pub fn set_transform_raw(&mut self, transform: RawTransform) { + self.transform = transform; + } + pub fn set_transform(&mut self, transform: &Transform) { transform.use_dimensions(&mut self.transform); transform.use_position(self.parent_width, self.parent_height, &mut self.transform); diff --git a/src/style.rs b/src/style.rs index 71dd4e4..c71b2e7 100644 --- a/src/style.rs +++ b/src/style.rs @@ -1,6 +1,6 @@ use crate::component; -#[derive(Clone)] +#[derive(Debug, Clone)] pub struct RawTransform { pub x: u16, pub y: u16,