ratatui_kit/render/
drawer.rs

1use ratatui::{
2    buffer::Buffer,
3    layout::Rect,
4    widgets::{Widget, WidgetRef},
5};
6
7pub struct ComponentDrawer<'a, 'b: 'a> {
8    pub area: ratatui::layout::Rect,
9    pub frame: &'a mut ratatui::Frame<'b>,
10    pub scroll_buffer: Option<Buffer>,
11}
12
13impl<'a, 'b> ComponentDrawer<'a, 'b> {
14    pub fn new(frame: &'a mut ratatui::Frame<'b>, area: ratatui::layout::Rect) -> Self {
15        Self {
16            area,
17            frame,
18            scroll_buffer: None,
19        }
20    }
21
22    pub fn buffer_mut(&mut self) -> &mut ratatui::buffer::Buffer {
23        if let Some(scroll_buffer) = &mut self.scroll_buffer {
24            scroll_buffer
25        } else {
26            self.frame.buffer_mut()
27        }
28    }
29
30    pub fn render_widget<W: Widget>(&mut self, widget: W, area: Rect) {
31        widget.render(area, self.buffer_mut());
32    }
33
34    pub fn render_widget_ref<W: WidgetRef>(&mut self, widget: W, area: Rect) {
35        widget.render_ref(area, self.buffer_mut());
36    }
37}