diff --git a/src/terminal.rs b/src/terminal.rs index fd5d0e9..bdec292 100644 --- a/src/terminal.rs +++ b/src/terminal.rs @@ -101,8 +101,9 @@ where widget.render(area, self.terminal.current_buffer_mut()); } - pub fn render_widget_dynamic(&mut self, widget : &dyn Widget, area: Rect) { - widget.render(area, self.terminal.current_buffer_mut()); + pub fn render_widget_dynamic(&mut self, widget : Box, area: Rect) + { + widget.render_dynamic(area, self.terminal.current_buffer_mut()); } /// Render a [`StatefulWidget`] to the current buffer using [`StatefulWidget::render`]. diff --git a/src/widgets/barchart.rs b/src/widgets/barchart.rs index dc57d1a..3e01a65 100644 --- a/src/widgets/barchart.rs +++ b/src/widgets/barchart.rs @@ -216,4 +216,8 @@ impl<'a> Widget for BarChart<'a> { ); } } -} + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer) { + self.render(area, buf); + } +} \ No newline at end of file diff --git a/src/widgets/block.rs b/src/widgets/block.rs index ae5b58a..e6ec435 100644 --- a/src/widgets/block.rs +++ b/src/widgets/block.rs @@ -235,6 +235,10 @@ impl<'a> Widget for Block<'a> { buf.set_spans(title_x, title_y, &title, title_area_width); } } + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer) { + self.render(area, buf); + } } #[cfg(test)] @@ -570,4 +574,4 @@ mod tests { }, ); } -} +} \ No newline at end of file diff --git a/src/widgets/canvas/mod.rs b/src/widgets/canvas/mod.rs index be23ee6..ad2f18b 100644 --- a/src/widgets/canvas/mod.rs +++ b/src/widgets/canvas/mod.rs @@ -500,4 +500,8 @@ where buf.set_spans(x, y, &label.spans, canvas_area.right() - x); } } -} + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer) { + self.render(area, buf); + } +} \ No newline at end of file diff --git a/src/widgets/chart.rs b/src/widgets/chart.rs index 0b2a089..3681b1a 100644 --- a/src/widgets/chart.rs +++ b/src/widgets/chart.rs @@ -615,6 +615,10 @@ impl<'a> Widget for Chart<'a> { buf.set_spans(x, y, &title, width); } } + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer) { + self.render(area, buf); + } } #[cfg(test)] @@ -657,4 +661,4 @@ mod tests { assert_eq!(layout.legend_area, case.legend_area); } } -} +} \ No newline at end of file diff --git a/src/widgets/clear.rs b/src/widgets/clear.rs index 57f8286..6ea0842 100644 --- a/src/widgets/clear.rs +++ b/src/widgets/clear.rs @@ -34,4 +34,8 @@ impl Widget for Clear { } } } -} + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer) { + self.render(area, buf); + } +} \ No newline at end of file diff --git a/src/widgets/gauge.rs b/src/widgets/gauge.rs index a98a680..e0f516f 100644 --- a/src/widgets/gauge.rs +++ b/src/widgets/gauge.rs @@ -142,6 +142,10 @@ impl<'a> Widget for Gauge<'a> { // set the span buf.set_span(label_col, label_row, &label, clamped_label_width); } + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer) { + self.render(area, buf); + } } fn get_unicode_block<'a>(frac: f64) -> &'a str { @@ -287,6 +291,10 @@ impl<'a> Widget for LineGauge<'a> { }); } } + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer) { + self.render(area, buf); + } } #[cfg(test)] @@ -310,4 +318,4 @@ mod tests { fn gauge_invalid_ratio_lower_bound() { Gauge::default().ratio(-0.5); } -} +} \ No newline at end of file diff --git a/src/widgets/list.rs b/src/widgets/list.rs index b0279d7..97c28bd 100644 --- a/src/widgets/list.rs +++ b/src/widgets/list.rs @@ -261,4 +261,8 @@ impl<'a> Widget for List<'a> { let mut state = ListState::default(); StatefulWidget::render(self, area, buf, &mut state); } -} + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer) { + Widget::render(*self, area, buf); + } +} \ No newline at end of file diff --git a/src/widgets/mod.rs b/src/widgets/mod.rs index 5d38790..ce15e91 100644 --- a/src/widgets/mod.rs +++ b/src/widgets/mod.rs @@ -64,7 +64,9 @@ bitflags! { pub trait Widget { /// Draws the current state of the widget in the given buffer. That is the only method required /// to implement a custom widget. - fn render(&self, area: Rect, buf: &mut Buffer); + fn render(self, area: Rect, buf: &mut Buffer); + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer); } /// A `StatefulWidget` is a widget that can take advantage of some local state to remember things diff --git a/src/widgets/paragraph.rs b/src/widgets/paragraph.rs index f4ebd8d..9b9fb73 100644 --- a/src/widgets/paragraph.rs +++ b/src/widgets/paragraph.rs @@ -194,4 +194,8 @@ impl<'a> Widget for Paragraph<'a> { } } } -} + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer) { + self.render(area, buf); + } +} \ No newline at end of file diff --git a/src/widgets/sparkline.rs b/src/widgets/sparkline.rs index e0b9eb2..4b611c2 100644 --- a/src/widgets/sparkline.rs +++ b/src/widgets/sparkline.rs @@ -131,6 +131,10 @@ impl<'a> Widget for Sparkline<'a> { } } } + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer) { + self.render(area, buf); + } } #[cfg(test)] @@ -152,4 +156,4 @@ mod tests { let mut buffer = Buffer::empty(area); widget.render(area, &mut buffer); } -} +} \ No newline at end of file diff --git a/src/widgets/table.rs b/src/widgets/table.rs index f696114..3797707 100644 --- a/src/widgets/table.rs +++ b/src/widgets/table.rs @@ -482,6 +482,10 @@ impl<'a> Widget for Table<'a> { let mut state = TableState::default(); StatefulWidget::render(self, area, buf, &mut state); } + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer) { + Widget::render(*self, area, buf); + } } #[cfg(test)] @@ -493,4 +497,4 @@ mod tests { fn table_invalid_percentages() { Table::new(vec![]).widths(&[Constraint::Percentage(110)]); } -} +} \ No newline at end of file diff --git a/src/widgets/tabs.rs b/src/widgets/tabs.rs index 0dfa35c..2879809 100644 --- a/src/widgets/tabs.rs +++ b/src/widgets/tabs.rs @@ -126,4 +126,8 @@ impl<'a> Widget for Tabs<'a> { x = pos.0; } } -} + + fn render_dynamic(self: Box, area: Rect, buf: &mut Buffer) { + self.render(area, buf); + } +} \ No newline at end of file