diff --git a/src/elements/paginator.rs b/src/elements/paginator.rs index 662db87..7ff6270 100644 --- a/src/elements/paginator.rs +++ b/src/elements/paginator.rs @@ -11,6 +11,7 @@ use crate::{ pub struct Paginator { children: Vec>, index: usize, + render: (u16, u16), } impl Paginator { @@ -18,28 +19,43 @@ impl Paginator { Self { children: Vec::new(), index: 0, + render: (0, 0), } } } impl Element for Paginator { fn render( + &mut self, + scope: &mut crate::prelude::RenderScope, + _: &crate::render_scope::RenderContext, + ) { + scope.use_area(self.render.0, self.render.1); + } + + fn after_render( &mut self, parent_scope: &mut crate::render_scope::RenderScope, render_context: &crate::render_scope::RenderContext, ) { if let Some(widget) = self.children.get(self.index) { - let mut transform = parent_scope.get_transform().clone(); - let mut transform2 = transform.clone(); - (transform2.width, transform2.height) = parent_scope.get_size_or_parent(); + let mut transform = { + let (width, height) = parent_scope.get_size_or_parent(); + let mut t = parent_scope.get_transform().clone(); + t.width = width; + t.height = height; + t.transform_parent(parent_scope.get_parent_transform()); + t + }; let mut scope = crate::render_scope::RenderScope::new(); - scope.set_parent_transform(transform2.clone()); + scope.set_parent_transform(transform.clone()); + transform.height = 0; let mut renderer = DivRenderer(&mut transform); scope.render_widget(&mut renderer, render_context.get_context(), widget); - parent_scope.use_area(transform2.width, transform2.height); + self.render = (transform.width, transform.height); } }