| 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 |