Backed out changeset 7e16a18f0f94 (bug 1614648) for build bustages in layout/painting/nsCSSRenderingGradients. CLOSED TREE

This commit is contained in:
Dorel Luca 2020-02-12 14:33:04 +02:00
parent b4bc3c844a
commit 5e422ce68b
6 changed files with 32 additions and 26 deletions

View File

@ -54,6 +54,12 @@ pub enum LineDirection {
Corner(HorizontalPositionKeyword, VerticalPositionKeyword),
}
/// A computed gradient item.
pub type GradientItem = generic::GenericGradientItem<Color, LengthPercentage>;
/// A computed color stop.
pub type ColorStop = generic::ColorStop<Color, LengthPercentage>;
/// Computed values for `-moz-image-rect(...)`.
#[cfg(feature = "gecko")]
pub type MozImageRect = generic::GenericMozImageRect<NumberOrPercentage, ComputedImageUrl>;

View File

@ -57,7 +57,7 @@ pub use self::font::{FontSize, FontSizeAdjust, FontStretch, FontSynthesis};
pub use self::font::{FontVariantAlternates, FontWeight};
pub use self::font::{FontVariantEastAsian, FontVariationSettings};
pub use self::font::{MozScriptLevel, MozScriptMinSize, MozScriptSizeMultiplier, XLang, XTextZoom};
pub use self::image::{Gradient, Image, LineDirection, MozImageRect};
pub use self::image::{Gradient, GradientItem, Image, LineDirection, MozImageRect};
pub use self::length::{CSSPixelLength, ExtremumLength, NonNegativeLength};
pub use self::length::{Length, LengthOrNumber, LengthPercentage, NonNegativeLengthOrNumber};
pub use self::length::{LengthOrAuto, LengthPercentageOrAuto, MaxSize, Size};

View File

@ -180,7 +180,7 @@ pub enum ShapeExtent {
Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss, ToResolvedValue, ToShmem,
)]
#[repr(C, u8)]
pub enum GenericGradientItem<Color, T> {
pub enum GenericGradientItem<Color, LengthPercentage> {
/// A simple color stop, without position.
SimpleColorStop(Color),
/// A complex color stop, with a position.
@ -188,10 +188,10 @@ pub enum GenericGradientItem<Color, T> {
/// The color for the stop.
color: Color,
/// The position for the stop.
position: T,
position: LengthPercentage,
},
/// An interpolation hint.
InterpolationHint(T),
InterpolationHint(LengthPercentage),
}
pub use self::GenericGradientItem as GradientItem;
@ -201,17 +201,17 @@ pub use self::GenericGradientItem as GradientItem;
#[derive(
Clone, Copy, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss, ToResolvedValue, ToShmem,
)]
pub struct ColorStop<Color, T> {
pub struct ColorStop<Color, LengthPercentage> {
/// The color of this stop.
pub color: Color,
/// The position of this stop.
pub position: Option<T>,
pub position: Option<LengthPercentage>,
}
impl<Color, T> ColorStop<Color, T> {
impl<Color, LengthPercentage> ColorStop<Color, LengthPercentage> {
/// Convert the color stop into an appropriate `GradientItem`.
#[inline]
pub fn into_item(self) -> GradientItem<Color, T> {
pub fn into_item(self) -> GradientItem<Color, LengthPercentage> {
match self.position {
Some(position) => GradientItem::ComplexColorStop {
color: self.color,

View File

@ -92,6 +92,12 @@ pub enum LineDirection {
/// A specified ending shape.
pub type EndingShape = generic::EndingShape<NonNegativeLength, NonNegativeLengthPercentage>;
/// A specified gradient item.
pub type GradientItem = generic::GradientItem<Color, LengthPercentage>;
/// A computed color stop.
pub type ColorStop = generic::ColorStop<Color, LengthPercentage>;
/// Specified values for `moz-image-rect`
/// -moz-image-rect(<uri>, top, right, bottom, left);
#[cfg(all(feature = "gecko", not(feature = "cbindgen")))]
@ -250,7 +256,7 @@ impl Parse for Gradient {
Shape::Linear => GradientKind::parse_linear(context, i, &mut compat_mode)?,
Shape::Radial => GradientKind::parse_radial(context, i, &mut compat_mode)?,
};
let items = generic::GradientItem::parse_comma_separated(context, i)?;
let items = GradientItem::parse_comma_separated(context, i)?;
Ok((shape, items))
})?;
@ -772,10 +778,7 @@ impl ShapeExtent {
}
}
impl<T> generic::GradientItem<Color, T>
where
T: Parse,
{
impl GradientItem {
fn parse_comma_separated<'i, 't>(
context: &ParserContext,
input: &mut Parser<'i, 't>,
@ -786,20 +789,20 @@ where
loop {
input.parse_until_before(Delimiter::Comma, |input| {
if seen_stop {
if let Ok(hint) = input.try(|i| T::parse(context, i)) {
if let Ok(hint) = input.try(|i| LengthPercentage::parse(context, i)) {
seen_stop = false;
items.push(generic::GradientItem::InterpolationHint(hint));
return Ok(());
}
}
let stop = generic::ColorStop::parse(context, input)?;
let stop = ColorStop::parse(context, input)?;
if let Ok(multi_position) = input.try(|i| T::parse(context, i)) {
if let Ok(multi_position) = input.try(|i| LengthPercentage::parse(context, i)) {
let stop_color = stop.color.clone();
items.push(stop.into_item());
items.push(
generic::ColorStop {
ColorStop {
color: stop_color,
position: Some(multi_position),
}
@ -827,17 +830,14 @@ where
}
}
impl<T> Parse for generic::ColorStop<Color, T>
where
T: Parse,
{
impl Parse for ColorStop {
fn parse<'i, 't>(
context: &ParserContext,
input: &mut Parser<'i, 't>,
) -> Result<Self, ParseError<'i>> {
Ok(generic::ColorStop {
Ok(ColorStop {
color: Color::parse(context, input)?,
position: input.try(|i| T::parse(context, i)).ok(),
position: input.try(|i| LengthPercentage::parse(context, i)).ok(),
})
}
}

View File

@ -28,7 +28,7 @@ use std::ops::{Add, Mul};
use style_traits::values::specified::AllowedNumericType;
use style_traits::{ParseError, SpecifiedValueInfo, StyleParseErrorKind};
pub use super::image::{EndingShape as GradientEndingShape, Gradient};
pub use super::image::{ColorStop, EndingShape as GradientEndingShape, Gradient};
pub use super::image::{GradientKind, Image};
pub use crate::values::specified::calc::CalcLengthPercentage;

View File

@ -55,8 +55,8 @@ pub use self::font::{FontSize, FontSizeAdjust, FontStretch, FontSynthesis};
pub use self::font::{FontVariantAlternates, FontWeight};
pub use self::font::{FontVariantEastAsian, FontVariationSettings};
pub use self::font::{MozScriptLevel, MozScriptMinSize, MozScriptSizeMultiplier, XLang, XTextZoom};
pub use self::image::{EndingShape as GradientEndingShape, Gradient};
pub use self::image::{GradientKind, Image, MozImageRect};
pub use self::image::{ColorStop, EndingShape as GradientEndingShape, Gradient};
pub use self::image::{GradientItem, GradientKind, Image, MozImageRect};
pub use self::length::{AbsoluteLength, CalcLengthPercentage, CharacterWidth};
pub use self::length::{FontRelativeLength, Length, LengthOrNumber, NonNegativeLengthOrNumber};
pub use self::length::{LengthOrAuto, LengthPercentage, LengthPercentageOrAuto};