pub struct FontManager { /* private fields */ }Expand description
Manages multiple fonts with fallback chain.
Font indices are assigned as follows:
- 0: Primary/regular font
- 1: Bold font (if available)
- 2: Italic font (if available)
- 3: Bold-italic font (if available)
- 4..4+N: Unicode range fonts (N = number of range fonts)
- 4+N..: Fallback fonts
Implementations§
Source§impl FontManager
impl FontManager
Sourcepub fn new(
primary_family: Option<&str>,
bold_family: Option<&str>,
italic_family: Option<&str>,
bold_italic_family: Option<&str>,
font_ranges: &[FontRange],
) -> Result<FontManager, Error>
pub fn new( primary_family: Option<&str>, bold_family: Option<&str>, italic_family: Option<&str>, bold_italic_family: Option<&str>, font_ranges: &[FontRange], ) -> Result<FontManager, Error>
Create a new FontManager with primary font and system fallbacks.
§Arguments
primary_family- Regular/normal weight font family namebold_family- Bold weight font family name (optional)italic_family- Italic font family name (optional)bold_italic_family- Bold italic font family name (optional)font_ranges- Unicode range-specific font mappings
Sourcepub fn find_glyph(
&self,
character: char,
bold: bool,
italic: bool,
) -> Option<(usize, u16)>
pub fn find_glyph( &self, character: char, bold: bool, italic: bool, ) -> Option<(usize, u16)>
Sourcepub fn find_range_font_index(&self, char_code: u32) -> Option<(usize, u16)>
pub fn find_range_font_index(&self, char_code: u32) -> Option<(usize, u16)>
Find the font index for a character in range fonts.
Sourcepub fn get_font(&self, font_index: usize) -> Option<&FontRef<'static>>
pub fn get_font(&self, font_index: usize) -> Option<&FontRef<'static>>
Get font reference by index.
§Arguments
font_index- Font index (see struct documentation for layout)
Sourcepub fn primary_font(&self) -> &FontRef<'static>
pub fn primary_font(&self) -> &FontRef<'static>
Get the primary font reference.
Sourcepub fn font_count(&self) -> usize
pub fn font_count(&self) -> usize
Get number of fonts loaded (primary + styled + range + fallbacks).
Sourcepub fn get_font_data(&self, font_index: usize) -> Option<&[u8]>
pub fn get_font_data(&self, font_index: usize) -> Option<&[u8]>
Get raw font data bytes for a font index.
Sourcepub fn shape_text(
&mut self,
text: &str,
bold: bool,
italic: bool,
options: ShapingOptions,
) -> Arc<ShapedRun>
pub fn shape_text( &mut self, text: &str, bold: bool, italic: bool, options: ShapingOptions, ) -> Arc<ShapedRun>
Shape text using the appropriate font.
Uses HarfBuzz (via rustybuzz) for ligatures, kerning, and complex script support.
Sourcepub fn shape_text_with_font_index(
&mut self,
text: &str,
font_index: usize,
options: ShapingOptions,
) -> Arc<ShapedRun>
pub fn shape_text_with_font_index( &mut self, text: &str, font_index: usize, options: ShapingOptions, ) -> Arc<ShapedRun>
Shape text using a specific font index.
Sourcepub fn clear_shape_cache(&mut self)
pub fn clear_shape_cache(&mut self)
Clear the text shaping cache.
Sourcepub fn shape_cache_size(&self) -> usize
pub fn shape_cache_size(&self) -> usize
Get the current size of the shape cache.
Sourcepub fn find_grapheme_glyph(
&mut self,
grapheme: &str,
bold: bool,
italic: bool,
) -> Option<(usize, u16)>
pub fn find_grapheme_glyph( &mut self, grapheme: &str, bold: bool, italic: bool, ) -> Option<(usize, u16)>
Find glyph(s) for an entire grapheme cluster.
This is essential for rendering multi-character sequences like:
- Flag emoji (🇺🇸) - regional indicator pairs
- ZWJ sequences (👨👩👧👦) - family emoji
- Skin tone modifiers (👋🏽)
- Combining characters (é = e + acute accent)
§Arguments
grapheme- The grapheme cluster string (may be multiple Unicode codepoints)bold- Whether text should be bolditalic- Whether text should be italic
§Returns
Some((font_index, glyph_id)) for the primary glyph representing the grapheme,
or None if no suitable glyph was found.
Auto Trait Implementations§
impl Freeze for FontManager
impl !RefUnwindSafe for FontManager
impl Send for FontManager
impl Sync for FontManager
impl Unpin for FontManager
impl UnsafeUnpin for FontManager
impl !UnwindSafe for FontManager
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> 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.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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