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 children_areas: Vec<ratatui::prelude::Rect>,
11    pub scroll_buffer: Option<Buffer>,
12}
13
14impl<'a, 'b> ComponentDrawer<'a, 'b> {
15    pub fn new(frame: &'a mut ratatui::Frame<'b>, area: ratatui::layout::Rect) -> Self {
16        Self {
17            area,
18            frame,
19            children_areas: vec![],
20            scroll_buffer: None,
21        }
22    }
23
24    pub fn buffer_mut(&mut self) -> &mut ratatui::buffer::Buffer {
25        if let Some(scroll_buffer) = &mut self.scroll_buffer {
26            scroll_buffer
27        } else {
28            self.frame.buffer_mut()
29        }
30    }
31
32    pub fn render_widget<W: Widget>(&mut self, widget: W, area: Rect) {
33        widget.render(area, self.buffer_mut());
34    }
35
36    pub fn render_widget_ref<W: WidgetRef>(&mut self, widget: W, area: Rect) {
37        widget.render_ref(area, self.buffer_mut());
38    }
39}