diff --git a/src/elements/div.rs b/src/elements/div.rs
index d34fe63..f93b51a 100644
--- a/src/elements/div.rs
+++ b/src/elements/div.rs
@@ -1,6 +1,9 @@
use std::sync::{Arc, Mutex};
-use crate::widget::{Element, Widget};
+use crate::{
+ widget::{Element, Widget},
+ NoRender,
+};
pub struct Div {
color: u32,
@@ -40,6 +43,7 @@ impl Element for Arc
{
fn draw_child(&self, element: &Arc) {
self.children.lock().unwrap().push(element.clone());
+ element.inject(|w| w.component(NoRender));
}
fn as_any(&self) -> &dyn std::any::Any {
diff --git a/src/elements/flex.rs b/src/elements/flex.rs
index 5183c53..58c973d 100644
--- a/src/elements/flex.rs
+++ b/src/elements/flex.rs
@@ -1,6 +1,6 @@
use std::sync::{Arc, Mutex};
-use crate::widget::{Element, Widget};
+use crate::{widget::{Element, Widget}, NoRender};
pub struct FlexRow {
color: u32,
@@ -55,6 +55,7 @@ impl Element for FlexRow {
fn draw_child(&self, element: &Arc) {
self.children.lock().unwrap().push(element.clone());
+ element.inject(|w| w.component(NoRender));
}
fn as_any(&self) -> &dyn std::any::Any {
@@ -116,6 +117,7 @@ impl Element for FlexCol {
fn draw_child(&self, element: &Arc) {
self.children.lock().unwrap().push(element.clone());
+ element.inject(|w| w.component(NoRender));
}
fn as_any(&self) -> &dyn std::any::Any {
diff --git a/src/frontend.rs b/src/frontend.rs
index 91fb248..d9fac25 100644
--- a/src/frontend.rs
+++ b/src/frontend.rs
@@ -26,7 +26,7 @@ impl Rsx {
match rsx_elem {
RsxElement::Element(f, dep, child) => {
let w = if let Some(parent) = &parent {
- let w = Arc::new(Widget::new(Box::new(f)));
+ let w = screen.draw_box(f);
parent.0.lock().unwrap().draw_child(&w);
w
} else {
diff --git a/src/lib.rs b/src/lib.rs
index 590f5f7..43bebf4 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -22,6 +22,7 @@ pub struct Screen {
}
event!(RenderWrapperEvent(*mut RenderScope));
+component!(NoRender);
impl RenderWrapperEvent {
pub fn get_scope(&self) -> &mut RenderScope {
@@ -85,6 +86,14 @@ impl Screen {
utils::clear()?;
for elem in self.widgets.lock().unwrap().iter() {
+ if let Some(NoRender) = elem.get() {
+ for ext in self.extensions.lock().unwrap().iter() {
+ ext.lock().unwrap().render_widget(&mut scope, elem);
+ }
+ elem.auto_refresh();
+ continue;
+ }
+
if let Some(wrapper) = elem.get::>() {
wrapper.call(elem, &RenderWrapperEvent(&mut scope));
} else {
diff --git a/src/main.rs b/src/main.rs
index 534ef3c..c884775 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -31,7 +31,7 @@ fn test(inc: i32) -> Rsx {
std::thread::spawn({
let count = count.clone();
move || loop {
- std::thread::sleep(std::time::Duration::from_millis(300));
+ std::thread::sleep(std::time::Duration::from_millis(50));
**count.get() += inc;
}
});