Bug 1371115 - Part 8: implements nsFont type properties animatable. r?hiro
In this patch, implements following properties:
* font-family
* font-feature-settings
MozReview-Commit-ID: AetcR4UWK9f
--- a/servo/components/style/properties/gecko.mako.rs
+++ b/servo/components/style/properties/gecko.mako.rs
@@ -1537,16 +1537,32 @@ fn static_assert() {
unsafe { current_settings.set_len_pod(settings_length) };
for (current, feature) in current_settings.iter_mut().zip(feature_settings.iter()) {
current.mTag = feature.mTag;
current.mValue = feature.mValue;
}
}
+ pub fn clone_font_feature_settings(&self) -> longhands::font_feature_settings::computed_value::T {
+ use values::generics::{FontSettings, FontSettingTag, FontSettingTagInt} ;
+
+ match self.gecko.mFont.fontFeatureSettings.len() {
+ 0 => FontSettings::Normal,
+ _ => FontSettings::Tag(
+ self.gecko.mFont.fontFeatureSettings.iter().map(|gecko_font_feature_setting| {
+ FontSettingTag {
+ tag: gecko_font_feature_setting.mTag,
+ value: FontSettingTagInt(gecko_font_feature_setting.mValue),
+ }
+ }).collect()
+ )
+ }
+ }
+
pub fn set_font_variation_settings(&mut self, v: longhands::font_variation_settings::computed_value::T) {
use values::generics::FontSettings;
let current_settings = &mut self.gecko.mFont.fontVariationSettings;
current_settings.clear_pod();
match v {
FontSettings::Normal => (), // do nothing, length is already 0
@@ -1614,16 +1630,44 @@ fn static_assert() {
unimplemented!()
}
pub fn copy_font_family_from(&mut self, other: &Self) {
unsafe { Gecko_CopyFontFamilyFrom(&mut self.gecko.mFont, &other.gecko.mFont); }
self.gecko.mGenericID = other.gecko.mGenericID;
}
+ pub fn clone_font_family(&self) -> longhands::font_family::computed_value::T {
+ use properties::longhands::font_family::computed_value::{FontFamily, FamilyName};
+ use gecko_bindings::structs::FontFamilyType;
+ use gecko_string_cache::Atom;
+
+ ::properties::longhands::font_family::computed_value::T(
+ self.gecko.mFont.fontlist.mFontlist.iter().map(|gecko_font_family_name| {
+ match gecko_font_family_name.mType {
+ FontFamilyType::eFamily_serif => FontFamily::Generic(atom!("serif")),
+ FontFamilyType::eFamily_sans_serif => FontFamily::Generic(atom!("sans-serif")),
+ FontFamilyType::eFamily_monospace => FontFamily::Generic(atom!("monospace")),
+ FontFamilyType::eFamily_cursive => FontFamily::Generic(atom!("cursive")),
+ FontFamilyType::eFamily_fantasy => FontFamily::Generic(atom!("fantasy")),
+ FontFamilyType::eFamily_moz_fixed => FontFamily::Generic(Atom::from("-moz-fixed")),
+ FontFamilyType::eFamily_named => FontFamily::FamilyName(FamilyName {
+ name: (&*gecko_font_family_name.mName).into(),
+ quoted: false
+ }),
+ FontFamilyType::eFamily_named_quoted => FontFamily::FamilyName(FamilyName {
+ name: (&*gecko_font_family_name.mName).into(),
+ quoted: true
+ }),
+ x => panic!("Found unexpected font FontFamilyType: {:?}", x),
+ }
+ }).collect()
+ )
+ }
+
// FIXME(bholley): Gecko has two different sizes, one of which (mSize) is the
// actual computed size, and the other of which (mFont.size) is the 'display
// size' which takes font zooming into account. We don't handle font zooming yet.
pub fn set_font_size(&mut self, v: longhands::font_size::computed_value::T) {
self.gecko.mSize = v.0;
self.gecko.mScriptUnconstrainedSize = v.0;
}
--- a/servo/components/style/properties/longhand/font.mako.rs
+++ b/servo/components/style/properties/longhand/font.mako.rs
@@ -73,17 +73,17 @@ macro_rules! impl_gecko_keyword_from_tra
}
fn from_computed_value(other: &computed_value::T) -> Self {
SpecifiedValue::Value(other.clone())
}
}
</%def>
-<%helpers:longhand name="font-family" animation_value_type="none" need_index="True" boxed="${product == 'gecko'}"
+<%helpers:longhand name="font-family" animation_value_type="discrete" need_index="True" boxed="${product == 'gecko'}"
spec="https://drafts.csswg.org/css-fonts/#propdef-font-family">
use properties::longhands::system_font::SystemFont;
use self::computed_value::{FontFamily, FamilyName};
use std::fmt;
use style_traits::ToCss;
no_viewport_percentage!(SpecifiedValue);
@@ -1867,17 +1867,17 @@ macro_rules! exclusive_value {
${helpers.single_keyword_system("font-variant-position",
"normal sub super",
products="gecko",
gecko_ffi_name="mFont.variantPosition",
gecko_constant_prefix="NS_FONT_VARIANT_POSITION",
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-position",
animation_value_type="discrete")}
-<%helpers:longhand name="font-feature-settings" products="gecko" animation_value_type="none"
+<%helpers:longhand name="font-feature-settings" products="gecko" animation_value_type="discrete"
extra_prefixes="moz" boxed="True"
spec="https://drafts.csswg.org/css-fonts/#propdef-font-feature-settings">
use properties::longhands::system_font::SystemFont;
use std::fmt;
use style_traits::ToCss;
use values::generics::FontSettings;
#[derive(Debug, Clone, PartialEq)]