print_settings.cc revision 0f1bc08d4cfcc34181b0b5cbf065c40f687bf740
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// Use of this source code is governed by a BSD-style license that can be 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// found in the LICENSE file. 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include "printing/print_settings.h" 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include "base/atomic_sequence_num.h" 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include "base/logging.h" 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include "printing/print_job_constants.h" 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include "printing/units.h" 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectnamespace printing { 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#if defined(USE_CUPS) 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectvoid GetColorModelForMode( 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int color_mode, std::string* color_setting_name, std::string* color_value) { 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#if defined(OS_MACOSX) 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project const char kCUPSColorMode[] = "ColorMode"; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project const char kCUPSColorModel[] = "ColorModel"; 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project const char kCUPSPrintoutMode[] = "PrintoutMode"; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project const char kCUPSProcessColorModel[] = "ProcessColorModel"; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#else 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project const char kCUPSColorMode[] = "cups-ColorMode"; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project const char kCUPSColorModel[] = "cups-ColorModel"; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project const char kCUPSPrintoutMode[] = "cups-PrintoutMode"; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project const char kCUPSProcessColorModel[] = "cups-ProcessColorModel"; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#endif // defined(OS_MACOSX) 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_setting_name->assign(kCUPSColorModel); 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (color_mode) { 312f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes case COLOR: 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_value->assign(kColor); 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case CMYK: 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_value->assign(kCMYK); 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case PRINTOUTMODE_NORMAL: 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_value->assign(kNormal); 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_setting_name->assign(kCUPSPrintoutMode); 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case PRINTOUTMODE_NORMAL_GRAY: 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_value->assign(kNormalGray); 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_setting_name->assign(kCUPSPrintoutMode); 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case RGB16: 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_value->assign(kRGB16); 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 482f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes case RGBA: 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_value->assign(kRGBA); 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case RGB: 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_value->assign(kRGB); 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case CMY: 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_value->assign(kCMY); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case CMY_K: 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_value->assign(kCMY_K); 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case BLACK: 612f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes color_value->assign(kBlack); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case GRAY: 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_value->assign(kGray); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case COLORMODE_COLOR: 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_setting_name->assign(kCUPSColorMode); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project color_value->assign(kColor); 69 break; 70 case COLORMODE_MONOCHROME: 71 color_setting_name->assign(kCUPSColorMode); 72 color_value->assign(kMonochrome); 73 break; 74 case HP_COLOR_COLOR: 75 color_setting_name->assign(kColor); 76 color_value->assign(kColor); 77 break; 78 case HP_COLOR_BLACK: 79 color_setting_name->assign(kColor); 80 color_value->assign(kBlack); 81 break; 82 case PROCESSCOLORMODEL_CMYK: 83 color_setting_name->assign(kCUPSProcessColorModel); 84 color_value->assign(kCMYK); 85 break; 86 case PROCESSCOLORMODEL_GREYSCALE: 87 color_setting_name->assign(kCUPSProcessColorModel); 88 color_value->assign(kGreyscale); 89 break; 90 case PROCESSCOLORMODEL_RGB: 91 color_setting_name->assign(kCUPSProcessColorModel); 92 color_value->assign(kRGB); 93 break; 94 default: 95 color_value->assign(kGrayscale); 96 break; 97 } 98} 99#endif // defined(USE_CUPS) 100 101bool IsColorModelSelected(int color_mode) { 102 return (color_mode != GRAY && 103 color_mode != BLACK && 104 color_mode != PRINTOUTMODE_NORMAL_GRAY && 105 color_mode != COLORMODE_MONOCHROME && 106 color_mode != PROCESSCOLORMODEL_GREYSCALE && 107 color_mode != HP_COLOR_BLACK); 108} 109 110// Global SequenceNumber used for generating unique cookie values. 111static base::StaticAtomicSequenceNumber cookie_seq; 112 113PrintSettings::PrintSettings() { 114 Clear(); 115} 116 117PrintSettings::~PrintSettings() { 118} 119 120void PrintSettings::Clear() { 121 ranges_.clear(); 122 margin_type_ = DEFAULT_MARGINS; 123 min_shrink_ = 1.25; 124 max_shrink_ = 2.; 125 desired_dpi_ = 72; 126 selection_only_ = false; 127 title_ = base::string16(); 128 url_ = base::string16(); 129 display_header_footer_ = false; 130 device_name_.clear(); 131 page_setup_device_units_.Clear(); 132 dpi_ = 0; 133 landscape_ = false; 134 supports_alpha_blend_ = true; 135 should_print_backgrounds_ = false; 136 collate_ = false; 137 color_ = UNKNOWN_COLOR_MODEL; 138 copies_ = 0; 139 duplex_mode_ = UNKNOWN_DUPLEX_MODE; 140} 141 142void PrintSettings::SetPrinterPrintableArea( 143 const gfx::Size& physical_size_device_units, 144 const gfx::Rect& printable_area_device_units, 145 bool landscape_needs_flip) { 146 int units_per_inch = device_units_per_inch(); 147 int header_footer_text_height = 0; 148 if (display_header_footer_) { 149 // Hard-code text_height = 0.5cm = ~1/5 of inch. 150 header_footer_text_height = ConvertUnit(kSettingHeaderFooterInterstice, 151 kPointsPerInch, units_per_inch); 152 } 153 154 PageMargins margins; 155 switch (margin_type_) { 156 case DEFAULT_MARGINS: { 157 // Default margins 1.0cm = ~2/5 of an inch. 158 int margin_printer_units = ConvertUnit(1000, kHundrethsMMPerInch, 159 units_per_inch); 160 margins.header = header_footer_text_height; 161 margins.footer = header_footer_text_height; 162 margins.top = margin_printer_units; 163 margins.bottom = margin_printer_units; 164 margins.left = margin_printer_units; 165 margins.right = margin_printer_units; 166 break; 167 } 168 case NO_MARGINS: 169 case PRINTABLE_AREA_MARGINS: { 170 margins.header = 0; 171 margins.footer = 0; 172 margins.top = 0; 173 margins.bottom = 0; 174 margins.left = 0; 175 margins.right = 0; 176 break; 177 } 178 case CUSTOM_MARGINS: { 179 margins.header = 0; 180 margins.footer = 0; 181 margins.top = ConvertUnitDouble( 182 requested_custom_margins_in_points_.top, 183 kPointsPerInch, 184 units_per_inch); 185 margins.bottom = ConvertUnitDouble( 186 requested_custom_margins_in_points_.bottom, 187 kPointsPerInch, 188 units_per_inch); 189 margins.left = ConvertUnitDouble( 190 requested_custom_margins_in_points_.left, 191 kPointsPerInch, 192 units_per_inch); 193 margins.right = ConvertUnitDouble( 194 requested_custom_margins_in_points_.right, 195 kPointsPerInch, 196 units_per_inch); 197 break; 198 } 199 default: { 200 NOTREACHED(); 201 } 202 } 203 204 if (margin_type_ == DEFAULT_MARGINS || margin_type_ == PRINTABLE_AREA_MARGINS) 205 page_setup_device_units_.SetRequestedMargins(margins); 206 else 207 page_setup_device_units_.ForceRequestedMargins(margins); 208 209 page_setup_device_units_.Init(physical_size_device_units, 210 printable_area_device_units, 211 header_footer_text_height); 212 if (landscape_ && landscape_needs_flip) 213 page_setup_device_units_.FlipOrientation(); 214} 215 216void PrintSettings::SetCustomMargins( 217 const PageMargins& requested_margins_in_points) { 218 requested_custom_margins_in_points_ = requested_margins_in_points; 219 margin_type_ = CUSTOM_MARGINS; 220} 221 222int PrintSettings::NewCookie() { 223 // A cookie of 0 is used to mark a document as unassigned, count from 1. 224 return cookie_seq.GetNext() + 1; 225} 226 227void PrintSettings::SetOrientation(bool landscape) { 228 if (landscape_ != landscape) { 229 landscape_ = landscape; 230 page_setup_device_units_.FlipOrientation(); 231 } 232} 233 234} // namespace printing 235