Home | History | Annotate | Download | only in printing
      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