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>
impl<'a> TextLayout<'a>
Sourcepub const fn new(line: &'a Line) -> TextLayout<'a>
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.
Sourcepub const fn rect(self, rect: Rect<u16>) -> TextLayout<'a>
pub const fn rect(self, rect: Rect<u16>) -> TextLayout<'a>
Sets the bounding rectangle.
Sourcepub const fn h_align(self, align: HAlign) -> TextLayout<'a>
pub const fn h_align(self, align: HAlign) -> TextLayout<'a>
Sets the horizontal alignment.
Sourcepub const fn v_align(self, align: VAlign) -> TextLayout<'a>
pub const fn v_align(self, align: VAlign) -> TextLayout<'a>
Sets the vertical alignment.
Sourcepub fn measure(&self) -> Size<u16>
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.
Sourcepub fn render_to_surface(&self, surface: &mut Surface<'_>)
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');Sourcepub fn render_to_grid(&self, grid: &mut Grid, layer: u8)
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> 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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.