Added after render and render on extension with child handlers #26
This commit is contained in:
+14
-4
@@ -20,12 +20,20 @@ impl Div {
|
||||
}
|
||||
|
||||
impl Element for Div {
|
||||
fn render(&mut self, scope: &mut crate::render_scope::RenderScope) {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
) {
|
||||
let (width, height) = scope.get_size_or(self.size.0, self.size.1);
|
||||
scope.use_area(width, height);
|
||||
}
|
||||
|
||||
fn after_render(&mut self, scope: &mut crate::render_scope::RenderScope) {
|
||||
fn after_render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
ctx: &crate::extensions::Context,
|
||||
) {
|
||||
let mut transform = scope.get_transform().clone();
|
||||
let (w, h) = scope.get_parent_size();
|
||||
scope.set_parent_size(transform.width, transform.height);
|
||||
@@ -43,7 +51,8 @@ impl Element for Div {
|
||||
if let Some(t) = elem.get() {
|
||||
scope.set_transform(&t);
|
||||
}
|
||||
elem.get_elem().render(scope);
|
||||
elem.get_elem().render(scope, ctx);
|
||||
ctx.render(elem, scope);
|
||||
if let Some(t) = elem.get() {
|
||||
scope.set_transform(&t);
|
||||
}
|
||||
@@ -54,7 +63,8 @@ impl Element for Div {
|
||||
t.y += transform.y + transform.py;
|
||||
|
||||
scope.draw();
|
||||
elem.get_elem().after_render(scope);
|
||||
elem.get_elem().after_render(scope, ctx);
|
||||
ctx.after_render(elem, scope);
|
||||
}
|
||||
scope.set_parent_size(w, h);
|
||||
self.size = (transform.width, transform.height);
|
||||
|
||||
+28
-8
@@ -38,12 +38,20 @@ impl FlexCol {
|
||||
}
|
||||
|
||||
impl Element for FlexRow {
|
||||
fn render(&mut self, scope: &mut crate::render_scope::RenderScope) {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
) {
|
||||
let (width, height) = scope.get_size_or(self.size.0, self.size.1);
|
||||
scope.use_area(width, height);
|
||||
}
|
||||
|
||||
fn after_render(&mut self, scope: &mut crate::render_scope::RenderScope) {
|
||||
fn after_render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
ctx: &crate::extensions::Context,
|
||||
) {
|
||||
let mut transform = scope.get_transform().clone();
|
||||
let (w, h) = scope.get_parent_size();
|
||||
scope.set_parent_size(transform.width, transform.height);
|
||||
@@ -62,7 +70,8 @@ impl Element for FlexRow {
|
||||
if let Some(t) = elem.get() {
|
||||
scope.set_transform(&t);
|
||||
}
|
||||
elem.get_elem().render(scope);
|
||||
elem.get_elem().render(scope, ctx);
|
||||
ctx.render(elem, scope);
|
||||
if let Some(t) = elem.get() {
|
||||
scope.set_transform(&t);
|
||||
}
|
||||
@@ -77,7 +86,8 @@ impl Element for FlexRow {
|
||||
|
||||
scope.draw();
|
||||
|
||||
elem.get_elem().after_render(scope);
|
||||
elem.get_elem().after_render(scope, ctx);
|
||||
ctx.after_render(elem, scope);
|
||||
}
|
||||
scope.set_parent_size(w, h);
|
||||
self.size = (transform.width, transform.height);
|
||||
@@ -98,12 +108,20 @@ impl Element for FlexRow {
|
||||
}
|
||||
|
||||
impl Element for FlexCol {
|
||||
fn render(&mut self, scope: &mut crate::render_scope::RenderScope) {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
) {
|
||||
let (width, height) = scope.get_size_or(self.size.0, self.size.1);
|
||||
scope.use_area(width, height);
|
||||
}
|
||||
|
||||
fn after_render(&mut self, scope: &mut crate::render_scope::RenderScope) {
|
||||
fn after_render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
ctx: &crate::extensions::Context,
|
||||
) {
|
||||
let mut transform = scope.get_transform().clone();
|
||||
let (w, h) = scope.get_parent_size();
|
||||
scope.set_parent_size(transform.width, transform.height);
|
||||
@@ -122,7 +140,8 @@ impl Element for FlexCol {
|
||||
if let Some(t) = elem.get() {
|
||||
scope.set_transform(&t);
|
||||
}
|
||||
elem.get_elem().render(scope);
|
||||
elem.get_elem().render(scope, ctx);
|
||||
ctx.render(elem, scope);
|
||||
if let Some(t) = elem.get() {
|
||||
scope.set_transform(&t);
|
||||
}
|
||||
@@ -137,7 +156,8 @@ impl Element for FlexCol {
|
||||
|
||||
scope.draw();
|
||||
|
||||
elem.get_elem().after_render(scope);
|
||||
elem.get_elem().after_render(scope, ctx);
|
||||
ctx.after_render(elem, scope);
|
||||
}
|
||||
scope.set_parent_size(w, h);
|
||||
self.size = (transform.width, transform.height);
|
||||
|
||||
@@ -24,7 +24,11 @@ impl Heading {
|
||||
}
|
||||
|
||||
impl Element for Heading {
|
||||
fn render(&mut self, scope: &mut crate::prelude::RenderScope) {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::prelude::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
) {
|
||||
let mut s = String::new();
|
||||
for element in &self.children {
|
||||
if element.get::<NoRender>().is_some() {
|
||||
|
||||
@@ -11,7 +11,11 @@ pub struct Input {
|
||||
}
|
||||
|
||||
impl Element for Input {
|
||||
fn render(&mut self, scope: &mut crate::prelude::RenderScope) {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::prelude::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
) {
|
||||
let s = self.state.get();
|
||||
scope.draw_text(0, 0, &s);
|
||||
if let Some(c) = s.chars().nth(self.cursor) {
|
||||
|
||||
+5
-15
@@ -13,7 +13,11 @@ pub use paginator::*;
|
||||
use crate::Element;
|
||||
|
||||
impl Element for String {
|
||||
fn render(&mut self, scope: &mut crate::render_scope::RenderScope) {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
) {
|
||||
scope.draw_text(0, 0, self);
|
||||
}
|
||||
|
||||
@@ -25,17 +29,3 @@ impl Element for String {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl Element for (String, u32) {
|
||||
fn render(&mut self, scope: &mut crate::render_scope::RenderScope) {
|
||||
scope.draw_text_colored(0, 0, &self.0, self.1);
|
||||
}
|
||||
|
||||
fn as_any(&self) -> &dyn std::any::Any {
|
||||
self
|
||||
}
|
||||
|
||||
fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,12 +24,20 @@ impl Paginator {
|
||||
}
|
||||
|
||||
impl Element for Paginator {
|
||||
fn render(&mut self, scope: &mut crate::render_scope::RenderScope) {
|
||||
fn render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
_: &crate::extensions::Context,
|
||||
) {
|
||||
let (width, height) = scope.get_size_or(self.size.0, self.size.1);
|
||||
scope.use_area(width, height);
|
||||
}
|
||||
|
||||
fn after_render(&mut self, scope: &mut crate::render_scope::RenderScope) {
|
||||
fn after_render(
|
||||
&mut self,
|
||||
scope: &mut crate::render_scope::RenderScope,
|
||||
ctx: &crate::extensions::Context,
|
||||
) {
|
||||
if let Some(elem) = self.children.get(self.index) {
|
||||
if elem.get::<NoRender>().is_some() {
|
||||
return;
|
||||
@@ -46,7 +54,7 @@ impl Element for Paginator {
|
||||
if let Some(t) = elem.get() {
|
||||
scope.set_transform(&t);
|
||||
}
|
||||
elem.get_elem().render(scope);
|
||||
elem.get_elem().render(scope, ctx);
|
||||
if let Some(t) = elem.get() {
|
||||
scope.set_transform(&t);
|
||||
}
|
||||
@@ -57,7 +65,8 @@ impl Element for Paginator {
|
||||
t.y += transform.y + transform.py;
|
||||
|
||||
scope.draw();
|
||||
elem.get_elem().after_render(scope);
|
||||
elem.get_elem().after_render(scope, ctx);
|
||||
ctx.after_render(elem, scope);
|
||||
|
||||
scope.set_parent_size(w, h);
|
||||
self.size = (transform.width, transform.height);
|
||||
|
||||
Reference in New Issue
Block a user