From 087c6695bbdd9d7da181dd129b88d92794a917cc Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Wed, 20 Oct 2021 15:40:06 +0200 Subject: [PATCH] Handle having no fonts (missing "default_fonts" feature) without a crash --- epaint/src/text/font.rs | 9 ++++++--- epaint/src/text/text_layout.rs | 6 ++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/epaint/src/text/font.rs b/epaint/src/text/font.rs index bac9401f..4037a0a3 100644 --- a/epaint/src/text/font.rs +++ b/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)> { diff --git a/epaint/src/text/text_layout.rs b/epaint/src/text/text_layout.rs index 994440d1..bdcb1eef 100644 --- a/epaint/src/text/text_layout.rs +++ b/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 {