Skip to main content

Log

Struct Log 

Source
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>

Source

pub const fn new(messages: &'a [Line]) -> Self

A log tail over messages, starting at the most recent (offset 0).

Source

pub const fn offset(self, offset: usize) -> Self

Scroll back offset messages from the most recent.

Source

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§

Source§

impl<'a> Clone for Log<'a>

Source§

fn clone(&self) -> Log<'a>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for Log<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Measure for Log<'_>

Source§

fn height_for(&self, width: u16) -> u16

One row per message when not wrapped (width ignored); with Log::wrap set, the sum of each message’s wrapped row count at width. This is the height needed to show the full backlog, not just the current offset window.

Source§

impl Widget for Log<'_>

Source§

fn render(&self, surface: &mut Surface<'_>)

Draw this widget into surface, filling surface.area(). Read more
Source§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<C> WithAlpha for C
where C: Copy,

§

fn with_alpha_first<A>(self, alpha: A) -> AlphaFirst<A, Self>

Wraps self with alpha, storing alpha before the color in memory (see [AlphaFirst]).
§

fn with_alpha_last<A>(self, alpha: A) -> AlphaLast<A, Self>

Wraps self with alpha, storing alpha after the color in memory (see [AlphaLast]).