[go: nahoru, domu]

blob: 98dc0a8daf0b4fdbd9f2cb60e77c5929ea7baaf1 [file] [log] [blame]
pliard@chromium.org8a8443f2012-03-13 12:07:191// Copyright (c) 2012 The Chromium Authors. All rights reserved.
license.botbf09a502008-08-24 00:55:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit09911bf2008-07-26 23:55:294
sverrir@google.com8ff1d422009-07-07 21:31:395#include "printing/print_settings.h"
initial.commit09911bf2008-07-26 23:55:296
deanm@google.comd30e8e642008-08-06 12:05:247#include "base/atomic_sequence_num.h"
halcanary73b63fd2015-11-06 00:02:148#include "base/lazy_instance.h"
vandebo@chromium.org1c23b4e2011-10-15 22:30:489#include "base/logging.h"
vandebo@chromium.org06bd18662011-10-07 06:12:4010#include "printing/print_job_constants.h"
maruel@chromium.org4ae30d082009-02-20 17:55:5511#include "printing/units.h"
initial.commit09911bf2008-07-26 23:55:2912
13namespace printing {
14
halcanary73b63fd2015-11-06 00:02:1415base::LazyInstance<std::string> g_user_agent;
16
17void SetAgent(const std::string& user_agent) {
18 g_user_agent.Get() = user_agent;
19}
20
21const std::string& GetAgent() {
22 return g_user_agent.Get();
23}
24
thestig@chromium.orgfa879e52011-11-08 20:39:0125#if defined(USE_CUPS)
kmadhusu@chromium.org63313ae2011-10-13 00:40:3926void GetColorModelForMode(
27 int color_mode, std::string* color_setting_name, std::string* color_value) {
28#if defined(OS_MACOSX)
29 const char kCUPSColorMode[] = "ColorMode";
30 const char kCUPSColorModel[] = "ColorModel";
31 const char kCUPSPrintoutMode[] = "PrintoutMode";
32 const char kCUPSProcessColorModel[] = "ProcessColorModel";
33#else
34 const char kCUPSColorMode[] = "cups-ColorMode";
35 const char kCUPSColorModel[] = "cups-ColorModel";
36 const char kCUPSPrintoutMode[] = "cups-PrintoutMode";
37 const char kCUPSProcessColorModel[] = "cups-ProcessColorModel";
thestig@chromium.orgfa879e52011-11-08 20:39:0138#endif // defined(OS_MACOSX)
kmadhusu@chromium.org63313ae2011-10-13 00:40:3939
40 color_setting_name->assign(kCUPSColorModel);
41 switch (color_mode) {
thestig@chromium.orgd91db112011-10-18 20:58:5142 case COLOR:
43 color_value->assign(kColor);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3944 break;
thestig@chromium.orgd91db112011-10-18 20:58:5145 case CMYK:
46 color_value->assign(kCMYK);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3947 break;
thestig@chromium.orgd91db112011-10-18 20:58:5148 case PRINTOUTMODE_NORMAL:
49 color_value->assign(kNormal);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3950 color_setting_name->assign(kCUPSPrintoutMode);
51 break;
thestig@chromium.orgd91db112011-10-18 20:58:5152 case PRINTOUTMODE_NORMAL_GRAY:
53 color_value->assign(kNormalGray);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3954 color_setting_name->assign(kCUPSPrintoutMode);
55 break;
thestig@chromium.orgd91db112011-10-18 20:58:5156 case RGB16:
57 color_value->assign(kRGB16);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3958 break;
thestig@chromium.orgd91db112011-10-18 20:58:5159 case RGBA:
60 color_value->assign(kRGBA);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3961 break;
thestig@chromium.orgd91db112011-10-18 20:58:5162 case RGB:
63 color_value->assign(kRGB);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3964 break;
thestig@chromium.orgd91db112011-10-18 20:58:5165 case CMY:
66 color_value->assign(kCMY);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3967 break;
thestig@chromium.orgd91db112011-10-18 20:58:5168 case CMY_K:
69 color_value->assign(kCMY_K);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3970 break;
thestig@chromium.orgd91db112011-10-18 20:58:5171 case BLACK:
72 color_value->assign(kBlack);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3973 break;
thestig@chromium.orgd91db112011-10-18 20:58:5174 case GRAY:
75 color_value->assign(kGray);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3976 break;
thestig@chromium.orgd91db112011-10-18 20:58:5177 case COLORMODE_COLOR:
kmadhusu@chromium.org63313ae2011-10-13 00:40:3978 color_setting_name->assign(kCUPSColorMode);
thestig@chromium.orgd91db112011-10-18 20:58:5179 color_value->assign(kColor);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3980 break;
thestig@chromium.orgd91db112011-10-18 20:58:5181 case COLORMODE_MONOCHROME:
kmadhusu@chromium.org63313ae2011-10-13 00:40:3982 color_setting_name->assign(kCUPSColorMode);
thestig@chromium.orgd91db112011-10-18 20:58:5183 color_value->assign(kMonochrome);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3984 break;
thestig@chromium.orgd91db112011-10-18 20:58:5185 case HP_COLOR_COLOR:
kmadhusu@chromium.org63313ae2011-10-13 00:40:3986 color_setting_name->assign(kColor);
thestig@chromium.orgd91db112011-10-18 20:58:5187 color_value->assign(kColor);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3988 break;
thestig@chromium.orgd91db112011-10-18 20:58:5189 case HP_COLOR_BLACK:
kmadhusu@chromium.org63313ae2011-10-13 00:40:3990 color_setting_name->assign(kColor);
thestig@chromium.orgd91db112011-10-18 20:58:5191 color_value->assign(kBlack);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3992 break;
thestig@chromium.orgd91db112011-10-18 20:58:5193 case PROCESSCOLORMODEL_CMYK:
kmadhusu@chromium.org63313ae2011-10-13 00:40:3994 color_setting_name->assign(kCUPSProcessColorModel);
thestig@chromium.orgd91db112011-10-18 20:58:5195 color_value->assign(kCMYK);
kmadhusu@chromium.org63313ae2011-10-13 00:40:3996 break;
thestig@chromium.orgd91db112011-10-18 20:58:5197 case PROCESSCOLORMODEL_GREYSCALE:
kmadhusu@chromium.org63313ae2011-10-13 00:40:3998 color_setting_name->assign(kCUPSProcessColorModel);
thestig@chromium.orgd91db112011-10-18 20:58:5199 color_value->assign(kGreyscale);
kmadhusu@chromium.org63313ae2011-10-13 00:40:39100 break;
thestig@chromium.orgd91db112011-10-18 20:58:51101 case PROCESSCOLORMODEL_RGB:
kmadhusu@chromium.org63313ae2011-10-13 00:40:39102 color_setting_name->assign(kCUPSProcessColorModel);
thestig@chromium.orgd91db112011-10-18 20:58:51103 color_value->assign(kRGB);
kmadhusu@chromium.org63313ae2011-10-13 00:40:39104 break;
105 default:
thestig@chromium.orgd91db112011-10-18 20:58:51106 color_value->assign(kGrayscale);
kmadhusu@chromium.org63313ae2011-10-13 00:40:39107 break;
108 }
109}
thestig@chromium.orgfa879e52011-11-08 20:39:01110#endif // defined(USE_CUPS)
kmadhusu@chromium.org63313ae2011-10-13 00:40:39111
thestig@chromium.org675a1ae2013-10-14 20:24:37112bool IsColorModelSelected(int color_mode) {
113 return (color_mode != GRAY &&
114 color_mode != BLACK &&
115 color_mode != PRINTOUTMODE_NORMAL_GRAY &&
116 color_mode != COLORMODE_MONOCHROME &&
117 color_mode != PROCESSCOLORMODEL_GREYSCALE &&
118 color_mode != HP_COLOR_BLACK);
kmadhusu@chromium.org63313ae2011-10-13 00:40:39119}
120
deanm@google.comd30e8e642008-08-06 12:05:24121// Global SequenceNumber used for generating unique cookie values.
pliard@chromium.org8a8443f2012-03-13 12:07:19122static base::StaticAtomicSequenceNumber cookie_seq;
initial.commit09911bf2008-07-26 23:55:29123
vitalybuka@chromium.orge5324b52013-10-29 03:16:37124PrintSettings::PrintSettings() {
125 Clear();
initial.commit09911bf2008-07-26 23:55:29126}
127
vmpstr04b8358f2016-02-26 01:38:29128PrintSettings::PrintSettings(const PrintSettings& other) = default;
129
erg@google.com20f0487a2010-09-30 20:06:30130PrintSettings::~PrintSettings() {
131}
132
initial.commit09911bf2008-07-26 23:55:29133void PrintSettings::Clear() {
vitalybuka@chromium.orge5324b52013-10-29 03:16:37134 ranges_.clear();
135 margin_type_ = DEFAULT_MARGINS;
vitalybuka@chromium.orge5324b52013-10-29 03:16:37136 desired_dpi_ = 72;
137 selection_only_ = false;
138 title_ = base::string16();
139 url_ = base::string16();
140 display_header_footer_ = false;
initial.commit09911bf2008-07-26 23:55:29141 device_name_.clear();
alekseys@chromium.org72ddef92014-06-12 08:08:06142 requested_media_ = RequestedMedia();
sanjeevr@chromium.org6ab86ac2010-05-29 07:18:29143 page_setup_device_units_.Clear();
initial.commit09911bf2008-07-26 23:55:29144 dpi_ = 0;
145 landscape_ = false;
senorblanco@chromium.orgb2b0fce2011-01-12 16:34:40146 supports_alpha_blend_ = true;
vitalybuka@chromium.orge5324b52013-10-29 03:16:37147 should_print_backgrounds_ = false;
148 collate_ = false;
149 color_ = UNKNOWN_COLOR_MODEL;
150 copies_ = 0;
151 duplex_mode_ = UNKNOWN_DUPLEX_MODE;
initial.commit09911bf2008-07-26 23:55:29152}
sverrir@chromium.org4ecd07452009-03-31 14:34:43153
154void PrintSettings::SetPrinterPrintableArea(
vitalybuka@chromium.org4c9054b2013-11-04 18:34:29155 const gfx::Size& physical_size_device_units,
156 const gfx::Rect& printable_area_device_units,
vitalybuka@chromium.orge5324b52013-10-29 03:16:37157 bool landscape_needs_flip) {
vitalybuka@chromium.org4c9054b2013-11-04 18:34:29158 int units_per_inch = device_units_per_inch();
sanjeevr@chromium.org38bba4f2010-03-12 05:29:07159 int header_footer_text_height = 0;
vitalybuka@chromium.orge5324b52013-10-29 03:16:37160 if (display_header_footer_) {
sanjeevr@chromium.org38bba4f2010-03-12 05:29:07161 // Hard-code text_height = 0.5cm = ~1/5 of inch.
vandebo@chromium.org06bd18662011-10-07 06:12:40162 header_footer_text_height = ConvertUnit(kSettingHeaderFooterInterstice,
163 kPointsPerInch, units_per_inch);
sanjeevr@chromium.org38bba4f2010-03-12 05:29:07164 }
initial.commit09911bf2008-07-26 23:55:29165
sverrir@chromium.org4ecd07452009-03-31 14:34:43166 PageMargins margins;
vitalybuka@chromium.orge5324b52013-10-29 03:16:37167 switch (margin_type_) {
vandebo@chromium.org1c23b4e2011-10-15 22:30:48168 case DEFAULT_MARGINS: {
169 // Default margins 1.0cm = ~2/5 of an inch.
170 int margin_printer_units = ConvertUnit(1000, kHundrethsMMPerInch,
171 units_per_inch);
vandebo@chromium.orgd69d322d2011-10-18 00:15:21172 margins.header = header_footer_text_height;
173 margins.footer = header_footer_text_height;
vandebo@chromium.org1c23b4e2011-10-15 22:30:48174 margins.top = margin_printer_units;
175 margins.bottom = margin_printer_units;
176 margins.left = margin_printer_units;
177 margins.right = margin_printer_units;
178 break;
179 }
180 case NO_MARGINS:
181 case PRINTABLE_AREA_MARGINS: {
vandebo@chromium.orgd69d322d2011-10-18 00:15:21182 margins.header = 0;
183 margins.footer = 0;
vandebo@chromium.org1c23b4e2011-10-15 22:30:48184 margins.top = 0;
185 margins.bottom = 0;
186 margins.left = 0;
187 margins.right = 0;
188 break;
189 }
190 case CUSTOM_MARGINS: {
vandebo@chromium.orgd69d322d2011-10-18 00:15:21191 margins.header = 0;
192 margins.footer = 0;
vandebo@chromium.orgb076a082011-10-20 01:26:32193 margins.top = ConvertUnitDouble(
194 requested_custom_margins_in_points_.top,
195 kPointsPerInch,
196 units_per_inch);
197 margins.bottom = ConvertUnitDouble(
198 requested_custom_margins_in_points_.bottom,
199 kPointsPerInch,
200 units_per_inch);
201 margins.left = ConvertUnitDouble(
202 requested_custom_margins_in_points_.left,
203 kPointsPerInch,
204 units_per_inch);
205 margins.right = ConvertUnitDouble(
206 requested_custom_margins_in_points_.right,
207 kPointsPerInch,
208 units_per_inch);
vandebo@chromium.org1c23b4e2011-10-15 22:30:48209 break;
210 }
211 default: {
212 NOTREACHED();
213 }
214 }
215
vitalybuka@chromium.orge5324b52013-10-29 03:16:37216 if (margin_type_ == DEFAULT_MARGINS || margin_type_ == PRINTABLE_AREA_MARGINS)
vandebo@chromium.org1c23b4e2011-10-15 22:30:48217 page_setup_device_units_.SetRequestedMargins(margins);
218 else
219 page_setup_device_units_.ForceRequestedMargins(margins);
kmadhusu@chromium.orgb89615d2011-11-04 00:29:21220
221 page_setup_device_units_.Init(physical_size_device_units,
222 printable_area_device_units,
223 header_footer_text_height);
vitalybuka@chromium.orge5324b52013-10-29 03:16:37224 if (landscape_ && landscape_needs_flip)
225 page_setup_device_units_.FlipOrientation();
vandebo@chromium.org1c23b4e2011-10-15 22:30:48226}
227
vandebo@chromium.orgb076a082011-10-20 01:26:32228void PrintSettings::SetCustomMargins(
229 const PageMargins& requested_margins_in_points) {
230 requested_custom_margins_in_points_ = requested_margins_in_points;
vitalybuka@chromium.orge5324b52013-10-29 03:16:37231 margin_type_ = CUSTOM_MARGINS;
initial.commit09911bf2008-07-26 23:55:29232}
233
234int PrintSettings::NewCookie() {
deanm@google.com13c9eec2008-08-06 13:42:44235 // A cookie of 0 is used to mark a document as unassigned, count from 1.
236 return cookie_seq.GetNext() + 1;
initial.commit09911bf2008-07-26 23:55:29237}
238
thestig@chromium.orgc48bee22011-03-29 02:36:26239void PrintSettings::SetOrientation(bool landscape) {
240 if (landscape_ != landscape) {
241 landscape_ = landscape;
242 page_setup_device_units_.FlipOrientation();
243 }
244}
245
initial.commit09911bf2008-07-26 23:55:29246} // namespace printing