From e1e82dbe5f62b997a84a56a63829848236380409 Mon Sep 17 00:00:00 2001 From: violet Date: Tue, 18 Jun 2019 11:54:41 +0000 Subject: [PATCH] style: Should not serialize default radius of circle. Should not serialize default shape-outside circle() function radius. The ToCss impl of Circle and Ellipse turn out to be identical in specified and computed value, thus move them to generics. Differential Revision: https://phabricator.services.mozilla.com/D35183 --- .../style/values/computed/basic_shape.rs | 33 --------------- .../style/values/generics/basic_shape.rs | 42 +++++++++++++++++++ .../style/values/specified/basic_shape.rs | 39 +---------------- 3 files changed, 43 insertions(+), 71 deletions(-) diff --git a/components/style/values/computed/basic_shape.rs b/components/style/values/computed/basic_shape.rs index 9a245aa77f1..27a091a1115 100644 --- a/components/style/values/computed/basic_shape.rs +++ b/components/style/values/computed/basic_shape.rs @@ -10,8 +10,6 @@ use crate::values::computed::url::ComputedUrl; use crate::values::computed::{Image, LengthPercentage, NonNegativeLengthPercentage}; use crate::values::generics::basic_shape as generic; -use std::fmt::{self, Write}; -use style_traits::{CssWriter, ToCss}; /// A computed alias for FillRule. pub use crate::values::generics::basic_shape::FillRule; @@ -42,34 +40,3 @@ pub type Ellipse = /// The computed value of `ShapeRadius` pub type ShapeRadius = generic::GenericShapeRadius; - -impl ToCss for Circle { - fn to_css(&self, dest: &mut CssWriter) -> fmt::Result - where - W: Write, - { - dest.write_str("circle(")?; - self.radius.to_css(dest)?; - dest.write_str(" at ")?; - self.position.to_css(dest)?; - dest.write_str(")") - } -} - -impl ToCss for Ellipse { - fn to_css(&self, dest: &mut CssWriter) -> fmt::Result - where - W: Write, - { - dest.write_str("ellipse(")?; - if (self.semiaxis_x, self.semiaxis_y) != Default::default() { - self.semiaxis_x.to_css(dest)?; - dest.write_str(" ")?; - self.semiaxis_y.to_css(dest)?; - dest.write_str(" ")?; - } - dest.write_str("at ")?; - self.position.to_css(dest)?; - dest.write_str(")") - } -} diff --git a/components/style/values/generics/basic_shape.rs b/components/style/values/generics/basic_shape.rs index 8c63d064817..d91fa58eb0d 100644 --- a/components/style/values/generics/basic_shape.rs +++ b/components/style/values/generics/basic_shape.rs @@ -378,6 +378,48 @@ where } } +impl ToCss for Circle +where + GenericPosition: ToCss, + NonNegativeLengthPercentage: ToCss + PartialEq, +{ + fn to_css(&self, dest: &mut CssWriter) -> fmt::Result + where + W: Write, + { + dest.write_str("circle(")?; + if self.radius != Default::default() { + self.radius.to_css(dest)?; + dest.write_str(" ")?; + } + dest.write_str("at ")?; + self.position.to_css(dest)?; + dest.write_str(")") + } +} + +impl ToCss for Ellipse +where + GenericPosition: ToCss, + NonNegativeLengthPercentage: ToCss + PartialEq, +{ + fn to_css(&self, dest: &mut CssWriter) -> fmt::Result + where + W: Write, + { + dest.write_str("ellipse(")?; + if self.semiaxis_x != Default::default() || self.semiaxis_y != Default::default() { + self.semiaxis_x.to_css(dest)?; + dest.write_str(" ")?; + self.semiaxis_y.to_css(dest)?; + dest.write_str(" ")?; + } + dest.write_str("at ")?; + self.position.to_css(dest)?; + dest.write_str(")") + } +} + impl Default for ShapeRadius { #[inline] fn default() -> Self { diff --git a/components/style/values/specified/basic_shape.rs b/components/style/values/specified/basic_shape.rs index 4f627ceb07f..7ee33d0580e 100644 --- a/components/style/values/specified/basic_shape.rs +++ b/components/style/values/specified/basic_shape.rs @@ -20,8 +20,7 @@ use crate::values::specified::SVGPathData; use crate::values::specified::{LengthPercentage, NonNegativeLengthPercentage}; use crate::Zero; use cssparser::Parser; -use std::fmt::{self, Write}; -use style_traits::{CssWriter, ParseError, StyleParseErrorKind, ToCss}; +use style_traits::{ParseError, StyleParseErrorKind}; /// A specified alias for FillRule. pub use crate::values::generics::basic_shape::FillRule; @@ -239,23 +238,6 @@ impl Circle { } } -impl ToCss for Circle { - fn to_css(&self, dest: &mut CssWriter) -> fmt::Result - where - W: Write, - { - dest.write_str("circle(")?; - if generic::ShapeRadius::ClosestSide != self.radius { - self.radius.to_css(dest)?; - dest.write_str(" ")?; - } - - dest.write_str("at ")?; - self.position.to_css(dest)?; - dest.write_str(")") - } -} - impl Parse for Ellipse { fn parse<'i, 't>( context: &ParserContext, @@ -293,25 +275,6 @@ impl Ellipse { } } -impl ToCss for Ellipse { - fn to_css(&self, dest: &mut CssWriter) -> fmt::Result - where - W: Write, - { - dest.write_str("ellipse(")?; - if self.semiaxis_x != ShapeRadius::default() || self.semiaxis_y != ShapeRadius::default() { - self.semiaxis_x.to_css(dest)?; - dest.write_str(" ")?; - self.semiaxis_y.to_css(dest)?; - dest.write_str(" ")?; - } - - dest.write_str("at ")?; - self.position.to_css(dest)?; - dest.write_str(")") - } -} - impl Parse for ShapeRadius { fn parse<'i, 't>( context: &ParserContext,