From b1482437b1d590bb6d0a337527bcc64137581b10 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Thu, 11 May 2017 16:52:22 -0700 Subject: [PATCH] Recalculate font-size when generic changes With the MathML refactorings this feature got lost. It would still get recalculated when explicitly specified as a keyword, but not otherwise. To avoid hitting the font metrics provider too often, we only do this when the generic changes. Otherwise we trust the existing calculated font. --- .../style/properties/longhand/font.mako.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/components/style/properties/longhand/font.mako.rs b/components/style/properties/longhand/font.mako.rs index f83757fb5e8..538769ae216 100644 --- a/components/style/properties/longhand/font.mako.rs +++ b/components/style/properties/longhand/font.mako.rs @@ -891,9 +891,10 @@ ${helpers.single_keyword_system("font-variant-caps", } } + #[allow(unused_mut)] pub fn cascade_specified_font_size(context: &mut Context, specified_value: &SpecifiedValue, - computed: Au, + mut computed: Au, parent: &Font) { if let SpecifiedValue::Keyword(kw, fraction) = *specified_value { @@ -914,6 +915,22 @@ ${helpers.single_keyword_system("font-variant-caps", context.mutate_style().font_size_keyword = None; } + // we could use clone_language and clone_font_family() here but that's + // expensive. Do it only in gecko mode for now. + % if product == "gecko": + use gecko_bindings::structs::nsIAtom; + // if the language or generic changed, we need to recalculate + // the font size from the stored font-size origin information. + if context.style().get_font().gecko().mLanguage.raw::() != + context.inherited_style().get_font().gecko().mLanguage.raw::() || + context.style().get_font().gecko().mGenericID != + context.inherited_style().get_font().gecko().mGenericID { + if let Some((kw, ratio)) = context.style().font_size_keyword { + computed = kw.to_computed_value(context).scale_by(ratio); + } + } + % endif + let parent_unconstrained = context.mutate_style() .mutate_font() .apply_font_size(computed,