summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorhamaji@chromium.org <hamaji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-01 07:04:05 +0000
committerhamaji@chromium.org <hamaji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-01 07:04:05 +0000
commit40c7cfe39957248d38d8c376fbfc7d332c796741 (patch)
tree1e9cbc2bda99a4b4bc3286504dbca59a7542fb70 /chrome/renderer
parent829c9bbc87035a0e6a5606ff7654b761a2d9d0bf (diff)
downloadchromium_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.cc27
-rw-r--r--chrome/renderer/print_web_view_helper.h3
-rw-r--r--chrome/renderer/print_web_view_helper_mac.mm34
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;