Skip to main content

MatrixRain

Struct MatrixRain 

Source
pub struct MatrixRain<'a> { /* private fields */ }
Expand description

The ratatui widget rendering the Matrix digital rain effect.

MatrixRain borrows the MatrixConfig for the lifetime of the render call and consumes itself when rendered (per the StatefulWidget contract). It is intentionally stateful-only — there is no plain Widget implementation. Animation requires per-frame state (column streams, RNG, timing, cached color tier) that a stateless wrapper would either reset every frame or hide behind surprising global mutable state.

§Example

use matrix_rain::{MatrixConfig, MatrixRain, MatrixRainState};
use ratatui::buffer::Buffer;
use ratatui::layout::Rect;
use ratatui::widgets::StatefulWidget;

let cfg = MatrixConfig::default();
let mut state = MatrixRainState::with_seed(0xC0FFEE);
let area = Rect::new(0, 0, 40, 12);
let mut buf = Buffer::empty(area);

// The widget is constructed once per frame and consumed by render().
MatrixRain::new(&cfg).render(area, &mut buf, &mut state);

Inside a ratatui Terminal::draw closure:

terminal.draw(|f| {
    f.render_stateful_widget(MatrixRain::new(&cfg), f.size(), &mut state);
})?;

Implementations§

Source§

impl<'a> MatrixRain<'a>

Source

pub fn new(config: &'a MatrixConfig) -> Self

Create a new MatrixRain widget bound to the given configuration. The config is borrowed for the lifetime of the widget; build it once outside the render loop and pass &cfg here each frame.

Trait Implementations§

Source§

impl<'a> StatefulWidget for MatrixRain<'a>

Source§

type State = MatrixRainState

State associated with the stateful widget. Read more
Source§

fn render(self, area: Rect, buf: &mut Buffer, state: &mut Self::State)

Draws the current state of the widget in the given buffer. That is the only method required to implement a custom stateful widget.

Auto Trait Implementations§

§

impl<'a> Freeze for MatrixRain<'a>

§

impl<'a> RefUnwindSafe for MatrixRain<'a>

§

impl<'a> Send for MatrixRain<'a>

§

impl<'a> Sync for MatrixRain<'a>

§

impl<'a> Unpin for MatrixRain<'a>

§

impl<'a> UnsafeUnpin for MatrixRain<'a>

§

impl<'a> UnwindSafe for MatrixRain<'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> 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V