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"
7 #include "base/logging.h"
8 #include "base/values.h"
9 #include "printing/metafile.h"
10 #include "printing/print_dialog_gtk_interface.h"
11 #include "printing/print_job_constants.h"
12 #include "printing/units.h"
16 // Function pointer for creating print dialogs. |callback| is only used when
17 // |show_dialog| is true.
18 printing::PrintDialogGtkInterface
* (*create_dialog_func_
)(
19 printing::PrintingContextLinux
* context
) = NULL
;
21 // Function pointer for determining paper size.
22 gfx::Size (*get_pdf_paper_size_
)(
23 printing::PrintingContextLinux
* context
) = NULL
;
30 scoped_ptr
<PrintingContext
> PrintingContext::Create(Delegate
* delegate
) {
31 return make_scoped_ptr
<PrintingContext
>(new PrintingContextLinux(delegate
));
34 PrintingContextLinux::PrintingContextLinux(Delegate
* delegate
)
35 : PrintingContext(delegate
), print_dialog_(NULL
) {
38 PrintingContextLinux::~PrintingContextLinux() {
42 print_dialog_
->ReleaseDialog();
46 void PrintingContextLinux::SetCreatePrintDialogFunction(
47 PrintDialogGtkInterface
* (*create_dialog_func
)(
48 PrintingContextLinux
* context
)) {
49 DCHECK(create_dialog_func
);
50 DCHECK(!create_dialog_func_
);
51 create_dialog_func_
= create_dialog_func
;
55 void PrintingContextLinux::SetPdfPaperSizeFunction(
56 gfx::Size (*get_pdf_paper_size
)(PrintingContextLinux
* context
)) {
57 DCHECK(get_pdf_paper_size
);
58 DCHECK(!get_pdf_paper_size_
);
59 get_pdf_paper_size_
= get_pdf_paper_size
;
62 void PrintingContextLinux::PrintDocument(const Metafile
* metafile
) {
63 DCHECK(print_dialog_
);
65 print_dialog_
->PrintDocument(metafile
, document_name_
);
68 void PrintingContextLinux::AskUserForSettings(
71 const PrintSettingsCallback
& callback
) {
73 // Can only get here if the renderer is sending bad messages.
74 // http://crbug.com/341777
80 print_dialog_
->ShowDialog(
81 delegate_
->GetParentView(), has_selection
, callback
);
84 PrintingContext::Result
PrintingContextLinux::UseDefaultSettings() {
85 DCHECK(!in_print_job_
);
89 if (!create_dialog_func_
)
93 print_dialog_
= create_dialog_func_(this);
94 print_dialog_
->AddRefToDialog();
96 print_dialog_
->UseDefaultSettings();
101 gfx::Size
PrintingContextLinux::GetPdfPaperSizeDeviceUnits() {
102 if (get_pdf_paper_size_
)
103 return get_pdf_paper_size_(this);
108 PrintingContext::Result
PrintingContextLinux::UpdatePrinterSettings(
109 bool external_preview
,
110 bool show_system_dialog
) {
111 DCHECK(!show_system_dialog
);
112 DCHECK(!in_print_job_
);
113 DCHECK(!external_preview
) << "Not implemented";
115 if (!create_dialog_func_
)
118 if (!print_dialog_
) {
119 print_dialog_
= create_dialog_func_(this);
120 print_dialog_
->AddRefToDialog();
123 if (!print_dialog_
->UpdateSettings(&settings_
))
129 PrintingContext::Result
PrintingContextLinux::InitWithSettings(
130 const PrintSettings
& settings
) {
131 DCHECK(!in_print_job_
);
133 settings_
= settings
;
138 PrintingContext::Result
PrintingContextLinux::NewDocument(
139 const base::string16
& document_name
) {
140 DCHECK(!in_print_job_
);
141 in_print_job_
= true;
143 document_name_
= document_name
;
148 PrintingContext::Result
PrintingContextLinux::NewPage() {
151 DCHECK(in_print_job_
);
153 // Intentional No-op.
158 PrintingContext::Result
PrintingContextLinux::PageDone() {
161 DCHECK(in_print_job_
);
163 // Intentional No-op.
168 PrintingContext::Result
PrintingContextLinux::DocumentDone() {
171 DCHECK(in_print_job_
);
177 void PrintingContextLinux::Cancel() {
178 abort_printing_
= true;
179 in_print_job_
= false;
182 void PrintingContextLinux::ReleaseContext() {
183 // Intentional No-op.
186 gfx::NativeDrawingContext
PrintingContextLinux::context() const {
187 // Intentional No-op.
191 } // namespace printing