Chromium Code Reviews| Index: chrome/renderer/print_web_view_helper.cc |
| diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc |
| index ae6fc69fdcbb0688d31e2932dcd353db78d26d32..319c7cc409cf7c14b2ed1d9d43227d886b7d5ceb 100644 |
| --- a/chrome/renderer/print_web_view_helper.cc |
| +++ b/chrome/renderer/print_web_view_helper.cc |
| @@ -134,6 +134,8 @@ bool PrintMsg_Print_Params_IsEqual( |
| oldParams.params.date == newParams.params.date && |
| oldParams.params.title == newParams.params.title && |
| oldParams.params.url == newParams.params.url && |
| + oldParams.params.fit_pdf_page_to_paper_size == |
| + newParams.params.fit_pdf_page_to_paper_size && |
| std::equal(oldParams.pages.begin(), oldParams.pages.end(), |
| newParams.pages.begin()); |
| } |
| @@ -296,14 +298,39 @@ void EnsureOrientationMatches(const PrintMsg_Print_Params& css_params, |
| page_params->printable_area.width())); |
| } |
| -void CalculatePrintCanvasSize(const PrintMsg_Print_Params& print_params, |
| - gfx::Size* result) { |
| +void ComputePrintParamsInDesiredDpi(const PrintMsg_Print_Params& print_params, |
| + bool print_for_preview, |
| + gfx::Size* content_size, |
| + gfx::Rect* printable_area, |
| + gfx::Size* paper_size, |
| + bool* fit_pdf_page_to_paper_size) { |
| int dpi = GetDPI(&print_params); |
| - result->set_width(ConvertUnit(print_params.content_size.width(), dpi, |
| - print_params.desired_dpi)); |
| + content_size->set_width(ConvertUnit(print_params.content_size.width(), dpi, |
| + print_params.desired_dpi)); |
| + |
| + content_size->set_height(ConvertUnit(print_params.content_size.height(), dpi, |
| + print_params.desired_dpi)); |
| + |
| + printable_area->SetRect(ConvertUnit(print_params.printable_area.x(), dpi, |
| + print_params.desired_dpi), |
| + ConvertUnit(print_params.printable_area.y(), dpi, |
| + print_params.desired_dpi), |
| + ConvertUnit(print_params.printable_area.width(), dpi, |
| + print_params.desired_dpi), |
| + ConvertUnit(print_params.printable_area.height(), dpi, |
| + print_params.desired_dpi)); |
| + if (print_params.print_to_pdf || print_for_preview) { |
| + // Don't fit to page when we save to pdf or when we print for preview. |
|
vandebo (ex-Chrome)
2012/04/19 18:45:31
This is a bit weird - as we talked about, using an
kmadhusu
2012/04/20 22:29:57
Done.
|
| + // Therefore, set the paper size to zero. |
| + paper_size->SetSize(0, 0); |
| + } else { |
| + paper_size->SetSize(ConvertUnit(print_params.page_size.width(), dpi, |
| + print_params.desired_dpi), |
| + ConvertUnit(print_params.page_size.height(), dpi, |
| + print_params.desired_dpi)); |
| + } |
| - result->set_height(ConvertUnit(print_params.content_size.height(), dpi, |
| - print_params.desired_dpi)); |
| + *fit_pdf_page_to_paper_size = print_params.fit_pdf_page_to_paper_size; |
| } |
| bool PrintingNodeOrPdfFrame(const WebFrame* frame, const WebNode& node) { |
| @@ -592,22 +619,31 @@ void PrintWebViewHelper::PrintHeaderAndFooter( |
| PrepareFrameAndViewForPrint::PrepareFrameAndViewForPrint( |
| const PrintMsg_Print_Params& print_params, |
| WebFrame* frame, |
| - const WebNode& node) |
| + const WebNode& node, |
| + bool print_for_preview) |
|
vandebo (ex-Chrome)
2012/04/19 18:45:31
The frame and view doesn't care if we're printing
kmadhusu
2012/04/20 22:29:57
Fixed. Constructor now takes a print scaling optio
|
| : frame_(frame), |
| node_to_print_(node), |
| web_view_(frame->view()), |
| dpi_(static_cast<int>(print_params.dpi)), |
| expected_pages_count_(0), |
| use_browser_overlays_(true), |
| + fit_pdf_page_to_paper_size_(false), |
| + print_for_preview_(print_for_preview), |
| finished_(false) { |
| gfx::Size canvas_size; |
| - CalculatePrintCanvasSize(print_params, &canvas_size); |
| + gfx::Rect printable_area; |
| + gfx::Size paper_size; |
| + bool fit_pdf_page_to_paper_size; |
| + ComputePrintParamsInDesiredDpi(print_params, print_for_preview_, &canvas_size, |
| + &printable_area, &paper_size, |
| + &fit_pdf_page_to_paper_size); |
| if (WebFrame* web_frame = web_view_->mainFrame()) |
| prev_scroll_offset_ = web_frame->scrollOffset(); |
| prev_view_size_ = web_view_->size(); |
| - StartPrinting(canvas_size); |
| + StartPrinting(canvas_size, printable_area, paper_size, |
| + fit_pdf_page_to_paper_size); |
| } |
| PrepareFrameAndViewForPrint::~PrepareFrameAndViewForPrint() { |
| @@ -618,18 +654,34 @@ void PrepareFrameAndViewForPrint::UpdatePrintParams( |
| const PrintMsg_Print_Params& print_params) { |
| DCHECK(!finished_); |
| gfx::Size canvas_size; |
| - CalculatePrintCanvasSize(print_params, &canvas_size); |
| - if (canvas_size == print_canvas_size_) |
| + gfx::Rect printable_area; |
| + gfx::Size paper_size; |
| + bool fit_pdf_page_to_paper_size; |
| + ComputePrintParamsInDesiredDpi(print_params, print_for_preview_, &canvas_size, |
| + &printable_area, &paper_size, |
| + &fit_pdf_page_to_paper_size); |
| + if (canvas_size == print_canvas_size_ && |
| + printable_area == printable_area_ && |
| + paper_size == paper_size_ && |
| + fit_pdf_page_to_paper_size == fit_pdf_page_to_paper_size_) { |
| return; |
| + } |
| frame_->printEnd(); |
| dpi_ = static_cast<int>(print_params.dpi); |
| - StartPrinting(canvas_size); |
| + StartPrinting(canvas_size, printable_area, paper_size, |
| + fit_pdf_page_to_paper_size); |
| } |
| void PrepareFrameAndViewForPrint::StartPrinting( |
| - const gfx::Size& print_canvas_size) { |
| + const gfx::Size& print_canvas_size, |
| + const gfx::Rect& printable_area, |
| + const gfx::Size& paper_size, |
| + bool fit_pdf_page_to_paper_size) { |
| print_canvas_size_ = print_canvas_size; |
| + printable_area_ = printable_area; |
| + paper_size_ = paper_size; |
| + fit_pdf_page_to_paper_size_ = fit_pdf_page_to_paper_size; |
| // Layout page according to printer page size. Since WebKit shrinks the |
| // size of the page automatically (from 125% to 200%) we trick it to |
| @@ -642,8 +694,12 @@ void PrepareFrameAndViewForPrint::StartPrinting( |
| web_view_->resize(print_layout_size); |
| - expected_pages_count_ = frame_->printBegin(print_canvas_size_, node_to_print_, |
| - dpi_, &use_browser_overlays_); |
| + expected_pages_count_ = frame_->printBegin(print_canvas_size_, |
| + printable_area_, |
| + paper_size_, |
| + node_to_print_, dpi_, |
|
vandebo (ex-Chrome)
2012/04/19 18:45:31
nit: you might as well put dpi on its own line.
kmadhusu
2012/04/20 22:29:57
Done.
|
| + fit_pdf_page_to_paper_size_, |
| + &use_browser_overlays_); |
| } |
| void PrepareFrameAndViewForPrint::FinishPrinting() { |
| @@ -1163,7 +1219,8 @@ bool PrintWebViewHelper::CopyAndPrint(WebKit::WebFrame* web_frame) { |
| bool PrintWebViewHelper::PrintPages(WebFrame* frame, const WebNode& node) { |
| const PrintMsg_PrintPages_Params& params = *print_pages_params_; |
| const PrintMsg_Print_Params& print_params = params.params; |
| - PrepareFrameAndViewForPrint prep_frame_view(print_params, frame, node); |
| + PrepareFrameAndViewForPrint prep_frame_view(print_params, frame, node, |
| + print_for_preview_); |
| UpdateFrameAndViewFromCssPageLayout(frame, node, &prep_frame_view, |
| print_params, ignore_css_margins_, |
| fit_to_page_); |
| @@ -1272,8 +1329,8 @@ bool PrintWebViewHelper::InitPrintSettingsAndPrepareFrame( |
| } |
| DCHECK(!prepare->get()); |
| - prepare->reset(new PrepareFrameAndViewForPrint(print_pages_params_->params, |
| - frame, node)); |
| + prepare->reset(new PrepareFrameAndViewForPrint( |
| + print_pages_params_->params, frame, node, print_for_preview_)); |
|
vandebo (ex-Chrome)
2012/04/19 18:45:31
style: we only wrap if an argument won't fit.
kmadhusu
2012/04/20 22:29:57
Done.
|
| UpdateFrameAndViewFromCssPageLayout(frame, node, prepare->get(), |
| print_pages_params_->params, |
| ignore_css_margins_, fit_to_page_); |
| @@ -1647,7 +1704,7 @@ bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument( |
| // Need to make sure old object gets destroyed first. |
| prep_frame_view_.reset(new PrepareFrameAndViewForPrint(*print_params, frame(), |
| - node())); |
| + node(), false)); |
| UpdateFrameAndViewFromCssPageLayout(frame_, node_, prep_frame_view_.get(), |
| *print_params, ignore_css_margins, |
| fit_to_page); |