5 releases (stable)
new 1.1.1 | Jan 19, 2025 |
---|---|
1.1.0 | Jan 5, 2025 |
1.0.1 | Jan 3, 2025 |
1.0.0 | Dec 29, 2024 |
0.2.0 | Nov 1, 2024 |
#1136 in Command-line interface
708 downloads per month
Used in 10 crates
(6 directly)
8KB
71 lines
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, { // 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); } }
Dependencies
~6–16MB
~214K SLoC