| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "printing/printing_context_mac.h" | 5 #include "printing/printing_context_mac.h" |
| 6 | 6 |
| 7 #import <ApplicationServices/ApplicationServices.h> | 7 #import <ApplicationServices/ApplicationServices.h> |
| 8 #import <AppKit/AppKit.h> | 8 #import <AppKit/AppKit.h> |
| 9 | 9 |
| 10 #import <iomanip> | 10 #import <iomanip> |
| 11 #import <numeric> | 11 #import <numeric> |
| 12 | 12 |
| 13 #include "base/logging.h" | 13 #include "base/logging.h" |
| 14 #include "base/mac/scoped_cftyperef.h" | 14 #include "base/mac/scoped_cftyperef.h" |
| 15 #include "base/mac/scoped_nsautorelease_pool.h" | 15 #include "base/mac/scoped_nsautorelease_pool.h" |
| 16 #include "base/mac/scoped_nsexception_enabler.h" | 16 #include "base/mac/scoped_nsexception_enabler.h" |
| 17 #include "base/strings/sys_string_conversions.h" | 17 #include "base/strings/sys_string_conversions.h" |
| 18 #include "base/strings/utf_string_conversions.h" | 18 #include "base/strings/utf_string_conversions.h" |
| 19 #include "base/values.h" | 19 #include "base/values.h" |
| 20 #include "printing/print_settings_initializer_mac.h" | 20 #include "printing/print_settings_initializer_mac.h" |
| 21 #include "printing/units.h" |
| 21 | 22 |
| 22 namespace printing { | 23 namespace printing { |
| 23 | 24 |
| 24 namespace { | 25 namespace { |
| 25 | 26 |
| 26 // Return true if PPD name of paper is equal. | 27 // Return true if PPD name of paper is equal. |
| 27 bool IsPaperNameEqual(const PMPaper& paper1, const PMPaper& paper2) { | 28 bool IsPaperNameEqual(const PMPaper& paper1, const PMPaper& paper2) { |
| 28 CFStringRef name1 = NULL; | 29 CFStringRef name1 = NULL; |
| 29 CFStringRef name2 = NULL; | 30 CFStringRef name2 = NULL; |
| 30 return (PMPaperGetPPDPaperName(paper1, &name1) == noErr) && | 31 return (PMPaperGetPPDPaperName(paper1, &name1) == noErr) && |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 if (selection == NSOKButton) { | 100 if (selection == NSOKButton) { |
| 100 print_info_.reset([[panel printInfo] retain]); | 101 print_info_.reset([[panel printInfo] retain]); |
| 101 settings_.set_ranges(GetPageRangesFromPrintInfo()); | 102 settings_.set_ranges(GetPageRangesFromPrintInfo()); |
| 102 InitPrintSettingsFromPrintInfo(); | 103 InitPrintSettingsFromPrintInfo(); |
| 103 callback.Run(OK); | 104 callback.Run(OK); |
| 104 } else { | 105 } else { |
| 105 callback.Run(CANCEL); | 106 callback.Run(CANCEL); |
| 106 } | 107 } |
| 107 } | 108 } |
| 108 | 109 |
| 110 gfx::Size PrintingContextMac::GetPdfPaperSizeDeviceUnits() { |
| 111 // NOTE: Reset |print_info_| with a copy of |sharedPrintInfo| so as to start |
| 112 // with a clean slate. |
| 113 print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]); |
| 114 UpdatePageFormatWithPaperInfo(); |
| 115 |
| 116 PMPageFormat page_format = |
| 117 static_cast<PMPageFormat>([print_info_.get() PMPageFormat]); |
| 118 PMRect paper_rect; |
| 119 PMGetAdjustedPaperRect(page_format, &paper_rect); |
| 120 |
| 121 // Device units are in points. Units per inch is 72. |
| 122 gfx::Size physical_size_device_units( |
| 123 (paper_rect.right - paper_rect.left), |
| 124 (paper_rect.bottom - paper_rect.top)); |
| 125 DCHECK(settings_.device_units_per_inch() == kPointsPerInch); |
| 126 return physical_size_device_units; |
| 127 } |
| 128 |
| 109 PrintingContext::Result PrintingContextMac::UseDefaultSettings() { | 129 PrintingContext::Result PrintingContextMac::UseDefaultSettings() { |
| 110 DCHECK(!in_print_job_); | 130 DCHECK(!in_print_job_); |
| 111 | 131 |
| 112 print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]); | 132 print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]); |
| 113 settings_.set_ranges(GetPageRangesFromPrintInfo()); | 133 settings_.set_ranges(GetPageRangesFromPrintInfo()); |
| 114 InitPrintSettingsFromPrintInfo(); | 134 InitPrintSettingsFromPrintInfo(); |
| 115 | 135 |
| 116 return OK; | 136 return OK; |
| 117 } | 137 } |
| 118 | 138 |
| 119 PrintingContext::Result PrintingContextMac::UpdatePrinterSettings( | 139 PrintingContext::Result PrintingContextMac::UpdatePrinterSettings( |
| 120 bool target_is_pdf, | |
| 121 bool external_preview) { | 140 bool external_preview) { |
| 122 DCHECK(!in_print_job_); | 141 DCHECK(!in_print_job_); |
| 123 | 142 |
| 124 // NOTE: Reset |print_info_| with a copy of |sharedPrintInfo| so as to start | 143 // NOTE: Reset |print_info_| with a copy of |sharedPrintInfo| so as to start |
| 125 // with a clean slate. | 144 // with a clean slate. |
| 126 print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]); | 145 print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]); |
| 127 | 146 |
| 128 if (!target_is_pdf) { | 147 if (external_preview) { |
| 148 if (!SetPrintPreviewJob()) |
| 149 return OnError(); |
| 150 } else { |
| 151 // Don't need this for preview. |
| 129 if (!SetPrinter(UTF16ToUTF8(settings_.device_name())) || | 152 if (!SetPrinter(UTF16ToUTF8(settings_.device_name())) || |
| 130 !SetCopiesInPrintSettings(settings_.copies()) || | 153 !SetCopiesInPrintSettings(settings_.copies()) || |
| 131 !SetCollateInPrintSettings(settings_.collate()) || | 154 !SetCollateInPrintSettings(settings_.collate()) || |
| 132 !SetDuplexModeInPrintSettings(settings_.duplex_mode()) || | 155 !SetDuplexModeInPrintSettings(settings_.duplex_mode()) || |
| 133 !SetOutputColor(settings_.color())) { | 156 !SetOutputColor(settings_.color())) { |
| 134 return OnError(); | 157 return OnError(); |
| 135 } | 158 } |
| 136 } | 159 } |
| 137 | 160 |
| 138 if ((external_preview && !SetPrintPreviewJob()) || | 161 if (!UpdatePageFormatWithPaperInfo() || |
| 139 !UpdatePageFormatWithPaperInfo() || | |
| 140 !SetOrientationIsLandscape(settings_.landscape())) { | 162 !SetOrientationIsLandscape(settings_.landscape())) { |
| 141 return OnError(); | 163 return OnError(); |
| 142 } | 164 } |
| 143 | 165 |
| 144 [print_info_.get() updateFromPMPrintSettings]; | 166 [print_info_.get() updateFromPMPrintSettings]; |
| 145 | 167 |
| 146 InitPrintSettingsFromPrintInfo(); | 168 InitPrintSettingsFromPrintInfo(); |
| 147 return OK; | 169 return OK; |
| 148 } | 170 } |
| 149 | 171 |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 void PrintingContextMac::ReleaseContext() { | 500 void PrintingContextMac::ReleaseContext() { |
| 479 print_info_.reset(); | 501 print_info_.reset(); |
| 480 context_ = NULL; | 502 context_ = NULL; |
| 481 } | 503 } |
| 482 | 504 |
| 483 gfx::NativeDrawingContext PrintingContextMac::context() const { | 505 gfx::NativeDrawingContext PrintingContextMac::context() const { |
| 484 return context_; | 506 return context_; |
| 485 } | 507 } |
| 486 | 508 |
| 487 } // namespace printing | 509 } // namespace printing |
| OLD | NEW |