style/values/generics/
background.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5//! Generic types for CSS values related to backgrounds.
6
7use crate::values::generics::length::{GenericLengthPercentageOrAuto, LengthPercentageOrAuto};
8
9/// A generic value for the `background-size` property.
10#[derive(
11    Animate,
12    Clone,
13    ComputeSquaredDistance,
14    Copy,
15    Debug,
16    MallocSizeOf,
17    PartialEq,
18    SpecifiedValueInfo,
19    ToAnimatedValue,
20    ToAnimatedZero,
21    ToComputedValue,
22    ToCss,
23    ToResolvedValue,
24    ToShmem,
25)]
26#[repr(C, u8)]
27pub enum GenericBackgroundSize<LengthPercent> {
28    /// `<width> <height>`
29    ExplicitSize {
30        /// Explicit width.
31        width: GenericLengthPercentageOrAuto<LengthPercent>,
32        /// Explicit height.
33        #[css(skip_if = "GenericLengthPercentageOrAuto::is_auto")]
34        height: GenericLengthPercentageOrAuto<LengthPercent>,
35    },
36    /// `cover`
37    #[animation(error)]
38    Cover,
39    /// `contain`
40    #[animation(error)]
41    Contain,
42}
43
44pub use self::GenericBackgroundSize as BackgroundSize;
45
46impl<LengthPercentage> BackgroundSize<LengthPercentage> {
47    /// Returns `auto auto`.
48    pub fn auto() -> Self {
49        GenericBackgroundSize::ExplicitSize {
50            width: LengthPercentageOrAuto::Auto,
51            height: LengthPercentageOrAuto::Auto,
52        }
53    }
54}