1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef PRINTING_PAGE_SETUP_H_ 6 #define PRINTING_PAGE_SETUP_H_ 7 8 #include "printing/printing_export.h" 9 #include "ui/gfx/rect.h" 10 11 namespace printing { 12 13 // Margins for a page setup. 14 class PRINTING_EXPORT PageMargins { 15 public: 16 PageMargins(); 17 18 void Clear(); 19 20 // Equality operator. 21 bool Equals(const PageMargins& rhs) const; 22 23 // Vertical space for the overlay from the top of the sheet. 24 int header; 25 // Vertical space for the overlay from the bottom of the sheet. 26 int footer; 27 // Margin on each side of the sheet. 28 int left; 29 int right; 30 int top; 31 int bottom; 32 }; 33 34 // Settings that define the size and printable areas of a page. Unit is 35 // unspecified. 36 class PRINTING_EXPORT PageSetup { 37 public: 38 PageSetup(); 39 ~PageSetup(); 40 41 void Clear(); 42 43 // Equality operator. 44 bool Equals(const PageSetup& rhs) const; 45 46 void Init(const gfx::Size& physical_size, const gfx::Rect& printable_area, 47 int text_height); 48 49 // Use |requested_margins| as long as they fall inside the printable area. 50 void SetRequestedMargins(const PageMargins& requested_margins); 51 52 // Ignore the printable area, and set the margins to |requested_margins|. 53 void ForceRequestedMargins(const PageMargins& requested_margins); 54 55 // Flips the orientation of the page and recalculates all page areas. 56 void FlipOrientation(); 57 58 const gfx::Size& physical_size() const { return physical_size_; } 59 const gfx::Rect& overlay_area() const { return overlay_area_; } 60 const gfx::Rect& content_area() const { return content_area_; } 61 const gfx::Rect& printable_area() const { return printable_area_; } 62 const PageMargins& effective_margins() const { 63 return effective_margins_; 64 } 65 66 private: 67 // Store |requested_margins_| and update page setup values. 68 void SetRequestedMarginsAndCalculateSizes( 69 const PageMargins& requested_margins); 70 71 // Calculate overlay_area_, effective_margins_, and content_area_, based on 72 // a constraint of |bounds| and |text_height|. 73 void CalculateSizesWithinRect(const gfx::Rect& bounds, int text_height); 74 75 // Physical size of the page, including non-printable margins. 76 gfx::Size physical_size_; 77 78 // The printable area as specified by the printer driver. We can't get 79 // larger than this. 80 gfx::Rect printable_area_; 81 82 // The printable area for headers and footers. 83 gfx::Rect overlay_area_; 84 85 // The printable area as selected by the user's margins. 86 gfx::Rect content_area_; 87 88 // Effective margins. 89 PageMargins effective_margins_; 90 91 // Requested margins. 92 PageMargins requested_margins_; 93 94 // True when |effective_margins_| respects |printable_area_| else false. 95 bool forced_margins_; 96 97 // Space that must be kept free for the overlays. 98 int text_height_; 99 }; 100 101 } // namespace printing 102 103 #endif // PRINTING_PAGE_SETUP_H_ 104