Skip to main content

TextLayout

Struct TextLayout 

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

Builder for laying out a Line within a bounded Rect.

Call measure to get its Size without touching any surface, or render_to_surface to write directly into a Surface.

§Examples

use retroglyph_core::layout::{TextLayout, HAlign, VAlign};
use retroglyph_core::grid::Rect;
use retroglyph_core::text::Line;
use retroglyph_core::grid::HasSize;

let rect = Rect::new(0, 0, 20, 5);
let line = Line::raw("Hello, world!");

let metrics = TextLayout::new(&line)
    .rect(rect)
    .h_align(HAlign::Center)
    .measure();

assert_eq!(metrics.height(), 1);

Implementations§

Source§

impl<'a> TextLayout<'a>

Source

pub const fn new(line: &'a Line) -> Self

Creates a new layout builder for line.

Defaults: zero-sized rect at origin, left/top alignment. Call rect before measure or render_to_surface.

Source

pub const fn rect(self, rect: Rect) -> Self

Sets the bounding rectangle.

Source

pub const fn h_align(self, align: HAlign) -> Self

Sets the horizontal alignment.

Source

pub const fn v_align(self, align: VAlign) -> Self

Sets the vertical alignment.

Source

pub fn measure(&self) -> Size

Measures the text without rendering, returning its Size: width is the widest wrapped line in columns, height is the number of wrapped lines.

Uses the rect’s width for word-wrapping; ignores height.

Source

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

Renders the text into surface, clipping to both the rect’s bounds and surface’s own clip (the rect is intersected with Surface::clip_rect first, so text can never escape whatever clip the caller applied even if rect extends past it).

§Examples
use retroglyph_core::backend::Headless;
use retroglyph_core::grid::{Pos, Rect};
use retroglyph_core::layout::TextLayout;
use retroglyph_core::text::Line;
use retroglyph_core::terminal::Terminal;

let mut term = Terminal::new(Headless::new(20, 5));
let line = Line::raw("hi");
TextLayout::new(&line)
    .rect(Rect::new(2, 1, 10, 3))
    .render_to_surface(&mut term.surface());

assert_eq!(term.grid()[Pos::new(2, 1)].glyph(), 'h');
Source

pub fn render_to_grid(&self, grid: &mut Grid, layer: u8)

Renders the text into grid on layer, clipping to the rect’s bounds.

Auto Trait Implementations§

§

impl<'a> Freeze for TextLayout<'a>

§

impl<'a> RefUnwindSafe for TextLayout<'a>

§

impl<'a> Send for TextLayout<'a>

§

impl<'a> Sync for TextLayout<'a>

§

impl<'a> Unpin for TextLayout<'a>

§

impl<'a> UnsafeUnpin for TextLayout<'a>

§

impl<'a> UnwindSafe for TextLayout<'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, 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.