| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef PRINTING_PAGE_SETUP_H_ |
| #define PRINTING_PAGE_SETUP_H_ |
| |
| #include "printing/printing_export.h" |
| #include "ui/gfx/geometry/rect.h" |
| |
| namespace printing { |
| |
| // Margins for a page setup. |
| class PRINTING_EXPORT PageMargins { |
| public: |
| PageMargins(); |
| |
| void Clear(); |
| |
| // Equality operator. |
| bool Equals(const PageMargins& rhs) const; |
| |
| // Vertical space for the overlay from the top of the sheet. |
| int header; |
| // Vertical space for the overlay from the bottom of the sheet. |
| int footer; |
| // Margin on each side of the sheet. |
| int left; |
| int right; |
| int top; |
| int bottom; |
| }; |
| |
| // Settings that define the size and printable areas of a page. Unit is |
| // unspecified. |
| class PRINTING_EXPORT PageSetup { |
| public: |
| PageSetup(); |
| ~PageSetup(); |
| |
| void Clear(); |
| |
| // Equality operator. |
| bool Equals(const PageSetup& rhs) const; |
| |
| void Init(const gfx::Size& physical_size, const gfx::Rect& printable_area, |
| int text_height); |
| |
| // Use |requested_margins| as long as they fall inside the printable area. |
| void SetRequestedMargins(const PageMargins& requested_margins); |
| |
| // Ignore the printable area, and set the margins to |requested_margins|. |
| void ForceRequestedMargins(const PageMargins& requested_margins); |
| |
| // Flips the orientation of the page and recalculates all page areas. |
| void FlipOrientation(); |
| |
| const gfx::Size& physical_size() const { return physical_size_; } |
| const gfx::Rect& overlay_area() const { return overlay_area_; } |
| const gfx::Rect& content_area() const { return content_area_; } |
| const gfx::Rect& printable_area() const { return printable_area_; } |
| const PageMargins& effective_margins() const { |
| return effective_margins_; |
| } |
| |
| private: |
| // Store |requested_margins_| and update page setup values. |
| void SetRequestedMarginsAndCalculateSizes( |
| const PageMargins& requested_margins); |
| |
| // Calculate overlay_area_, effective_margins_, and content_area_, based on |
| // a constraint of |bounds| and |text_height|. |
| void CalculateSizesWithinRect(const gfx::Rect& bounds, int text_height); |
| |
| // Physical size of the page, including non-printable margins. |
| gfx::Size physical_size_; |
| |
| // The printable area as specified by the printer driver. We can't get |
| // larger than this. |
| gfx::Rect printable_area_; |
| |
| // The printable area for headers and footers. |
| gfx::Rect overlay_area_; |
| |
| // The printable area as selected by the user's margins. |
| gfx::Rect content_area_; |
| |
| // Effective margins. |
| PageMargins effective_margins_; |
| |
| // Requested margins. |
| PageMargins requested_margins_; |
| |
| // True when |effective_margins_| respects |printable_area_| else false. |
| bool forced_margins_; |
| |
| // Space that must be kept free for the overlays. |
| int text_height_; |
| }; |
| |
| } // namespace printing |
| |
| #endif // PRINTING_PAGE_SETUP_H_ |