diff --git a/core/src/html/layout.rs b/core/src/html/layout.rs index bb4c088cd146..c4ef734e5d78 100644 --- a/core/src/html/layout.rs +++ b/core/src/html/layout.rs @@ -510,6 +510,8 @@ impl<'a, 'gc> LayoutContext<'a, 'gc> { .library .default_font( default_font, + span.bold, + span.italic, context.ui, context.renderer, context.gc_context, diff --git a/core/src/library.rs b/core/src/library.rs index c9eea7d18b72..14b77dc3892c 100644 --- a/core/src/library.rs +++ b/core/src/library.rs @@ -387,7 +387,7 @@ pub struct Library<'gc> { default_font_names: FnvHashMap>, /// The cached list of implementations per default font. - default_font_cache: FnvHashMap>>, + default_font_cache: FnvHashMap<(DefaultFont, bool, bool), Vec>>, /// A list of the symbols associated with specific AVM2 constructor /// prototypes. @@ -442,26 +442,29 @@ impl<'gc> Library<'gc> { pub fn default_font( &mut self, name: DefaultFont, + is_bold: bool, + is_italic: bool, ui: &dyn UiBackend, renderer: &mut dyn RenderBackend, gc_context: &Mutation<'gc>, ) -> Vec> { // Can't use entry api here as we want to use self for `load_device_font`. // Cache the value as this will be looked up a lot, and font lookup by name can be expensive if lots of fonts exist. - if let Some(cache) = self.default_font_cache.get(&name) { + if let Some(cache) = self.default_font_cache.get(&(name, is_bold, is_italic)) { return cache.clone(); } let mut result = vec![]; for name in self.default_font_names.entry(name).or_default().clone() { if let Some(font) = - self.get_or_load_device_font(&name, false, false, ui, renderer, gc_context) + self.get_or_load_device_font(&name, is_bold, is_italic, ui, renderer, gc_context) { result.push(font); } } - self.default_font_cache.insert(name, result.clone()); + self.default_font_cache + .insert((name, is_bold, is_italic), result.clone()); result }