summaryrefslogtreecommitdiffstats
path: root/printing/print_settings_initializer_mac.cc
diff options
context:
space:
mode:
authorjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-26 17:57:52 +0000
committerjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-26 17:57:52 +0000
commit4993f34cdf20cf9e1124656164e2c647efba6989 (patch)
tree272b55c8054c6a79444efafe55ad2311e89fa5dd /printing/print_settings_initializer_mac.cc
parentcaf706f870d1d9d576277110ab1df022b2756203 (diff)
downloadchromium_src-4993f34cdf20cf9e1124656164e2c647efba6989.zip
chromium_src-4993f34cdf20cf9e1124656164e2c647efba6989.tar.gz
chromium_src-4993f34cdf20cf9e1124656164e2c647efba6989.tar.bz2
Printing: Refactor PrintSettings::Init into a PrintSettingsFactory class
per-platform. BUG=none TEST=none Review URL: http://codereview.chromium.org/4040001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@63907 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'printing/print_settings_initializer_mac.cc')
-rw-r--r--printing/print_settings_initializer_mac.cc70
1 files changed, 70 insertions, 0 deletions
diff --git a/printing/print_settings_initializer_mac.cc b/printing/print_settings_initializer_mac.cc
new file mode 100644
index 0000000..5bb7282
--- /dev/null
+++ b/printing/print_settings_initializer_mac.cc
@@ -0,0 +1,70 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "printing/print_settings_initializer_mac.h"
+
+#include "base/sys_string_conversions.h"
+#include "printing/print_settings.h"
+
+namespace printing {
+
+// static
+void PrintSettingsInitializerMac::InitPrintSettings(
+ PMPrinter printer,
+ PMPageFormat page_format,
+ const PageRanges& new_ranges,
+ bool print_selection_only,
+ PrintSettings* print_settings) {
+ DCHECK(print_settings);
+
+ print_settings->set_printer_name(
+ base::SysCFStringRefToWide(PMPrinterGetName(printer)));
+ print_settings->set_device_name(
+ base::SysCFStringRefToWide(PMPrinterGetID(printer)));
+ print_settings->ranges = new_ranges;
+
+ PMOrientation orientation = kPMPortrait;
+ PMGetOrientation(page_format, &orientation);
+ print_settings->set_landscape(orientation == kPMLandscape);
+ print_settings->selection_only = print_selection_only;
+
+ UInt32 resolution_count = 0;
+ PMResolution best_resolution = { 72.0, 72.0 };
+ OSStatus status = PMPrinterGetPrinterResolutionCount(printer,
+ &resolution_count);
+ if (status == noErr) {
+ // Resolution indexes are 1-based.
+ for (uint32 i = 1; i <= resolution_count; ++i) {
+ PMResolution resolution;
+ PMPrinterGetIndexedPrinterResolution(printer, i, &resolution);
+ if (resolution.hRes > best_resolution.hRes)
+ best_resolution = resolution;
+ }
+ }
+ int dpi = best_resolution.hRes;
+ print_settings->set_dpi(dpi);
+
+ DCHECK_EQ(dpi, best_resolution.vRes);
+
+ // Get printable area and paper rects (in points)
+ PMRect page_rect, paper_rect;
+ PMGetAdjustedPageRect(page_format, &page_rect);
+ PMGetAdjustedPaperRect(page_format, &paper_rect);
+
+ // Device units are in points. Units per inch is 72.
+ gfx::Size physical_size_device_units(
+ (paper_rect.right - paper_rect.left),
+ (paper_rect.bottom - paper_rect.top));
+ gfx::Rect printable_area_device_units(
+ (page_rect.left - paper_rect.left),
+ (page_rect.top - paper_rect.top),
+ (page_rect.right - page_rect.left),
+ (page_rect.bottom - page_rect.top));
+
+ print_settings->SetPrinterPrintableArea(physical_size_device_units,
+ printable_area_device_units,
+ 72);
+}
+
+} // namespace printing