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::derives::*;
8use crate::values::generics::length::{GenericLengthPercentageOrAuto, LengthPercentageOrAuto};
9
10/// A generic value for the `background-size` property.
11#[derive(
12    Animate,
13    Clone,
14    ComputeSquaredDistance,
15    Copy,
16    Debug,
17    MallocSizeOf,
18    PartialEq,
19    SpecifiedValueInfo,
20    ToAnimatedValue,
21    ToAnimatedZero,
22    ToComputedValue,
23    ToCss,
24    ToResolvedValue,
25    ToShmem,
26    ToTyped,
27)]
28#[repr(C, u8)]
29#[typed_value(derive_fields)]
30pub enum GenericBackgroundSize<LengthPercent> {
31    /// `<width> <height>`
32    ExplicitSize {
33        /// Explicit width.
34        width: GenericLengthPercentageOrAuto<LengthPercent>,
35        /// Explicit height.
36        #[css(contextual_skip_if = "width_and_height_are_auto")]
37        #[typed_value(skip_if = "GenericLengthPercentageOrAuto::is_auto")]
38        height: GenericLengthPercentageOrAuto<LengthPercent>,
39    },
40    /// `cover`
41    #[animation(error)]
42    Cover,
43    /// `contain`
44    #[animation(error)]
45    Contain,
46}
47
48#[inline]
49fn width_and_height_are_auto<LengthPercent>(
50    width: &GenericLengthPercentageOrAuto<LengthPercent>,
51    height: &GenericLengthPercentageOrAuto<LengthPercent>,
52) -> bool {
53    width.is_auto() && height.is_auto()
54}
55
56pub use self::GenericBackgroundSize as BackgroundSize;
57
58impl<LengthPercentage> BackgroundSize<LengthPercentage> {
59    /// Returns `auto auto`.
60    pub fn auto() -> Self {
61        GenericBackgroundSize::ExplicitSize {
62            width: LengthPercentageOrAuto::Auto,
63            height: LengthPercentageOrAuto::Auto,
64        }
65    }
66}