| 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" |
| 11 #include "base/numerics/safe_conversions.h" | 11 #include "base/numerics/safe_conversions.h" |
| 12 #include "base/strings/string_number_conversions.h" |
| 12 #include "base/strings/string_piece.h" | 13 #include "base/strings/string_piece.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
| 14 #include "base/win/scoped_bstr.h" | 15 #include "base/win/scoped_bstr.h" |
| 15 #include "base/win/scoped_comptr.h" | 16 #include "base/win/scoped_comptr.h" |
| 16 #include "base/win/scoped_hglobal.h" | 17 #include "base/win/scoped_hglobal.h" |
| 17 #include "printing/backend/print_backend_consts.h" | 18 #include "printing/backend/print_backend_consts.h" |
| 18 #include "printing/backend/printing_info_win.h" | 19 #include "printing/backend/printing_info_win.h" |
| 19 #include "printing/backend/win_helper.h" | 20 #include "printing/backend/win_helper.h" |
| 20 | 21 |
| 21 namespace printing { | 22 namespace printing { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 for (size_t i = 0; i < sizes.size(); ++i) { | 89 for (size_t i = 0; i < sizes.size(); ++i) { |
| 89 PrinterSemanticCapsAndDefaults::Paper paper; | 90 PrinterSemanticCapsAndDefaults::Paper paper; |
| 90 paper.size_um.SetSize(sizes[i].x * kToUm, sizes[i].y * kToUm); | 91 paper.size_um.SetSize(sizes[i].x * kToUm, sizes[i].y * kToUm); |
| 91 if (!names.empty()) { | 92 if (!names.empty()) { |
| 92 const wchar_t* name_start = names[i].chars; | 93 const wchar_t* name_start = names[i].chars; |
| 93 base::string16 tmp_name(name_start, kMaxPaperName); | 94 base::string16 tmp_name(name_start, kMaxPaperName); |
| 94 // Trim trailing zeros. | 95 // Trim trailing zeros. |
| 95 tmp_name = tmp_name.c_str(); | 96 tmp_name = tmp_name.c_str(); |
| 96 paper.display_name = base::WideToUTF8(tmp_name); | 97 paper.display_name = base::WideToUTF8(tmp_name); |
| 97 } | 98 } |
| 99 if (!ids.empty()) |
| 100 paper.vendor_id = base::UintToString(ids[i]); |
| 98 caps->papers.push_back(paper); | 101 caps->papers.push_back(paper); |
| 99 } | 102 } |
| 100 | 103 |
| 101 if (devmode) { | 104 if (devmode) { |
| 102 short default_id = 0; | 105 // Copy paper with the same ID as default paper. |
| 106 if (devmode->dmFields & DM_PAPERSIZE) { |
| 107 for (size_t i = 0; i < ids.size(); ++i) { |
| 108 if (ids[i] == devmode->dmPaperSize) { |
| 109 DCHECK_EQ(ids.size(), caps->papers.size()); |
| 110 caps->default_paper = caps->papers[i]; |
| 111 break; |
| 112 } |
| 113 } |
| 114 } |
| 115 |
| 103 gfx::Size default_size; | 116 gfx::Size default_size; |
| 104 | |
| 105 if (devmode->dmFields & DM_PAPERSIZE) | |
| 106 default_id = devmode->dmPaperSize; | |
| 107 if (devmode->dmFields & DM_PAPERWIDTH) | 117 if (devmode->dmFields & DM_PAPERWIDTH) |
| 108 default_size.set_width(devmode->dmPaperWidth * kToUm); | 118 default_size.set_width(devmode->dmPaperWidth * kToUm); |
| 109 if (devmode->dmFields & DM_PAPERLENGTH) | 119 if (devmode->dmFields & DM_PAPERLENGTH) |
| 110 default_size.set_height(devmode->dmPaperLength * kToUm); | 120 default_size.set_height(devmode->dmPaperLength * kToUm); |
| 111 | 121 |
| 112 if (default_size.IsEmpty()) { | 122 if (!default_size.IsEmpty()) { |
| 113 for (size_t i = 0; i < ids.size(); ++i) { | 123 // Reset default paper if |dmPaperWidth| or |dmPaperLength| does not |
| 114 if (ids[i] == default_id) { | 124 // match default paper set by. |
| 115 PrinterSemanticCapsAndDefaults::Paper paper; | 125 if (default_size != caps->default_paper.size_um) |
| 116 paper.size_um.SetSize(sizes[i].x * kToUm, sizes[i].y * kToUm); | 126 caps->default_paper = PrinterSemanticCapsAndDefaults::Paper(); |
| 117 if (!names.empty()) { | |
| 118 const wchar_t* name_start = names[i].chars; | |
| 119 base::string16 tmp_name(name_start, kMaxPaperName); | |
| 120 // Trim trailing zeros. | |
| 121 tmp_name = tmp_name.c_str(); | |
| 122 paper.display_name = base::WideToUTF8(tmp_name); | |
| 123 } | |
| 124 caps->default_paper = paper; | |
| 125 break; | |
| 126 } | |
| 127 } | |
| 128 } else { | |
| 129 caps->default_paper.size_um = default_size; | 127 caps->default_paper.size_um = default_size; |
| 130 } | 128 } |
| 131 } | 129 } |
| 132 } | 130 } |
| 133 | 131 |
| 134 void LoadDpi(const wchar_t* printer, | 132 void LoadDpi(const wchar_t* printer, |
| 135 const wchar_t* port, | 133 const wchar_t* port, |
| 136 const DEVMODE* devmode, | 134 const DEVMODE* devmode, |
| 137 PrinterSemanticCapsAndDefaults* caps) { | 135 PrinterSemanticCapsAndDefaults* caps) { |
| 138 std::vector<POINT> dpis; | 136 std::vector<POINT> dpis; |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 ScopedPrinterHandle printer_handle; | 361 ScopedPrinterHandle printer_handle; |
| 364 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str()); | 362 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str()); |
| 365 } | 363 } |
| 366 | 364 |
| 367 scoped_refptr<PrintBackend> PrintBackend::CreateInstance( | 365 scoped_refptr<PrintBackend> PrintBackend::CreateInstance( |
| 368 const base::DictionaryValue* print_backend_settings) { | 366 const base::DictionaryValue* print_backend_settings) { |
| 369 return new PrintBackendWin; | 367 return new PrintBackendWin; |
| 370 } | 368 } |
| 371 | 369 |
| 372 } // namespace printing | 370 } // namespace printing |
| OLD | NEW |