pub struct LayoutJob {
pub text: String,
pub sections: Vec<LayoutSection>,
pub wrap: TextWrapping,
pub first_row_min_height: f32,
pub break_on_newline: bool,
pub halign: Align,
pub justify: bool,
pub round_output_size_to_nearest_ui_point: bool,
}
Expand description
Describes the task of laying out text.
This supports mixing different fonts, color and formats (underline etc).
Pass this to crate::Fonts::layout_job
or crate::text::layout
.
§Example:
use epaint::{Color32, text::{LayoutJob, TextFormat}, FontFamily, FontId};
let mut job = LayoutJob::default();
job.append(
"Hello ",
0.0,
TextFormat {
font_id: FontId::new(14.0, FontFamily::Proportional),
color: Color32::WHITE,
..Default::default()
},
);
job.append(
"World!",
0.0,
TextFormat {
font_id: FontId::new(14.0, FontFamily::Monospace),
color: Color32::BLACK,
..Default::default()
},
);
As you can see, constructing a LayoutJob
is currently a lot of work.
It would be nice to have a helper macro for it!
Fields§
§text: String
The complete text of this job, referenced by LayoutSection
.
sections: Vec<LayoutSection>
The different section, which can have different fonts, colors, etc.
wrap: TextWrapping
Controls the text wrapping and elision.
first_row_min_height: f32
The first row must be at least this high.
This is in case we lay out text that is the continuation
of some earlier text (sharing the same row),
in which case this will be the height of the earlier text.
In other cases, set this to 0.0
.
break_on_newline: bool
If true
, all \n
characters will result in a new paragraph,
starting on a new row.
If false
, all \n
characters will be ignored
and show up as the replacement character.
Default: true
.
halign: Align
How to horizontally align the text (Align::LEFT
, Align::Center
, Align::RIGHT
).
justify: bool
Justify text so that word-wrapped rows fill the whole TextWrapping::max_width
.
round_output_size_to_nearest_ui_point: bool
Rounding to the closest ui point (not pixel!) allows the rest of the layout code to run on perfect integers, avoiding rounding errors.
Implementations§
source§impl LayoutJob
impl LayoutJob
sourcepub fn simple(
text: String,
font_id: FontId,
color: Color32,
wrap_width: f32,
) -> Self
pub fn simple( text: String, font_id: FontId, color: Color32, wrap_width: f32, ) -> Self
Break on \n
and at the given wrap width.
sourcepub fn simple_singleline(text: String, font_id: FontId, color: Color32) -> Self
pub fn simple_singleline(text: String, font_id: FontId, color: Color32) -> Self
Does not break on \n
, but shows the replacement character instead.
pub fn single_section(text: String, format: TextFormat) -> Self
pub fn is_empty(&self) -> bool
sourcepub fn append(&mut self, text: &str, leading_space: f32, format: TextFormat)
pub fn append(&mut self, text: &str, leading_space: f32, format: TextFormat)
Helper for adding a new section when building a LayoutJob
.
sourcepub fn font_height(&self, fonts: &Fonts) -> f32
pub fn font_height(&self, fonts: &Fonts) -> f32
The height of the tallest font used in the job.
Trait Implementations§
source§impl<'de> Deserialize<'de> for LayoutJob
impl<'de> Deserialize<'de> for LayoutJob
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl PartialEq for LayoutJob
impl PartialEq for LayoutJob
impl StructuralPartialEq for LayoutJob
Auto Trait Implementations§
impl Freeze for LayoutJob
impl RefUnwindSafe for LayoutJob
impl Send for LayoutJob
impl Sync for LayoutJob
impl Unpin for LayoutJob
impl UnwindSafe for LayoutJob
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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