handlers and ids

This commit is contained in:
2025-07-05 06:28:50 +02:00
parent 921bfa27c1
commit 661756eccd
8 changed files with 112 additions and 39 deletions
+8 -12
View File
@@ -1,4 +1,4 @@
use std::sync::Arc;
use std::sync::{Arc, Mutex};
use crate::{
extensions::Extension,
@@ -17,7 +17,7 @@ pub mod widget;
pub struct Screen {
pub widgets: Vec<Arc<Widget>>,
extensions: Vec<Arc<Box<dyn Extension>>>,
extensions: Vec<Arc<Mutex<Box<dyn Extension>>>>,
}
impl Screen {
@@ -34,7 +34,7 @@ impl Screen {
}
pub fn extension<E: Extension + 'static>(&mut self, ext: E) {
self.extensions.push(Arc::new(Box::new(ext)));
self.extensions.push(Arc::new(Mutex::new(Box::new(ext))));
}
pub fn run(&mut self) -> std::io::Result<()> {
@@ -43,7 +43,7 @@ impl Screen {
}
for ext in &self.extensions {
ext.init(&self.widgets);
ext.lock().unwrap().init(&self.widgets);
}
utils::hide_cursor()?;
@@ -64,7 +64,10 @@ impl Screen {
scope.set_transform(&t);
}
self.render_extension(elem.clone()).unwrap();
for ext in &self.extensions {
ext.lock().unwrap().render_widget(&mut scope, elem);
}
elem.0.lock().unwrap().render(&mut scope);
if let Some(t) = elem.get() {
@@ -74,11 +77,4 @@ impl Screen {
}
Ok(())
}
pub fn render_extension(&self, wi: Arc<Widget>) -> std::io::Result<()> {
for ext in &self.extensions {
ext.render(&wi);
}
Ok(())
}
}