mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Auto merge of #21140 - emilio:gecko-sync, r=emilio
style: Sync changes from mozilla-central. See each individual commit for details. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21140) <!-- Reviewable:end -->
This commit is contained in:
commit
6554a40331
6 changed files with 371 additions and 323 deletions
|
@ -65,7 +65,12 @@ lazy_static! {
|
||||||
.map(|s| s.parse::<usize>().expect("invalid STYLO_THREADS value"));
|
.map(|s| s.parse::<usize>().expect("invalid STYLO_THREADS value"));
|
||||||
let mut num_threads = match stylo_threads {
|
let mut num_threads = match stylo_threads {
|
||||||
Ok(num) => num,
|
Ok(num) => num,
|
||||||
_ => cmp::max(num_cpus::get() * 3 / 4, 1),
|
// The default heuristic is num_virtual_cores * .75. This gives us
|
||||||
|
// three threads on a hyper-threaded dual core, and six threads on
|
||||||
|
// a hyper-threaded quad core. The performance benefit of additional
|
||||||
|
// threads seems to level off at around six, so we cap it there on
|
||||||
|
// many-core machines (see bug 1431285 comment 14).
|
||||||
|
_ => cmp::min(cmp::max(num_cpus::get() * 3 / 4, 1), 6),
|
||||||
};
|
};
|
||||||
|
|
||||||
// If num_threads is one, there's no point in creating a thread pool, so
|
// If num_threads is one, there's no point in creating a thread pool, so
|
||||||
|
|
|
@ -49,8 +49,7 @@ use gecko::values::round_border_to_device_pixels;
|
||||||
use logical_geometry::WritingMode;
|
use logical_geometry::WritingMode;
|
||||||
use media_queries::Device;
|
use media_queries::Device;
|
||||||
use properties::computed_value_flags::*;
|
use properties::computed_value_flags::*;
|
||||||
use properties::{longhands, Importance, LonghandId};
|
use properties::longhands;
|
||||||
use properties::{PropertyDeclaration, PropertyDeclarationBlock, PropertyDeclarationId};
|
|
||||||
use rule_tree::StrongRuleNode;
|
use rule_tree::StrongRuleNode;
|
||||||
use selector_parser::PseudoElement;
|
use selector_parser::PseudoElement;
|
||||||
use servo_arc::{Arc, RawOffsetArc};
|
use servo_arc::{Arc, RawOffsetArc};
|
||||||
|
@ -58,7 +57,7 @@ use std::marker::PhantomData;
|
||||||
use std::mem::{forget, uninitialized, transmute, zeroed};
|
use std::mem::{forget, uninitialized, transmute, zeroed};
|
||||||
use std::{cmp, ops, ptr};
|
use std::{cmp, ops, ptr};
|
||||||
use values::{self, CustomIdent, Either, KeyframesName, None_};
|
use values::{self, CustomIdent, Either, KeyframesName, None_};
|
||||||
use values::computed::{NonNegativeLength, ToComputedValue, Percentage, TransitionProperty};
|
use values::computed::{NonNegativeLength, Percentage, TransitionProperty};
|
||||||
use values::computed::font::FontSize;
|
use values::computed::font::FontSize;
|
||||||
use values::computed::effects::{BoxShadow, Filter, SimpleShadow};
|
use values::computed::effects::{BoxShadow, Filter, SimpleShadow};
|
||||||
use values::computed::outline::OutlineStyle;
|
use values::computed::outline::OutlineStyle;
|
||||||
|
@ -307,30 +306,6 @@ impl ComputedValuesInner {
|
||||||
pub fn has_moz_binding(&self) -> bool {
|
pub fn has_moz_binding(&self) -> bool {
|
||||||
!self.get_box().gecko.mBinding.mRawPtr.is_null()
|
!self.get_box().gecko.mBinding.mRawPtr.is_null()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_declaration_block(&self, property: PropertyDeclarationId) -> PropertyDeclarationBlock {
|
|
||||||
let value = match property {
|
|
||||||
% for prop in data.longhands:
|
|
||||||
% if prop.animatable:
|
|
||||||
PropertyDeclarationId::Longhand(LonghandId::${prop.camel_case}) => {
|
|
||||||
PropertyDeclaration::${prop.camel_case}(
|
|
||||||
% if prop.boxed:
|
|
||||||
Box::new(
|
|
||||||
% endif
|
|
||||||
longhands::${prop.ident}::SpecifiedValue::from_computed_value(
|
|
||||||
&self.get_${prop.style_struct.ident.strip("_")}().clone_${prop.ident}())
|
|
||||||
% if prop.boxed:
|
|
||||||
)
|
|
||||||
% endif
|
|
||||||
)
|
|
||||||
},
|
|
||||||
% endif
|
|
||||||
% endfor
|
|
||||||
PropertyDeclarationId::Custom(_name) => unimplemented!(),
|
|
||||||
_ => unimplemented!()
|
|
||||||
};
|
|
||||||
PropertyDeclarationBlock::with_one(value, Importance::Normal)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
<%def name="declare_style_struct(style_struct)">
|
<%def name="declare_style_struct(style_struct)">
|
||||||
|
|
|
@ -207,8 +207,8 @@ impl AnimatedProperty {
|
||||||
% for prop in data.longhands:
|
% for prop in data.longhands:
|
||||||
% if prop.animatable:
|
% if prop.animatable:
|
||||||
LonghandId::${prop.camel_case} => {
|
LonghandId::${prop.camel_case} => {
|
||||||
let old_computed = old_style.get_${prop.style_struct.ident.strip("_")}().clone_${prop.ident}();
|
let old_computed = old_style.clone_${prop.ident}();
|
||||||
let new_computed = new_style.get_${prop.style_struct.ident.strip("_")}().clone_${prop.ident}();
|
let new_computed = new_style.clone_${prop.ident}();
|
||||||
AnimatedProperty::${prop.camel_case}(
|
AnimatedProperty::${prop.camel_case}(
|
||||||
% if prop.is_animatable_with_computed_value:
|
% if prop.is_animatable_with_computed_value:
|
||||||
old_computed,
|
old_computed,
|
||||||
|
@ -546,15 +546,13 @@ impl AnimationValue {
|
||||||
/// Get an AnimationValue for an AnimatableLonghand from a given computed values.
|
/// Get an AnimationValue for an AnimatableLonghand from a given computed values.
|
||||||
pub fn from_computed_values(
|
pub fn from_computed_values(
|
||||||
property: LonghandId,
|
property: LonghandId,
|
||||||
computed_values: &ComputedValues
|
style: &ComputedValues,
|
||||||
) -> Option<Self> {
|
) -> Option<Self> {
|
||||||
Some(match property {
|
Some(match property {
|
||||||
% for prop in data.longhands:
|
% for prop in data.longhands:
|
||||||
% if prop.animatable:
|
% if prop.animatable:
|
||||||
LonghandId::${prop.camel_case} => {
|
LonghandId::${prop.camel_case} => {
|
||||||
let computed = computed_values
|
let computed = style.clone_${prop.ident}();
|
||||||
.get_${prop.style_struct.ident.strip("_")}()
|
|
||||||
.clone_${prop.ident}();
|
|
||||||
AnimationValue::${prop.camel_case}(
|
AnimationValue::${prop.camel_case}(
|
||||||
% if prop.is_animatable_with_computed_value:
|
% if prop.is_animatable_with_computed_value:
|
||||||
computed
|
computed
|
||||||
|
|
|
@ -7,13 +7,15 @@
|
||||||
|
|
||||||
<% data.new_style_struct("Font", inherited=True) %>
|
<% data.new_style_struct("Font", inherited=True) %>
|
||||||
|
|
||||||
${helpers.predefined_type("font-family",
|
${helpers.predefined_type(
|
||||||
"FontFamily",
|
"font-family",
|
||||||
initial_value="computed::FontFamily::serif()",
|
"FontFamily",
|
||||||
animation_value_type="discrete",
|
initial_value="computed::FontFamily::serif()",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
animation_value_type="discrete",
|
||||||
spec="https://drafts.csswg.org/css-fonts/#propdef-font-family",
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
servo_restyle_damage="rebuild_and_reflow")}
|
spec="https://drafts.csswg.org/css-fonts/#propdef-font-family",
|
||||||
|
servo_restyle_damage="rebuild_and_reflow",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type(
|
${helpers.predefined_type(
|
||||||
"font-style",
|
"font-style",
|
||||||
|
@ -32,16 +34,18 @@ ${helpers.predefined_type(
|
||||||
"all-petite-caps": "ALLPETITE",
|
"all-petite-caps": "ALLPETITE",
|
||||||
"titling-caps": "TITLING" } %>
|
"titling-caps": "TITLING" } %>
|
||||||
|
|
||||||
${helpers.single_keyword_system("font-variant-caps",
|
${helpers.single_keyword_system(
|
||||||
"normal small-caps",
|
"font-variant-caps",
|
||||||
extra_gecko_values="all-small-caps petite-caps all-petite-caps unicase titling-caps",
|
"normal small-caps",
|
||||||
gecko_constant_prefix="NS_FONT_VARIANT_CAPS",
|
extra_gecko_values="all-small-caps petite-caps all-petite-caps unicase titling-caps",
|
||||||
gecko_ffi_name="mFont.variantCaps",
|
gecko_constant_prefix="NS_FONT_VARIANT_CAPS",
|
||||||
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-caps",
|
gecko_ffi_name="mFont.variantCaps",
|
||||||
custom_consts=font_variant_caps_custom_consts,
|
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-caps",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
custom_consts=font_variant_caps_custom_consts,
|
||||||
animation_value_type="discrete",
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
servo_restyle_damage="rebuild_and_reflow")}
|
animation_value_type="discrete",
|
||||||
|
servo_restyle_damage="rebuild_and_reflow",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type(
|
${helpers.predefined_type(
|
||||||
"font-weight",
|
"font-weight",
|
||||||
|
@ -54,32 +58,38 @@ ${helpers.predefined_type(
|
||||||
servo_restyle_damage="rebuild_and_reflow",
|
servo_restyle_damage="rebuild_and_reflow",
|
||||||
)}
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("font-size",
|
${helpers.predefined_type(
|
||||||
"FontSize",
|
"font-size",
|
||||||
initial_value="computed::FontSize::medium()",
|
"FontSize",
|
||||||
initial_specified_value="specified::FontSize::medium()",
|
initial_value="computed::FontSize::medium()",
|
||||||
animation_value_type="NonNegativeLength",
|
initial_specified_value="specified::FontSize::medium()",
|
||||||
allow_quirks=True,
|
animation_value_type="NonNegativeLength",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
allow_quirks=True,
|
||||||
spec="https://drafts.csswg.org/css-fonts/#propdef-font-size",
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
servo_restyle_damage="rebuild_and_reflow")}
|
spec="https://drafts.csswg.org/css-fonts/#propdef-font-size",
|
||||||
|
servo_restyle_damage="rebuild_and_reflow",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("font-size-adjust",
|
${helpers.predefined_type(
|
||||||
"FontSizeAdjust",
|
"font-size-adjust",
|
||||||
products="gecko",
|
"FontSizeAdjust",
|
||||||
initial_value="computed::FontSizeAdjust::none()",
|
products="gecko",
|
||||||
initial_specified_value="specified::FontSizeAdjust::none()",
|
initial_value="computed::FontSizeAdjust::none()",
|
||||||
animation_value_type="ComputedValue",
|
initial_specified_value="specified::FontSizeAdjust::none()",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
animation_value_type="ComputedValue",
|
||||||
spec="https://drafts.csswg.org/css-fonts/#propdef-font-size-adjust")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
spec="https://drafts.csswg.org/css-fonts/#propdef-font-size-adjust",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("font-synthesis",
|
${helpers.predefined_type(
|
||||||
"FontSynthesis",
|
"font-synthesis",
|
||||||
products="gecko",
|
"FontSynthesis",
|
||||||
initial_value="specified::FontSynthesis::get_initial_value()",
|
products="gecko",
|
||||||
animation_value_type="discrete",
|
initial_value="specified::FontSynthesis::get_initial_value()",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
animation_value_type="discrete",
|
||||||
spec="https://drafts.csswg.org/css-fonts/#propdef-font-synthesis")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
spec="https://drafts.csswg.org/css-fonts/#propdef-font-synthesis",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type(
|
${helpers.predefined_type(
|
||||||
"font-stretch",
|
"font-stretch",
|
||||||
|
@ -92,69 +102,83 @@ ${helpers.predefined_type(
|
||||||
servo_restyle_damage="rebuild_and_reflow",
|
servo_restyle_damage="rebuild_and_reflow",
|
||||||
)}
|
)}
|
||||||
|
|
||||||
${helpers.single_keyword_system("font-kerning",
|
${helpers.single_keyword_system(
|
||||||
"auto none normal",
|
"font-kerning",
|
||||||
products="gecko",
|
"auto none normal",
|
||||||
gecko_ffi_name="mFont.kerning",
|
products="gecko",
|
||||||
gecko_constant_prefix="NS_FONT_KERNING",
|
gecko_ffi_name="mFont.kerning",
|
||||||
spec="https://drafts.csswg.org/css-fonts/#propdef-font-kerning",
|
gecko_constant_prefix="NS_FONT_KERNING",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
spec="https://drafts.csswg.org/css-fonts/#propdef-font-kerning",
|
||||||
animation_value_type="discrete")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
animation_value_type="discrete",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("font-variant-alternates",
|
${helpers.predefined_type(
|
||||||
"FontVariantAlternates",
|
"font-variant-alternates",
|
||||||
products="gecko",
|
"FontVariantAlternates",
|
||||||
initial_value="computed::FontVariantAlternates::get_initial_value()",
|
products="gecko",
|
||||||
initial_specified_value="specified::FontVariantAlternates::get_initial_specified_value()",
|
initial_value="computed::FontVariantAlternates::get_initial_value()",
|
||||||
animation_value_type="discrete",
|
initial_specified_value="specified::FontVariantAlternates::get_initial_specified_value()",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
animation_value_type="discrete",
|
||||||
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-alternates")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-alternates",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("font-variant-east-asian",
|
${helpers.predefined_type(
|
||||||
"FontVariantEastAsian",
|
"font-variant-east-asian",
|
||||||
products="gecko",
|
"FontVariantEastAsian",
|
||||||
initial_value="computed::FontVariantEastAsian::empty()",
|
products="gecko",
|
||||||
initial_specified_value="specified::FontVariantEastAsian::empty()",
|
initial_value="computed::FontVariantEastAsian::empty()",
|
||||||
animation_value_type="discrete",
|
initial_specified_value="specified::FontVariantEastAsian::empty()",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
animation_value_type="discrete",
|
||||||
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-east-asian")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-east-asian",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("font-variant-ligatures",
|
${helpers.predefined_type(
|
||||||
"FontVariantLigatures",
|
"font-variant-ligatures",
|
||||||
products="gecko",
|
"FontVariantLigatures",
|
||||||
initial_value="computed::FontVariantLigatures::empty()",
|
products="gecko",
|
||||||
initial_specified_value="specified::FontVariantLigatures::empty()",
|
initial_value="computed::FontVariantLigatures::empty()",
|
||||||
animation_value_type="discrete",
|
initial_specified_value="specified::FontVariantLigatures::empty()",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
animation_value_type="discrete",
|
||||||
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-ligatures")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-ligatures",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("font-variant-numeric",
|
${helpers.predefined_type(
|
||||||
"FontVariantNumeric",
|
"font-variant-numeric",
|
||||||
products="gecko",
|
"FontVariantNumeric",
|
||||||
initial_value="computed::FontVariantNumeric::empty()",
|
products="gecko",
|
||||||
initial_specified_value="specified::FontVariantNumeric::empty()",
|
initial_value="computed::FontVariantNumeric::empty()",
|
||||||
animation_value_type="discrete",
|
initial_specified_value="specified::FontVariantNumeric::empty()",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
animation_value_type="discrete",
|
||||||
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-numeric")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-numeric",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.single_keyword_system("font-variant-position",
|
${helpers.single_keyword_system(
|
||||||
"normal sub super",
|
"font-variant-position",
|
||||||
products="gecko",
|
"normal sub super",
|
||||||
gecko_ffi_name="mFont.variantPosition",
|
products="gecko",
|
||||||
gecko_constant_prefix="NS_FONT_VARIANT_POSITION",
|
gecko_ffi_name="mFont.variantPosition",
|
||||||
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-position",
|
gecko_constant_prefix="NS_FONT_VARIANT_POSITION",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
spec="https://drafts.csswg.org/css-fonts/#propdef-font-variant-position",
|
||||||
animation_value_type="discrete")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
animation_value_type="discrete",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("font-feature-settings",
|
${helpers.predefined_type(
|
||||||
"FontFeatureSettings",
|
"font-feature-settings",
|
||||||
products="gecko",
|
"FontFeatureSettings",
|
||||||
initial_value="computed::FontFeatureSettings::normal()",
|
products="gecko",
|
||||||
initial_specified_value="specified::FontFeatureSettings::normal()",
|
initial_value="computed::FontFeatureSettings::normal()",
|
||||||
extra_prefixes="moz:layout.css.prefixes.font-features",
|
initial_specified_value="specified::FontFeatureSettings::normal()",
|
||||||
animation_value_type="discrete",
|
extra_prefixes="moz:layout.css.prefixes.font-features",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
animation_value_type="discrete",
|
||||||
spec="https://drafts.csswg.org/css-fonts/#propdef-font-feature-settings")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
spec="https://drafts.csswg.org/css-fonts/#propdef-font-feature-settings",
|
||||||
|
)}
|
||||||
|
|
||||||
<%
|
<%
|
||||||
# This spec link is too long to fit elsewhere
|
# This spec link is too long to fit elsewhere
|
||||||
|
@ -163,100 +187,120 @@ https://drafts.csswg.org/css-fonts-4/#low-level-font-variation-settings-control-
|
||||||
"""
|
"""
|
||||||
%>
|
%>
|
||||||
|
|
||||||
${helpers.predefined_type("font-variation-settings",
|
${helpers.predefined_type(
|
||||||
"FontVariationSettings",
|
"font-variation-settings",
|
||||||
products="gecko",
|
"FontVariationSettings",
|
||||||
gecko_pref="layout.css.font-variations.enabled",
|
products="gecko",
|
||||||
initial_value="computed::FontVariationSettings::normal()",
|
gecko_pref="layout.css.font-variations.enabled",
|
||||||
initial_specified_value="specified::FontVariationSettings::normal()",
|
initial_value="computed::FontVariationSettings::normal()",
|
||||||
animation_value_type="ComputedValue",
|
initial_specified_value="specified::FontVariationSettings::normal()",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
animation_value_type="ComputedValue",
|
||||||
spec="${variation_spec}")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
spec="${variation_spec}",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("font-language-override",
|
${helpers.predefined_type(
|
||||||
"FontLanguageOverride",
|
"font-language-override",
|
||||||
products="gecko",
|
"FontLanguageOverride",
|
||||||
initial_value="computed::FontLanguageOverride::zero()",
|
products="gecko",
|
||||||
initial_specified_value="specified::FontLanguageOverride::normal()",
|
initial_value="computed::FontLanguageOverride::zero()",
|
||||||
animation_value_type="discrete",
|
initial_specified_value="specified::FontLanguageOverride::normal()",
|
||||||
extra_prefixes="moz:layout.css.prefixes.font-features",
|
animation_value_type="discrete",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
extra_prefixes="moz:layout.css.prefixes.font-features",
|
||||||
spec="https://drafts.csswg.org/css-fonts-3/#propdef-font-language-override")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
spec="https://drafts.csswg.org/css-fonts-3/#propdef-font-language-override",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.single_keyword_system("font-optical-sizing",
|
${helpers.single_keyword_system(
|
||||||
"auto none",
|
"font-optical-sizing",
|
||||||
products="gecko",
|
"auto none",
|
||||||
gecko_pref="layout.css.font-variations.enabled",
|
products="gecko",
|
||||||
gecko_ffi_name="mFont.opticalSizing",
|
gecko_pref="layout.css.font-variations.enabled",
|
||||||
gecko_constant_prefix="NS_FONT_OPTICAL_SIZING",
|
gecko_ffi_name="mFont.opticalSizing",
|
||||||
animation_value_type="discrete",
|
gecko_constant_prefix="NS_FONT_OPTICAL_SIZING",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
animation_value_type="discrete",
|
||||||
spec="https://www.w3.org/TR/css-fonts-4/#font-optical-sizing-def")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
spec="https://www.w3.org/TR/css-fonts-4/#font-optical-sizing-def",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("-x-lang",
|
${helpers.predefined_type(
|
||||||
"XLang",
|
"-x-lang",
|
||||||
products="gecko",
|
"XLang",
|
||||||
initial_value="computed::XLang::get_initial_value()",
|
products="gecko",
|
||||||
animation_value_type="none",
|
initial_value="computed::XLang::get_initial_value()",
|
||||||
enabled_in="",
|
animation_value_type="none",
|
||||||
spec="Internal (not web-exposed)")}
|
enabled_in="",
|
||||||
|
spec="Internal (not web-exposed)",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("-moz-script-size-multiplier",
|
${helpers.predefined_type(
|
||||||
"MozScriptSizeMultiplier",
|
"-moz-script-size-multiplier",
|
||||||
products="gecko",
|
"MozScriptSizeMultiplier",
|
||||||
initial_value="computed::MozScriptSizeMultiplier::get_initial_value()",
|
products="gecko",
|
||||||
animation_value_type="none",
|
initial_value="computed::MozScriptSizeMultiplier::get_initial_value()",
|
||||||
gecko_ffi_name="mScriptSizeMultiplier",
|
animation_value_type="none",
|
||||||
enabled_in="",
|
gecko_ffi_name="mScriptSizeMultiplier",
|
||||||
spec="Internal (not web-exposed)")}
|
enabled_in="",
|
||||||
|
spec="Internal (not web-exposed)",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("-moz-script-level",
|
${helpers.predefined_type(
|
||||||
"MozScriptLevel",
|
"-moz-script-level",
|
||||||
0,
|
"MozScriptLevel",
|
||||||
animation_value_type="none",
|
0,
|
||||||
products="gecko",
|
animation_value_type="none",
|
||||||
enabled_in="ua",
|
products="gecko",
|
||||||
gecko_ffi_name="mScriptLevel",
|
enabled_in="ua",
|
||||||
spec="Internal (not web-exposed)")}
|
gecko_ffi_name="mScriptLevel",
|
||||||
|
spec="Internal (not web-exposed)",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.single_keyword("-moz-math-display",
|
${helpers.single_keyword(
|
||||||
"inline block",
|
"-moz-math-display",
|
||||||
gecko_constant_prefix="NS_MATHML_DISPLAYSTYLE",
|
"inline block",
|
||||||
gecko_ffi_name="mMathDisplay",
|
gecko_constant_prefix="NS_MATHML_DISPLAYSTYLE",
|
||||||
products="gecko",
|
gecko_ffi_name="mMathDisplay",
|
||||||
enabled_in="ua",
|
products="gecko",
|
||||||
spec="Internal (not web-exposed)",
|
enabled_in="ua",
|
||||||
animation_value_type="none")}
|
spec="Internal (not web-exposed)",
|
||||||
|
animation_value_type="none",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.single_keyword("-moz-math-variant",
|
${helpers.single_keyword(
|
||||||
"""none normal bold italic bold-italic script bold-script
|
"-moz-math-variant",
|
||||||
fraktur double-struck bold-fraktur sans-serif
|
"""none normal bold italic bold-italic script bold-script
|
||||||
bold-sans-serif sans-serif-italic sans-serif-bold-italic
|
fraktur double-struck bold-fraktur sans-serif
|
||||||
monospace initial tailed looped stretched""",
|
bold-sans-serif sans-serif-italic sans-serif-bold-italic
|
||||||
gecko_constant_prefix="NS_MATHML_MATHVARIANT",
|
monospace initial tailed looped stretched""",
|
||||||
gecko_ffi_name="mMathVariant",
|
gecko_constant_prefix="NS_MATHML_MATHVARIANT",
|
||||||
products="gecko",
|
gecko_ffi_name="mMathVariant",
|
||||||
spec="Internal (not web-exposed)",
|
products="gecko",
|
||||||
animation_value_type="none",
|
spec="Internal (not web-exposed)",
|
||||||
enabled_in="",
|
animation_value_type="none",
|
||||||
needs_conversion=True)}
|
enabled_in="",
|
||||||
|
needs_conversion=True,
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("-moz-script-min-size",
|
${helpers.predefined_type(
|
||||||
"MozScriptMinSize",
|
"-moz-script-min-size",
|
||||||
"specified::MozScriptMinSize::get_initial_value()",
|
"MozScriptMinSize",
|
||||||
animation_value_type="none",
|
"specified::MozScriptMinSize::get_initial_value()",
|
||||||
products="gecko",
|
animation_value_type="none",
|
||||||
enabled_in="",
|
products="gecko",
|
||||||
gecko_ffi_name="mScriptMinSize",
|
enabled_in="",
|
||||||
spec="Internal (not web-exposed)")}
|
gecko_ffi_name="mScriptMinSize",
|
||||||
|
spec="Internal (not web-exposed)",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("-x-text-zoom",
|
${helpers.predefined_type(
|
||||||
"XTextZoom",
|
"-x-text-zoom",
|
||||||
"computed::XTextZoom(true)",
|
"XTextZoom",
|
||||||
animation_value_type="none",
|
"computed::XTextZoom(true)",
|
||||||
products="gecko",
|
animation_value_type="none",
|
||||||
enabled_in="",
|
products="gecko",
|
||||||
spec="Internal (not web-exposed)")}
|
enabled_in="",
|
||||||
|
spec="Internal (not web-exposed)",
|
||||||
|
)}
|
||||||
|
|
||||||
% if product == "gecko":
|
% if product == "gecko":
|
||||||
pub mod system_font {
|
pub mod system_font {
|
||||||
|
@ -462,29 +506,35 @@ ${helpers.predefined_type("-x-text-zoom",
|
||||||
}
|
}
|
||||||
% endif
|
% endif
|
||||||
|
|
||||||
${helpers.single_keyword("-moz-osx-font-smoothing",
|
${helpers.single_keyword(
|
||||||
"auto grayscale",
|
"-moz-osx-font-smoothing",
|
||||||
gecko_constant_prefix="NS_FONT_SMOOTHING",
|
"auto grayscale",
|
||||||
gecko_ffi_name="mFont.smoothing",
|
gecko_constant_prefix="NS_FONT_SMOOTHING",
|
||||||
gecko_pref="layout.css.osx-font-smoothing.enabled",
|
gecko_ffi_name="mFont.smoothing",
|
||||||
products="gecko",
|
gecko_pref="layout.css.osx-font-smoothing.enabled",
|
||||||
spec="Nonstandard (https://developer.mozilla.org/en-US/docs/Web/CSS/font-smooth)",
|
products="gecko",
|
||||||
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
spec="Nonstandard (https://developer.mozilla.org/en-US/docs/Web/CSS/font-smooth)",
|
||||||
animation_value_type="discrete")}
|
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
|
||||||
|
animation_value_type="discrete",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("-moz-font-smoothing-background-color",
|
${helpers.predefined_type(
|
||||||
"RGBAColor",
|
"-moz-font-smoothing-background-color",
|
||||||
"RGBA::transparent()",
|
"RGBAColor",
|
||||||
animation_value_type="AnimatedRGBA",
|
"RGBA::transparent()",
|
||||||
products="gecko",
|
animation_value_type="AnimatedRGBA",
|
||||||
gecko_ffi_name="mFont.fontSmoothingBackgroundColor",
|
products="gecko",
|
||||||
enabled_in="chrome",
|
gecko_ffi_name="mFont.fontSmoothingBackgroundColor",
|
||||||
spec="None (Nonstandard internal property)")}
|
enabled_in="chrome",
|
||||||
|
spec="None (Nonstandard internal property)",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("-moz-min-font-size-ratio",
|
${helpers.predefined_type(
|
||||||
"Percentage",
|
"-moz-min-font-size-ratio",
|
||||||
"computed::Percentage::hundred()",
|
"Percentage",
|
||||||
animation_value_type="none",
|
"computed::Percentage::hundred()",
|
||||||
products="gecko",
|
animation_value_type="none",
|
||||||
enabled_in="ua",
|
products="gecko",
|
||||||
spec="Nonstandard (Internal-only)")}
|
enabled_in="ua",
|
||||||
|
spec="Nonstandard (Internal-only)",
|
||||||
|
)}
|
||||||
|
|
|
@ -7,57 +7,74 @@
|
||||||
<% data.new_style_struct("InheritedBox", inherited=True, gecko_name="Visibility") %>
|
<% data.new_style_struct("InheritedBox", inherited=True, gecko_name="Visibility") %>
|
||||||
|
|
||||||
// TODO: collapse. Well, do tables first.
|
// TODO: collapse. Well, do tables first.
|
||||||
${helpers.single_keyword("visibility",
|
${helpers.single_keyword(
|
||||||
"visible hidden",
|
"visibility",
|
||||||
extra_gecko_values="collapse",
|
"visible hidden",
|
||||||
gecko_ffi_name="mVisible",
|
extra_gecko_values="collapse",
|
||||||
animation_value_type="ComputedValue",
|
gecko_ffi_name="mVisible",
|
||||||
spec="https://drafts.csswg.org/css-box/#propdef-visibility")}
|
animation_value_type="ComputedValue",
|
||||||
|
spec="https://drafts.csswg.org/css-box/#propdef-visibility",
|
||||||
|
)}
|
||||||
|
|
||||||
// CSS Writing Modes Level 3
|
// CSS Writing Modes Level 3
|
||||||
// https://drafts.csswg.org/css-writing-modes-3
|
// https://drafts.csswg.org/css-writing-modes-3
|
||||||
${helpers.single_keyword("writing-mode",
|
${helpers.single_keyword(
|
||||||
"horizontal-tb vertical-rl vertical-lr",
|
"writing-mode",
|
||||||
extra_gecko_values="sideways-rl sideways-lr",
|
"horizontal-tb vertical-rl vertical-lr",
|
||||||
extra_gecko_aliases="lr=horizontal-tb lr-tb=horizontal-tb \
|
extra_gecko_values="sideways-rl sideways-lr",
|
||||||
rl=horizontal-tb rl-tb=horizontal-tb \
|
extra_gecko_aliases="lr=horizontal-tb lr-tb=horizontal-tb \
|
||||||
tb=vertical-rl tb-rl=vertical-rl",
|
rl=horizontal-tb rl-tb=horizontal-tb \
|
||||||
servo_pref="layout.writing-mode.enabled",
|
tb=vertical-rl tb-rl=vertical-rl",
|
||||||
animation_value_type="discrete",
|
servo_pref="layout.writing-mode.enabled",
|
||||||
spec="https://drafts.csswg.org/css-writing-modes/#propdef-writing-mode",
|
animation_value_type="none",
|
||||||
servo_restyle_damage="rebuild_and_reflow")}
|
spec="https://drafts.csswg.org/css-writing-modes/#propdef-writing-mode",
|
||||||
|
servo_restyle_damage="rebuild_and_reflow",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.single_keyword("direction", "ltr rtl", animation_value_type="discrete",
|
${helpers.single_keyword(
|
||||||
spec="https://drafts.csswg.org/css-writing-modes/#propdef-direction",
|
"direction",
|
||||||
needs_conversion=True,
|
"ltr rtl",
|
||||||
servo_restyle_damage="rebuild_and_reflow")}
|
animation_value_type="none",
|
||||||
|
spec="https://drafts.csswg.org/css-writing-modes/#propdef-direction",
|
||||||
|
needs_conversion=True,
|
||||||
|
servo_restyle_damage="rebuild_and_reflow",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.single_keyword("text-orientation",
|
// TODO(emilio): Should text-orientation be non-animatable? It affects the
|
||||||
"mixed upright sideways",
|
// WritingMode value, but not the logical -> physical mapping of properties,
|
||||||
extra_gecko_aliases="sideways-right=sideways",
|
// which is the reason direction / writing-mode are non-animatable.
|
||||||
products="gecko",
|
${helpers.single_keyword(
|
||||||
animation_value_type="discrete",
|
"text-orientation",
|
||||||
spec="https://drafts.csswg.org/css-writing-modes/#propdef-text-orientation")}
|
"mixed upright sideways",
|
||||||
|
extra_gecko_aliases="sideways-right=sideways",
|
||||||
|
products="gecko",
|
||||||
|
animation_value_type="discrete",
|
||||||
|
spec="https://drafts.csswg.org/css-writing-modes/#propdef-text-orientation",
|
||||||
|
)}
|
||||||
|
|
||||||
// CSS Color Module Level 4
|
// CSS Color Module Level 4
|
||||||
// https://drafts.csswg.org/css-color/
|
// https://drafts.csswg.org/css-color/
|
||||||
${helpers.single_keyword("color-adjust",
|
${helpers.single_keyword(
|
||||||
"economy exact", products="gecko",
|
"color-adjust",
|
||||||
gecko_pref="layout.css.color-adjust.enabled",
|
"economy exact", products="gecko",
|
||||||
animation_value_type="discrete",
|
gecko_pref="layout.css.color-adjust.enabled",
|
||||||
spec="https://drafts.csswg.org/css-color/#propdef-color-adjust")}
|
animation_value_type="discrete",
|
||||||
|
spec="https://drafts.csswg.org/css-color/#propdef-color-adjust",
|
||||||
|
)}
|
||||||
|
|
||||||
<% image_rendering_custom_consts = { "crisp-edges": "CRISPEDGES",
|
<% image_rendering_custom_consts = { "crisp-edges": "CRISPEDGES",
|
||||||
"-moz-crisp-edges": "CRISPEDGES" } %>
|
"-moz-crisp-edges": "CRISPEDGES" } %>
|
||||||
// According to to CSS-IMAGES-3, `optimizespeed` and `optimizequality` are synonyms for `auto`
|
// According to to CSS-IMAGES-3, `optimizespeed` and `optimizequality` are synonyms for `auto`
|
||||||
// And, firefox doesn't support `pixelated` yet (https://bugzilla.mozilla.org/show_bug.cgi?id=856337)
|
// And, firefox doesn't support `pixelated` yet (https://bugzilla.mozilla.org/show_bug.cgi?id=856337)
|
||||||
${helpers.single_keyword("image-rendering",
|
${helpers.single_keyword(
|
||||||
"auto",
|
"image-rendering",
|
||||||
extra_gecko_values="optimizespeed optimizequality -moz-crisp-edges",
|
"auto",
|
||||||
extra_servo_values="pixelated crisp-edges",
|
extra_gecko_values="optimizespeed optimizequality -moz-crisp-edges",
|
||||||
custom_consts=image_rendering_custom_consts,
|
extra_servo_values="pixelated crisp-edges",
|
||||||
animation_value_type="discrete",
|
custom_consts=image_rendering_custom_consts,
|
||||||
spec="https://drafts.csswg.org/css-images/#propdef-image-rendering")}
|
animation_value_type="discrete",
|
||||||
|
spec="https://drafts.csswg.org/css-images/#propdef-image-rendering",
|
||||||
|
)}
|
||||||
|
|
||||||
${helpers.predefined_type("image-orientation",
|
${helpers.predefined_type("image-orientation",
|
||||||
"ImageOrientation",
|
"ImageOrientation",
|
||||||
|
|
|
@ -35,7 +35,7 @@ use logical_geometry::WritingMode;
|
||||||
#[cfg(feature = "gecko")] use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
|
#[cfg(feature = "gecko")] use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
|
||||||
use media_queries::Device;
|
use media_queries::Device;
|
||||||
use parser::ParserContext;
|
use parser::ParserContext;
|
||||||
#[cfg(feature = "gecko")] use properties::longhands::system_font::SystemFont;
|
use properties::longhands::system_font::SystemFont;
|
||||||
use rule_cache::{RuleCache, RuleCacheConditions};
|
use rule_cache::{RuleCache, RuleCacheConditions};
|
||||||
use selector_parser::PseudoElement;
|
use selector_parser::PseudoElement;
|
||||||
use selectors::parser::SelectorParseErrorKind;
|
use selectors::parser::SelectorParseErrorKind;
|
||||||
|
@ -946,25 +946,17 @@ impl LonghandId {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns whether this property is animatable.
|
/// Returns whether this property is animatable.
|
||||||
|
#[inline]
|
||||||
pub fn is_animatable(self) -> bool {
|
pub fn is_animatable(self) -> bool {
|
||||||
match self {
|
${static_longhand_id_set("ANIMATABLE", lambda p: p.animatable)}
|
||||||
% for property in data.longhands:
|
ANIMATABLE.contains(self)
|
||||||
LonghandId::${property.camel_case} => {
|
|
||||||
${str(property.animatable).lower()}
|
|
||||||
}
|
|
||||||
% endfor
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns whether this property is animatable in a discrete way.
|
/// Returns whether this property is animatable in a discrete way.
|
||||||
|
#[inline]
|
||||||
pub fn is_discrete_animatable(self) -> bool {
|
pub fn is_discrete_animatable(self) -> bool {
|
||||||
match self {
|
${static_longhand_id_set("DISCRETE_ANIMATABLE", lambda p: p.animation_value_type == "discrete")}
|
||||||
% for property in data.longhands:
|
DISCRETE_ANIMATABLE.contains(self)
|
||||||
LonghandId::${property.camel_case} => {
|
|
||||||
${str(property.animation_value_type == "discrete").lower()}
|
|
||||||
}
|
|
||||||
% endfor
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Converts from a LonghandId to an adequate nsCSSPropertyID.
|
/// Converts from a LonghandId to an adequate nsCSSPropertyID.
|
||||||
|
@ -985,20 +977,30 @@ impl LonghandId {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// If this is a logical property, return the corresponding physical one in the given writing mode.
|
/// Return whether this property is logical.
|
||||||
|
#[inline]
|
||||||
|
pub fn is_logical(&self) -> bool {
|
||||||
|
${static_longhand_id_set("LOGICAL", lambda p: p.logical)}
|
||||||
|
LOGICAL.contains(*self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// If this is a logical property, return the corresponding physical one in
|
||||||
|
/// the given writing mode.
|
||||||
|
///
|
||||||
/// Otherwise, return unchanged.
|
/// Otherwise, return unchanged.
|
||||||
|
#[inline]
|
||||||
pub fn to_physical(&self, wm: WritingMode) -> Self {
|
pub fn to_physical(&self, wm: WritingMode) -> Self {
|
||||||
match *self {
|
match *self {
|
||||||
% for property in data.longhands:
|
% for property in data.longhands:
|
||||||
% if property.logical:
|
% if property.logical:
|
||||||
LonghandId::${property.camel_case} => {
|
LonghandId::${property.camel_case} => {
|
||||||
<%helpers:logical_setter_helper name="${property.name}">
|
<%helpers:logical_setter_helper name="${property.name}">
|
||||||
<%def name="inner(physical_ident)">
|
<%def name="inner(physical_ident)">
|
||||||
LonghandId::${to_camel_case(physical_ident)}
|
LonghandId::${to_camel_case(physical_ident)}
|
||||||
</%def>
|
</%def>
|
||||||
</%helpers:logical_setter_helper>
|
</%helpers:logical_setter_helper>
|
||||||
}
|
}
|
||||||
% endif
|
% endif
|
||||||
% endfor
|
% endfor
|
||||||
_ => *self
|
_ => *self
|
||||||
}
|
}
|
||||||
|
@ -1488,7 +1490,7 @@ impl UnparsedValue {
|
||||||
PropertyDeclaration::CSSWideKeyword(WideKeywordDeclaration {
|
PropertyDeclaration::CSSWideKeyword(WideKeywordDeclaration {
|
||||||
id: longhand_id,
|
id: longhand_id,
|
||||||
keyword,
|
keyword,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1937,14 +1939,15 @@ impl PropertyDeclaration {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns whether or not the property is set by a system font
|
/// Returns whether or not the property is set by a system font
|
||||||
#[cfg(feature = "gecko")]
|
|
||||||
pub fn get_system(&self) -> Option<SystemFont> {
|
pub fn get_system(&self) -> Option<SystemFont> {
|
||||||
match *self {
|
match *self {
|
||||||
|
% if product == "gecko":
|
||||||
% for prop in SYSTEM_FONT_LONGHANDS:
|
% for prop in SYSTEM_FONT_LONGHANDS:
|
||||||
PropertyDeclaration::${to_camel_case(prop)}(ref prop) => {
|
PropertyDeclaration::${to_camel_case(prop)}(ref prop) => {
|
||||||
prop.get_system()
|
prop.get_system()
|
||||||
}
|
}
|
||||||
% endfor
|
% endfor
|
||||||
|
% endif
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1957,12 +1960,6 @@ impl PropertyDeclaration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "servo")]
|
|
||||||
/// Dummy method to avoid cfg()s
|
|
||||||
pub fn get_system(&self) -> Option<()> {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns whether the declaration may be serialized as part of a shorthand.
|
/// Returns whether the declaration may be serialized as part of a shorthand.
|
||||||
///
|
///
|
||||||
/// This method returns false if this declaration contains variable or has a
|
/// This method returns false if this declaration contains variable or has a
|
||||||
|
@ -2615,6 +2612,22 @@ impl ComputedValues {
|
||||||
self.custom_properties.as_ref()
|
self.custom_properties.as_ref()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
% for prop in data.longhands:
|
||||||
|
/// Gets the computed value of a given property.
|
||||||
|
#[inline(always)]
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
pub fn clone_${prop.ident}(
|
||||||
|
&self,
|
||||||
|
) -> longhands::${prop.ident}::computed_value::T {
|
||||||
|
self.get_${prop.style_struct.ident.strip("_")}()
|
||||||
|
% if prop.logical:
|
||||||
|
.clone_${prop.ident}(self.writing_mode)
|
||||||
|
% else:
|
||||||
|
.clone_${prop.ident}()
|
||||||
|
% endif
|
||||||
|
}
|
||||||
|
% endfor
|
||||||
|
|
||||||
/// Writes the value of the given longhand as a string in `dest`.
|
/// Writes the value of the given longhand as a string in `dest`.
|
||||||
///
|
///
|
||||||
/// Note that the value will usually be the computed value, except for
|
/// Note that the value will usually be the computed value, except for
|
||||||
|
@ -2635,20 +2648,10 @@ impl ComputedValues {
|
||||||
match property_id {
|
match property_id {
|
||||||
% for prop in data.longhands:
|
% for prop in data.longhands:
|
||||||
LonghandId::${prop.camel_case} => {
|
LonghandId::${prop.camel_case} => {
|
||||||
let style_struct =
|
let value = self.clone_${prop.ident}();
|
||||||
self.get_${prop.style_struct.ident.strip("_")}();
|
|
||||||
let value =
|
|
||||||
style_struct
|
|
||||||
% if prop.logical:
|
|
||||||
.clone_${prop.ident}(self.writing_mode);
|
|
||||||
% else:
|
|
||||||
.clone_${prop.ident}();
|
|
||||||
% endif
|
|
||||||
|
|
||||||
% if prop.predefined_type == "Color":
|
% if prop.predefined_type == "Color":
|
||||||
let value = self.resolve_color(value);
|
let value = self.resolve_color(value);
|
||||||
% endif
|
% endif
|
||||||
|
|
||||||
value.to_css(dest)
|
value.to_css(dest)
|
||||||
}
|
}
|
||||||
% endfor
|
% endfor
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue