diff --git a/components/style/values/specified/mod.rs b/components/style/values/specified/mod.rs index 946bf3c2cc9..6341d495d6c 100644 --- a/components/style/values/specified/mod.rs +++ b/components/style/values/specified/mod.rs @@ -71,7 +71,7 @@ pub use self::list::Quotes; pub use self::motion::{OffsetPath, OffsetRotate}; pub use self::outline::OutlineStyle; pub use self::page::{Orientation, PageSize, PaperSize}; -pub use self::percentage::Percentage; +pub use self::percentage::{Percentage, NonNegativePercentage}; pub use self::position::AspectRatio; pub use self::position::{ GridAutoFlow, GridTemplateAreas, MasonryAutoFlow, Position, PositionOrAuto, diff --git a/components/style/values/specified/percentage.rs b/components/style/values/specified/percentage.rs index eac4d91cf8f..c73616a3848 100644 --- a/components/style/values/specified/percentage.rs +++ b/components/style/values/specified/percentage.rs @@ -7,6 +7,7 @@ use crate::parser::{Parse, ParserContext}; use crate::values::computed::percentage::Percentage as ComputedPercentage; use crate::values::computed::{Context, ToComputedValue}; +use crate::values::generics::NonNegative; use crate::values::specified::calc::CalcNode; use crate::values::specified::Number; use crate::values::{serialize_percentage, CSSFloat}; @@ -172,3 +173,16 @@ impl ToComputedValue for Percentage { } impl SpecifiedValueInfo for Percentage {} + +/// A wrapper of Percentage, whose value must be >= 0. +pub type NonNegativePercentage = NonNegative; + +impl Parse for NonNegativePercentage { + #[inline] + fn parse<'i, 't>( + context: &ParserContext, + input: &mut Parser<'i, 't>, + ) -> Result> { + Ok(NonNegative(Percentage::parse_non_negative(context, input)?)) + } +}