15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "printing/print_settings.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/atomic_sequence_num.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "printing/print_job_constants.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "printing/units.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace printing {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_CUPS)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GetColorModelForMode(
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int color_mode, std::string* color_setting_name, std::string* color_value) {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kCUPSColorMode[] = "ColorMode";
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kCUPSColorModel[] = "ColorModel";
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kCUPSPrintoutMode[] = "PrintoutMode";
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kCUPSProcessColorModel[] = "ProcessColorModel";
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kCUPSColorMode[] = "cups-ColorMode";
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kCUPSColorModel[] = "cups-ColorModel";
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kCUPSPrintoutMode[] = "cups-PrintoutMode";
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kCUPSProcessColorModel[] = "cups-ProcessColorModel";
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_MACOSX)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  color_setting_name->assign(kCUPSColorModel);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (color_mode) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case COLOR:
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kColor);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CMYK:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kCMYK);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PRINTOUTMODE_NORMAL:
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kNormal);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_setting_name->assign(kCUPSPrintoutMode);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PRINTOUTMODE_NORMAL_GRAY:
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kNormalGray);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_setting_name->assign(kCUPSPrintoutMode);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case RGB16:
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kRGB16);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case RGBA:
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kRGBA);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case RGB:
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kRGB);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CMY:
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kCMY);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CMY_K:
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kCMY_K);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case BLACK:
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kBlack);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case GRAY:
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kGray);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case COLORMODE_COLOR:
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_setting_name->assign(kCUPSColorMode);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kColor);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case COLORMODE_MONOCHROME:
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_setting_name->assign(kCUPSColorMode);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kMonochrome);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case HP_COLOR_COLOR:
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_setting_name->assign(kColor);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kColor);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case HP_COLOR_BLACK:
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_setting_name->assign(kColor);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kBlack);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PROCESSCOLORMODEL_CMYK:
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_setting_name->assign(kCUPSProcessColorModel);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kCMYK);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PROCESSCOLORMODEL_GREYSCALE:
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_setting_name->assign(kCUPSProcessColorModel);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kGreyscale);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PROCESSCOLORMODEL_RGB:
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_setting_name->assign(kCUPSProcessColorModel);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kRGB);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      color_value->assign(kGrayscale);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(USE_CUPS)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool IsColorModelSelected(int color_mode) {
1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return (color_mode != GRAY &&
1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          color_mode != BLACK &&
1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          color_mode != PRINTOUTMODE_NORMAL_GRAY &&
1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          color_mode != COLORMODE_MONOCHROME &&
1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          color_mode != PROCESSCOLORMODEL_GREYSCALE &&
1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          color_mode != HP_COLOR_BLACK);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Global SequenceNumber used for generating unique cookie values.
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static base::StaticAtomicSequenceNumber cookie_seq;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)PrintSettings::PrintSettings() {
1141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  Clear();
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PrintSettings::~PrintSettings() {
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrintSettings::Clear() {
1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ranges_.clear();
1221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  margin_type_ = DEFAULT_MARGINS;
1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  min_shrink_ = 1.25;
1241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  max_shrink_ = 2.;
1251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  desired_dpi_ = 72;
1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  selection_only_ = false;
1271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  title_ = base::string16();
1281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  url_ = base::string16();
1291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  display_header_footer_ = false;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  device_name_.clear();
131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  requested_media_ = RequestedMedia();
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  page_setup_device_units_.Clear();
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dpi_ = 0;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  landscape_ = false;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  supports_alpha_blend_ = true;
1361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  should_print_backgrounds_ = false;
1371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  collate_ = false;
1381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  color_ = UNKNOWN_COLOR_MODEL;
1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  copies_ = 0;
1401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  duplex_mode_ = UNKNOWN_DUPLEX_MODE;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrintSettings::SetPrinterPrintableArea(
1440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    const gfx::Size& physical_size_device_units,
1450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    const gfx::Rect& printable_area_device_units,
1461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    bool landscape_needs_flip) {
1470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  int units_per_inch = device_units_per_inch();
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int header_footer_text_height = 0;
1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (display_header_footer_) {
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Hard-code text_height = 0.5cm = ~1/5 of inch.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header_footer_text_height = ConvertUnit(kSettingHeaderFooterInterstice,
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                            kPointsPerInch, units_per_inch);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PageMargins margins;
1561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  switch (margin_type_) {
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case DEFAULT_MARGINS: {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Default margins 1.0cm = ~2/5 of an inch.
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int margin_printer_units = ConvertUnit(1000, kHundrethsMMPerInch,
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                             units_per_inch);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.header = header_footer_text_height;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.footer = header_footer_text_height;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.top = margin_printer_units;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.bottom = margin_printer_units;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.left = margin_printer_units;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.right = margin_printer_units;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case NO_MARGINS:
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PRINTABLE_AREA_MARGINS: {
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.header = 0;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.footer = 0;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.top = 0;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.bottom = 0;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.left = 0;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.right = 0;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CUSTOM_MARGINS: {
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.header = 0;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.footer = 0;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.top = ConvertUnitDouble(
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          requested_custom_margins_in_points_.top,
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          kPointsPerInch,
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          units_per_inch);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.bottom = ConvertUnitDouble(
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          requested_custom_margins_in_points_.bottom,
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          kPointsPerInch,
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          units_per_inch);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.left = ConvertUnitDouble(
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          requested_custom_margins_in_points_.left,
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          kPointsPerInch,
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          units_per_inch);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      margins.right = ConvertUnitDouble(
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          requested_custom_margins_in_points_.right,
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          kPointsPerInch,
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          units_per_inch);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default: {
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED();
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (margin_type_ == DEFAULT_MARGINS || margin_type_ == PRINTABLE_AREA_MARGINS)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    page_setup_device_units_.SetRequestedMargins(margins);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    page_setup_device_units_.ForceRequestedMargins(margins);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  page_setup_device_units_.Init(physical_size_device_units,
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                printable_area_device_units,
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                header_footer_text_height);
2131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (landscape_ && landscape_needs_flip)
2141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    page_setup_device_units_.FlipOrientation();
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrintSettings::SetCustomMargins(
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const PageMargins& requested_margins_in_points) {
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  requested_custom_margins_in_points_ = requested_margins_in_points;
2201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  margin_type_ = CUSTOM_MARGINS;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int PrintSettings::NewCookie() {
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A cookie of 0 is used to mark a document as unassigned, count from 1.
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return cookie_seq.GetNext() + 1;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrintSettings::SetOrientation(bool landscape) {
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (landscape_ != landscape) {
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    landscape_ = landscape;
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    page_setup_device_units_.FlipOrientation();
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace printing
236