Index: chrome/renderer/print_web_view_helper.h |
diff --git a/chrome/renderer/print_web_view_helper.h b/chrome/renderer/print_web_view_helper.h |
index 48b7037999372703132400390e08ccf939139703..de41c474ed20ce9a7c2a884b1e08c4829f75d867 100644 |
--- a/chrome/renderer/print_web_view_helper.h |
+++ b/chrome/renderer/print_web_view_helper.h |
@@ -9,9 +9,15 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/shared_memory.h" |
#include "base/time.h" |
+#include "base/utf_string_conversions.h" |
+#include "base/values.h" |
#include "content/renderer/render_view_observer.h" |
#include "content/renderer/render_view_observer_tracker.h" |
#include "printing/metafile.h" |
+#include "skia/ext/vector_canvas.h" |
+#include "third_party/skia/include/core/SkPaint.h" |
+#include "third_party/skia/include/core/SkRefCnt.h" |
+#include "third_party/skia/include/core/SkScalar.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebViewClient.h" |
#include "ui/gfx/size.h" |
@@ -109,7 +115,11 @@ class PrintWebViewHelper : public RenderViewObserver, |
void OnInitiatePrintPreview(); |
// Generate a print preview using |settings|. |
- void OnPrintPreview(const base::DictionaryValue& settings); |
+ // |header_footer_info| contains the necessary strings generated by the |
+ // browser process to be printed as headers and footers if requested by the |
+ // user. |
+ void OnPrintPreview(const base::DictionaryValue& settings, |
+ const DictionaryValue& header_footer_info); |
// Print / preview the node under the context menu. |
void OnPrintNodeUnderContextMenu(); |
@@ -177,7 +187,9 @@ class PrintWebViewHelper : public RenderViewObserver, |
void PrintPageInternal(const PrintMsg_PrintPage_Params& params, |
const gfx::Size& canvas_size, |
WebKit::WebFrame* frame, |
- printing::Metafile* metafile); |
+ printing::Metafile* metafile, |
+ bool is_preview, |
+ int total_pages); |
#else |
void PrintPageInternal(const PrintMsg_PrintPage_Params& params, |
const gfx::Size& canvas_size, |
@@ -225,13 +237,7 @@ class PrintWebViewHelper : public RenderViewObserver, |
void GetPageSizeAndMarginsInPoints( |
WebKit::WebFrame* frame, |
int page_index, |
- const PrintMsg_Print_Params& default_params, |
- 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); |
+ const PrintMsg_Print_Params& default_params); |
bool IsModifiable(WebKit::WebFrame* frame, WebKit::WebNode* node); |
@@ -295,6 +301,64 @@ class PrintWebViewHelper : public RenderViewObserver, |
int preview_page_count_; |
scoped_ptr<PrintMsg_PrintPages_Params> old_print_pages_params_; |
+ // Contains strings generated by the browser process to be printed as headers |
+ // and footers if requested by the user. |
+ const DictionaryValue* header_footer_info_; |
+ |
+ // Specifies the horizontal alignment of the Headers and Footers. |
+ enum HorizontalHeaderFooterPosition { |
+ LEFT, |
+ CENTER, |
+ RIGHT |
+ }; |
+ |
+ // Specifies the vertical alignment of the Headers and Footers. |
+ enum VerticalHeaderFooterPosition { |
+ TOP, |
+ BOTTOM |
+ }; |
+ |
+ // Gets the x-coordinate from where we want to start printing the current text |
+ // depending on the alignment (LEFT, RIGHT, CENTER). |
+ SkScalar GetHorizontalCoordinate( |
+ string16 text, |
+ SkPaint paint, |
+ HorizontalHeaderFooterPosition pos); |
+ |
+ // Gets the y-coordinate from where we want to start printing based on if we |
+ // are printing the Header or the Footer (TOP or BOTTOM). |
+ SkScalar GetVerticalCoordinate( |
+ SkPaint paint, |
+ VerticalHeaderFooterPosition pos); |
+ |
+ // Interstice or gap between different Header and Footer components. |
+ // Hardcoded to 0.25cm = 1/10" = 7.2 points |
+ const SkScalar header_footer_interstice; |
+ |
+ // Given a text, the positions and the paint object, this method calculates |
+ // the coordinates and prints the text at those co-ordinates. |
+ void PrintHeaderFooterText( |
+ string16 text, |
+ SkPaint paint, |
+ const SkRefPtr<skia::VectorCanvas>& canvas, |
+ HorizontalHeaderFooterPosition hor_pos, |
+ VerticalHeaderFooterPosition ver_pos, |
+ float webkit_scale_factor); |
+ |
+ // Given the device and canvas to draw on, prints the appropriate headers |
+ // and footers on to the canvas. |
+ void PrintHeaderAndFooter(SkDevice *device, |
+ const SkRefPtr<skia::VectorCanvas>& canvas, |
+ int page_number, int total_pages, |
+ float webkit_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; |
+ |
DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelper); |
}; |