working divs

This commit is contained in:
2025-07-05 04:40:05 -05:00
parent cec25c02d5
commit ec963707a1
8 changed files with 155 additions and 61 deletions
+31 -12
View File
@@ -1,7 +1,7 @@
use std::sync::{Arc, Mutex};
use crate::{
extensions::Extension,
extensions::{Extension, Handler},
render_scope::RenderScope,
style::Transform,
widget::{Element, Widget},
@@ -20,6 +20,17 @@ pub struct Screen {
extensions: Vec<Arc<Mutex<Box<dyn Extension>>>>,
}
event!(RenderWrapperEvent(*mut RenderScope));
impl RenderWrapperEvent {
pub fn get_scope(&self) -> &mut RenderScope {
unsafe { &mut *self.0 }
}
}
unsafe impl Send for RenderWrapperEvent {}
unsafe impl Sync for RenderWrapperEvent {}
impl Screen {
pub fn new() -> Screen {
Screen {
@@ -56,24 +67,32 @@ impl Screen {
pub fn render(&self) -> std::io::Result<()> {
let mut scope = RenderScope::new();
let (w, h) = crossterm::terminal::size().unwrap();
scope.set_parent_size(w, h);
utils::clear()?;
for elem in &self.widgets {
scope.clear();
if let Some(t) = elem.get() {
scope.set_transform(&t);
}
if let Some(wrapper) = elem.get::<Handler<RenderWrapperEvent>>() {
wrapper.call(elem, &RenderWrapperEvent(&mut scope));
} else {
scope.clear();
if let Some(t) = elem.get() {
scope.set_transform(&t);
}
for ext in &self.extensions {
ext.lock().unwrap().render_widget(&mut scope, elem);
}
for ext in &self.extensions {
ext.lock().unwrap().render_widget(&mut scope, elem);
}
elem.0.lock().unwrap().render(&mut scope);
elem.0.lock().unwrap().render(&mut scope);
if let Some(t) = elem.get() {
scope.set_transform(&t);
if let Some(t) = elem.get() {
scope.set_transform(&t);
}
scope.draw();
elem.0.lock().unwrap().after_render(&scope);
}
scope.draw();
}
Ok(())
}