tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

page.rs (4229B)


      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 //! @page at-rule properties
      6 
      7 use crate::derives::*;
      8 use crate::values::generics::NonNegative;
      9 use crate::values::specified::length::AbsoluteLength;
     10 
     11 /// Page size names.
     12 ///
     13 /// https://drafts.csswg.org/css-page-3/#typedef-page-size-page-size
     14 #[derive(
     15    Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq, SpecifiedValueInfo, ToCss, ToShmem,
     16 )]
     17 #[repr(u8)]
     18 pub enum PaperSize {
     19    /// ISO A5 media
     20    A5,
     21    /// ISO A4 media
     22    A4,
     23    /// ISO A3 media
     24    A3,
     25    /// ISO B5 media
     26    B5,
     27    /// ISO B4 media
     28    B4,
     29    /// JIS B5 media
     30    JisB5,
     31    /// JIS B4 media
     32    JisB4,
     33    /// North American Letter size
     34    Letter,
     35    /// North American Legal size
     36    Legal,
     37    /// North American Ledger size
     38    Ledger,
     39 }
     40 
     41 impl PaperSize {
     42    /// Gets the long edge length of the paper size
     43    pub fn long_edge(&self) -> NonNegative<AbsoluteLength> {
     44        NonNegative(match *self {
     45            PaperSize::A5 => AbsoluteLength::Mm(210.0),
     46            PaperSize::A4 => AbsoluteLength::Mm(297.0),
     47            PaperSize::A3 => AbsoluteLength::Mm(420.0),
     48            PaperSize::B5 => AbsoluteLength::Mm(250.0),
     49            PaperSize::B4 => AbsoluteLength::Mm(353.0),
     50            PaperSize::JisB5 => AbsoluteLength::Mm(257.0),
     51            PaperSize::JisB4 => AbsoluteLength::Mm(364.0),
     52            PaperSize::Letter => AbsoluteLength::In(11.0),
     53            PaperSize::Legal => AbsoluteLength::In(14.0),
     54            PaperSize::Ledger => AbsoluteLength::In(17.0),
     55        })
     56    }
     57    /// Gets the short edge length of the paper size
     58    pub fn short_edge(&self) -> NonNegative<AbsoluteLength> {
     59        NonNegative(match *self {
     60            PaperSize::A5 => AbsoluteLength::Mm(148.0),
     61            PaperSize::A4 => AbsoluteLength::Mm(210.0),
     62            PaperSize::A3 => AbsoluteLength::Mm(297.0),
     63            PaperSize::B5 => AbsoluteLength::Mm(176.0),
     64            PaperSize::B4 => AbsoluteLength::Mm(250.0),
     65            PaperSize::JisB5 => AbsoluteLength::Mm(182.0),
     66            PaperSize::JisB4 => AbsoluteLength::Mm(257.0),
     67            PaperSize::Letter => AbsoluteLength::In(8.5),
     68            PaperSize::Legal => AbsoluteLength::In(8.5),
     69            PaperSize::Ledger => AbsoluteLength::In(11.0),
     70        })
     71    }
     72 }
     73 
     74 /// Page orientation names.
     75 ///
     76 /// https://drafts.csswg.org/css-page-3/#page-orientation-prop
     77 #[derive(
     78    Clone,
     79    Copy,
     80    Debug,
     81    Eq,
     82    MallocSizeOf,
     83    Parse,
     84    PartialEq,
     85    SpecifiedValueInfo,
     86    ToComputedValue,
     87    ToCss,
     88    ToResolvedValue,
     89    ToShmem,
     90    ToTyped,
     91 )]
     92 #[repr(u8)]
     93 pub enum PageOrientation {
     94    /// upright
     95    Upright,
     96    /// rotate-left (counter-clockwise)
     97    RotateLeft,
     98    /// rotate-right (clockwise)
     99    RotateRight,
    100 }
    101 
    102 /// Paper orientation
    103 ///
    104 /// https://drafts.csswg.org/css-page-3/#page-size-prop
    105 #[derive(
    106    Clone,
    107    Copy,
    108    Debug,
    109    Eq,
    110    MallocSizeOf,
    111    Parse,
    112    PartialEq,
    113    SpecifiedValueInfo,
    114    ToCss,
    115    ToResolvedValue,
    116    ToShmem,
    117 )]
    118 #[repr(u8)]
    119 pub enum PageSizeOrientation {
    120    /// Portrait orientation
    121    Portrait,
    122    /// Landscape orientation
    123    Landscape,
    124 }
    125 
    126 #[inline]
    127 fn is_portrait(orientation: &PageSizeOrientation) -> bool {
    128    *orientation == PageSizeOrientation::Portrait
    129 }
    130 
    131 /// Page size property
    132 ///
    133 /// https://drafts.csswg.org/css-page-3/#page-size-prop
    134 #[derive(
    135    Clone, Copy, Debug, MallocSizeOf, PartialEq, SpecifiedValueInfo, ToCss, ToShmem, ToTyped,
    136 )]
    137 #[repr(C, u8)]
    138 pub enum GenericPageSize<S> {
    139    /// `auto` value.
    140    Auto,
    141    /// Page dimensions.
    142    Size(S),
    143    /// An orientation with no size.
    144    Orientation(PageSizeOrientation),
    145    /// Paper size by name
    146    PaperSize(
    147        PaperSize,
    148        #[css(skip_if = "is_portrait")] PageSizeOrientation,
    149    ),
    150 }
    151 
    152 pub use self::GenericPageSize as PageSize;
    153 
    154 impl<S> PageSize<S> {
    155    /// `auto` value.
    156    #[inline]
    157    pub fn auto() -> Self {
    158        PageSize::Auto
    159    }
    160 
    161    /// Whether this is the `auto` value.
    162    #[inline]
    163    pub fn is_auto(&self) -> bool {
    164        matches!(*self, PageSize::Auto)
    165    }
    166 }