Expand description
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; 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, { // remap area let area = Rect::default(); // use inner buffer let mut buf = Buffer::default(); // render to buffer widget.render(area, &mut buf, state); // calculate shift and clip let shift = (-1, -1); let clip = Rect::default(); // correct state state.relocate(shift, clip); } }
Macros§
- impl_
relocatable_ state - Create the implementation of RelocatableState for the given list of struct members.
Traits§
- Relocatable
State - Widgets can be rendered to a temporary buffer using the buffers own coordinate system.
Functions§
- rect_
dbg - relocate_
area - Shift the area by offset and clip it.
- relocate_
areas - Shift the area by offset and clip it.
- relocate_
dark_ offset - Clipping might introduce another offset by cutting away part of an area that a widgets internal offset refers to.
- relocate_
position - Shift the position by offset and clip it. Returns None if the position is clipped.
- relocate_
positions - Shift the position by offset and clip it. Clipped positions are replaced with (0,0) for this function.