1use 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 ToTyped,
90)]
91#[repr(u8)]
92pub enum PageOrientation {
93 Upright,
95 RotateLeft,
97 RotateRight,
99}
100
101#[derive(
105 Clone,
106 Copy,
107 Debug,
108 Eq,
109 MallocSizeOf,
110 Parse,
111 PartialEq,
112 SpecifiedValueInfo,
113 ToCss,
114 ToResolvedValue,
115 ToShmem,
116)]
117#[repr(u8)]
118pub enum PageSizeOrientation {
119 Portrait,
121 Landscape,
123}
124
125#[inline]
126fn is_portrait(orientation: &PageSizeOrientation) -> bool {
127 *orientation == PageSizeOrientation::Portrait
128}
129
130#[derive(
134 Clone, Copy, Debug, MallocSizeOf, PartialEq, SpecifiedValueInfo, ToCss, ToShmem, ToTyped,
135)]
136#[repr(C, u8)]
137pub enum GenericPageSize<S> {
138 Auto,
140 Size(S),
142 Orientation(PageSizeOrientation),
144 PaperSize(
146 PaperSize,
147 #[css(skip_if = "is_portrait")] PageSizeOrientation,
148 ),
149}
150
151pub use self::GenericPageSize as PageSize;
152
153impl<S> PageSize<S> {
154 #[inline]
156 pub fn auto() -> Self {
157 PageSize::Auto
158 }
159
160 #[inline]
162 pub fn is_auto(&self) -> bool {
163 matches!(*self, PageSize::Auto)
164 }
165}