1 // Copyright 2014 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.
5 #include "printing/printing_context_linux.h"
10 #include "base/logging.h"
11 #include "base/memory/ptr_util.h"
12 #include "base/values.h"
13 #include "printing/metafile.h"
14 #include "printing/print_dialog_gtk_interface.h"
15 #include "printing/print_job_constants.h"
16 #include "printing/units.h"
22 // Function pointer for creating print dialogs. |callback| is only used when
23 // |show_dialog| is true.
24 PrintDialogGtkInterface* (*create_dialog_func_)(PrintingContextLinux* context) =
27 // Function pointer for determining paper size.
28 gfx::Size (*get_pdf_paper_size_)(PrintingContextLinux* context) = nullptr;
33 std::unique_ptr<PrintingContext> PrintingContext::Create(Delegate* delegate) {
34 return base::WrapUnique(new PrintingContextLinux(delegate));
37 PrintingContextLinux::PrintingContextLinux(Delegate* delegate)
38 : PrintingContext(delegate), print_dialog_(nullptr) {}
40 PrintingContextLinux::~PrintingContextLinux() {
44 print_dialog_->ReleaseDialog();
48 void PrintingContextLinux::SetCreatePrintDialogFunction(
49 PrintDialogGtkInterface* (*create_dialog_func)(
50 PrintingContextLinux* context)) {
51 DCHECK(create_dialog_func);
52 DCHECK(!create_dialog_func_);
53 create_dialog_func_ = create_dialog_func;
57 void PrintingContextLinux::SetPdfPaperSizeFunction(
58 gfx::Size (*get_pdf_paper_size)(PrintingContextLinux* context)) {
59 DCHECK(get_pdf_paper_size);
60 DCHECK(!get_pdf_paper_size_);
61 get_pdf_paper_size_ = get_pdf_paper_size;
64 void PrintingContextLinux::PrintDocument(const MetafilePlayer& metafile) {
65 DCHECK(print_dialog_);
66 print_dialog_->PrintDocument(metafile, document_name_);
69 void PrintingContextLinux::AskUserForSettings(int max_pages,
72 PrintSettingsCallback callback) {
74 // Can only get here if the renderer is sending bad messages.
75 // http://crbug.com/341777
77 std::move(callback).Run(FAILED);
81 print_dialog_->ShowDialog(delegate_->GetParentView(), has_selection,
85 PrintingContext::Result PrintingContextLinux::UseDefaultSettings() {
86 DCHECK(!in_print_job_);
90 if (!create_dialog_func_)
94 print_dialog_ = create_dialog_func_(this);
95 print_dialog_->AddRefToDialog();
97 print_dialog_->UseDefaultSettings();
102 gfx::Size PrintingContextLinux::GetPdfPaperSizeDeviceUnits() {
103 if (get_pdf_paper_size_)
104 return get_pdf_paper_size_(this);
109 PrintingContext::Result PrintingContextLinux::UpdatePrinterSettings(
110 bool external_preview,
111 bool show_system_dialog,
113 DCHECK(!show_system_dialog);
114 DCHECK(!in_print_job_);
115 DCHECK(!external_preview) << "Not implemented";
117 if (!create_dialog_func_)
120 if (!print_dialog_) {
121 print_dialog_ = create_dialog_func_(this);
122 print_dialog_->AddRefToDialog();
125 print_dialog_->UpdateSettings(&settings_);
129 void PrintingContextLinux::InitWithSettings(const PrintSettings& settings) {
130 DCHECK(!in_print_job_);
132 settings_ = settings;
135 PrintingContext::Result PrintingContextLinux::NewDocument(
136 const base::string16& document_name) {
137 DCHECK(!in_print_job_);
138 in_print_job_ = true;
140 document_name_ = document_name;
145 PrintingContext::Result PrintingContextLinux::NewPage() {
148 DCHECK(in_print_job_);
150 // Intentional No-op.
155 PrintingContext::Result PrintingContextLinux::PageDone() {
158 DCHECK(in_print_job_);
160 // Intentional No-op.
165 PrintingContext::Result PrintingContextLinux::DocumentDone() {
168 DCHECK(in_print_job_);
174 void PrintingContextLinux::Cancel() {
175 abort_printing_ = true;
176 in_print_job_ = false;
179 void PrintingContextLinux::ReleaseContext() {
180 // Intentional No-op.
183 printing::NativeDrawingContext PrintingContextLinux::context() const {
184 // Intentional No-op.
188 } // namespace printing