| Index: win8/metro_driver/print_document_source.h
|
| diff --git a/win8/metro_driver/print_document_source.h b/win8/metro_driver/print_document_source.h
|
| deleted file mode 100644
|
| index 8f3d53b37a6fac14b0f95ffd427a19111021abe5..0000000000000000000000000000000000000000
|
| --- a/win8/metro_driver/print_document_source.h
|
| +++ /dev/null
|
| @@ -1,165 +0,0 @@
|
| -// 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_DOCUMENT_SOURCE_H_
|
| -#define CHROME_BROWSER_UI_METRO_DRIVER_PRINT_DOCUMENT_SOURCE_H_
|
| -
|
| -#include <documentsource.h>
|
| -#include <printpreview.h>
|
| -#include <stddef.h>
|
| -#include <stdint.h>
|
| -#include <windows.graphics.printing.h>
|
| -
|
| -#include <vector>
|
| -
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_vector.h"
|
| -#include "base/synchronization/condition_variable.h"
|
| -#include "base/synchronization/waitable_event.h"
|
| -#include "win8/metro_driver/winrt_utils.h"
|
| -
|
| -// Hack to be removed once we don't need to build with an SDK earlier than
|
| -// 8441 where the name of the interface has been changed.
|
| -// TODO(mad): remove once we don't run mixed SDK/OS anymore.
|
| -#ifndef __IPrintPreviewDxgiPackageTarget_FWD_DEFINED__
|
| -typedef IPrintPreviewDXGIPackageTarget IPrintPreviewDxgiPackageTarget;
|
| -#endif
|
| -
|
| -
|
| -namespace base {
|
| -class Lock;
|
| -}; // namespace base
|
| -
|
| -namespace metro_driver {
|
| -
|
| -// This class is given to Metro as a source for print documents.
|
| -// The methodless IPrintDocumentSource interface is used to identify it as such.
|
| -// Then, the other interfaces are used to generate preview and print documents.
|
| -// It also exposes a few methods for the print handler to control the document.
|
| -class PrintDocumentSource
|
| - : public mswr::RuntimeClass<
|
| - mswr::RuntimeClassFlags<mswr::WinRtClassicComMix>,
|
| - wingfx::Printing::IPrintDocumentSource,
|
| - IPrintDocumentPageSource,
|
| - IPrintPreviewPageCollection> {
|
| - public:
|
| - // A set of interfaces for the DirectX context that our parent owns
|
| - // and that don't need to change from document to document.
|
| - struct DirectXContext {
|
| - DirectXContext() {}
|
| - DirectXContext(ID3D11Device1* device_3d,
|
| - ID2D1Factory1* factory_2d,
|
| - ID2D1Device* device_2d,
|
| - ID2D1DeviceContext* context_2d,
|
| - IWICImagingFactory2* factory_wic)
|
| - : d3d_device(device_3d),
|
| - d2d_factory(factory_2d),
|
| - d2d_device(device_2d),
|
| - d2d_context(context_2d),
|
| - wic_factory(factory_wic) {
|
| - }
|
| - DirectXContext(const DirectXContext& other)
|
| - : d3d_device(other.d3d_device),
|
| - d2d_factory(other.d2d_factory),
|
| - d2d_device(other.d2d_device),
|
| - d2d_context(other.d2d_context),
|
| - wic_factory(other.wic_factory) {
|
| - }
|
| - mswr::ComPtr<ID3D11Device1> d3d_device;
|
| - mswr::ComPtr<ID2D1Factory1> d2d_factory;
|
| - mswr::ComPtr<ID2D1Device> d2d_device;
|
| - mswr::ComPtr<ID2D1DeviceContext> d2d_context;
|
| - mswr::ComPtr<IWICImagingFactory2> wic_factory;
|
| - };
|
| -
|
| - // Construction / Initialization.
|
| - explicit PrintDocumentSource();
|
| - HRESULT RuntimeClassInitialize(const DirectXContext& directx_context,
|
| - base::Lock* parent_lock);
|
| - // Aborts any pending asynchronous operation.
|
| - void Abort();
|
| -
|
| - // classic COM interface IPrintDocumentPageSource methods
|
| - STDMETHOD(GetPreviewPageCollection) (
|
| - IPrintDocumentPackageTarget* package_target,
|
| - IPrintPreviewPageCollection** page_collection);
|
| - STDMETHOD(MakeDocument)(IInspectable* options,
|
| - IPrintDocumentPackageTarget* package_target);
|
| -
|
| - // classic COM interface IPrintPreviewPageCollection methods
|
| - STDMETHOD(Paginate)(uint32_t page, IInspectable* options);
|
| - STDMETHOD(MakePage)(uint32_t desired_page, float width, float height);
|
| -
|
| - // If the screen DPI changes, we must be warned here.
|
| - void ResetDpi(float dpi);
|
| -
|
| - // When the page count is known, this is called and we can setup our data.
|
| - void SetPageCount(size_t page_count);
|
| -
|
| - // Every time a page is ready, this is called and we can read the data if
|
| - // we were waiting for it, or store it for later use.
|
| - void AddPage(size_t page_number, IStream* metafile_stream);
|
| -
|
| - private:
|
| - // Print the page given in the metafile stream to the given print control.
|
| - HRESULT PrintPage(ID2D1PrintControl* print_control,
|
| - ID2D1GdiMetafile* metafile_stream,
|
| - D2D1_SIZE_F pageSize);
|
| -
|
| - // Helper function to wait for the page count to be ready.
|
| - // Returns 0 when aborted.
|
| - size_t WaitAndGetPageCount();
|
| -
|
| - // Helper function to wait for a given page to be ready.
|
| - // Returns S_FALSE when aborted.
|
| - HRESULT WaitAndGetPage(size_t page_number,
|
| - ID2D1GdiMetafile** metafile_stream);
|
| -
|
| - DirectXContext directx_context_;
|
| -
|
| - // Once page data is available, it's added to this vector.
|
| - std::vector<mswr::ComPtr<IStream>> pages_;
|
| -
|
| - // When page count is set, the size of this vector is set to that number.
|
| - // Then, every time page data is added to pages_, the associated condition
|
| - // variable in this vector is signaled. This is only filled when we receive
|
| - // the page count, so we must wait on page_count_ready_ before accessing
|
| - // the content of this vector.
|
| - ScopedVector<base::ConditionVariable> pages_ready_state_;
|
| -
|
| - // This event is signaled when we receive a page count from Chrome. We should
|
| - // not receive any page data before the count, so we can check this event
|
| - // while waiting for pages too, in case we ask for page data before we got
|
| - // the count, so before we properly initialized pages_ready_state_.
|
| - base::WaitableEvent page_count_ready_;
|
| -
|
| - // The preview target interface set from within GetPreviewPageCollection
|
| - // but used from within MakePage.
|
| - mswr::ComPtr<IPrintPreviewDxgiPackageTarget> dxgi_preview_target_;
|
| -
|
| - // Our parent's lock (to make sure it is initialized and destroyed early
|
| - // enough), which we use to protect access to our data members.
|
| - base::Lock* parent_lock_;
|
| -
|
| - // The width/height requested in Paginate and used in MakePage.
|
| - // TODO(mad): Height is currently not used, and width is only used for
|
| - // scaling. We need to add a way to specify width and height when we request
|
| - // pages from Chrome.
|
| - float height_;
|
| - float width_;
|
| -
|
| - // The DPI is set by Windows and we need to give it to DirectX.
|
| - float dpi_;
|
| -
|
| - // A flag identiying that we have been aborted. Needed to properly handle
|
| - // asynchronous callbacks.
|
| - bool aborted_;
|
| -
|
| - // TODO(mad): remove once we don't run mixed SDK/OS anymore.
|
| - bool using_old_preview_interface_;
|
| -};
|
| -
|
| -} // namespace metro_driver
|
| -
|
| -#endif // CHROME_BROWSER_UI_METRO_DRIVER_PRINT_DOCUMENT_SOURCE_H_
|
|
|