mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Auto merge of #17446 - servo:derive-all-the-things, r=emilio
Simplify machinery to serialise optional parts of CSS values <!-- Reviewable:start --> This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/17446) <!-- Reviewable:end -->
This commit is contained in:
commit
0913d65243
8 changed files with 152 additions and 131 deletions
|
@ -214,7 +214,6 @@ ${helpers.predefined_type("border-image-outset", "LengthOrNumberRect",
|
|||
|
||||
<%helpers:longhand name="border-image-repeat" animation_value_type="discrete"
|
||||
spec="https://drafts.csswg.org/css-backgrounds/#border-image-repeat">
|
||||
use std::fmt;
|
||||
use style_traits::ToCss;
|
||||
|
||||
no_viewport_percentage!(SpecifiedValue);
|
||||
|
@ -227,8 +226,8 @@ ${helpers.predefined_type("border-image-outset", "LengthOrNumberRect",
|
|||
pub struct T(pub RepeatKeyword, pub RepeatKeyword);
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
|
||||
#[derive(Debug, Clone, PartialEq, ToCss)]
|
||||
pub struct SpecifiedValue(pub RepeatKeyword,
|
||||
pub Option<RepeatKeyword>);
|
||||
|
||||
|
@ -238,17 +237,6 @@ ${helpers.predefined_type("border-image-outset", "LengthOrNumberRect",
|
|||
"round" => Round,
|
||||
"space" => Space);
|
||||
|
||||
impl ToCss for SpecifiedValue {
|
||||
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
|
||||
self.0.to_css(dest)?;
|
||||
if let Some(second) = self.1 {
|
||||
dest.write_str(" ")?;
|
||||
second.to_css(dest)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn get_initial_value() -> computed_value::T {
|
||||
computed_value::T(RepeatKeyword::Stretch, RepeatKeyword::Stretch)
|
||||
|
|
|
@ -23,8 +23,6 @@ ${helpers.single_keyword("caption-side", "top bottom",
|
|||
<%helpers:longhand name="border-spacing" animation_value_type="ComputedValue" boxed="True"
|
||||
spec="https://drafts.csswg.org/css-tables/#propdef-border-spacing">
|
||||
use app_units::Au;
|
||||
use std::fmt;
|
||||
use style_traits::ToCss;
|
||||
use values::specified::{AllowQuirks, Length};
|
||||
|
||||
pub mod computed_value {
|
||||
|
@ -64,8 +62,8 @@ ${helpers.single_keyword("caption-side", "top bottom",
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, HasViewportPercentage, PartialEq)]
|
||||
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
|
||||
#[derive(Clone, Debug, HasViewportPercentage, PartialEq, ToCss)]
|
||||
pub struct SpecifiedValue {
|
||||
pub horizontal: Length,
|
||||
pub vertical: Option<Length>,
|
||||
|
@ -79,19 +77,6 @@ ${helpers.single_keyword("caption-side", "top bottom",
|
|||
}
|
||||
}
|
||||
|
||||
impl ToCss for SpecifiedValue {
|
||||
fn to_css<W>(&self, dest: &mut W) -> fmt::Result
|
||||
where W: fmt::Write,
|
||||
{
|
||||
self.horizontal.to_css(dest)?;
|
||||
if let Some(vertical) = self.vertical.as_ref() {
|
||||
dest.write_str(" ")?;
|
||||
vertical.to_css(dest)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl ToComputedValue for SpecifiedValue {
|
||||
type ComputedValue = computed_value::T;
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ add_impls_for_keyword_enum!(ShapeBox);
|
|||
/// A shape source, for some reference box.
|
||||
#[allow(missing_docs)]
|
||||
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
|
||||
#[derive(Clone, Debug, PartialEq, ToComputedValue)]
|
||||
#[derive(Clone, Debug, PartialEq, ToComputedValue, ToCss)]
|
||||
pub enum ShapeSource<BasicShape, ReferenceBox> {
|
||||
Url(SpecifiedUrl),
|
||||
Shape(BasicShape, Option<ReferenceBox>),
|
||||
|
@ -126,22 +126,6 @@ impl<B, T> HasViewportPercentage for ShapeSource<B, T> {
|
|||
fn has_viewport_percentage(&self) -> bool { false }
|
||||
}
|
||||
|
||||
impl<B: ToCss, T: ToCss> ToCss for ShapeSource<B, T> {
|
||||
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
|
||||
match *self {
|
||||
ShapeSource::Url(ref url) => url.to_css(dest),
|
||||
ShapeSource::Shape(ref shape, Some(ref ref_box)) => {
|
||||
shape.to_css(dest)?;
|
||||
dest.write_str(" ")?;
|
||||
ref_box.to_css(dest)
|
||||
},
|
||||
ShapeSource::Shape(ref shape, None) => shape.to_css(dest),
|
||||
ShapeSource::Box(ref val) => val.to_css(dest),
|
||||
ShapeSource::None => dest.write_str("none"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<L> ToCss for InsetRect<L>
|
||||
where L: ToCss + PartialEq
|
||||
{
|
||||
|
|
|
@ -123,7 +123,7 @@ pub enum GradientItem<Color, LengthOrPercentage> {
|
|||
|
||||
/// A color stop.
|
||||
/// https://drafts.csswg.org/css-images/#typedef-color-stop-list
|
||||
#[derive(Clone, Copy, HasViewportPercentage, PartialEq, ToComputedValue)]
|
||||
#[derive(Clone, Copy, HasViewportPercentage, PartialEq, ToComputedValue, ToCss)]
|
||||
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
|
||||
pub struct ColorStop<Color, LengthOrPercentage> {
|
||||
/// The color of this stop.
|
||||
|
@ -321,19 +321,6 @@ impl<C, L> fmt::Debug for ColorStop<C, L>
|
|||
}
|
||||
}
|
||||
|
||||
impl<C, L> ToCss for ColorStop<C, L>
|
||||
where C: ToCss, L: ToCss,
|
||||
{
|
||||
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
|
||||
self.color.to_css(dest)?;
|
||||
if let Some(ref position) = self.position {
|
||||
dest.write_str(" ")?;
|
||||
position.to_css(dest)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl<C> ToCss for ImageRect<C>
|
||||
where C: ToCss,
|
||||
{
|
||||
|
|
|
@ -6,13 +6,9 @@
|
|||
|
||||
use cssparser::{BasicParseError, Parser, Token};
|
||||
use parser::{Parse, ParserContext};
|
||||
#[cfg(feature = "gecko")]
|
||||
use std::fmt;
|
||||
use style_traits::ParseError;
|
||||
#[cfg(not(feature = "gecko"))]
|
||||
use style_traits::StyleParseError;
|
||||
#[cfg(feature = "gecko")]
|
||||
use style_traits::ToCss;
|
||||
use values::computed::{Context, Number as ComputedNumber, ToComputedValue};
|
||||
use values::computed::effects::DropShadow as ComputedDropShadow;
|
||||
use values::generics::effects::Filter as GenericFilter;
|
||||
|
@ -55,7 +51,7 @@ pub enum DropShadow {}
|
|||
/// Contrary to the canonical order from the spec, the color is serialised
|
||||
/// first, like in Gecko's computed values and in all Webkit's values.
|
||||
#[cfg(feature = "gecko")]
|
||||
#[derive(Clone, Debug, HasViewportPercentage, PartialEq)]
|
||||
#[derive(Clone, Debug, HasViewportPercentage, PartialEq, ToCss)]
|
||||
pub struct DropShadow {
|
||||
/// Color.
|
||||
pub color: Option<Color>,
|
||||
|
@ -220,25 +216,3 @@ impl ToComputedValue for DropShadow {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "gecko")]
|
||||
impl ToCss for DropShadow {
|
||||
#[inline]
|
||||
fn to_css<W>(&self, dest: &mut W) -> fmt::Result
|
||||
where
|
||||
W: fmt::Write,
|
||||
{
|
||||
if let Some(ref color) = self.color {
|
||||
color.to_css(dest)?;
|
||||
dest.write_str(" ")?;
|
||||
}
|
||||
self.horizontal.to_css(dest)?;
|
||||
dest.write_str(" ")?;
|
||||
self.vertical.to_css(dest)?;
|
||||
if let Some(ref blur) = self.blur {
|
||||
dest.write_str(" ")?;
|
||||
blur.to_css(dest)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ pub type VerticalPosition = PositionComponent<Y>;
|
|||
|
||||
/// The specified value of a component of a CSS `<position>`.
|
||||
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[derive(Clone, Debug, PartialEq, ToCss)]
|
||||
pub enum PositionComponent<S> {
|
||||
/// `center`
|
||||
Center,
|
||||
|
@ -197,27 +197,6 @@ impl<S> PositionComponent<S> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<S: ToCss> ToCss for PositionComponent<S> {
|
||||
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
|
||||
match *self {
|
||||
PositionComponent::Center => {
|
||||
dest.write_str("center")
|
||||
},
|
||||
PositionComponent::Length(ref lop) => {
|
||||
lop.to_css(dest)
|
||||
},
|
||||
PositionComponent::Side(ref keyword, ref lop) => {
|
||||
keyword.to_css(dest)?;
|
||||
if let Some(ref lop) = *lop {
|
||||
dest.write_str(" ")?;
|
||||
lop.to_css(dest)?;
|
||||
}
|
||||
Ok(())
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<S: Side> ToComputedValue for PositionComponent<S> {
|
||||
type ComputedValue = ComputedLengthOrPercentage;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue