Index: printing/backend/printing_info_win.h |
diff --git a/printing/backend/printing_info_win.h b/printing/backend/printing_info_win.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f0f3ecfc142c5cf9e12d43ed49f0359d7fb79f49 |
--- /dev/null |
+++ b/printing/backend/printing_info_win.h |
@@ -0,0 +1,91 @@ |
+// Copyright (c) 2012 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. |
+ |
+#ifndef PRINTING_BACKEND_PRINTING_INFO_WIN_H_ |
+#define PRINTING_BACKEND_PRINTING_INFO_WIN_H_ |
+ |
+#include <objidl.h> |
+#include <winspool.h> |
+ |
+#include "base/memory/scoped_ptr.h" |
+#include "printing/printing_export.h" |
+ |
+namespace printing { |
+ |
+namespace internal { |
+ |
+PRINTING_EXPORT uint8* GetDriverInfo(HANDLE printer, int level); |
+PRINTING_EXPORT uint8* GetPrinterInfo(HANDLE printer, int level); |
+ |
+// This class is designed to work with PRINTER_INFO_X structures |
+// and calls GetPrinter internally with correctly allocated buffer. |
+template <typename PrinterInfoType, int level> |
+class PrinterInfo { |
+ public: |
+ bool Init(HANDLE printer) { |
+ buffer_.reset(GetPrinterInfo(printer, level)); |
+ return buffer_; |
+ } |
+ |
+ const PrinterInfoType* get() const { |
+ return reinterpret_cast<const PrinterInfoType*>(buffer_.get()); |
+ } |
+ |
+ private: |
+ scoped_array<uint8> buffer_; |
+}; |
+ |
+// This class is designed to work with DRIVER_INFO_X structures |
+// and calls GetDriverInfo internally with correctly allocated buffer. |
+template <typename DriverInfoType, int level> |
+class DriverInfo { |
+ public: |
+ bool Init(HANDLE printer) { |
+ buffer_.reset(GetDriverInfo(printer, level)); |
+ return buffer_; |
+ } |
+ |
+ const DriverInfoType* get() const { |
+ return reinterpret_cast<const DriverInfoType*>(buffer_.get()); |
+ } |
+ |
+ private: |
+ scoped_array<uint8> buffer_; |
+}; |
+ |
+} // namespace internal |
+ |
+typedef internal::PrinterInfo<PRINTER_INFO_2, 2> PrinterInfo2; |
+typedef internal::PrinterInfo<PRINTER_INFO_5, 5> PrinterInfo5; |
+typedef internal::PrinterInfo<PRINTER_INFO_8, 8> PrinterInfo8; |
+typedef internal::PrinterInfo<PRINTER_INFO_9, 9> PrinterInfo9; |
+ |
+typedef internal::DriverInfo<DRIVER_INFO_6, 6> DriverInfo6; |
+ |
+// Retrieves DEVMODE from PRINTER_INFO_* structures. |
+// Requests in following order: |
+// 9 (user-default), |
+// 8 (admin-default), |
+// 2 (printer-default). |
+class PRINTING_EXPORT DevMode { |
gene
2012/12/11 18:03:31
This class name is confusing. It sounds like a wra
Vitaly Buka (NO REVIEWS)
2012/12/11 19:24:24
Done.
|
+ public: |
+ DevMode(); |
+ ~DevMode(); |
+ |
+ bool Init(HANDLE printer); |
+ |
+ const DEVMODE* get() const { |
+ return dev_mode_; |
+ } |
+ |
+ private: |
+ PrinterInfo2 info_2_; |
+ PrinterInfo8 info_8_; |
+ PrinterInfo9 info_9_; |
+ const DEVMODE* dev_mode_; |
+}; |
+ |
+} // namespace printing |
+ |
+#endif // PRINTING_BACKEND_PRINTING_INFO_WIN_H_ |