summaryrefslogtreecommitdiffstats
path: root/win8/metro_driver/print_handler.h
diff options
context:
space:
mode:
authorrobertshield@chromium.org <robertshield@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-07 19:17:08 +0000
committerrobertshield@chromium.org <robertshield@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-07 19:17:08 +0000
commit5b963d0f04a1e4baf5bf9a371890bbb698520f7d (patch)
tree9c020c289fa550d28b6b67789ee199a77ef759fb /win8/metro_driver/print_handler.h
parentd13928d51c251bdcc76b961c1ad8bb9339da9917 (diff)
downloadchromium_src-5b963d0f04a1e4baf5bf9a371890bbb698520f7d.zip
chromium_src-5b963d0f04a1e4baf5bf9a371890bbb698520f7d.tar.gz
chromium_src-5b963d0f04a1e4baf5bf9a371890bbb698520f7d.tar.bz2
Integrate the Windows 8 code into the Chromium tree (take 2).
This time, also: fix invalid path in metro_driver.gyp. Also, set executable bit on check_sdk_patch.py and post_build.bat. This reverts "Revert 155429 - Integrate the Windows 8 code into the Chromium tree." Original CL: https://chromiumcodereview.appspot.com/10875008 BUG=127799 TEST=A Chromium build can run as the immersive browser on Windows 8. TBR=ben Review URL: https://chromiumcodereview.appspot.com/10912152 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@155444 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'win8/metro_driver/print_handler.h')
-rw-r--r--win8/metro_driver/print_handler.h116
1 files changed, 116 insertions, 0 deletions
diff --git a/win8/metro_driver/print_handler.h b/win8/metro_driver/print_handler.h
new file mode 100644
index 0000000..f0779cf
--- /dev/null
+++ b/win8/metro_driver/print_handler.h
@@ -0,0 +1,116 @@
+// 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 CHROME_BROWSER_UI_METRO_DRIVER_PRINT_HANDLER_H_
+#define CHROME_BROWSER_UI_METRO_DRIVER_PRINT_HANDLER_H_
+
+#include <windows.media.playto.h>
+#include <windows.graphics.printing.h>
+#include <windows.ui.core.h>
+
+#include "base/synchronization/lock.h"
+#include "base/threading/thread.h"
+#include "win8/metro_driver/print_document_source.h"
+#include "win8/metro_driver/winrt_utils.h"
+
+namespace base {
+
+class Lock;
+
+} // namespace base
+
+namespace metro_driver {
+
+// This class handles the print aspect of the devices charm.
+class PrintHandler {
+ public:
+ PrintHandler();
+ ~PrintHandler();
+
+ HRESULT Initialize(winui::Core::ICoreWindow* window);
+
+ // Called by the exported C functions.
+ static void EnablePrinting(bool printing_enabled);
+ static void SetPageCount(size_t page_count);
+ static void AddPage(size_t page_number, IStream* metafile_stream);
+ static void ShowPrintUI();
+
+ private:
+ // Callbacks from Metro.
+ HRESULT OnPrintRequested(
+ wingfx::Printing::IPrintManager* print_mgr,
+ wingfx::Printing::IPrintTaskRequestedEventArgs* event_args);
+
+ HRESULT OnPrintTaskSourceRequest(
+ wingfx::Printing::IPrintTaskSourceRequestedArgs* args);
+
+ HRESULT OnCompleted(wingfx::Printing::IPrintTask* task,
+ wingfx::Printing::IPrintTaskCompletedEventArgs* args);
+ // Utility methods.
+ void ClearPrintTask();
+ float GetLogicalDpi();
+
+ // Callback from Metro and entry point called on lockable thread.
+ HRESULT LogicalDpiChanged(IInspectable *sender);
+ static void OnLogicalDpiChanged(float dpi);
+
+ // Called on the lockable thread to set/release the doc.
+ static void SetPrintDocumentSource(
+ const mswr::ComPtr<PrintDocumentSource>& print_document_source);
+ static void ReleasePrintDocumentSource();
+
+ // Called on the lockable thread for the exported C functions.
+ static void OnEnablePrinting(bool printing_enabled);
+ static void OnSetPageCount(size_t page_count);
+ static void OnAddPage(size_t page_number,
+ mswr::ComPtr<IStream> metafile_stream);
+
+ // Opens the prit device charm. Must be called from the metro thread.
+ static void OnShowPrintUI();
+
+ mswr::ComPtr<wingfx::Printing::IPrintTask> print_task_;
+ EventRegistrationToken print_requested_token_;
+ EventRegistrationToken print_completed_token_;
+ EventRegistrationToken dpi_change_token_;
+
+ mswr::ComPtr<wingfx::Printing::IPrintManager> print_manager_;
+ PrintDocumentSource::DirectXContext directx_context_;
+
+ // Hack to give access to the Print Document from the C style entry points.
+ // This will go away once we can pass a pointer to this interface down to
+ // the Chrome Browser as we send the command to print.
+ static mswr::ComPtr<PrintDocumentSource> current_document_source_;
+
+ // Another hack to enable/disable printing from an exported C function.
+ // TODO(mad): Find a better way to do this...
+ static bool printing_enabled_;
+
+ // This is also a temporary hack until we can pass down the print document
+ // to Chrome so it can call directly into it. We need to lock the access to
+ // current_document_source_.
+ static base::Lock* lock_;
+
+ // This thread is used to send blocking jobs
+ // out of threads we don't want to block.
+ static base::Thread* thread_;
+};
+
+} // namespace metro_driver
+
+// Exported C functions for Chrome to call into the Metro module.
+extern "C" __declspec(dllexport)
+void MetroEnablePrinting(BOOL printing_enabled);
+
+extern "C" __declspec(dllexport)
+void MetroSetPrintPageCount(size_t page_count);
+
+extern "C" __declspec(dllexport)
+void MetroSetPrintPageContent(size_t current_page,
+ void* data,
+ size_t data_size);
+
+extern "C" __declspec(dllexport)
+void MetroShowPrintUI();
+
+#endif // CHROME_BROWSER_UI_METRO_DRIVER_PRINT_HANDLER_H_