Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(609)

Unified Diff: chrome/renderer/print_web_view_helper.cc

Issue 10083059: [Print Preview] Modified PP_PrintSettings_Dev interface to support auto fit to page functionality. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698