From 14602f95c8d4e7976afc5feea4fe92d1b2755668 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Mon, 4 Aug 2025 04:24:41 -0500 Subject: [PATCH] First widget focus #26 --- src/lib.rs | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 2eab099..135fbc5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -108,31 +108,22 @@ impl Screen { /// Draws a static element and returns its widget handle. pub fn draw(self: &Arc, element: E) -> Arc { - let w = Arc::new(Widget::Static(StaticWidget::new(Box::new(element)))); - self.widgets.lock().unwrap().push(w.clone()); - w + self.draw_box(Box::new(element)) } /// Draws a boxed element and returns its widget handle. pub fn draw_box(self: &Arc, element: BoxedElement) -> Arc { let w = Arc::new(Widget::Static(StaticWidget::new(element))); - self.widgets.lock().unwrap().push(w.clone()); + self.draw_widget(w.clone()); w } - /// Adds an existing widget to the screen. - pub fn draw_widget(self: &Arc, widget: Arc) { - self.widgets.lock().unwrap().push(widget); - } - /// Draws a dynamic element using a closure and returns its widget handle. pub fn draw_dyn WidgetLoad + 'static + Send + Sync>( self: &Arc, element: F, ) -> Arc { - let w = Arc::new(Widget::Dynamic(DynWidget::new(element))); - self.widgets.lock().unwrap().push(w.clone()); - w + self.draw_box_dyn(Box::new(element)) } /// Draws a dynamic element from a boxed closure and returns its widget handle. @@ -141,10 +132,20 @@ impl Screen { element: Box WidgetLoad + Send + Sync>, ) -> Arc { let w = Arc::new(Widget::Dynamic(DynWidget::new(element))); - self.widgets.lock().unwrap().push(w.clone()); + self.draw_widget(w.clone()); w } + /// Adds an existing widget to the screen. + pub fn draw_widget(self: &Arc, widget: Arc) { + if self.widgets.lock().unwrap().len() == 0 { + widget.set_focused(true); // first widget is focused + self.widgets.lock().unwrap().push(widget); + } else { + self.widgets.lock().unwrap().push(widget); + } + } + /// Registers an extension with the screen. pub fn extension(self: &Arc, ext: E) { self.extensions