Skip to content

Commit

Permalink
stylo: Don't serialize default position on -moz- prefixed linear grad…
Browse files Browse the repository at this point in the history
…ient

Normally, we should not serialize if the line direction points downwards. Unprefixed and
-webkit- prefixed syntaxes use only Keyword enum for line direction and we check them already.
But -moz- prefixed linear gradients can store position too. Therefore it's stored inside
`LineDirection::MozPosition` and we should check that for consistency between other gradients.
  • Loading branch information
canova committed Sep 28, 2017
1 parent 056c085 commit dfd12d7
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
10 changes: 9 additions & 1 deletion components/style/values/computed/image.rs
Expand Up @@ -13,6 +13,8 @@ use std::fmt;
use style_traits::ToCss;
use values::{Either, None_};
use values::computed::{Angle, ComputedUrl, Context, Length, LengthOrPercentage, NumberOrPercentage, ToComputedValue};
#[cfg(feature = "gecko")]
use values::computed::Percentage;
use values::computed::position::Position;
use values::generics::image::{CompatMode, ColorStop as GenericColorStop, EndingShape as GenericEndingShape};
use values::generics::image::{Gradient as GenericGradient, GradientItem as GenericGradientItem};
Expand Down Expand Up @@ -88,7 +90,13 @@ impl GenericLineDirection for LineDirection {
if compat_mode != CompatMode::Modern => true,
LineDirection::Corner(..) => false,
#[cfg(feature = "gecko")]
LineDirection::MozPosition(_, _) => false,
LineDirection::MozPosition(Some(Position {
horizontal: LengthOrPercentage::Percentage(Percentage(x)),
vertical: LengthOrPercentage::Percentage(Percentage(y)),
}), None) => {
// `50% 0%` is the default value for line direction.
x == 0.5 && y == 0.0
},
_ => false,
}
}
Expand Down
26 changes: 26 additions & 0 deletions components/style/values/specified/image.rs
Expand Up @@ -626,6 +626,32 @@ impl GenericsLineDirection for LineDirection {
if compat_mode == CompatMode::Modern => true,
LineDirection::Vertical(Y::Top)
if compat_mode != CompatMode::Modern => true,
#[cfg(feature = "gecko")]
LineDirection::MozPosition(Some(LegacyPosition {
horizontal: ref x,
vertical: ref y,
}), None) => {
use values::computed::Percentage as ComputedPercentage;
use values::specified::transform::OriginComponent;

// `50% 0%` is the default value for line direction.
// These percentage values can also be keywords.
let x = match *x {
OriginComponent::Center => true,
OriginComponent::Length(LengthOrPercentage::Percentage(ComputedPercentage(val))) => {
val == 0.5
},
_ => false,
};
let y = match *y {
OriginComponent::Side(Y::Top) => true,
OriginComponent::Length(LengthOrPercentage::Percentage(ComputedPercentage(val))) => {
val == 0.0
},
_ => false,
};
x && y
},
_ => false,
}
}
Expand Down

0 comments on commit dfd12d7

Please sign in to comment.