21 lines
1.0 KiB
Rust
21 lines
1.0 KiB
Rust
|
|
use ratatui::prelude::*;
|
|||
|
|
|
|||
|
|
/// Trait implemented by every type that can live inside the conversation
|
|||
|
|
/// history list. It provides two primitives that the parent scroll-view
|
|||
|
|
/// needs: how *tall* the widget is at a given width and how to render an
|
|||
|
|
/// arbitrary contiguous *window* of that widget.
|
|||
|
|
///
|
|||
|
|
/// The `first_visible_line` argument to [`render_window`] allows partial
|
|||
|
|
/// rendering when the top of the widget is scrolled off-screen. The caller
|
|||
|
|
/// guarantees that `first_visible_line + area.height as usize` never exceeds
|
|||
|
|
/// the total height previously returned by [`height`].
|
|||
|
|
pub(crate) trait CellWidget {
|
|||
|
|
/// Total height measured in wrapped terminal lines when drawn with the
|
|||
|
|
/// given *content* width (no scrollbar column included).
|
|||
|
|
fn height(&self, width: u16) -> usize;
|
|||
|
|
|
|||
|
|
/// Render a *window* that starts `first_visible_line` lines below the top
|
|||
|
|
/// of the widget. The window’s size is given by `area`.
|
|||
|
|
fn render_window(&self, first_visible_line: usize, area: Rect, buf: &mut Buffer);
|
|||
|
|
}
|