OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "chrome/renderer/print_web_view_helper.h" | 5 #include "chrome/renderer/print_web_view_helper.h" |
6 | 6 |
7 #include "base/file_descriptor_posix.h" | 7 #include "base/file_descriptor_posix.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "chrome/common/render_messages.h" | 9 #include "chrome/common/render_messages.h" |
10 #include "printing/native_metafile.h" | 10 #include "printing/native_metafile.h" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 return; | 96 return; |
97 | 97 |
98 // Tell the browser we've finished writing the file. | 98 // Tell the browser we've finished writing the file. |
99 Send(new ViewHostMsg_TempFileForPrintingWritten(fd_in_browser)); | 99 Send(new ViewHostMsg_TempFileForPrintingWritten(fd_in_browser)); |
100 } | 100 } |
101 | 101 |
102 void PrintWebViewHelper::PrintPage(const ViewMsg_PrintPage_Params& params, | 102 void PrintWebViewHelper::PrintPage(const ViewMsg_PrintPage_Params& params, |
103 const gfx::Size& canvas_size, | 103 const gfx::Size& canvas_size, |
104 WebFrame* frame, | 104 WebFrame* frame, |
105 printing::NativeMetafile* metafile) { | 105 printing::NativeMetafile* metafile) { |
106 // Since WebKit extends the page width depending on the magical shrink | 106 cairo_t* cairo_context = |
107 // factor we make sure the canvas covers the worst case scenario | 107 metafile->StartPage(canvas_size.width(), canvas_size.height()); |
108 // (x2.0 currently). PrintContext will then set the correct clipping region. | 108 if (!cairo_context) |
109 int size_x = static_cast<int>(canvas_size.width() * params.params.max_shrink); | 109 return; |
110 int size_y = static_cast<int>(canvas_size.height() * | |
111 params.params.max_shrink); | |
112 // Calculate the dpi adjustment. | |
113 float shrink = static_cast<float>(canvas_size.width()) / | |
114 params.params.printable_size.width(); | |
115 | 110 |
116 cairo_t* cairo_context = metafile->StartPage(size_x, size_y); | 111 skia::VectorCanvas canvas(cairo_context, |
117 if (!cairo_context) { | 112 canvas_size.width(), canvas_size.height()); |
118 // TODO(myhuang): We should handle such kind of error further! | 113 frame->printPage(params.page_number, &canvas); |
119 // We already have had DLOG(ERROR) in NativeMetafile::StartPage(), | |
120 // log the error here, too? | |
121 return; | |
122 } | |
123 | |
124 skia::VectorCanvas canvas(cairo_context, size_x, size_y); | |
125 float webkit_shrink = frame->printPage(params.page_number, &canvas); | |
126 if (webkit_shrink <= 0) { | |
127 NOTREACHED() << "Printing page " << params.page_number << " failed."; | |
128 } else { | |
129 // Update the dpi adjustment with the "page shrink" calculated in webkit. | |
130 shrink /= webkit_shrink; | |
131 } | |
132 | 114 |
133 // TODO(myhuang): We should handle transformation for paper margins. | 115 // TODO(myhuang): We should handle transformation for paper margins. |
134 // TODO(myhuang): We should render the header and the footer. | 116 // TODO(myhuang): We should render the header and the footer. |
135 | 117 |
136 // Done printing. Close the device context to retrieve the compiled metafile. | 118 // Done printing. Close the device context to retrieve the compiled metafile. |
137 if (!metafile->FinishPage(shrink)) { | 119 if (!metafile->FinishPage()) |
138 NOTREACHED() << "metafile failed"; | 120 NOTREACHED() << "metafile failed"; |
139 } | |
140 } | 121 } |
OLD | NEW |