From 8c7c4c764baaed1d82f51f20c381c8f1b55b5144 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Fri, 10 Jun 2022 14:33:16 +0200 Subject: [PATCH] Don't load fonts in doctests (#1711) I was hoping this would speed up the doctests, but it doesn't really --- egui/src/lib.rs | 2 + epaint/src/text/fonts.rs | 112 ++++++++++++++++++++++----------------- 2 files changed, 65 insertions(+), 49 deletions(-) diff --git a/egui/src/lib.rs b/egui/src/lib.rs index a238a75b2..d0203ad1f 100644 --- a/egui/src/lib.rs +++ b/egui/src/lib.rs @@ -527,6 +527,7 @@ pub enum WidgetType { /// For use in tests; especially doctests. pub fn __run_test_ctx(mut run_ui: impl FnMut(&Context)) { let ctx = Context::default(); + ctx.set_fonts(FontDefinitions::empty()); // prevent fonts from being loaded (save CPU time) let _ = ctx.run(Default::default(), |ctx| { run_ui(ctx); }); @@ -535,6 +536,7 @@ pub fn __run_test_ctx(mut run_ui: impl FnMut(&Context)) { /// For use in tests; especially doctests. pub fn __run_test_ui(mut add_contents: impl FnMut(&mut Ui)) { let ctx = Context::default(); + ctx.set_fonts(FontDefinitions::empty()); // prevent fonts from being loaded (save CPU time) let _ = ctx.run(Default::default(), |ctx| { crate::CentralPanel::default().show(ctx, |ui| { add_contents(ui); diff --git a/epaint/src/text/fonts.rs b/epaint/src/text/fonts.rs index ff387e0fd..3b85a02cb 100644 --- a/epaint/src/text/fonts.rs +++ b/epaint/src/text/fonts.rs @@ -244,68 +244,82 @@ pub struct FontDefinitions { } impl Default for FontDefinitions { + /// Specifies the default fonts if the feature `default_fonts` is enabled, + /// otherwise this is the same as [`Self::empty`]. + #[cfg(not(feature = "default_fonts"))] + fn default() -> Self { + Self::empty() + } + + /// Specifies the default fonts if the feature `default_fonts` is enabled, + /// otherwise this is the same as [`Self::empty`]. + #[cfg(feature = "default_fonts")] fn default() -> Self { - #[allow(unused)] let mut font_data: BTreeMap = BTreeMap::new(); let mut families = BTreeMap::new(); - #[cfg(feature = "default_fonts")] - { - font_data.insert( + font_data.insert( + "Hack".to_owned(), + FontData::from_static(include_bytes!("../../fonts/Hack-Regular.ttf")), + ); + font_data.insert( + "Ubuntu-Light".to_owned(), + FontData::from_static(include_bytes!("../../fonts/Ubuntu-Light.ttf")), + ); + + // Some good looking emojis. Use as first priority: + font_data.insert( + "NotoEmoji-Regular".to_owned(), + FontData::from_static(include_bytes!("../../fonts/NotoEmoji-Regular.ttf")), + ); + + // Bigger emojis, and more. : + font_data.insert( + "emoji-icon-font".to_owned(), + FontData::from_static(include_bytes!("../../fonts/emoji-icon-font.ttf")).tweak( + FontTweak { + scale: 0.8, // make it smaller + y_offset_factor: 0.07, // move it down slightly + y_offset: 0.0, + }, + ), + ); + + families.insert( + FontFamily::Monospace, + vec![ "Hack".to_owned(), - FontData::from_static(include_bytes!("../../fonts/Hack-Regular.ttf")), - ); - font_data.insert( + "Ubuntu-Light".to_owned(), // fallback for √ etc + "NotoEmoji-Regular".to_owned(), + "emoji-icon-font".to_owned(), + ], + ); + families.insert( + FontFamily::Proportional, + vec![ "Ubuntu-Light".to_owned(), - FontData::from_static(include_bytes!("../../fonts/Ubuntu-Light.ttf")), - ); - - // Some good looking emojis. Use as first priority: - font_data.insert( "NotoEmoji-Regular".to_owned(), - FontData::from_static(include_bytes!("../../fonts/NotoEmoji-Regular.ttf")), - ); - - // Bigger emojis, and more. : - font_data.insert( "emoji-icon-font".to_owned(), - FontData::from_static(include_bytes!("../../fonts/emoji-icon-font.ttf")).tweak( - FontTweak { - scale: 0.8, // make it smaller - y_offset_factor: 0.07, // move it down slightly - y_offset: 0.0, - }, - ), - ); - - families.insert( - FontFamily::Monospace, - vec![ - "Hack".to_owned(), - "Ubuntu-Light".to_owned(), // fallback for √ etc - "NotoEmoji-Regular".to_owned(), - "emoji-icon-font".to_owned(), - ], - ); - families.insert( - FontFamily::Proportional, - vec![ - "Ubuntu-Light".to_owned(), - "NotoEmoji-Regular".to_owned(), - "emoji-icon-font".to_owned(), - ], - ); - } + ], + ); - #[cfg(not(feature = "default_fonts"))] - { - families.insert(FontFamily::Monospace, vec![]); - families.insert(FontFamily::Proportional, vec![]); + Self { + font_data, + families, } + } +} + +impl FontDefinitions { + /// No fonts. + pub fn empty() -> Self { + let mut families = BTreeMap::new(); + families.insert(FontFamily::Monospace, vec![]); + families.insert(FontFamily::Proportional, vec![]); Self { - font_data, + font_data: Default::default(), families, } }