API ReferenceText & Media
RichText & Spans
Nestable styled spans, inline spans, and widget spans.
TextSpan
Recursively nestable node; widget leaves occupy \u{FFFC}.
use incular::prelude::*;
fn main() {
let accent = Color::rgba(60, 110, 220, 255);
let span = TextSpan::new("Hello ")
.style(TextStyle::new().bold())
.child(TextSpan::new("world").style(TextStyle::new().color(accent)));
println!("text: {}", span.plain_text());
println!("len: {}", span.text_len());
println!("runs: {}", span.flatten(&TextStyle::new()).len());
}| Type | Shape |
|---|---|
TextSpan | { text, style?, children[] }; new / empty / style / child / children / with_children |
InlineSpan | Text(TextSpan) / Widget(WidgetSpan) |
WidgetSpan | { id, size, alignment }; new / sized / with_size / alignment |
StyledTextRun | { text, style, range } from flatten |
InlineSpan and WidgetSpan
use incular::prelude::*;
fn main() {
let span = TextSpan::new("Hi");
println!("text: {}", span.plain_text());
let widget = WidgetSpan::new(1u64).with_size(Size::new(10.0, 10.0));
println!("widget size: {:?}", widget.size);
}WidgetSpanAlignment: Baseline (default) / AboveBaseline /
BelowBaseline / Middle / TextTop / TextBottom.
RichText model
Styled runs running — copy, paste, and run:
use incular::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let app = Application::new(|_cx| {
Container::builder()
.padding(EdgeInsets::all(24.0))
.alignment(Alignment::CENTER)
.child(RichText::new(
TextSpan::new("Hello ")
.style(TextStyle::new().bold())
.child(
TextSpan::new("world").style(
TextStyle::new()
.font_size(18.0)
.color(Color::rgba(60, 110, 220, 255)),
),
),
))
.build()
.into()
})?;
incular::run(app)?;
Ok(())
}StyledTextRun { text, style, range }. TextSpanVisitor trait with
visit_text / visit_widget hooks.