Bug 1374233 - Part 9: Add NonNegativeLengthOrPercentageOrNumber for stroke-witdh.
MozReview-Commit-ID: 8gD0fVe2eAe
--- a/servo/components/style/properties/gecko.mako.rs
+++ b/servo/components/style/properties/gecko.mako.rs
@@ -4566,30 +4566,32 @@ clip-path
CoordDataValue::Percent(p) => Either::Second(LengthOrPercentage::Percentage(Percentage(p))),
CoordDataValue::Calc(calc) => Either::Second(LengthOrPercentage::Calc(calc.into())),
_ => unreachable!(),
}
}
pub fn set_stroke_width(&mut self, v: longhands::stroke_width::computed_value::T) {
match v {
- Either::First(number) => self.gecko.mStrokeWidth.set_value(CoordDataValue::Factor(number)),
- Either::Second(lop) => self.gecko.mStrokeWidth.set(lop),
+ Either::First(number) => self.gecko.mStrokeWidth.set_value(CoordDataValue::Factor(number.0)),
+ Either::Second(lop) => self.gecko.mStrokeWidth.set(lop.0),
}
}
${impl_coord_copy('stroke_width', 'mStrokeWidth')}
pub fn clone_stroke_width(&self) -> longhands::stroke_width::computed_value::T {
- use values::computed::LengthOrPercentage;
+ use values::computed::LengthOrPercentage as LOP;
+ use values::computed::NonNegativeNumber;
+ use values::computed::NonNegativeLengthOrPercentage as NonNegativeLOP;
match self.gecko.mStrokeWidth.as_value() {
- CoordDataValue::Factor(number) => Either::First(number),
- CoordDataValue::Coord(coord) => Either::Second(LengthOrPercentage::Length(Au(coord))),
- CoordDataValue::Percent(p) => Either::Second(LengthOrPercentage::Percentage(Percentage(p))),
- CoordDataValue::Calc(calc) => Either::Second(LengthOrPercentage::Calc(calc.into())),
+ CoordDataValue::Factor(number) => Either::First(NonNegativeNumber(number)),
+ CoordDataValue::Coord(coord) => Either::Second(NonNegativeLOP(LOP::Length(Au(coord)))),
+ CoordDataValue::Percent(p) => Either::Second(NonNegativeLOP(LOP::Percentage(Percentage(p)))),
+ CoordDataValue::Calc(calc) => Either::Second(NonNegativeLOP(LOP::Calc(calc.into()))),
_ => unreachable!(),
}
}
#[allow(non_snake_case)]
pub fn set__moz_context_properties<I>(&mut self, v: I)
where I: IntoIterator<Item = longhands::_moz_context_properties::computed_value::single_value::T>,
I::IntoIter: ExactSizeIterator
--- a/servo/components/style/properties/helpers/animated_properties.mako.rs
+++ b/servo/components/style/properties/helpers/animated_properties.mako.rs
@@ -42,16 +42,17 @@ use values::animated::effects::Filter as
use values::animated::effects::FilterList as AnimatedFilterList;
use values::animated::effects::TextShadowList as AnimatedTextShadowList;
use values::computed::{Angle, LengthOrPercentageOrAuto, LengthOrPercentageOrNone};
use values::computed::{BorderCornerRadius, ClipRect};
use values::computed::{CalcLengthOrPercentage, Color, Context, ComputedValueAsSpecified};
use values::computed::{LengthOrPercentage, MaxLength, MozLength, Percentage, ToComputedValue};
use values::computed::{GreaterThanOrEqualToOneNumber, NonNegativeAu, NonNegativeNumber};
use values::computed::{PositiveInteger, PositiveIntegerOrAuto};
+use values::computed::NonNegativeLengthOrPercentageOrNumber;
use values::computed::length::{NonNegativeLengthOrAuto, NonNegativeLengthOrNormal};
use values::computed::length::{NonNegativeLengthOrNumber, NonNegativeLengthOrPercentage};
use values::generics::{SVGPaint, SVGPaintKind};
use values::generics::border::BorderCornerRadius as GenericBorderCornerRadius;
use values::generics::effects::Filter;
use values::generics::position as generic_position;
/// A trait used to implement various procedures used during animation.
--- a/servo/components/style/properties/longhand/inherited_svg.mako.rs
+++ b/servo/components/style/properties/longhand/inherited_svg.mako.rs
@@ -59,21 +59,20 @@
"stroke", "SVGPaint",
"Default::default()",
products="gecko",
animation_value_type="IntermediateSVGPaint",
boxed=True,
spec="https://www.w3.org/TR/SVG2/painting.html#SpecifyingStrokePaint")}
${helpers.predefined_type(
- "stroke-width", "LengthOrPercentageOrNumber",
- "Either::First(1.0)",
- "parse_non_negative",
+ "stroke-width", "NonNegativeLengthOrPercentageOrNumber",
+ "Either::First(::values::computed::NonNegativeNumber(1.0))",
products="gecko",
- animation_value_type="ComputedValue",
+ animation_value_type="NonNegativeLengthOrPercentageOrNumber",
spec="https://www.w3.org/TR/SVG2/painting.html#StrokeWidth")}
${helpers.single_keyword("stroke-linecap", "butt round square",
products="gecko", animation_value_type="discrete",
spec="https://www.w3.org/TR/SVG11/painting.html#StrokeLinecapProperty")}
${helpers.single_keyword("stroke-linejoin", "miter round bevel",
products="gecko", animation_value_type="discrete",
--- a/servo/components/style/values/computed/mod.rs
+++ b/servo/components/style/values/computed/mod.rs
@@ -528,16 +528,19 @@ impl SVGPaint {
fallback: None,
}
}
}
/// <length> | <percentage> | <number>
pub type LengthOrPercentageOrNumber = Either<Number, LengthOrPercentage>;
+/// NonNegativeLengthOrPercentage | NonNegativeNumber
+pub type NonNegativeLengthOrPercentageOrNumber = Either<NonNegativeNumber, NonNegativeLengthOrPercentage>;
+
#[derive(Clone, PartialEq, Eq, Copy, Debug)]
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[allow(missing_docs)]
/// A computed cliprect for clip and image-region
pub struct ClipRect {
pub top: Option<Au>,
pub right: Option<Au>,
pub bottom: Option<Au>,
--- a/servo/components/style/values/specified/mod.rs
+++ b/servo/components/style/values/specified/mod.rs
@@ -807,16 +807,19 @@ impl LengthOrPercentageOrNumber {
if let Ok(num) = input.try(|i| Number::parse_non_negative(context, i)) {
return Ok(Either::First(num))
}
LengthOrPercentage::parse_non_negative(context, input).map(Either::Second)
}
}
+/// NonNegativeLengthOrPercentage | NonNegativeNumber
+pub type NonNegativeLengthOrPercentageOrNumber = Either<NonNegativeNumber, NonNegativeLengthOrPercentage>;
+
#[derive(Clone, Debug, HasViewportPercentage, PartialEq)]
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
/// rect(<top>, <left>, <bottom>, <right>) used by clip and image-region
pub struct ClipRect {
/// <top> (<length> | <auto>)
pub top: Option<Length>,
/// <right> (<length> | <auto>)
pub right: Option<Length>,