Skip to main content

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)]
29pub enum GenericBackgroundSize<LengthPercent> {
30    /// `<width> <height>`
31    ExplicitSize {
32        /// Explicit width.
33        width: GenericLengthPercentageOrAuto<LengthPercent>,
34        /// Explicit height.
35        #[css(contextual_skip_if = "width_and_height_are_auto")]
36        #[typed(skip_if = "GenericLengthPercentageOrAuto::is_auto")]
37        height: GenericLengthPercentageOrAuto<LengthPercent>,
38    },
39    /// `cover`
40    #[animation(error)]
41    Cover,
42    /// `contain`
43    #[animation(error)]
44    Contain,
45}
46
47#[inline]
48fn width_and_height_are_auto<LengthPercent>(
49    width: &GenericLengthPercentageOrAuto<LengthPercent>,
50    height: &GenericLengthPercentageOrAuto<LengthPercent>,
51) -> bool {
52    width.is_auto() && height.is_auto()
53}
54
55pub use self::GenericBackgroundSize as BackgroundSize;
56
57impl<LengthPercentage> BackgroundSize<LengthPercentage> {
58    /// Returns `auto auto`.
59    pub fn auto() -> Self {
60        GenericBackgroundSize::ExplicitSize {
61            width: LengthPercentageOrAuto::Auto,
62            height: LengthPercentageOrAuto::Auto,
63        }
64    }
65}