Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "printing/printing_context_win.h" | 5 #include "printing/printing_context_win.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "printing/backend/print_backend.h" | 11 #include "printing/backend/print_backend.h" |
| 12 #include "printing/backend/win_helper.h" | 12 #include "printing/backend/win_helper.h" |
| 13 #include "printing/print_settings_initializer_win.h" | 13 #include "printing/print_settings_initializer_win.h" |
| 14 #include "printing/printed_document.h" | 14 #include "printing/printed_document.h" |
| 15 #include "printing/printing_context_system_dialog_win.h" | |
| 15 #include "printing/printing_utils.h" | 16 #include "printing/printing_utils.h" |
| 16 #include "printing/units.h" | 17 #include "printing/units.h" |
| 17 #include "skia/ext/platform_device.h" | 18 #include "skia/ext/platform_device.h" |
| 18 | 19 |
| 19 #if defined(USE_AURA) | 20 #if defined(USE_AURA) |
| 20 #include "ui/aura/remote_window_tree_host_win.h" | 21 #include "ui/aura/remote_window_tree_host_win.h" |
| 21 #include "ui/aura/window.h" | 22 #include "ui/aura/window.h" |
| 22 #endif | 23 #endif |
| 23 | 24 |
| 24 namespace { | |
| 25 | |
| 26 HWND GetRootWindow(gfx::NativeView view) { | |
| 27 HWND window = NULL; | |
| 28 #if defined(USE_AURA) | |
| 29 if (view) | |
| 30 window = view->GetHost()->GetAcceleratedWidget(); | |
| 31 #else | |
| 32 if (view && IsWindow(view)) { | |
| 33 window = GetAncestor(view, GA_ROOTOWNER); | |
| 34 } | |
| 35 #endif | |
| 36 if (!window) { | |
| 37 // TODO(maruel): bug 1214347 Get the right browser window instead. | |
| 38 return GetDesktopWindow(); | |
| 39 } | |
| 40 return window; | |
| 41 } | |
| 42 | |
| 43 } // anonymous namespace | |
| 44 | |
| 45 namespace printing { | 25 namespace printing { |
| 46 | 26 |
| 47 // static | 27 // static |
| 48 scoped_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) { | 28 scoped_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) { |
| 29 #if defined(DISABLE_BASIC_PRINTING) | |
| 49 return make_scoped_ptr<PrintingContext>(new PrintingContextWin(delegate)); | 30 return make_scoped_ptr<PrintingContext>(new PrintingContextWin(delegate)); |
| 31 #else // DISABLE_BASIC_PRINTING | |
| 32 return make_scoped_ptr<PrintingContext>( | |
| 33 new PrintingContextSytemDialogWin(delegate)); | |
| 34 #endif // DISABLE_BASIC_PRINTING | |
| 50 } | 35 } |
| 51 | 36 |
| 52 PrintingContextWin::PrintingContextWin(Delegate* delegate) | 37 PrintingContextWin::PrintingContextWin(Delegate* delegate) |
| 53 : PrintingContext(delegate), context_(NULL) { | 38 : PrintingContext(delegate), context_(NULL) { |
| 54 } | 39 } |
| 55 | 40 |
| 56 PrintingContextWin::~PrintingContextWin() { | 41 PrintingContextWin::~PrintingContextWin() { |
| 57 ReleaseContext(); | 42 ReleaseContext(); |
| 58 } | 43 } |
| 59 | 44 |
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 357 skia::InitializeDC(context_); | 342 skia::InitializeDC(context_); |
| 358 | 343 |
| 359 DCHECK(!in_print_job_); | 344 DCHECK(!in_print_job_); |
| 360 settings_.set_device_name(device_name); | 345 settings_.set_device_name(device_name); |
| 361 PrintSettingsInitializerWin::InitPrintSettings( | 346 PrintSettingsInitializerWin::InitPrintSettings( |
| 362 context_, *dev_mode, &settings_); | 347 context_, *dev_mode, &settings_); |
| 363 | 348 |
| 364 return OK; | 349 return OK; |
| 365 } | 350 } |
| 366 | 351 |
| 352 HWND PrintingContextWin::GetRootWindow(gfx::NativeView view) { | |
| 353 HWND window = NULL; | |
| 354 #if defined(USE_AURA) | |
| 355 if (view) | |
| 356 window = view->GetHost()->GetAcceleratedWidget(); | |
| 357 #else | |
| 358 if (view && IsWindow(view)) { | |
| 359 window = GetAncestor(view, GA_ROOTOWNER); | |
| 360 } | |
| 361 #endif | |
| 362 if (!window) { | |
| 363 // TODO(maruel): bug 1214347 Get the right browser window instead. | |
|
Noam Samuel
2014/09/09 18:49:54
nit: crbug url?
Vitaly Buka (NO REVIEWS)
2014/09/09 19:14:48
Done.
| |
| 364 return GetDesktopWindow(); | |
| 365 } | |
| 366 return window; | |
| 367 } | |
| 368 | |
| 367 scoped_ptr<DEVMODE, base::FreeDeleter> PrintingContextWin::ShowPrintDialog( | 369 scoped_ptr<DEVMODE, base::FreeDeleter> PrintingContextWin::ShowPrintDialog( |
| 368 HANDLE printer, | 370 HANDLE printer, |
| 369 gfx::NativeView parent_view, | 371 gfx::NativeView parent_view, |
| 370 DEVMODE* dev_mode) { | 372 DEVMODE* dev_mode) { |
| 371 // Note that this cannot use ui::BaseShellDialog as the print dialog is | 373 // Note that this cannot use ui::BaseShellDialog as the print dialog is |
| 372 // system modal: opening it from a background thread can cause Windows to | 374 // system modal: opening it from a background thread can cause Windows to |
| 373 // get the wrong Z-order which will make the print dialog appear behind the | 375 // get the wrong Z-order which will make the print dialog appear behind the |
| 374 // browser frame (but still being modal) so neither the browser frame nor | 376 // browser frame (but still being modal) so neither the browser frame nor |
| 375 // the print dialog will get any input. See http://crbug.com/342697 | 377 // the print dialog will get any input. See http://crbug.com/342697 |
| 376 // http://crbug.com/180997 for details. | 378 // http://crbug.com/180997 for details. |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 387 | 389 |
| 388 if (canceled) { | 390 if (canceled) { |
| 389 result.reset(); | 391 result.reset(); |
| 390 abort_printing_ = true; | 392 abort_printing_ = true; |
| 391 } | 393 } |
| 392 | 394 |
| 393 return result.Pass(); | 395 return result.Pass(); |
| 394 } | 396 } |
| 395 | 397 |
| 396 } // namespace printing | 398 } // namespace printing |
| OLD | NEW |