ratatui_kit/render/
drawer.rs1use 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}