| Index: printing/printing_context_win.cc
|
| diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc
|
| index 038f5d3d32c58c9add79391a7b86afe0a90d982a..9d855cd7cb013562df62073c12e0e7a72b5ee715 100644
|
| --- a/printing/printing_context_win.cc
|
| +++ b/printing/printing_context_win.cc
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "printing/printing_context.h"
|
| +#include "printing/printing_context_win.h"
|
|
|
| #include <winspool.h>
|
|
|
| @@ -19,10 +19,10 @@ using base::Time;
|
|
|
| namespace printing {
|
|
|
| -class PrintingContext::CallbackHandler : public IPrintDialogCallback,
|
| - public IObjectWithSite {
|
| +class PrintingContextWin::CallbackHandler : public IPrintDialogCallback,
|
| + public IObjectWithSite {
|
| public:
|
| - CallbackHandler(PrintingContext& owner, HWND owner_hwnd)
|
| + CallbackHandler(PrintingContextWin& owner, HWND owner_hwnd)
|
| : owner_(owner),
|
| owner_hwnd_(owner_hwnd),
|
| services_(NULL) {
|
| @@ -113,30 +113,33 @@ class PrintingContext::CallbackHandler : public IPrintDialogCallback,
|
| }
|
|
|
| private:
|
| - PrintingContext& owner_;
|
| + PrintingContextWin& owner_;
|
| HWND owner_hwnd_;
|
| IPrintDialogServices* services_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(CallbackHandler);
|
| };
|
|
|
| -PrintingContext::PrintingContext()
|
| - : context_(NULL),
|
| +// static
|
| +PrintingContext* PrintingContext::Create() {
|
| + return static_cast<PrintingContext*>(new PrintingContextWin);
|
| +}
|
| +
|
| +PrintingContextWin::PrintingContextWin()
|
| + : PrintingContext(),
|
| + context_(NULL),
|
| dialog_box_(NULL),
|
| - dialog_box_dismissed_(false),
|
| - in_print_job_(false),
|
| - abort_printing_(false),
|
| print_dialog_func_(&PrintDlgEx) {
|
| }
|
|
|
| -PrintingContext::~PrintingContext() {
|
| - ResetSettings();
|
| +PrintingContextWin::~PrintingContextWin() {
|
| + ReleaseContext();
|
| }
|
|
|
| -void PrintingContext::AskUserForSettings(HWND view,
|
| - int max_pages,
|
| - bool has_selection,
|
| - PrintSettingsCallback* callback) {
|
| +void PrintingContextWin::AskUserForSettings(HWND view,
|
| + int max_pages,
|
| + bool has_selection,
|
| + PrintSettingsCallback* callback) {
|
| DCHECK(!in_print_job_);
|
| dialog_box_dismissed_ = false;
|
|
|
| @@ -194,7 +197,7 @@ void PrintingContext::AskUserForSettings(HWND view,
|
| callback->Run(ParseDialogResultEx(dialog_options));
|
| }
|
|
|
| -PrintingContext::Result PrintingContext::UseDefaultSettings() {
|
| +PrintingContext::Result PrintingContextWin::UseDefaultSettings() {
|
| DCHECK(!in_print_job_);
|
|
|
| PRINTDLG dialog_options = { sizeof(PRINTDLG) };
|
| @@ -206,7 +209,7 @@ PrintingContext::Result PrintingContext::UseDefaultSettings() {
|
| return ParseDialogResult(dialog_options);
|
| }
|
|
|
| -PrintingContext::Result PrintingContext::InitWithSettings(
|
| +PrintingContext::Result PrintingContextWin::InitWithSettings(
|
| const PrintSettings& settings) {
|
| DCHECK(!in_print_job_);
|
| settings_ = settings;
|
| @@ -230,16 +233,7 @@ PrintingContext::Result PrintingContext::InitWithSettings(
|
| return status;
|
| }
|
|
|
| -void PrintingContext::ResetSettings() {
|
| - if (context_ != NULL) {
|
| - DeleteDC(context_);
|
| - context_ = NULL;
|
| - }
|
| - settings_.Clear();
|
| - in_print_job_ = false;
|
| -}
|
| -
|
| -PrintingContext::Result PrintingContext::NewDocument(
|
| +PrintingContext::Result PrintingContextWin::NewDocument(
|
| const string16& document_name) {
|
| DCHECK(!in_print_job_);
|
| if (!context_)
|
| @@ -289,7 +283,7 @@ PrintingContext::Result PrintingContext::NewDocument(
|
| return OK;
|
| }
|
|
|
| -PrintingContext::Result PrintingContext::NewPage() {
|
| +PrintingContext::Result PrintingContextWin::NewPage() {
|
| if (abort_printing_)
|
| return CANCEL;
|
|
|
| @@ -303,7 +297,7 @@ PrintingContext::Result PrintingContext::NewPage() {
|
| return OK;
|
| }
|
|
|
| -PrintingContext::Result PrintingContext::PageDone() {
|
| +PrintingContext::Result PrintingContextWin::PageDone() {
|
| if (abort_printing_)
|
| return CANCEL;
|
| DCHECK(in_print_job_);
|
| @@ -313,7 +307,7 @@ PrintingContext::Result PrintingContext::PageDone() {
|
| return OK;
|
| }
|
|
|
| -PrintingContext::Result PrintingContext::DocumentDone() {
|
| +PrintingContext::Result PrintingContextWin::DocumentDone() {
|
| if (abort_printing_)
|
| return CANCEL;
|
| DCHECK(in_print_job_);
|
| @@ -327,7 +321,7 @@ PrintingContext::Result PrintingContext::DocumentDone() {
|
| return OK;
|
| }
|
|
|
| -void PrintingContext::Cancel() {
|
| +void PrintingContextWin::Cancel() {
|
| abort_printing_ = true;
|
| in_print_job_ = false;
|
| if (context_)
|
| @@ -335,21 +329,26 @@ void PrintingContext::Cancel() {
|
| DismissDialog();
|
| }
|
|
|
| -void PrintingContext::DismissDialog() {
|
| +void PrintingContextWin::DismissDialog() {
|
| if (dialog_box_) {
|
| DestroyWindow(dialog_box_);
|
| dialog_box_dismissed_ = true;
|
| }
|
| }
|
|
|
| -PrintingContext::Result PrintingContext::OnError() {
|
| - // This will close context_ and clear settings_.
|
| - ResetSettings();
|
| - return abort_printing_ ? CANCEL : FAILED;
|
| +void PrintingContextWin::ReleaseContext() {
|
| + if (context_) {
|
| + DeleteDC(context_);
|
| + context_ = NULL;
|
| + }
|
| +}
|
| +
|
| +gfx::NativeDrawingContext PrintingContextWin::context() const {
|
| + return context_;
|
| }
|
|
|
| // static
|
| -BOOL PrintingContext::AbortProc(HDC hdc, int nCode) {
|
| +BOOL PrintingContextWin::AbortProc(HDC hdc, int nCode) {
|
| if (nCode) {
|
| // TODO(maruel): Need a way to find the right instance to set. Should
|
| // leverage PrintJobManager here?
|
| @@ -358,11 +357,11 @@ BOOL PrintingContext::AbortProc(HDC hdc, int nCode) {
|
| return true;
|
| }
|
|
|
| -bool PrintingContext::InitializeSettings(const DEVMODE& dev_mode,
|
| - const std::wstring& new_device_name,
|
| - const PRINTPAGERANGE* ranges,
|
| - int number_ranges,
|
| - bool selection_only) {
|
| +bool PrintingContextWin::InitializeSettings(const DEVMODE& dev_mode,
|
| + const std::wstring& new_device_name,
|
| + const PRINTPAGERANGE* ranges,
|
| + int number_ranges,
|
| + bool selection_only) {
|
| skia::PlatformDevice::InitializeDC(context_);
|
| DCHECK(GetDeviceCaps(context_, CLIPCAPS));
|
| DCHECK(GetDeviceCaps(context_, RASTERCAPS) & RC_STRETCHDIB);
|
| @@ -402,8 +401,8 @@ bool PrintingContext::InitializeSettings(const DEVMODE& dev_mode,
|
| return true;
|
| }
|
|
|
| -bool PrintingContext::GetPrinterSettings(HANDLE printer,
|
| - const std::wstring& device_name) {
|
| +bool PrintingContextWin::GetPrinterSettings(HANDLE printer,
|
| + const std::wstring& device_name) {
|
| DCHECK(!in_print_job_);
|
| scoped_array<uint8> buffer;
|
|
|
| @@ -456,15 +455,15 @@ bool PrintingContext::GetPrinterSettings(HANDLE printer,
|
| }
|
|
|
| // static
|
| -bool PrintingContext::AllocateContext(const std::wstring& printer_name,
|
| - const DEVMODE* dev_mode,
|
| - gfx::NativeDrawingContext* context) {
|
| +bool PrintingContextWin::AllocateContext(const std::wstring& printer_name,
|
| + const DEVMODE* dev_mode,
|
| + gfx::NativeDrawingContext* context) {
|
| *context = CreateDC(L"WINSPOOL", printer_name.c_str(), NULL, dev_mode);
|
| DCHECK(*context);
|
| return *context != NULL;
|
| }
|
|
|
| -PrintingContext::Result PrintingContext::ParseDialogResultEx(
|
| +PrintingContext::Result PrintingContextWin::ParseDialogResultEx(
|
| const PRINTDLGEX& dialog_options) {
|
| // If the user clicked OK or Apply then Cancel, but not only Cancel.
|
| if (dialog_options.dwResultAction != PD_RESULT_CANCEL) {
|
| @@ -543,7 +542,7 @@ PrintingContext::Result PrintingContext::ParseDialogResultEx(
|
| }
|
| }
|
|
|
| -PrintingContext::Result PrintingContext::ParseDialogResult(
|
| +PrintingContext::Result PrintingContextWin::ParseDialogResult(
|
| const PRINTDLG& dialog_options) {
|
| // If the user clicked OK or Apply then Cancel, but not only Cancel.
|
| // Start fresh.
|
| @@ -594,8 +593,8 @@ PrintingContext::Result PrintingContext::ParseDialogResult(
|
| }
|
|
|
| // static
|
| -void PrintingContext::GetPrinterHelper(HANDLE printer, int level,
|
| - scoped_array<uint8>* buffer) {
|
| +void PrintingContextWin::GetPrinterHelper(HANDLE printer, int level,
|
| + scoped_array<uint8>* buffer) {
|
| DWORD buf_size = 0;
|
| GetPrinter(printer, level, NULL, 0, &buf_size);
|
| if (buf_size) {
|
|
|