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