1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "printing/print_settings_initializer_mac.h"
7 #include "base/strings/sys_string_conversions.h"
8 #include "printing/print_settings.h"
9 #include "printing/units.h"
14 void PrintSettingsInitializerMac::InitPrintSettings(
16 PMPageFormat page_format
,
17 PrintSettings
* print_settings
) {
18 print_settings
->set_device_name(
19 base::SysCFStringRefToUTF16(PMPrinterGetID(printer
)));
21 PMOrientation orientation
= kPMPortrait
;
22 PMGetOrientation(page_format
, &orientation
);
23 print_settings
->SetOrientation(orientation
== kPMLandscape
);
25 UInt32 resolution_count
= 0;
26 PMResolution best_resolution
= { 72.0, 72.0 };
27 OSStatus status
= PMPrinterGetPrinterResolutionCount(printer
,
29 if (status
== noErr
) {
30 // Resolution indexes are 1-based.
31 for (uint32 i
= 1; i
<= resolution_count
; ++i
) {
32 PMResolution resolution
;
33 PMPrinterGetIndexedPrinterResolution(printer
, i
, &resolution
);
34 if (resolution
.hRes
> best_resolution
.hRes
)
35 best_resolution
= resolution
;
38 int dpi
= best_resolution
.hRes
;
39 print_settings
->set_dpi(dpi
);
41 DCHECK_EQ(dpi
, best_resolution
.vRes
);
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
);
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
));
58 DCHECK_EQ(print_settings
->device_units_per_inch(), kPointsPerInch
);
59 print_settings
->SetPrinterPrintableArea(physical_size_device_units
,
60 printable_area_device_units
,
64 } // namespace printing