OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_RENDERER_PRINT_WEB_VIEW_HELPER_H_ | 5 #ifndef CHROME_RENDERER_PRINT_WEB_VIEW_HELPER_H_ |
6 #define CHROME_RENDERER_PRINT_WEB_VIEW_HELPER_H_ | 6 #define CHROME_RENDERER_PRINT_WEB_VIEW_HELPER_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/shared_memory.h" | 10 #include "base/shared_memory.h" |
11 #include "base/time.h" | 11 #include "base/time.h" |
| 12 #include "base/utf_string_conversions.h" |
| 13 #include "base/values.h" |
12 #include "content/renderer/render_view_observer.h" | 14 #include "content/renderer/render_view_observer.h" |
13 #include "content/renderer/render_view_observer_tracker.h" | 15 #include "content/renderer/render_view_observer_tracker.h" |
14 #include "printing/metafile.h" | 16 #include "printing/metafile.h" |
| 17 #include "skia/ext/vector_canvas.h" |
| 18 #include "third_party/skia/include/core/SkPaint.h" |
| 19 #include "third_party/skia/include/core/SkRefCnt.h" |
| 20 #include "third_party/skia/include/core/SkScalar.h" |
15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h" | 21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h" |
16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebViewClient.h" | 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebViewClient.h" |
17 #include "ui/gfx/size.h" | 23 #include "ui/gfx/size.h" |
18 | 24 |
19 struct PrintMsg_Print_Params; | 25 struct PrintMsg_Print_Params; |
20 struct PrintMsg_PrintPage_Params; | 26 struct PrintMsg_PrintPage_Params; |
21 struct PrintMsg_PrintPages_Params; | 27 struct PrintMsg_PrintPages_Params; |
22 | 28 |
23 namespace base { | 29 namespace base { |
24 class DictionaryValue; | 30 class DictionaryValue; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 | 108 |
103 // Message handlers --------------------------------------------------------- | 109 // Message handlers --------------------------------------------------------- |
104 | 110 |
105 // Print the document. | 111 // Print the document. |
106 void OnPrintPages(); | 112 void OnPrintPages(); |
107 | 113 |
108 // Initiate print preview. | 114 // Initiate print preview. |
109 void OnInitiatePrintPreview(); | 115 void OnInitiatePrintPreview(); |
110 | 116 |
111 // Generate a print preview using |settings|. | 117 // Generate a print preview using |settings|. |
112 void OnPrintPreview(const base::DictionaryValue& settings); | 118 // |header_footer_info| contains the necessary strings generated by the |
| 119 // browser process to be printed as headers and footers if requested by the |
| 120 // user. |
| 121 void OnPrintPreview(const base::DictionaryValue& settings, |
| 122 const DictionaryValue& header_footer_info); |
113 | 123 |
114 // Print / preview the node under the context menu. | 124 // Print / preview the node under the context menu. |
115 void OnPrintNodeUnderContextMenu(); | 125 void OnPrintNodeUnderContextMenu(); |
116 | 126 |
117 // Print the pages for print preview. Do not display the native print dialog | 127 // Print the pages for print preview. Do not display the native print dialog |
118 // for user settings. |job_settings| has new print job settings values. | 128 // for user settings. |job_settings| has new print job settings values. |
119 void OnPrintForPrintPreview(const base::DictionaryValue& job_settings); | 129 void OnPrintForPrintPreview(const base::DictionaryValue& job_settings); |
120 | 130 |
121 void OnPrintingDone(bool success); | 131 void OnPrintingDone(bool success); |
122 | 132 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 // It will implicitly revert the document to display CSS media type. | 180 // It will implicitly revert the document to display CSS media type. |
171 bool PrintPages(const PrintMsg_PrintPages_Params& params, | 181 bool PrintPages(const PrintMsg_PrintPages_Params& params, |
172 WebKit::WebFrame* frame, | 182 WebKit::WebFrame* frame, |
173 WebKit::WebNode* node); | 183 WebKit::WebNode* node); |
174 | 184 |
175 // Prints the page listed in |params|. | 185 // Prints the page listed in |params|. |
176 #if defined(USE_X11) | 186 #if defined(USE_X11) |
177 void PrintPageInternal(const PrintMsg_PrintPage_Params& params, | 187 void PrintPageInternal(const PrintMsg_PrintPage_Params& params, |
178 const gfx::Size& canvas_size, | 188 const gfx::Size& canvas_size, |
179 WebKit::WebFrame* frame, | 189 WebKit::WebFrame* frame, |
180 printing::Metafile* metafile); | 190 printing::Metafile* metafile, |
| 191 bool is_preview, |
| 192 int total_pages); |
181 #else | 193 #else |
182 void PrintPageInternal(const PrintMsg_PrintPage_Params& params, | 194 void PrintPageInternal(const PrintMsg_PrintPage_Params& params, |
183 const gfx::Size& canvas_size, | 195 const gfx::Size& canvas_size, |
184 WebKit::WebFrame* frame); | 196 WebKit::WebFrame* frame); |
185 #endif | 197 #endif |
186 | 198 |
187 // Render the frame for printing. | 199 // Render the frame for printing. |
188 bool RenderPagesForPrint(WebKit::WebFrame* frame, WebKit::WebNode* node); | 200 bool RenderPagesForPrint(WebKit::WebFrame* frame, WebKit::WebNode* node); |
189 | 201 |
190 // Render the frame for preview. | 202 // Render the frame for preview. |
(...skipping 27 matching lines...) Expand all Loading... |
218 // Helper methods ----------------------------------------------------------- | 230 // Helper methods ----------------------------------------------------------- |
219 | 231 |
220 bool CopyAndPrint(WebKit::WebFrame* web_frame); | 232 bool CopyAndPrint(WebKit::WebFrame* web_frame); |
221 | 233 |
222 bool CopyMetafileDataToSharedMem(printing::Metafile* metafile, | 234 bool CopyMetafileDataToSharedMem(printing::Metafile* metafile, |
223 base::SharedMemoryHandle* shared_mem_handle); | 235 base::SharedMemoryHandle* shared_mem_handle); |
224 | 236 |
225 void GetPageSizeAndMarginsInPoints( | 237 void GetPageSizeAndMarginsInPoints( |
226 WebKit::WebFrame* frame, | 238 WebKit::WebFrame* frame, |
227 int page_index, | 239 int page_index, |
228 const PrintMsg_Print_Params& default_params, | 240 const PrintMsg_Print_Params& default_params); |
229 double* content_width_in_points, | |
230 double* content_height_in_points, | |
231 double* margin_top_in_points, | |
232 double* margin_right_in_points, | |
233 double* margin_bottom_in_points, | |
234 double* margin_left_in_points); | |
235 | 241 |
236 bool IsModifiable(WebKit::WebFrame* frame, WebKit::WebNode* node); | 242 bool IsModifiable(WebKit::WebFrame* frame, WebKit::WebNode* node); |
237 | 243 |
238 void UpdatePrintableSizeInPrintParameters(WebKit::WebFrame* frame, | 244 void UpdatePrintableSizeInPrintParameters(WebKit::WebFrame* frame, |
239 WebKit::WebNode* node, | 245 WebKit::WebNode* node, |
240 PrintMsg_Print_Params* params); | 246 PrintMsg_Print_Params* params); |
241 | 247 |
242 bool GetPrintFrame(WebKit::WebFrame** frame); | 248 bool GetPrintFrame(WebKit::WebFrame** frame); |
243 | 249 |
244 // This reports the current time - |start_time| as the time to render | 250 // This reports the current time - |start_time| as the time to render |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 base::Time last_cancelled_script_print_; | 294 base::Time last_cancelled_script_print_; |
289 int user_cancelled_scripted_print_count_; | 295 int user_cancelled_scripted_print_count_; |
290 | 296 |
291 // Let the browser process know of a printing failure. Only set to false when | 297 // Let the browser process know of a printing failure. Only set to false when |
292 // the failure came from the browser in the first place. | 298 // the failure came from the browser in the first place. |
293 bool notify_browser_of_print_failure_; | 299 bool notify_browser_of_print_failure_; |
294 | 300 |
295 int preview_page_count_; | 301 int preview_page_count_; |
296 scoped_ptr<PrintMsg_PrintPages_Params> old_print_pages_params_; | 302 scoped_ptr<PrintMsg_PrintPages_Params> old_print_pages_params_; |
297 | 303 |
| 304 // Contains strings generated by the browser process to be printed as headers |
| 305 // and footers if requested by the user. |
| 306 const DictionaryValue* header_footer_info_; |
| 307 |
| 308 // Specifies the horizontal alignment of the Headers and Footers. |
| 309 enum HorizontalHeaderFooterPosition { |
| 310 LEFT, |
| 311 CENTER, |
| 312 RIGHT |
| 313 }; |
| 314 |
| 315 // Specifies the vertical alignment of the Headers and Footers. |
| 316 enum VerticalHeaderFooterPosition { |
| 317 TOP, |
| 318 BOTTOM |
| 319 }; |
| 320 |
| 321 // Gets the x-coordinate from where we want to start printing the current text |
| 322 // depending on the alignment (LEFT, RIGHT, CENTER). |
| 323 SkScalar GetHorizontalCoordinate( |
| 324 string16 text, |
| 325 SkPaint paint, |
| 326 HorizontalHeaderFooterPosition pos); |
| 327 |
| 328 // Gets the y-coordinate from where we want to start printing based on if we |
| 329 // are printing the Header or the Footer (TOP or BOTTOM). |
| 330 SkScalar GetVerticalCoordinate( |
| 331 SkPaint paint, |
| 332 VerticalHeaderFooterPosition pos); |
| 333 |
| 334 // Interstice or gap between different Header and Footer components. |
| 335 // Hardcoded to 0.25cm = 1/10" = 7.2 points |
| 336 const SkScalar header_footer_interstice; |
| 337 |
| 338 // Given a text, the positions and the paint object, this method calculates |
| 339 // the coordinates and prints the text at those co-ordinates. |
| 340 void PrintHeaderFooterText( |
| 341 string16 text, |
| 342 SkPaint paint, |
| 343 const SkRefPtr<skia::VectorCanvas>& canvas, |
| 344 HorizontalHeaderFooterPosition hor_pos, |
| 345 VerticalHeaderFooterPosition ver_pos, |
| 346 float webkit_scale_factor); |
| 347 |
| 348 // Given the device and canvas to draw on, prints the appropriate headers |
| 349 // and footers on to the canvas. |
| 350 void PrintHeaderAndFooter(SkDevice *device, |
| 351 const SkRefPtr<skia::VectorCanvas>& canvas, |
| 352 int page_number, int total_pages, |
| 353 float webkit_scale_factor); |
| 354 |
| 355 double content_width_in_points; |
| 356 double content_height_in_points; |
| 357 double margin_top_in_points; |
| 358 double margin_right_in_points; |
| 359 double margin_bottom_in_points; |
| 360 double margin_left_in_points; |
| 361 |
298 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelper); | 362 DISALLOW_COPY_AND_ASSIGN(PrintWebViewHelper); |
299 }; | 363 }; |
300 | 364 |
301 #endif // CHROME_RENDERER_PRINT_WEB_VIEW_HELPER_H_ | 365 #endif // CHROME_RENDERER_PRINT_WEB_VIEW_HELPER_H_ |
OLD | NEW |