diff options
author | hamaji@chromium.org <hamaji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-01 07:04:05 +0000 |
---|---|---|
committer | hamaji@chromium.org <hamaji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-01 07:04:05 +0000 |
commit | 40c7cfe39957248d38d8c376fbfc7d332c796741 (patch) | |
tree | 1e9cbc2bda99a4b4bc3286504dbca59a7542fb70 /chrome/renderer | |
parent | 829c9bbc87035a0e6a5606ff7654b761a2d9d0bf (diff) | |
download | chromium_src-40c7cfe39957248d38d8c376fbfc7d332c796741.zip chromium_src-40c7cfe39957248d38d8c376fbfc7d332c796741.tar.gz chromium_src-40c7cfe39957248d38d8c376fbfc7d332c796741.tar.bz2 |
Implement limited paged media support for mac.
BUG=47277
TEST=none
Review URL: http://codereview.chromium.org/2876020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51347 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/print_web_view_helper.cc | 27 | ||||
-rw-r--r-- | chrome/renderer/print_web_view_helper.h | 3 | ||||
-rw-r--r-- | chrome/renderer/print_web_view_helper_mac.mm | 34 |
3 files changed, 59 insertions, 5 deletions
diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc index d229df1..fb0ece7 100644 --- a/chrome/renderer/print_web_view_helper.cc +++ b/chrome/renderer/print_web_view_helper.cc @@ -44,12 +44,12 @@ PrepareFrameAndViewForPrint::PrepareFrameAndViewForPrint( dpi = printing::kPointsPerInch; #endif // defined(OS_MACOSX) print_canvas_size_.set_width( - printing::ConvertUnit(print_params.printable_size.width(), dpi, - print_params.desired_dpi)); + ConvertUnit(print_params.printable_size.width(), dpi, + print_params.desired_dpi)); print_canvas_size_.set_height( - printing::ConvertUnit(print_params.printable_size.height(), dpi, - print_params.desired_dpi)); + ConvertUnit(print_params.printable_size.height(), dpi, + print_params.desired_dpi)); // Layout page according to printer page size. Since WebKit shrinks the // size of the page automatically (from 125% to 200%) we trick it to @@ -131,6 +131,8 @@ void PrintWebViewHelper::Print(WebFrame* frame, bool script_initiated) { return; } + UpdatePrintableSizeInPrintParameters(frame, &default_settings); + // Continue only if the settings are valid. if (default_settings.dpi && default_settings.document_cookie) { int expected_pages_count = 0; @@ -173,6 +175,8 @@ void PrintWebViewHelper::Print(WebFrame* frame, bool script_initiated) { if (Send(msg)) { msg = NULL; + UpdatePrintableSizeInPrintParameters(frame, &print_settings.params); + // If the settings are invalid, early quit. if (print_settings.params.dpi && print_settings.params.document_cookie) { @@ -430,3 +434,18 @@ void PrintWebViewHelper::GetPageSizeAndMarginsInPoints( *margin_left_in_points = ConvertPixelsToPointDouble(margin_left_in_pixels); } + +void PrintWebViewHelper::UpdatePrintableSizeInPrintParameters( + WebFrame* frame, ViewMsg_Print_Params* params) { +#if defined(OS_MACOSX) + double content_width_in_points; + double content_height_in_points; + PrintWebViewHelper::GetPageSizeAndMarginsInPoints(frame, 0, *params, + &content_width_in_points, + &content_height_in_points, + NULL, NULL, NULL, NULL); + params->printable_size = gfx::Size( + static_cast<int>(content_width_in_points), + static_cast<int>(content_height_in_points)); +#endif +} diff --git a/chrome/renderer/print_web_view_helper.h b/chrome/renderer/print_web_view_helper.h index 4805de0..273299f 100644 --- a/chrome/renderer/print_web_view_helper.h +++ b/chrome/renderer/print_web_view_helper.h @@ -136,6 +136,9 @@ class PrintWebViewHelper : public WebKit::WebViewClient, double* margin_bottom_in_points, double* margin_left_in_points); + void UpdatePrintableSizeInPrintParameters(WebKit::WebFrame* frame, + ViewMsg_Print_Params* params); + RenderView* render_view_; WebKit::WebView* print_web_view_; scoped_ptr<ViewMsg_PrintPages_Params> print_pages_params_; diff --git a/chrome/renderer/print_web_view_helper_mac.mm b/chrome/renderer/print_web_view_helper_mac.mm index d6d91b4..b94221e 100644 --- a/chrome/renderer/print_web_view_helper_mac.mm +++ b/chrome/renderer/print_web_view_helper_mac.mm @@ -16,9 +16,13 @@ #include "printing/native_metafile.h" #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h" #include "third_party/WebKit/WebKit/chromium/public/WebCanvas.h" +#include "third_party/WebKit/WebKit/chromium/public/WebRect.h" +#include "third_party/WebKit/WebKit/chromium/public/WebSize.h" using WebKit::WebFrame; using WebKit::WebCanvas; +using WebKit::WebRect; +using WebKit::WebSize; void PrintWebViewHelper::PrintPage(const ViewMsg_PrintPage_Params& params, const gfx::Size& canvas_size, @@ -27,7 +31,24 @@ void PrintWebViewHelper::PrintPage(const ViewMsg_PrintPage_Params& params, CGContextRef context = metafile.Init(); float scale_factor = frame->getPrintPageShrink(params.page_number); - metafile.StartPage(canvas_size.width(), canvas_size.height(), scale_factor); + double content_width_in_points; + double content_height_in_points; + double margin_top_in_points; + double margin_right_in_points; + double margin_bottom_in_points; + double margin_left_in_points; + GetPageSizeAndMarginsInPoints(frame, + params.page_number, + params.params, + &content_width_in_points, + &content_height_in_points, + &margin_top_in_points, + &margin_right_in_points, + &margin_bottom_in_points, + &margin_left_in_points); + metafile.StartPage(content_width_in_points, + content_height_in_points, + scale_factor); // printPage can create autoreleased references to |canvas|. PDF contexts // don't write all their data until they are destroyed, so we need to make @@ -47,6 +68,17 @@ void PrintWebViewHelper::PrintPage(const ViewMsg_PrintPage_Params& params, page_params.actual_shrink = scale_factor; base::SharedMemory shared_buf; + page_params.page_size = gfx::Size( + static_cast<int>(content_width_in_points + + margin_left_in_points + margin_right_in_points), + static_cast<int>(content_height_in_points + + margin_top_in_points + margin_bottom_in_points)); + page_params.content_area = gfx::Rect( + static_cast<int>(margin_left_in_points), + static_cast<int>(margin_top_in_points), + static_cast<int>(content_width_in_points), + static_cast<int>(content_height_in_points)); + // Ask the browser to create the shared memory for us. uint32 buf_size = metafile.GetDataSize(); base::SharedMemoryHandle shared_mem_handle; |