style/values/computed/
page.rs1use crate::derives::*;
8use crate::values::computed::length::NonNegativeLength;
9use crate::values::computed::{Context, ToComputedValue};
10use crate::values::generics;
11use crate::values::generics::size::Size2D;
12
13use crate::values::specified::page as specified;
14pub use generics::page::GenericPageSize;
15pub use generics::page::PageOrientation;
16pub use generics::page::PageSizeOrientation;
17pub use generics::page::PaperSize;
18pub use specified::PageName;
19
20#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToCss, ToResolvedValue, ToShmem, ToTyped)]
26#[repr(C, u8)]
27pub enum PageSize {
28 Size(Size2D<NonNegativeLength>),
30 Orientation(PageSizeOrientation),
32 Auto,
34}
35
36impl ToComputedValue for specified::PageSize {
37 type ComputedValue = PageSize;
38
39 fn to_computed_value(&self, ctx: &Context) -> Self::ComputedValue {
40 match &*self {
41 Self::Size(s) => PageSize::Size(s.to_computed_value(ctx)),
42 Self::PaperSize(p, PageSizeOrientation::Landscape) => PageSize::Size(Size2D {
43 width: p.long_edge().to_computed_value(ctx),
44 height: p.short_edge().to_computed_value(ctx),
45 }),
46 Self::PaperSize(p, PageSizeOrientation::Portrait) => PageSize::Size(Size2D {
47 width: p.short_edge().to_computed_value(ctx),
48 height: p.long_edge().to_computed_value(ctx),
49 }),
50 Self::Orientation(o) => PageSize::Orientation(*o),
51 Self::Auto => PageSize::Auto,
52 }
53 }
54
55 fn from_computed_value(computed: &Self::ComputedValue) -> Self {
56 match *computed {
57 PageSize::Size(s) => Self::Size(ToComputedValue::from_computed_value(&s)),
58 PageSize::Orientation(o) => Self::Orientation(o),
59 PageSize::Auto => Self::Auto,
60 }
61 }
62}
63
64impl PageSize {
65 #[inline]
67 pub fn auto() -> Self {
68 PageSize::Auto
69 }
70
71 #[inline]
73 pub fn is_auto(&self) -> bool {
74 matches!(*self, PageSize::Auto)
75 }
76}