Bug 1379921 - Part 1: make font-variant-alternates animatable. r?hiro
In this patch, make font-variant-alternates animatable.
MozReview-Commit-ID: 2ZUHmq5x8dO
--- a/servo/components/style/properties/gecko.mako.rs
+++ b/servo/components/style/properties/gecko.mako.rs
@@ -2114,16 +2114,69 @@ fn static_assert() {
use gecko_bindings::bindings::Gecko_CopyAlternateValuesFrom;
self.gecko.mFont.variantAlternates = other.gecko.mFont.variantAlternates;
unsafe {
Gecko_CopyAlternateValuesFrom(&mut self.gecko.mFont, &other.gecko.mFont);
}
}
+ pub fn clone_font_variant_alternates(&self) -> longhands::font_variant_alternates::computed_value::T {
+ use Atom;
+ % for value in "normal swash stylistic ornaments annotation styleset character_variant historical".split():
+ use gecko_bindings::structs::NS_FONT_VARIANT_ALTERNATES_${value.upper()};
+ % endfor
+ use properties::longhands::font_variant_alternates::VariantAlternates;
+ use properties::longhands::font_variant_alternates::VariantAlternatesList;
+ use values::CustomIdent;
+
+ if self.gecko.mFont.variantAlternates == NS_FONT_VARIANT_ALTERNATES_NORMAL as u16 {
+ return VariantAlternatesList(vec![].into_boxed_slice());
+ }
+
+ let mut alternates = Vec::with_capacity(self.gecko.mFont.alternateValues.len());
+ if self.gecko.mFont.variantAlternates & (NS_FONT_VARIANT_ALTERNATES_HISTORICAL as u16) != 0 {
+ alternates.push(VariantAlternates::HistoricalForms);
+ }
+
+ <%
+ property_need_ident_list = "styleset character_variant".split()
+ %>
+ % for value in property_need_ident_list:
+ let mut ${value}_list = Vec::new();
+ % endfor
+
+ for gecko_alternate_value in self.gecko.mFont.alternateValues.iter() {
+ let ident = Atom::from(gecko_alternate_value.value.to_string());
+ match gecko_alternate_value.alternate {
+ % for value in "Swash Stylistic Ornaments Annotation".split():
+ NS_FONT_VARIANT_ALTERNATES_${value.upper()} => {
+ alternates.push(VariantAlternates::${value}(CustomIdent(ident)));
+ },
+ % endfor
+ % for value in property_need_ident_list:
+ NS_FONT_VARIANT_ALTERNATES_${value.upper()} => {
+ ${value}_list.push(CustomIdent(ident));
+ },
+ % endfor
+ x => {
+ panic!("Found unexpected value for font-variant-alternates: {:?}", x);
+ }
+ }
+ }
+
+ % for value in property_need_ident_list:
+ if !${value}_list.is_empty() {
+ alternates.push(VariantAlternates::${to_camel_case(value)}(${value}_list.into_boxed_slice()));
+ }
+ % endfor
+
+ VariantAlternatesList(alternates.into_boxed_slice())
+ }
+
${impl_simple_type_with_conversion("font_variant_ligatures", "mFont.variantLigatures")}
${impl_simple_type_with_conversion("font_variant_east_asian", "mFont.variantEastAsian")}
${impl_simple_type_with_conversion("font_variant_numeric", "mFont.variantNumeric")}
#[allow(non_snake_case)]
pub fn set__moz_min_font_size_ratio(&mut self, v: longhands::_moz_min_font_size_ratio::computed_value::T) {
let percentage = if v.0 > 255. {
255.
--- a/servo/components/style/properties/longhand/font.mako.rs
+++ b/servo/components/style/properties/longhand/font.mako.rs
@@ -1257,17 +1257,17 @@ macro_rules! impl_gecko_keyword_conversi
"auto none normal",
products="gecko",
gecko_ffi_name="mFont.kerning",
gecko_constant_prefix="NS_FONT_KERNING",
spec="https://drafts.csswg.org/css-fonts/#propdef-font-kerning",
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
animation_value_type="discrete")}
-<%helpers:longhand name="font-variant-alternates" products="gecko" animation_value_type="none"
+<%helpers:longhand name="font-variant-alternates" products="gecko" animation_value_type="discrete"
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER"
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-alternates">
use properties::longhands::system_font::SystemFont;
use std::fmt;
use style_traits::ToCss;
use values::CustomIdent;
no_viewport_percentage!(SpecifiedValue);