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 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}