Chromium Code Reviews| Index: chrome/renderer/print_web_view_helper_win.cc |
| diff --git a/chrome/renderer/print_web_view_helper_win.cc b/chrome/renderer/print_web_view_helper_win.cc |
| index b43c22f6fc85f3d9c69d55abfa9736c119cdb2f8..03492e981cc262f38d5dbc08d5690aecbecdcc4a 100644 |
| --- a/chrome/renderer/print_web_view_helper_win.cc |
| +++ b/chrome/renderer/print_web_view_helper_win.cc |
| @@ -126,24 +126,37 @@ void PrintWebViewHelper::RenderPreviewPage(int page_number) { |
| // Calculate the dpi adjustment. |
| float scale_factor = static_cast<float>(print_params.desired_dpi / |
| print_params.dpi); |
| + scoped_ptr<Metafile> draft_metafile; |
| + printing::Metafile* initial_render_metafile = |
| + print_preview_context_.metafile(); |
| + |
| + if (print_preview_context_.IsModifiable() && is_complete_metafile_sent_) { |
| + draft_metafile.reset(new printing::PreviewMetafile); |
| + initial_render_metafile = draft_metafile.get(); |
| + } |
| base::TimeTicks begin_time = base::TimeTicks::Now(); |
| printing::Metafile* render_page_result = |
| RenderPage(print_params, &scale_factor, page_number, true, |
| - print_preview_context_.frame(), |
| - print_preview_context_.metafile()); |
| - // In the preview flow, RenderPage will never return a new metafile. |
| - DCHECK_EQ(render_page_result, print_preview_context_.metafile()); |
| + print_preview_context_.frame(), initial_render_metafile); |
| + |
| + if (!draft_metafile.get()) { |
| + // In the preview flow, RenderPage will never return a new metafile. |
| + DCHECK_EQ(render_page_result, print_preview_context_.metafile()); |
|
vandebo (ex-Chrome)
2011/08/10 17:21:40
Change the second DCHECK arg to initial_render_met
kmadhusu
2011/08/10 19:01:13
Done.
|
| + } |
| print_preview_context_.RenderedPreviewPage( |
| base::TimeTicks::Now() - begin_time); |
| - scoped_ptr<printing::Metafile> page_metafile; |
| - if (print_preview_context_.IsModifiable()) { |
| - page_metafile.reset( |
| + if (draft_metafile.get()) { |
| + draft_metafile->FinishDocument(); |
| + } else if (print_preview_context_.IsModifiable() && |
| + print_preview_context_.generate_draft_pages()){ |
| + DCHECK(!draft_metafile.get()); |
| + draft_metafile.reset( |
| print_preview_context_.metafile()->GetMetafileForCurrentPage()); |
| } |
| - PreviewPageRendered(page_number, page_metafile.get()); |
| + PreviewPageRendered(page_number, draft_metafile.get()); |
| } |
| Metafile* PrintWebViewHelper::RenderPage( |
| @@ -183,8 +196,11 @@ Metafile* PrintWebViewHelper::RenderPage( |
| // can't be a stack object. |
| SkRefPtr<skia::VectorCanvas> canvas = new skia::VectorCanvas(device); |
| canvas->unref(); // SkRefPtr and new both took a reference. |
| - if (is_preview) |
| + if (is_preview) { |
| printing::MetafileSkiaWrapper::SetMetafileOnCanvas(canvas.get(), metafile); |
| + printing::MetafileSkiaWrapper::SetDraftMode(canvas.get(), |
| + is_complete_metafile_sent_); |
| + } |
| float webkit_scale_factor = frame->printPage(page_number, canvas.get()); |
| if (*scale_factor <= 0 || webkit_scale_factor <= 0) { |