blob: 926d69882528b9e6ddaea19014d023e1110eb92c [file] [log] [blame]
[email protected]a0f59002011-09-20 03:59:051// Copyright (c) 2011 The Chromium Authors. All rights reserved.
[email protected]4993f342010-10-26 17:57:522// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "printing/print_settings_initializer_mac.h"
6
[email protected]13ac53532013-03-30 00:27:007#include "base/strings/sys_string_conversions.h"
[email protected]4993f342010-10-26 17:57:528#include "printing/print_settings.h"
[email protected]4c9054b2013-11-04 18:34:299#include "printing/units.h"
[email protected]4993f342010-10-26 17:57:5210
11namespace printing {
12
13// static
14void PrintSettingsInitializerMac::InitPrintSettings(
15 PMPrinter printer,
16 PMPageFormat page_format,
[email protected]4993f342010-10-26 17:57:5217 PrintSettings* print_settings) {
[email protected]4993f342010-10-26 17:57:5218 print_settings->set_device_name(
[email protected]a0f59002011-09-20 03:59:0519 base::SysCFStringRefToUTF16(PMPrinterGetID(printer)));
[email protected]4993f342010-10-26 17:57:5220
21 PMOrientation orientation = kPMPortrait;
22 PMGetOrientation(page_format, &orientation);
[email protected]e5324b52013-10-29 03:16:3723 print_settings->SetOrientation(orientation == kPMLandscape);
[email protected]4993f342010-10-26 17:57:5224
25 UInt32 resolution_count = 0;
26 PMResolution best_resolution = { 72.0, 72.0 };
27 OSStatus status = PMPrinterGetPrinterResolutionCount(printer,
28 &resolution_count);
29 if (status == noErr) {
30 // Resolution indexes are 1-based.
thestig707a24b22015-09-14 18:16:3331 for (uint32_t i = 1; i <= resolution_count; ++i) {
[email protected]4993f342010-10-26 17:57:5232 PMResolution resolution;
33 PMPrinterGetIndexedPrinterResolution(printer, i, &resolution);
34 if (resolution.hRes > best_resolution.hRes)
35 best_resolution = resolution;
36 }
37 }
38 int dpi = best_resolution.hRes;
39 print_settings->set_dpi(dpi);
40
41 DCHECK_EQ(dpi, best_resolution.vRes);
42
43 // Get printable area and paper rects (in points)
44 PMRect page_rect, paper_rect;
45 PMGetAdjustedPageRect(page_format, &page_rect);
46 PMGetAdjustedPaperRect(page_format, &paper_rect);
47
48 // Device units are in points. Units per inch is 72.
49 gfx::Size physical_size_device_units(
50 (paper_rect.right - paper_rect.left),
51 (paper_rect.bottom - paper_rect.top));
52 gfx::Rect printable_area_device_units(
53 (page_rect.left - paper_rect.left),
54 (page_rect.top - paper_rect.top),
55 (page_rect.right - page_rect.left),
56 (page_rect.bottom - page_rect.top));
57
[email protected]4c9054b2013-11-04 18:34:2958 DCHECK_EQ(print_settings->device_units_per_inch(), kPointsPerInch);
[email protected]4993f342010-10-26 17:57:5259 print_settings->SetPrinterPrintableArea(physical_size_device_units,
60 printable_area_device_units,
[email protected]4c9054b2013-11-04 18:34:2961 false);
[email protected]4993f342010-10-26 17:57:5262}
63
64} // namespace printing