mirror of
https://github.com/servo/servo.git
synced 2025-09-20 20:00:13 +01:00
style: Ensure all lonhands have a working clone(), and to_css.
This removes some dubious font-family code too. It ensures that vector longhands have a proper clone implementation auto-generating it using `collect()`. Bug: 1461296 Reviewed-by: xidorn MozReview-Commit-ID: FkdnbTkeF6E
This commit is contained in:
parent
ce62cb1ba7
commit
a6328ba3ce
4 changed files with 64 additions and 22 deletions
|
@ -10,6 +10,7 @@
|
||||||
%>
|
%>
|
||||||
<%namespace name="helpers" file="/helpers.mako.rs" />
|
<%namespace name="helpers" file="/helpers.mako.rs" />
|
||||||
|
|
||||||
|
use Atom;
|
||||||
use app_units::Au;
|
use app_units::Au;
|
||||||
use custom_properties::CustomPropertiesMap;
|
use custom_properties::CustomPropertiesMap;
|
||||||
use gecko_bindings::bindings;
|
use gecko_bindings::bindings;
|
||||||
|
@ -60,7 +61,7 @@ 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};
|
use values::computed::{NonNegativeLength, ToComputedValue, Percentage};
|
||||||
use values::computed::font::{FontSize, SingleFontFamily};
|
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;
|
||||||
use values::generics::column::ColumnCount;
|
use values::generics::column::ColumnCount;
|
||||||
|
@ -126,8 +127,6 @@ impl ComputedValues {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn pseudo(&self) -> Option<PseudoElement> {
|
pub fn pseudo(&self) -> Option<PseudoElement> {
|
||||||
use string_cache::Atom;
|
|
||||||
|
|
||||||
let atom = (self.0).mPseudoTag.mRawPtr;
|
let atom = (self.0).mPseudoTag.mRawPtr;
|
||||||
if atom.is_null() {
|
if atom.is_null() {
|
||||||
return None;
|
return None;
|
||||||
|
@ -1861,7 +1860,6 @@ fn static_assert() {
|
||||||
|
|
||||||
pub fn clone_${value.name}(&self) -> longhands::${value.name}::computed_value::T {
|
pub fn clone_${value.name}(&self) -> longhands::${value.name}::computed_value::T {
|
||||||
use gecko_bindings::structs::{nsStyleGridLine_kMinLine, nsStyleGridLine_kMaxLine};
|
use gecko_bindings::structs::{nsStyleGridLine_kMinLine, nsStyleGridLine_kMaxLine};
|
||||||
use string_cache::Atom;
|
|
||||||
|
|
||||||
longhands::${value.name}::computed_value::T {
|
longhands::${value.name}::computed_value::T {
|
||||||
is_span: self.gecko.${value.gecko}.mHasSpan,
|
is_span: self.gecko.${value.gecko}.mHasSpan,
|
||||||
|
@ -2034,7 +2032,6 @@ fn static_assert() {
|
||||||
|
|
||||||
pub fn clone_grid_template_${kind}(&self) -> longhands::grid_template_${kind}::computed_value::T {
|
pub fn clone_grid_template_${kind}(&self) -> longhands::grid_template_${kind}::computed_value::T {
|
||||||
<% self_grid = "self.gecko.mGridTemplate%s" % kind.title() %>
|
<% self_grid = "self.gecko.mGridTemplate%s" % kind.title() %>
|
||||||
use Atom;
|
|
||||||
use gecko_bindings::structs::nsTArray;
|
use gecko_bindings::structs::nsTArray;
|
||||||
use nsstring::nsStringRepr;
|
use nsstring::nsStringRepr;
|
||||||
use values::CustomIdent;
|
use values::CustomIdent;
|
||||||
|
@ -2309,14 +2306,6 @@ fn static_assert() {
|
||||||
self.gecko.mFont.fontlist.mFontlist.mBasePtr.set_move((v.0).0.clone());
|
self.gecko.mFont.fontlist.mFontlist.mBasePtr.set_move((v.0).0.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn font_family_count(&self) -> usize {
|
|
||||||
0
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn font_family_at(&self, _: usize) -> SingleFontFamily {
|
|
||||||
unimplemented!()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn copy_font_family_from(&mut self, other: &Self) {
|
pub fn copy_font_family_from(&mut self, other: &Self) {
|
||||||
unsafe { Gecko_CopyFontFamilyFrom(&mut self.gecko.mFont, &other.gecko.mFont); }
|
unsafe { Gecko_CopyFontFamilyFrom(&mut self.gecko.mFont, &other.gecko.mFont); }
|
||||||
self.gecko.mGenericID = other.gecko.mGenericID;
|
self.gecko.mGenericID = other.gecko.mGenericID;
|
||||||
|
@ -2683,6 +2672,18 @@ fn static_assert() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
pub fn reset__x_lang(&mut self, other: &Self) {
|
||||||
|
self.copy__x_lang_from(other)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
pub fn clone__x_lang(&self) -> longhands::_x_lang::computed_value::T {
|
||||||
|
longhands::_x_lang::computed_value::T(unsafe {
|
||||||
|
Atom::from_raw(self.gecko.mLanguage.mRawPtr)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn set__x_text_zoom(&mut self, v: longhands::_x_text_zoom::computed_value::T) {
|
pub fn set__x_text_zoom(&mut self, v: longhands::_x_text_zoom::computed_value::T) {
|
||||||
self.gecko.mAllowZoom = v.0;
|
self.gecko.mAllowZoom = v.0;
|
||||||
|
@ -2699,8 +2700,8 @@ fn static_assert() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn reset__x_lang(&mut self, other: &Self) {
|
pub fn clone__x_text_zoom(&self) -> longhands::_x_text_zoom::computed_value::T {
|
||||||
self.copy__x_lang_from(other)
|
longhands::_x_text_zoom::computed_value::T(self.gecko.mAllowZoom)
|
||||||
}
|
}
|
||||||
|
|
||||||
${impl_simple("_moz_script_level", "mScriptLevel")}
|
${impl_simple("_moz_script_level", "mScriptLevel")}
|
||||||
|
@ -2777,7 +2778,6 @@ fn static_assert() {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn clone_font_variant_alternates(&self) -> values::computed::font::FontVariantAlternates {
|
pub fn clone_font_variant_alternates(&self) -> values::computed::font::FontVariantAlternates {
|
||||||
use Atom;
|
|
||||||
% for value in "normal swash stylistic ornaments annotation styleset character_variant historical".split():
|
% for value in "normal swash stylistic ornaments annotation styleset character_variant historical".split():
|
||||||
use gecko_bindings::structs::NS_FONT_VARIANT_ALTERNATES_${value.upper()};
|
use gecko_bindings::structs::NS_FONT_VARIANT_ALTERNATES_${value.upper()};
|
||||||
% endfor
|
% endfor
|
||||||
|
@ -2833,6 +2833,13 @@ fn static_assert() {
|
||||||
${impl_simple_type_with_conversion("font_variant_east_asian", "mFont.variantEastAsian")}
|
${impl_simple_type_with_conversion("font_variant_east_asian", "mFont.variantEastAsian")}
|
||||||
${impl_simple_type_with_conversion("font_variant_numeric", "mFont.variantNumeric")}
|
${impl_simple_type_with_conversion("font_variant_numeric", "mFont.variantNumeric")}
|
||||||
|
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
pub fn clone__moz_min_font_size_ratio(
|
||||||
|
&self,
|
||||||
|
) -> longhands::_moz_min_font_size_ratio::computed_value::T {
|
||||||
|
Percentage(self.gecko.mMinFontSizeRatio as f32 / 100.)
|
||||||
|
}
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn set__moz_min_font_size_ratio(&mut self, v: longhands::_moz_min_font_size_ratio::computed_value::T) {
|
pub fn set__moz_min_font_size_ratio(&mut self, v: longhands::_moz_min_font_size_ratio::computed_value::T) {
|
||||||
let scaled = v.0 * 100.;
|
let scaled = v.0 * 100.;
|
||||||
|
@ -3286,7 +3293,6 @@ fn static_assert() {
|
||||||
use gecko_bindings::structs::nsCSSPropertyID::eCSSPropertyExtra_no_properties;
|
use gecko_bindings::structs::nsCSSPropertyID::eCSSPropertyExtra_no_properties;
|
||||||
use gecko_bindings::structs::nsCSSPropertyID::eCSSPropertyExtra_variable;
|
use gecko_bindings::structs::nsCSSPropertyID::eCSSPropertyExtra_variable;
|
||||||
use gecko_bindings::structs::nsCSSPropertyID::eCSSProperty_UNKNOWN;
|
use gecko_bindings::structs::nsCSSPropertyID::eCSSProperty_UNKNOWN;
|
||||||
use Atom;
|
|
||||||
|
|
||||||
let property = self.gecko.mTransitions[index].mProperty;
|
let property = self.gecko.mTransitions[index].mProperty;
|
||||||
if property == eCSSProperty_UNKNOWN || property == eCSSPropertyExtra_variable {
|
if property == eCSSProperty_UNKNOWN || property == eCSSPropertyExtra_variable {
|
||||||
|
@ -3384,7 +3390,6 @@ fn static_assert() {
|
||||||
pub fn animation_name_at(&self, index: usize)
|
pub fn animation_name_at(&self, index: usize)
|
||||||
-> longhands::animation_name::computed_value::SingleComputedValue {
|
-> longhands::animation_name::computed_value::SingleComputedValue {
|
||||||
use properties::longhands::animation_name::single_value::SpecifiedValue as AnimationName;
|
use properties::longhands::animation_name::single_value::SpecifiedValue as AnimationName;
|
||||||
use Atom;
|
|
||||||
|
|
||||||
let atom = self.gecko.mAnimations[index].mName.mRawPtr;
|
let atom = self.gecko.mAnimations[index].mName.mRawPtr;
|
||||||
if atom == atom!("").as_ptr() {
|
if atom == atom!("").as_ptr() {
|
||||||
|
@ -3590,7 +3595,6 @@ fn static_assert() {
|
||||||
use properties::longhands::will_change::computed_value::T;
|
use properties::longhands::will_change::computed_value::T;
|
||||||
use gecko_bindings::structs::nsAtom;
|
use gecko_bindings::structs::nsAtom;
|
||||||
use values::CustomIdent;
|
use values::CustomIdent;
|
||||||
use Atom;
|
|
||||||
|
|
||||||
if self.gecko.mWillChange.len() == 0 {
|
if self.gecko.mWillChange.len() == 0 {
|
||||||
return T::Auto
|
return T::Auto
|
||||||
|
@ -4265,6 +4269,13 @@ fn static_assert() {
|
||||||
self.gecko.mSpan = v.0
|
self.gecko.mSpan = v.0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
pub fn clone__x_span(&self) -> longhands::_x_span::computed_value::T {
|
||||||
|
longhands::_x_span::computed_value::T(
|
||||||
|
self.gecko.mSpan
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
${impl_simple_copy('_x_span', 'mSpan')}
|
${impl_simple_copy('_x_span', 'mSpan')}
|
||||||
</%self:impl_trait>
|
</%self:impl_trait>
|
||||||
|
|
||||||
|
@ -5209,10 +5220,28 @@ clip-path
|
||||||
SVGStrokeDashArray::Values(vec)
|
SVGStrokeDashArray::Values(vec)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
pub fn _moz_context_properties_count(&self) -> usize {
|
||||||
|
self.gecko.mContextProps.len()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
pub fn _moz_context_properties_at(
|
||||||
|
&self,
|
||||||
|
index: usize,
|
||||||
|
) -> longhands::_moz_context_properties::computed_value::single_value::T {
|
||||||
|
longhands::_moz_context_properties::computed_value::single_value::T(
|
||||||
|
CustomIdent(unsafe {
|
||||||
|
Atom::from_raw(self.gecko.mContextProps[index].mRawPtr)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn set__moz_context_properties<I>(&mut self, v: I)
|
pub fn set__moz_context_properties<I>(&mut self, v: I)
|
||||||
where I: IntoIterator<Item = longhands::_moz_context_properties::computed_value::single_value::T>,
|
where
|
||||||
I::IntoIter: ExactSizeIterator
|
I: IntoIterator<Item = longhands::_moz_context_properties::computed_value::single_value::T>,
|
||||||
|
I::IntoIter: ExactSizeIterator
|
||||||
{
|
{
|
||||||
let v = v.into_iter();
|
let v = v.into_iter();
|
||||||
unsafe {
|
unsafe {
|
||||||
|
@ -5710,7 +5739,6 @@ clip-path
|
||||||
) -> longhands::counter_${counter_property.lower()}::computed_value::T {
|
) -> longhands::counter_${counter_property.lower()}::computed_value::T {
|
||||||
use values::generics::counters::CounterPair;
|
use values::generics::counters::CounterPair;
|
||||||
use values::CustomIdent;
|
use values::CustomIdent;
|
||||||
use gecko_string_cache::Atom;
|
|
||||||
|
|
||||||
longhands::counter_${counter_property.lower()}::computed_value::T::new(
|
longhands::counter_${counter_property.lower()}::computed_value::T::new(
|
||||||
self.gecko.m${counter_property}s.iter().map(|ref gecko_counter| {
|
self.gecko.m${counter_property}s.iter().map(|ref gecko_counter| {
|
||||||
|
|
|
@ -136,6 +136,7 @@ ${helpers.predefined_type("-moz-context-properties",
|
||||||
"MozContextProperties",
|
"MozContextProperties",
|
||||||
initial_value=None,
|
initial_value=None,
|
||||||
vector=True,
|
vector=True,
|
||||||
|
need_index=True,
|
||||||
animation_value_type="none",
|
animation_value_type="none",
|
||||||
products="gecko",
|
products="gecko",
|
||||||
spec="Nonstandard (https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-context-properties)",
|
spec="Nonstandard (https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-context-properties)",
|
||||||
|
|
|
@ -2399,6 +2399,18 @@ pub mod style_structs {
|
||||||
-> longhands::${longhand.ident}::computed_value::SingleComputedValue {
|
-> longhands::${longhand.ident}::computed_value::SingleComputedValue {
|
||||||
self.${longhand.ident}_at(index % self.${longhand.ident}_count())
|
self.${longhand.ident}_at(index % self.${longhand.ident}_count())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Clone the computed value for the property.
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
#[inline]
|
||||||
|
#[cfg(feature = "gecko")]
|
||||||
|
pub fn clone_${longhand.ident}(
|
||||||
|
&self,
|
||||||
|
) -> longhands::${longhand.ident}::computed_value::T {
|
||||||
|
longhands::${longhand.ident}::computed_value::T(
|
||||||
|
self.${longhand.ident}_iter().collect()
|
||||||
|
)
|
||||||
|
}
|
||||||
% endif
|
% endif
|
||||||
% endfor
|
% endfor
|
||||||
|
|
||||||
|
|
|
@ -401,6 +401,7 @@ macro_rules! impl_to_css_for_predefined_type {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_to_css_for_predefined_type!(f32);
|
impl_to_css_for_predefined_type!(f32);
|
||||||
|
impl_to_css_for_predefined_type!(i8);
|
||||||
impl_to_css_for_predefined_type!(i32);
|
impl_to_css_for_predefined_type!(i32);
|
||||||
impl_to_css_for_predefined_type!(u16);
|
impl_to_css_for_predefined_type!(u16);
|
||||||
impl_to_css_for_predefined_type!(u32);
|
impl_to_css_for_predefined_type!(u32);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue