OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/backend/print_backend.h" | 5 #include "printing/backend/print_backend.h" |
6 | 6 |
7 #include <objidl.h> | 7 #include <objidl.h> |
8 #include <winspool.h> | 8 #include <winspool.h> |
9 | 9 |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 tmp_name = tmp_name.c_str(); | 89 tmp_name = tmp_name.c_str(); |
90 paper.name = base::WideToUTF8(tmp_name); | 90 paper.name = base::WideToUTF8(tmp_name); |
91 } | 91 } |
92 caps->papers.push_back(paper); | 92 caps->papers.push_back(paper); |
93 } | 93 } |
94 | 94 |
95 if (devmode) { | 95 if (devmode) { |
96 short default_id = 0; | 96 short default_id = 0; |
97 gfx::Size default_size; | 97 gfx::Size default_size; |
98 | 98 |
99 if ((devmode->dmFields & DM_PAPERSIZE) == DM_PAPERSIZE) | 99 if (devmode->dmFields & DM_PAPERSIZE) |
100 default_id = devmode->dmPaperSize; | 100 default_id = devmode->dmPaperSize; |
101 if ((devmode->dmFields & DM_PAPERWIDTH) == DM_PAPERWIDTH) | 101 if (devmode->dmFields & DM_PAPERWIDTH) |
102 default_size.set_width(devmode->dmPaperWidth * kToUm); | 102 default_size.set_width(devmode->dmPaperWidth * kToUm); |
103 if ((devmode->dmFields & DM_PAPERLENGTH) == DM_PAPERLENGTH) | 103 if (devmode->dmFields & DM_PAPERLENGTH) |
104 default_size.set_height(devmode->dmPaperLength * kToUm); | 104 default_size.set_height(devmode->dmPaperLength * kToUm); |
105 | 105 |
106 if (default_size.IsEmpty()) { | 106 if (default_size.IsEmpty()) { |
107 for (size_t i = 0; i < ids.size(); ++i) { | 107 for (size_t i = 0; i < ids.size(); ++i) { |
108 if (ids[i] == default_id) { | 108 if (ids[i] == default_id) { |
109 PrinterSemanticCapsAndDefaults::Paper paper; | 109 PrinterSemanticCapsAndDefaults::Paper paper; |
110 paper.size_um.SetSize(sizes[i].x * kToUm, sizes[i].y * kToUm); | 110 paper.size_um.SetSize(sizes[i].x * kToUm, sizes[i].y * kToUm); |
111 if (!names.empty()) { | 111 if (!names.empty()) { |
112 const wchar_t* name_start = names[i].chars; | 112 const wchar_t* name_start = names[i].chars; |
113 base::string16 tmp_name(name_start, kMaxPaperName); | 113 base::string16 tmp_name(name_start, kMaxPaperName); |
(...skipping 15 matching lines...) Expand all Loading... |
129 const wchar_t* port, | 129 const wchar_t* port, |
130 const DEVMODE* devmode, | 130 const DEVMODE* devmode, |
131 PrinterSemanticCapsAndDefaults* caps) { | 131 PrinterSemanticCapsAndDefaults* caps) { |
132 std::vector<POINT> dpis; | 132 std::vector<POINT> dpis; |
133 GetDeviceCapabilityArray(printer, port, DC_ENUMRESOLUTIONS, &dpis); | 133 GetDeviceCapabilityArray(printer, port, DC_ENUMRESOLUTIONS, &dpis); |
134 | 134 |
135 for (size_t i = 0; i < dpis.size() ; ++i) | 135 for (size_t i = 0; i < dpis.size() ; ++i) |
136 caps->dpis.push_back(gfx::Size(dpis[i].x, dpis[i].y)); | 136 caps->dpis.push_back(gfx::Size(dpis[i].x, dpis[i].y)); |
137 | 137 |
138 if (devmode) { | 138 if (devmode) { |
139 if ((devmode->dmFields & DM_PRINTQUALITY) == DM_PRINTQUALITY && | 139 if ((devmode->dmFields & DM_PRINTQUALITY) && devmode->dmPrintQuality > 0) { |
140 devmode->dmPrintQuality > 0) { | |
141 caps->default_dpi.SetSize(devmode->dmPrintQuality, | 140 caps->default_dpi.SetSize(devmode->dmPrintQuality, |
142 devmode->dmPrintQuality); | 141 devmode->dmPrintQuality); |
143 if ((devmode->dmFields & DM_YRESOLUTION) == DM_PRINTQUALITY) { | 142 if (devmode->dmFields & DM_YRESOLUTION) { |
144 caps->default_dpi.set_height(devmode->dmYResolution); | 143 caps->default_dpi.set_height(devmode->dmYResolution); |
145 } | 144 } |
146 } | 145 } |
147 } | 146 } |
148 } | 147 } |
149 | 148 |
150 } // namespace | 149 } // namespace |
151 | 150 |
152 class PrintBackendWin : public PrintBackend { | 151 class PrintBackendWin : public PrintBackend { |
153 public: | 152 public: |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 PrinterInfo5 info_5; | 221 PrinterInfo5 info_5; |
223 if (!info_5.Init(printer_handle)) | 222 if (!info_5.Init(printer_handle)) |
224 return false; | 223 return false; |
225 const wchar_t* name = info_5.get()->pPrinterName; | 224 const wchar_t* name = info_5.get()->pPrinterName; |
226 const wchar_t* port = info_5.get()->pPortName; | 225 const wchar_t* port = info_5.get()->pPortName; |
227 DCHECK_EQ(name, base::UTF8ToUTF16(printer_name)); | 226 DCHECK_EQ(name, base::UTF8ToUTF16(printer_name)); |
228 | 227 |
229 PrinterSemanticCapsAndDefaults caps; | 228 PrinterSemanticCapsAndDefaults caps; |
230 UserDefaultDevMode user_settings; | 229 UserDefaultDevMode user_settings; |
231 if (user_settings.Init(printer_handle)) { | 230 if (user_settings.Init(printer_handle)) { |
232 if ((user_settings.get()->dmFields & DM_COLOR) == DM_COLOR) | 231 if (user_settings.get()->dmFields & DM_COLOR) |
233 caps.color_default = (user_settings.get()->dmColor == DMCOLOR_COLOR); | 232 caps.color_default = (user_settings.get()->dmColor == DMCOLOR_COLOR); |
234 | 233 |
235 if ((user_settings.get()->dmFields & DM_DUPLEX) == DM_DUPLEX) { | 234 if (user_settings.get()->dmFields & DM_DUPLEX) { |
236 switch (user_settings.get()->dmDuplex) { | 235 switch (user_settings.get()->dmDuplex) { |
237 case DMDUP_SIMPLEX: | 236 case DMDUP_SIMPLEX: |
238 caps.duplex_default = SIMPLEX; | 237 caps.duplex_default = SIMPLEX; |
239 break; | 238 break; |
240 case DMDUP_VERTICAL: | 239 case DMDUP_VERTICAL: |
241 caps.duplex_default = LONG_EDGE; | 240 caps.duplex_default = LONG_EDGE; |
242 break; | 241 break; |
243 case DMDUP_HORIZONTAL: | 242 case DMDUP_HORIZONTAL: |
244 caps.duplex_default = SHORT_EDGE; | 243 caps.duplex_default = SHORT_EDGE; |
245 break; | 244 break; |
246 default: | 245 default: |
247 NOTREACHED(); | 246 NOTREACHED(); |
248 } | 247 } |
249 } | 248 } |
250 | 249 |
251 if ((user_settings.get()->dmFields & DM_COLLATE) == DM_COLLATE) | 250 if (user_settings.get()->dmFields & DM_COLLATE) |
252 caps.collate_default = (user_settings.get()->dmCollate == DMCOLLATE_TRUE); | 251 caps.collate_default = (user_settings.get()->dmCollate == DMCOLLATE_TRUE); |
253 } else { | 252 } else { |
254 LOG(WARNING) << "Fallback to color/simplex mode."; | 253 LOG(WARNING) << "Fallback to color/simplex mode."; |
255 caps.color_default = caps.color_changeable; | 254 caps.color_default = caps.color_changeable; |
256 caps.duplex_default = SIMPLEX; | 255 caps.duplex_default = SIMPLEX; |
257 } | 256 } |
258 | 257 |
259 // Get printer capabilities. For more info see here: | 258 // Get printer capabilities. For more info see here: |
260 // http://msdn.microsoft.com/en-us/library/windows/desktop/dd183552(v=vs.85).a
spx | 259 // http://msdn.microsoft.com/en-us/library/windows/desktop/dd183552(v=vs.85).a
spx |
261 caps.color_changeable = | 260 caps.color_changeable = |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 ScopedPrinterHandle printer_handle; | 353 ScopedPrinterHandle printer_handle; |
355 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str()); | 354 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str()); |
356 } | 355 } |
357 | 356 |
358 scoped_refptr<PrintBackend> PrintBackend::CreateInstance( | 357 scoped_refptr<PrintBackend> PrintBackend::CreateInstance( |
359 const base::DictionaryValue* print_backend_settings) { | 358 const base::DictionaryValue* print_backend_settings) { |
360 return new PrintBackendWin; | 359 return new PrintBackendWin; |
361 } | 360 } |
362 | 361 |
363 } // namespace printing | 362 } // namespace printing |
OLD | NEW |