Home | History | Annotate | Download | only in printing
      1 // Copyright (c) 2012 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_PRINT_SETTINGS_H_
      6 #define PRINTING_PRINT_SETTINGS_H_
      7 
      8 #include <string>
      9 
     10 #include "base/strings/string16.h"
     11 #include "printing/page_range.h"
     12 #include "printing/page_setup.h"
     13 #include "printing/print_job_constants.h"
     14 #include "printing/printing_export.h"
     15 #include "ui/gfx/rect.h"
     16 
     17 namespace printing {
     18 
     19 // Returns true if color model is selected.
     20 PRINTING_EXPORT bool isColorModelSelected(int model);
     21 
     22 #if defined(USE_CUPS)
     23 // Get the color model setting name and value for the |color_mode|.
     24 PRINTING_EXPORT void GetColorModelForMode(int color_mode,
     25                                           std::string* color_setting_name,
     26                                           std::string* color_value);
     27 #endif
     28 
     29 // OS-independent print settings.
     30 class PRINTING_EXPORT PrintSettings {
     31  public:
     32   PrintSettings();
     33   ~PrintSettings();
     34 
     35   // Reinitialize the settings to the default values.
     36   void Clear();
     37 
     38   // Set printer printable area in in device units.
     39   void SetPrinterPrintableArea(gfx::Size const& physical_size_device_units,
     40                                gfx::Rect const& printable_area_device_units,
     41                                int units_per_inch);
     42 
     43   void SetCustomMargins(const PageMargins& requested_margins_in_points);
     44 
     45   // Equality operator.
     46   // NOTE: printer_name is NOT tested for equality since it doesn't affect the
     47   // output.
     48   bool Equals(const PrintSettings& rhs) const;
     49 
     50   void set_landscape(bool landscape) { landscape_ = landscape; }
     51   void set_printer_name(const string16& printer_name) {
     52     printer_name_ = printer_name;
     53   }
     54   const string16& printer_name() const { return printer_name_; }
     55   void set_device_name(const string16& device_name) {
     56     device_name_ = device_name;
     57   }
     58   const string16& device_name() const { return device_name_; }
     59   void set_dpi(int dpi) { dpi_ = dpi; }
     60   int dpi() const { return dpi_; }
     61   void set_supports_alpha_blend(bool supports_alpha_blend) {
     62     supports_alpha_blend_ = supports_alpha_blend;
     63   }
     64   bool supports_alpha_blend() const { return supports_alpha_blend_; }
     65   const PageSetup& page_setup_device_units() const {
     66     return page_setup_device_units_;
     67   }
     68   int device_units_per_inch() const {
     69 #if defined(OS_MACOSX)
     70     return 72;
     71 #else  // defined(OS_MACOSX)
     72     return dpi();
     73 #endif  // defined(OS_MACOSX)
     74   }
     75 
     76   // Multi-page printing. Each PageRange describes a from-to page combination.
     77   // This permits printing selected pages only.
     78   PageRanges ranges;
     79 
     80   // By imaging to a width a little wider than the available pixels, thin pages
     81   // will be scaled down a little, matching the way they print in IE and Camino.
     82   // This lets them use fewer sheets than they would otherwise, which is
     83   // presumably why other browsers do this. Wide pages will be scaled down more
     84   // than this.
     85   double min_shrink;
     86 
     87   // This number determines how small we are willing to reduce the page content
     88   // in order to accommodate the widest line. If the page would have to be
     89   // reduced smaller to make the widest line fit, we just clip instead (this
     90   // behavior matches MacIE and Mozilla, at least)
     91   double max_shrink;
     92 
     93   // Desired visible dots per inch rendering for output. Printing should be
     94   // scaled to ScreenDpi/dpix*desired_dpi.
     95   int desired_dpi;
     96 
     97   // Indicates if the user only wants to print the current selection.
     98   bool selection_only;
     99 
    100   // Indicates what kind of margins should be applied to the printable area.
    101   MarginType margin_type;
    102 
    103   // Cookie generator. It is used to initialize PrintedDocument with its
    104   // associated PrintSettings, to be sure that each generated PrintedPage is
    105   // correctly associated with its corresponding PrintedDocument.
    106   static int NewCookie();
    107 
    108   // Updates the orientation and flip the page if needed.
    109   void SetOrientation(bool landscape);
    110 
    111   // Strings to be printed as headers and footers if requested by the user.
    112   string16 date;
    113   string16 title;
    114   string16 url;
    115 
    116   // True if the user wants headers and footers to be displayed.
    117   bool display_header_footer;
    118 
    119   // True if the user wants to print CSS backgrounds.
    120   bool should_print_backgrounds;
    121 
    122  private:
    123   //////////////////////////////////////////////////////////////////////////////
    124   // Settings that can't be changed without side-effects.
    125 
    126   // Printer name as shown to the user.
    127   string16 printer_name_;
    128 
    129   // Printer device name as opened by the OS.
    130   string16 device_name_;
    131 
    132   // Page setup in device units.
    133   PageSetup page_setup_device_units_;
    134 
    135   // Printer's device effective dots per inch in both axis.
    136   int dpi_;
    137 
    138   // Is the orientation landscape or portrait.
    139   bool landscape_;
    140 
    141   // True if this printer supports AlphaBlend.
    142   bool supports_alpha_blend_;
    143 
    144   // If margin type is custom, this is what was requested.
    145   PageMargins requested_custom_margins_in_points_;
    146 };
    147 
    148 }  // namespace printing
    149 
    150 #endif  // PRINTING_PRINT_SETTINGS_H_
    151