1 // Copyright 2011 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef PRINTING_PAGE_SETUP_H_
6 #define PRINTING_PAGE_SETUP_H_
8 #include "base/component_export.h"
9 #include "ui/gfx/geometry/rect.h"
13 // Margins for a page setup.
14 class COMPONENT_EXPORT(PRINTING) PageMargins {
17 PageMargins(int header, int footer, int left, int right, int top, int bottom);
19 bool operator==(const PageMargins& other) const;
23 // Vertical space for the overlay from the top of the sheet.
25 // Vertical space for the overlay from the bottom of the sheet.
27 // Margin on each side of the sheet.
34 // Settings that define the size and printable areas of a page. Unit is
36 class COMPONENT_EXPORT(PRINTING) PageSetup {
39 PageSetup(const gfx::Size& physical_size,
40 const gfx::Rect& printable_area,
41 const PageMargins& requested_margins,
44 PageSetup(const PageSetup& other);
47 bool operator==(const PageSetup& other) const;
49 // Gets a symmetrical printable area.
50 static gfx::Rect GetSymmetricalPrintableArea(const gfx::Size& page_size,
51 const gfx::Rect& printable_area);
55 void Init(const gfx::Size& physical_size,
56 const gfx::Rect& printable_area,
59 // Use `requested_margins` as long as they fall inside the printable area.
60 void SetRequestedMargins(const PageMargins& requested_margins);
62 // Ignore the printable area, and set the margins to `requested_margins`.
63 void ForceRequestedMargins(const PageMargins& requested_margins);
65 // Flips the orientation of the page and recalculates all page areas.
66 void FlipOrientation();
68 const gfx::Size& physical_size() const { return physical_size_; }
69 const gfx::Rect& overlay_area() const { return overlay_area_; }
70 const gfx::Rect& content_area() const { return content_area_; }
71 const gfx::Rect& printable_area() const { return printable_area_; }
72 const PageMargins& effective_margins() const { return effective_margins_; }
73 const PageMargins& requested_margins() const { return requested_margins_; }
74 bool forced_margins() const { return forced_margins_; }
75 int text_height() const { return text_height_; }
78 // Store `requested_margins_` and update page setup values.
79 void SetRequestedMarginsAndCalculateSizes(
80 const PageMargins& requested_margins);
82 // Calculate overlay_area_, effective_margins_, and content_area_, based on
83 // a constraint of `bounds` and `text_height`.
84 void CalculateSizesWithinRect(const gfx::Rect& bounds, int text_height);
86 // Physical size of the page, including non-printable margins.
87 gfx::Size physical_size_;
89 // The printable area as specified by the printer driver. We can't get
91 gfx::Rect printable_area_;
93 // The printable area for headers and footers.
94 gfx::Rect overlay_area_;
96 // The printable area as selected by the user's margins.
97 gfx::Rect content_area_;
100 PageMargins effective_margins_;
102 // Requested margins.
103 PageMargins requested_margins_;
105 // True when `effective_margins_` respects `printable_area_` else false.
106 bool forced_margins_;
108 // Space that must be kept free for the overlays.
112 } // namespace printing
114 #endif // PRINTING_PAGE_SETUP_H_