
This crate is a part of rat-salsa.
Rat-Reloc(ate)
RelocatableState enables rendering StatefulWidget's to a temporary buffer.
After rendering a stateful widget all areas derived from the
render area will be wrong if the temporary buffer is rendered to screen
at a different location and with some clipping.
This trait defines a relocate function that
corrects the areas at some point after rendering the widget.
-
Doesn't impact normal rendering of the widget.
It can just use the area and be done with it.
-
Straightforward
use rat_reloc::{RelocatableState, relocate_area};
use ratatui::layout::Rect;
# struct ButtonState{ area:Rect, inner:Rect}
impl RelocatableState for ButtonState {
fn relocate(&mut self, shift: (i16, i16), clip: Rect) {
self.area = relocate_area(self.area, shift, clip);
self.inner = relocate_area(self.inner, shift, clip);
}
}
-
Decent to implement for a view widget
use ratatui::layout::Rect;
use ratatui::buffer::Buffer;
use ratatui::widgets::StatefulWidget;
use rat_reloc::RelocatableState;
pub struct RelocatedRender;
impl RelocatedRender {
fn render<W, S>(widget: W, area: Rect, state: &mut S)
where
W: StatefulWidget<State = S>,
S: RelocatableState,
{
let area = Rect::default();
let mut buf = Buffer::default();
widget.render(area, &mut buf, state);
let shift = (-1, -1);
let clip = Rect::default();
state.relocate(shift, clip);
}
}