Browse Source

Handle having no fonts (missing "default_fonts" feature) without a crash

pull/826/head
Emil Ernerfeldt 3 years ago
parent
commit
087c6695bb
  1. 9
      epaint/src/text/font.rs
  2. 6
      epaint/src/text/text_layout.rs

9
epaint/src/text/font.rs

@ -215,7 +215,7 @@ impl Font {
fonts,
characters: RwLock::new(None),
replacement_glyph: Default::default(),
pixels_per_point: 0.0,
pixels_per_point: 1.0,
row_height: 0.0,
glyph_info_cache: Default::default(),
};
@ -318,10 +318,13 @@ impl Font {
}
#[inline]
pub(crate) fn glyph_info_and_font_impl(&self, c: char) -> (&FontImpl, GlyphInfo) {
pub(crate) fn glyph_info_and_font_impl(&self, c: char) -> (Option<&FontImpl>, GlyphInfo) {
if self.fonts.is_empty() {
return (None, self.replacement_glyph.1);
}
let (font_index, glyph_info) = self.glyph_info(c);
let font_impl = &self.fonts[font_index];
(font_impl, glyph_info)
(Some(font_impl), glyph_info)
}
fn glyph_info_no_cache_or_fallback(&self, c: char) -> Option<(FontIndex, GlyphInfo)> {

6
epaint/src/text/text_layout.rs

@ -72,8 +72,10 @@ fn layout_section(
paragraph.empty_paragraph_height = font_height; // TODO: replace this hack with actually including `\n` in the glyphs?
} else {
let (font_impl, glyph_info) = font.glyph_info_and_font_impl(chr);
if let Some(last_glyph_id) = last_glyph_id {
paragraph.cursor_x += font_impl.pair_kerning(last_glyph_id, glyph_info.id)
if let Some(font_impl) = font_impl {
if let Some(last_glyph_id) = last_glyph_id {
paragraph.cursor_x += font_impl.pair_kerning(last_glyph_id, glyph_info.id)
}
}
paragraph.glyphs.push(Glyph {

Loading…
Cancel
Save