| Index: chrome/renderer/print_web_view_helper_linux.cc
|
| diff --git a/chrome/renderer/print_web_view_helper_linux.cc b/chrome/renderer/print_web_view_helper_linux.cc
|
| index 609f099e7847228f692d9055c51045b87d60b326..b909b07861e08c5489cfdf198fc2a34c7b4cd9db 100644
|
| --- a/chrome/renderer/print_web_view_helper_linux.cc
|
| +++ b/chrome/renderer/print_web_view_helper_linux.cc
|
| @@ -11,31 +11,99 @@
|
| #include "printing/units.h"
|
| #include "skia/ext/vector_canvas.h"
|
| #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h"
|
| +#include "third_party/WebKit/WebKit/chromium/public/WebSize.h"
|
|
|
| +using printing::ConvertPixelsToPoint;
|
| +using printing::ConvertPixelsToPointDouble;
|
| using printing::NativeMetafile;
|
| using WebKit::WebFrame;
|
| +using WebKit::WebSize;
|
| +
|
| +// If frame is NULL, this function returns the default value.
|
| +static void GetPageSizeAndMarginsInPoints(WebFrame* frame,
|
| + int page_index,
|
| + 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) {
|
| + // TODO(myhuang): Get printing parameters via IPC
|
| + // using the print_web_view_helper.cc version of Print.
|
| + // For testing purpose, we hard-coded printing parameters here.
|
| +
|
| + // The paper size is US Letter (8.5 in. by 11 in.).
|
| + WebSize page_size_in_pixels(8.5 * printing::kPixelsPerInch,
|
| + 11.0 * printing::kPixelsPerInch);
|
| +
|
| + int margin_top_in_pixels = static_cast<int>(
|
| + NativeMetafile::kTopMarginInInch * printing::kPixelsPerInch);
|
| + int margin_right_in_pixels = static_cast<int>(
|
| + NativeMetafile::kRightMarginInInch * printing::kPixelsPerInch);
|
| + int margin_bottom_in_pixels = static_cast<int>(
|
| + NativeMetafile::kBottomMarginInInch * printing::kPixelsPerInch);
|
| + int margin_left_in_pixels = static_cast<int>(
|
| + NativeMetafile::kLeftMarginInInch * printing::kPixelsPerInch);
|
| +
|
| + if (frame) {
|
| + frame->pageSizeAndMarginsInPixels(page_index,
|
| + page_size_in_pixels,
|
| + margin_top_in_pixels,
|
| + margin_right_in_pixels,
|
| + margin_bottom_in_pixels,
|
| + margin_left_in_pixels);
|
| + }
|
| +
|
| + *content_width_in_points = ConvertPixelsToPoint(page_size_in_pixels.width
|
| + - margin_left_in_pixels
|
| + - margin_right_in_pixels);
|
| + *content_height_in_points = ConvertPixelsToPoint(page_size_in_pixels.height
|
| + - margin_top_in_pixels
|
| + - margin_bottom_in_pixels);
|
| +
|
| + // Invalid page size and/or margins. We just use the default setting.
|
| + if (*content_width_in_points < 1.0 || *content_height_in_points < 1.0) {
|
| + GetPageSizeAndMarginsInPoints(NULL,
|
| + page_index,
|
| + content_width_in_points,
|
| + content_height_in_points,
|
| + margin_top_in_points,
|
| + margin_right_in_points,
|
| + margin_bottom_in_points,
|
| + margin_left_in_points);
|
| + return;
|
| + }
|
| +
|
| + if (margin_top_in_points)
|
| + *margin_top_in_points =
|
| + ConvertPixelsToPointDouble(margin_top_in_pixels);
|
| + if (margin_right_in_points)
|
| + *margin_right_in_points =
|
| + ConvertPixelsToPointDouble(margin_right_in_pixels);
|
| + if (margin_bottom_in_points)
|
| + *margin_bottom_in_points =
|
| + ConvertPixelsToPointDouble(margin_bottom_in_pixels);
|
| + if (margin_left_in_points)
|
| + *margin_left_in_points =
|
| + ConvertPixelsToPointDouble(margin_left_in_pixels);
|
| +}
|
|
|
| void PrintWebViewHelper::Print(WebFrame* frame, bool script_initiated) {
|
| // If still not finished with earlier print request simply ignore.
|
| if (IsPrinting())
|
| return;
|
|
|
| - // TODO(myhuang): Get printing parameters via IPC
|
| - // using the print_web_view_helper.cc version of Print.
|
| - // For testing purpose, we hard-coded printing parameters here.
|
| + double content_width, content_height;
|
| + GetPageSizeAndMarginsInPoints(frame, 0, &content_width, &content_height,
|
| + NULL, NULL, NULL, NULL);
|
|
|
| - // The paper size is US Letter (8.5 in. by 11 in.).
|
| - const int kDPI = printing::kPointsPerInch;
|
| - const int kWidth = static_cast<int>(
|
| - 8.5 * kDPI - NativeMetafile::kLeftMargin - NativeMetafile::kRightMargin);
|
| - const int kHeight = static_cast<int>(
|
| - 11 * kDPI - NativeMetafile::kTopMargin - NativeMetafile::kBottomMargin);
|
| ViewMsg_Print_Params default_settings;
|
| - default_settings.printable_size = gfx::Size(kWidth, kHeight);
|
| - default_settings.dpi = kDPI;
|
| + default_settings.printable_size = gfx::Size(
|
| + static_cast<int>(content_width), static_cast<int>(content_height));
|
| + default_settings.dpi = printing::kPointsPerInch;
|
| default_settings.min_shrink = 1.25;
|
| default_settings.max_shrink = 2.0;
|
| - default_settings.desired_dpi = kDPI;
|
| + default_settings.desired_dpi = printing::kPointsPerInch;
|
| default_settings.document_cookie = 0;
|
| default_settings.selection_only = false;
|
|
|
| @@ -103,8 +171,28 @@ void PrintWebViewHelper::PrintPage(const ViewMsg_PrintPage_Params& params,
|
| const gfx::Size& canvas_size,
|
| WebFrame* frame,
|
| printing::NativeMetafile* metafile) {
|
| + 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,
|
| + &content_width_in_points,
|
| + &content_height_in_points,
|
| + &margin_top_in_points,
|
| + &margin_right_in_points,
|
| + &margin_bottom_in_points,
|
| + &margin_left_in_points);
|
| +
|
| cairo_t* cairo_context =
|
| - metafile->StartPage(canvas_size.width(), canvas_size.height());
|
| + metafile->StartPage(content_width_in_points,
|
| + content_height_in_points,
|
| + margin_top_in_points,
|
| + margin_right_in_points,
|
| + margin_bottom_in_points,
|
| + margin_left_in_points);
|
| if (!cairo_context)
|
| return;
|
|
|
|
|