mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
style: Use rust types for background-size.
Hopefully straight-forward. Differential Revision: https://phabricator.services.mozilla.com/D19625
This commit is contained in:
parent
1e6338e1ee
commit
07cb325402
6 changed files with 27 additions and 137 deletions
|
@ -6,19 +6,8 @@
|
|||
|
||||
use crate::values::computed::length::NonNegativeLengthPercentage;
|
||||
use crate::values::generics::background::BackgroundSize as GenericBackgroundSize;
|
||||
use crate::values::generics::length::LengthPercentageOrAuto;
|
||||
|
||||
pub use crate::values::specified::background::BackgroundRepeat;
|
||||
|
||||
/// A computed value for the `background-size` property.
|
||||
pub type BackgroundSize = GenericBackgroundSize<NonNegativeLengthPercentage>;
|
||||
|
||||
impl BackgroundSize {
|
||||
/// Returns `auto auto`.
|
||||
pub fn auto() -> Self {
|
||||
GenericBackgroundSize::Explicit {
|
||||
width: LengthPercentageOrAuto::auto(),
|
||||
height: LengthPercentageOrAuto::auto(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
//! Generic types for CSS values related to backgrounds.
|
||||
|
||||
use crate::values::generics::length::LengthPercentageOrAuto;
|
||||
use crate::values::generics::length::{LengthPercentageOrAuto, GenericLengthPercentageOrAuto};
|
||||
use std::fmt::{self, Write};
|
||||
use style_traits::{CssWriter, ToCss};
|
||||
|
||||
|
@ -22,13 +22,14 @@ use style_traits::{CssWriter, ToCss};
|
|||
ToAnimatedZero,
|
||||
ToComputedValue,
|
||||
)]
|
||||
pub enum BackgroundSize<LengthPercentage> {
|
||||
#[repr(C, u8)]
|
||||
pub enum GenericBackgroundSize<LengthPercent> {
|
||||
/// `<width> <height>`
|
||||
Explicit {
|
||||
ExplicitSize {
|
||||
/// Explicit width.
|
||||
width: LengthPercentageOrAuto<LengthPercentage>,
|
||||
width: GenericLengthPercentageOrAuto<LengthPercent>,
|
||||
/// Explicit height.
|
||||
height: LengthPercentageOrAuto<LengthPercentage>,
|
||||
height: GenericLengthPercentageOrAuto<LengthPercent>,
|
||||
},
|
||||
/// `cover`
|
||||
#[animation(error)]
|
||||
|
@ -38,6 +39,8 @@ pub enum BackgroundSize<LengthPercentage> {
|
|||
Contain,
|
||||
}
|
||||
|
||||
pub use self::GenericBackgroundSize as BackgroundSize;
|
||||
|
||||
impl<LengthPercentage> ToCss for BackgroundSize<LengthPercentage>
|
||||
where
|
||||
LengthPercentage: ToCss,
|
||||
|
@ -47,7 +50,7 @@ where
|
|||
W: Write,
|
||||
{
|
||||
match self {
|
||||
BackgroundSize::Explicit { width, height } => {
|
||||
BackgroundSize::ExplicitSize { width, height } => {
|
||||
width.to_css(dest)?;
|
||||
// NOTE(emilio): We should probably simplify all these in case
|
||||
// `width == `height`, but all other browsers agree on only
|
||||
|
@ -63,3 +66,13 @@ where
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<LengthPercentage> BackgroundSize<LengthPercentage> {
|
||||
/// Returns `auto auto`.
|
||||
pub fn auto() -> Self {
|
||||
GenericBackgroundSize::ExplicitSize {
|
||||
width: LengthPercentageOrAuto::Auto,
|
||||
height: LengthPercentageOrAuto::Auto,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ impl Parse for BackgroundSize {
|
|||
let height = input
|
||||
.try(|i| NonNegativeLengthPercentageOrAuto::parse(context, i))
|
||||
.unwrap_or(NonNegativeLengthPercentageOrAuto::auto());
|
||||
return Ok(GenericBackgroundSize::Explicit { width, height });
|
||||
return Ok(GenericBackgroundSize::ExplicitSize { width, height });
|
||||
}
|
||||
Ok(try_match_ident_ignore_ascii_case! { input,
|
||||
"cover" => GenericBackgroundSize::Cover,
|
||||
|
@ -35,16 +35,6 @@ impl Parse for BackgroundSize {
|
|||
}
|
||||
}
|
||||
|
||||
impl BackgroundSize {
|
||||
/// Returns `auto auto`.
|
||||
pub fn auto() -> Self {
|
||||
GenericBackgroundSize::Explicit {
|
||||
width: NonNegativeLengthPercentageOrAuto::auto(),
|
||||
height: NonNegativeLengthPercentageOrAuto::auto(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// One of the keywords for `background-repeat`.
|
||||
#[derive(
|
||||
Clone,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue