style/values/generics/
page.rs1use crate::values::generics::NonNegative;
8use crate::values::specified::length::AbsoluteLength;
9
10#[derive(
14 Clone, Copy, Debug, Eq, MallocSizeOf, Parse, PartialEq, SpecifiedValueInfo, ToCss, ToShmem,
15)]
16#[repr(u8)]
17pub enum PaperSize {
18 A5,
20 A4,
22 A3,
24 B5,
26 B4,
28 JisB5,
30 JisB4,
32 Letter,
34 Legal,
36 Ledger,
38}
39
40impl PaperSize {
41 pub fn long_edge(&self) -> NonNegative<AbsoluteLength> {
43 NonNegative(match *self {
44 PaperSize::A5 => AbsoluteLength::Mm(210.0),
45 PaperSize::A4 => AbsoluteLength::Mm(297.0),
46 PaperSize::A3 => AbsoluteLength::Mm(420.0),
47 PaperSize::B5 => AbsoluteLength::Mm(250.0),
48 PaperSize::B4 => AbsoluteLength::Mm(353.0),
49 PaperSize::JisB5 => AbsoluteLength::Mm(257.0),
50 PaperSize::JisB4 => AbsoluteLength::Mm(364.0),
51 PaperSize::Letter => AbsoluteLength::In(11.0),
52 PaperSize::Legal => AbsoluteLength::In(14.0),
53 PaperSize::Ledger => AbsoluteLength::In(17.0),
54 })
55 }
56 pub fn short_edge(&self) -> NonNegative<AbsoluteLength> {
58 NonNegative(match *self {
59 PaperSize::A5 => AbsoluteLength::Mm(148.0),
60 PaperSize::A4 => AbsoluteLength::Mm(210.0),
61 PaperSize::A3 => AbsoluteLength::Mm(297.0),
62 PaperSize::B5 => AbsoluteLength::Mm(176.0),
63 PaperSize::B4 => AbsoluteLength::Mm(250.0),
64 PaperSize::JisB5 => AbsoluteLength::Mm(182.0),
65 PaperSize::JisB4 => AbsoluteLength::Mm(257.0),
66 PaperSize::Letter => AbsoluteLength::In(8.5),
67 PaperSize::Legal => AbsoluteLength::In(8.5),
68 PaperSize::Ledger => AbsoluteLength::In(11.0),
69 })
70 }
71}
72
73#[derive(
77 Clone,
78 Copy,
79 Debug,
80 Eq,
81 MallocSizeOf,
82 Parse,
83 PartialEq,
84 SpecifiedValueInfo,
85 ToComputedValue,
86 ToCss,
87 ToResolvedValue,
88 ToShmem,
89)]
90#[repr(u8)]
91pub enum PageOrientation {
92 Upright,
94 RotateLeft,
96 RotateRight,
98}
99
100#[derive(
104 Clone,
105 Copy,
106 Debug,
107 Eq,
108 MallocSizeOf,
109 Parse,
110 PartialEq,
111 SpecifiedValueInfo,
112 ToCss,
113 ToResolvedValue,
114 ToShmem,
115)]
116#[repr(u8)]
117pub enum PageSizeOrientation {
118 Portrait,
120 Landscape,
122}
123
124#[inline]
125fn is_portrait(orientation: &PageSizeOrientation) -> bool {
126 *orientation == PageSizeOrientation::Portrait
127}
128
129#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, SpecifiedValueInfo, ToCss, ToShmem)]
133#[repr(C, u8)]
134pub enum GenericPageSize<S> {
135 Auto,
137 Size(S),
139 Orientation(PageSizeOrientation),
141 PaperSize(
143 PaperSize,
144 #[css(skip_if = "is_portrait")] PageSizeOrientation,
145 ),
146}
147
148pub use self::GenericPageSize as PageSize;
149
150impl<S> PageSize<S> {
151 #[inline]
153 pub fn auto() -> Self {
154 PageSize::Auto
155 }
156
157 #[inline]
159 pub fn is_auto(&self) -> bool {
160 matches!(*self, PageSize::Auto)
161 }
162}