use crate::prelude::*;
#[derive(Debug, Hash)]
pub struct Frame<'a> {
pub(crate) cursor_position: Option<(u16, u16)>,
pub(crate) viewport_area: Rect,
pub(crate) buffer: &'a mut Buffer,
pub(crate) count: usize,
}
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
pub struct CompletedFrame<'a> {
pub buffer: &'a Buffer,
pub area: Rect,
pub count: usize,
}
impl Frame<'_> {
pub const fn size(&self) -> Rect {
self.viewport_area
}
pub fn render_widget<W: Widget>(&mut self, widget: W, area: Rect) {
widget.render(area, self.buffer);
}
#[allow(clippy::needless_pass_by_value)]
#[stability::unstable(feature = "widget-ref")]
pub fn render_widget_ref<W: WidgetRef>(&mut self, widget: W, area: Rect) {
widget.render_ref(area, self.buffer);
}
pub fn render_stateful_widget<W>(&mut self, widget: W, area: Rect, state: &mut W::State)
where
W: StatefulWidget,
{
widget.render(area, self.buffer, state);
}
#[allow(clippy::needless_pass_by_value)]
#[stability::unstable(feature = "widget-ref")]
pub fn render_stateful_widget_ref<W>(&mut self, widget: W, area: Rect, state: &mut W::State)
where
W: StatefulWidgetRef,
{
widget.render_ref(area, self.buffer, state);
}
pub fn set_cursor(&mut self, x: u16, y: u16) {
self.cursor_position = Some((x, y));
}
pub fn buffer_mut(&mut self) -> &mut Buffer {
self.buffer
}
pub const fn count(&self) -> usize {
self.count
}
}