1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- // Copyright (c) 2011 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 <stdint.h>
- #include "base/strings/sys_string_conversions.h"
- #include "printing/print_settings.h"
- #include "printing/units.h"
- namespace printing {
- // static
- void PrintSettingsInitializerMac::InitPrintSettings(
- PMPrinter printer,
- PMPageFormat page_format,
- PrintSettings* print_settings) {
- print_settings->set_device_name(
- base::SysCFStringRefToUTF16(PMPrinterGetID(printer)));
- PMOrientation orientation = kPMPortrait;
- PMGetOrientation(page_format, &orientation);
- print_settings->SetOrientation(orientation == kPMLandscape);
- 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_t 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));
- DCHECK_EQ(print_settings->device_units_per_inch(), kPointsPerInch);
- print_settings->SetPrinterPrintableArea(physical_size_device_units,
- printable_area_device_units, false);
- }
- } // namespace printing
|