pub struct Log<'a> { /* private fields */ }Expand description
The tail of messages that fits in the area it’s rendered into, oldest
at top, newest at the bottom, each line clipped to area.width() via
PrintLine.
offset (set via Log::offset, default 0) scrolls back through
history: 0 shows the most recent messages, and each increment moves
the window one message further into the past. Like
Table’s state.offset(), this does not clamp offset:
scrolling back past the start of messages shows fewer (or zero)
lines rather than wrapping or panicking, and it’s the caller’s
responsibility to stop incrementing offset past messages.len() if
that’s undesired. This is a different windowing direction than
Table’s (anchored to the start and counting forward), so it isn’t
expressed as the same shared helper.
messages is a plain slice the caller owns and appends to (the same
division of labor as ListState for selection):
this widget only reads it. Rows beyond the available messages are left
untouched: compose with fill_rect first
for a solid background if one is wanted.
By default each message is truncated to one row via PrintLine, which clips anything
past area.width(). Log::wrap (requires the egc feature) switches to word-wrapping
each message across as many rows as it needs, via retroglyph_core::layout::wrap, while
keeping offset counting messages rather than rows: the window still fills from the newest
message backward, but a message is only included if all of its wrapped rows fit in what’s
left of the surface, since there’s no supported way to render only the bottom rows of an
overflowing wrapped message. A message that doesn’t fully fit is left out entirely, the same
“rows beyond the available messages are left untouched” behavior as running out of messages.
§Examples
use retroglyph_core::grid::Rect;
use retroglyph_core::text::Line;
use retroglyph_core::grid::Grid;
use retroglyph_ui::{Log, Surface, Widget};
let messages = [Line::raw("connected"), Line::raw("joined #general")];
let area = Rect::new(0, 0, 20, 2);
let mut grid = Grid::new(20, 2);
Log::new(&messages).render(&mut Surface::new(&mut grid, area, 0));Implementations§
Source§impl<'a> Log<'a>
impl<'a> Log<'a>
Sourcepub const fn new(messages: &'a [Line]) -> Self
pub const fn new(messages: &'a [Line]) -> Self
A log tail over messages, starting at the most recent (offset 0).
Sourcepub const fn offset(self, offset: usize) -> Self
pub const fn offset(self, offset: usize) -> Self
Scroll back offset messages from the most recent.
Sourcepub const fn wrap(self, wrap: bool) -> Self
pub const fn wrap(self, wrap: bool) -> Self
Word-wraps each message across as many rows as it needs instead of clipping it to one
row, via retroglyph_core::layout::wrap. See the struct docs for how this interacts
with offset. Requires the egc feature.
Trait Implementations§
impl<'a> Copy for Log<'a>
Auto Trait Implementations§
impl<'a> Freeze for Log<'a>
impl<'a> RefUnwindSafe for Log<'a>
impl<'a> Send for Log<'a>
impl<'a> Sync for Log<'a>
impl<'a> Unpin for Log<'a>
impl<'a> UnsafeUnpin for Log<'a>
impl<'a> UnwindSafe for Log<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<C> WithAlpha for Cwhere
C: Copy,
impl<C> WithAlpha for Cwhere
C: Copy,
§fn with_alpha_first<A>(self, alpha: A) -> AlphaFirst<A, Self>
fn with_alpha_first<A>(self, alpha: A) -> AlphaFirst<A, Self>
self with alpha, storing alpha before the color in memory
(see [AlphaFirst]).§fn with_alpha_last<A>(self, alpha: A) -> AlphaLast<A, Self>
fn with_alpha_last<A>(self, alpha: A) -> AlphaLast<A, Self>
self with alpha, storing alpha after the color in memory
(see [AlphaLast]).