OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef CHROME_BROWSER_UI_METRO_DRIVER_PRINT_HANDLER_H_ | |
6 #define CHROME_BROWSER_UI_METRO_DRIVER_PRINT_HANDLER_H_ | |
7 | |
8 #include <windows.media.playto.h> | |
9 #include <stddef.h> | |
10 #include <windows.graphics.printing.h> | |
11 #include <windows.ui.core.h> | |
12 | |
13 #include "base/synchronization/lock.h" | |
14 #include "base/threading/thread.h" | |
15 #include "win8/metro_driver/print_document_source.h" | |
16 #include "win8/metro_driver/winrt_utils.h" | |
17 | |
18 namespace base { | |
19 | |
20 class Lock; | |
21 | |
22 } // namespace base | |
23 | |
24 namespace metro_driver { | |
25 | |
26 // This class handles the print aspect of the devices charm. | |
27 class PrintHandler { | |
28 public: | |
29 PrintHandler(); | |
30 ~PrintHandler(); | |
31 | |
32 HRESULT Initialize(winui::Core::ICoreWindow* window); | |
33 | |
34 // Called by the exported C functions. | |
35 static void EnablePrinting(bool printing_enabled); | |
36 static void SetPageCount(size_t page_count); | |
37 static void AddPage(size_t page_number, IStream* metafile_stream); | |
38 static void ShowPrintUI(); | |
39 | |
40 private: | |
41 // Callbacks from Metro. | |
42 HRESULT OnPrintRequested( | |
43 wingfx::Printing::IPrintManager* print_mgr, | |
44 wingfx::Printing::IPrintTaskRequestedEventArgs* event_args); | |
45 | |
46 HRESULT OnPrintTaskSourceRequest( | |
47 wingfx::Printing::IPrintTaskSourceRequestedArgs* args); | |
48 | |
49 HRESULT OnCompleted(wingfx::Printing::IPrintTask* task, | |
50 wingfx::Printing::IPrintTaskCompletedEventArgs* args); | |
51 // Utility methods. | |
52 void ClearPrintTask(); | |
53 float GetLogicalDpi(); | |
54 | |
55 // Callback from Metro and entry point called on lockable thread. | |
56 HRESULT LogicalDpiChanged(IInspectable *sender); | |
57 static void OnLogicalDpiChanged(float dpi); | |
58 | |
59 // Called on the lockable thread to set/release the doc. | |
60 static void SetPrintDocumentSource( | |
61 const mswr::ComPtr<PrintDocumentSource>& print_document_source); | |
62 static void ReleasePrintDocumentSource(); | |
63 | |
64 // Called on the lockable thread for the exported C functions. | |
65 static void OnEnablePrinting(bool printing_enabled); | |
66 static void OnSetPageCount(size_t page_count); | |
67 static void OnAddPage(size_t page_number, | |
68 mswr::ComPtr<IStream> metafile_stream); | |
69 | |
70 // Opens the prit device charm. Must be called from the metro thread. | |
71 static void OnShowPrintUI(); | |
72 | |
73 mswr::ComPtr<wingfx::Printing::IPrintTask> print_task_; | |
74 EventRegistrationToken print_requested_token_; | |
75 EventRegistrationToken print_completed_token_; | |
76 EventRegistrationToken dpi_change_token_; | |
77 | |
78 mswr::ComPtr<wingfx::Printing::IPrintManager> print_manager_; | |
79 PrintDocumentSource::DirectXContext directx_context_; | |
80 | |
81 // Hack to give access to the Print Document from the C style entry points. | |
82 // This will go away once we can pass a pointer to this interface down to | |
83 // the Chrome Browser as we send the command to print. | |
84 static mswr::ComPtr<PrintDocumentSource> current_document_source_; | |
85 | |
86 // Another hack to enable/disable printing from an exported C function. | |
87 // TODO(mad): Find a better way to do this... | |
88 static bool printing_enabled_; | |
89 | |
90 // This is also a temporary hack until we can pass down the print document | |
91 // to Chrome so it can call directly into it. We need to lock the access to | |
92 // current_document_source_. | |
93 static base::Lock* lock_; | |
94 | |
95 // This thread is used to send blocking jobs | |
96 // out of threads we don't want to block. | |
97 static base::Thread* thread_; | |
98 }; | |
99 | |
100 } // namespace metro_driver | |
101 | |
102 // Exported C functions for Chrome to call into the Metro module. | |
103 extern "C" __declspec(dllexport) | |
104 void MetroEnablePrinting(BOOL printing_enabled); | |
105 | |
106 extern "C" __declspec(dllexport) | |
107 void MetroSetPrintPageCount(size_t page_count); | |
108 | |
109 extern "C" __declspec(dllexport) | |
110 void MetroSetPrintPageContent(size_t current_page, | |
111 void* data, | |
112 size_t data_size); | |
113 | |
114 extern "C" __declspec(dllexport) | |
115 void MetroShowPrintUI(); | |
116 | |
117 #endif // CHROME_BROWSER_UI_METRO_DRIVER_PRINT_HANDLER_H_ | |
OLD | NEW |