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) -> TextLayout<'a>

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<u16>) -> TextLayout<'a>

Sets the bounding rectangle.

Source

pub const fn h_align(self, align: HAlign) -> TextLayout<'a>

Sets the horizontal alignment.

Source

pub const fn v_align(self, align: VAlign) -> TextLayout<'a>

Sets the vertical alignment.

Source

pub fn measure(&self) -> Size<u16>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more