From 6ae56890b36057cc010fb277aad4ee09992944c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Tue, 15 Aug 2023 00:53:25 +0200 Subject: [PATCH] style: Improve Percentage -> LengthPercentage conversion This doesn't change behavior because we only use them for images that have no clamping. Depends on D147008 Differential Revision: https://phabricator.services.mozilla.com/D147511 --- components/style/values/specified/image.rs | 8 ++++---- components/style/values/specified/length.rs | 11 ++++++++--- components/style/values/specified/percentage.rs | 5 +++++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/components/style/values/specified/image.rs b/components/style/values/specified/image.rs index d8dd3cd40db..1c1d1c88725 100644 --- a/components/style/values/specified/image.rs +++ b/components/style/values/specified/image.rs @@ -733,12 +733,12 @@ impl Gradient { if items.is_empty() { items = vec![ generic::GradientItem::ComplexColorStop { - color: Color::transparent().into(), - position: Percentage::zero().into(), + color: Color::transparent(), + position: LengthPercentage::zero_percent(), }, generic::GradientItem::ComplexColorStop { - color: Color::transparent().into(), - position: Percentage::hundred().into(), + color: Color::transparent(), + position: LengthPercentage::hundred_percent(), }, ]; } else if items.len() == 1 { diff --git a/components/style/values/specified/length.rs b/components/style/values/specified/length.rs index e8d9c444711..159eb996364 100644 --- a/components/style/values/specified/length.rs +++ b/components/style/values/specified/length.rs @@ -1328,10 +1328,9 @@ impl From for LengthPercentage { impl From for LengthPercentage { #[inline] fn from(pc: Percentage) -> Self { - if pc.is_calc() { - // FIXME(emilio): Hard-coding the clamping mode is suspect. + if let Some(clamping_mode) = pc.calc_clamping_mode() { LengthPercentage::Calc(Box::new(CalcLengthPercentage { - clamping_mode: AllowedNumericType::All, + clamping_mode, node: CalcNode::Leaf(calc::Leaf::Percentage(pc.get())), })) } else { @@ -1364,6 +1363,12 @@ impl LengthPercentage { LengthPercentage::Percentage(computed::Percentage::zero()) } + #[inline] + /// Returns a `100%` value. + pub fn hundred_percent() -> LengthPercentage { + LengthPercentage::Percentage(computed::Percentage::hundred()) + } + fn parse_internal<'i, 't>( context: &ParserContext, input: &mut Parser<'i, 't>, diff --git a/components/style/values/specified/percentage.rs b/components/style/values/specified/percentage.rs index 7e630720cd4..d1086aae300 100644 --- a/components/style/values/specified/percentage.rs +++ b/components/style/values/specified/percentage.rs @@ -97,6 +97,11 @@ impl Percentage { self.calc_clamping_mode.is_some() } + /// Returns the calc() clamping mode for this percentage. + pub fn calc_clamping_mode(&self) -> Option { + self.calc_clamping_mode + } + /// Reverses this percentage, preserving calc-ness. /// /// For example: If it was 20%, convert it into 80%.