Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1105)

Side by Side Diff: chrome/renderer/print_web_view_helper.cc

Issue 7348010: Added Header and Footer support using Skia (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Indent Fix Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #include "chrome/renderer/print_web_view_helper.h" 5 #include "chrome/renderer/print_web_view_helper.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/i18n/time_formatting.h"
10 #include "base/logging.h" 11 #include "base/logging.h"
11 #include "base/metrics/histogram.h" 12 #include "base/metrics/histogram.h"
12 #include "base/process_util.h" 13 #include "base/process_util.h"
14 #include "base/time.h"
15 #include "base/string_number_conversions.h"
kmadhusu 2011/07/14 01:50:15 nit: ordering
Aayush Kumar 2011/07/19 01:20:30 Done.
13 #include "base/utf_string_conversions.h" 16 #include "base/utf_string_conversions.h"
14 #include "chrome/common/chrome_switches.h" 17 #include "chrome/common/chrome_switches.h"
15 #include "chrome/common/print_messages.h" 18 #include "chrome/common/print_messages.h"
16 #include "chrome/common/render_messages.h" 19 #include "chrome/common/render_messages.h"
17 #include "chrome/common/url_constants.h" 20 #include "chrome/common/url_constants.h"
18 #include "chrome/renderer/prerender/prerender_helper.h" 21 #include "chrome/renderer/prerender/prerender_helper.h"
19 #include "content/renderer/render_view.h" 22 #include "content/renderer/render_view.h"
20 #include "grit/generated_resources.h" 23 #include "grit/generated_resources.h"
21 #include "printing/metafile.h" 24 #include "printing/metafile.h"
22 #include "printing/print_job_constants.h" 25 #include "printing/print_job_constants.h"
23 #include "printing/units.h" 26 #include "printing/units.h"
27 #include "skia/ext/vector_platform_device_skia.h"
28 #include "third_party/skia/include/core/SkTypeface.h"
24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebConsoleMessage.h" 29 #include "third_party/WebKit/Source/WebKit/chromium/public/WebConsoleMessage.h"
25 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDataSource.h" 30 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDataSource.h"
26 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" 31 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
27 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h" 32 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h"
28 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 33 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
29 #include "third_party/WebKit/Source/WebKit/chromium/public/WebNode.h" 34 #include "third_party/WebKit/Source/WebKit/chromium/public/WebNode.h"
30 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h" 35 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h"
31 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" 36 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h"
32 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLResponse.h" 37 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLResponse.h"
33 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 38 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
34 #include "ui/base/l10n/l10n_util.h" 39 #include "ui/base/l10n/l10n_util.h"
40 #include "ui/base/text/text_elider.h"
35 41
36 #if defined(OS_POSIX) 42 #if defined(OS_POSIX)
37 #include "content/common/view_messages.h" 43 #include "content/common/view_messages.h"
38 #endif 44 #endif
39 45
46 using base::Time;
40 using printing::ConvertPixelsToPoint; 47 using printing::ConvertPixelsToPoint;
41 using printing::ConvertPixelsToPointDouble; 48 using printing::ConvertPixelsToPointDouble;
42 using printing::ConvertUnit; 49 using printing::ConvertUnit;
43 using printing::ConvertUnitDouble; 50 using printing::ConvertUnitDouble;
44 using WebKit::WebConsoleMessage; 51 using WebKit::WebConsoleMessage;
45 using WebKit::WebDocument; 52 using WebKit::WebDocument;
46 using WebKit::WebElement; 53 using WebKit::WebElement;
47 using WebKit::WebFrame; 54 using WebKit::WebFrame;
48 using WebKit::WebNode; 55 using WebKit::WebNode;
49 using WebKit::WebSize; 56 using WebKit::WebSize;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 oldParams.params.min_shrink == newParams.params.min_shrink && 88 oldParams.params.min_shrink == newParams.params.min_shrink &&
82 oldParams.params.dpi == newParams.params.dpi && 89 oldParams.params.dpi == newParams.params.dpi &&
83 oldParams.params.printable_size == newParams.params.printable_size && 90 oldParams.params.printable_size == newParams.params.printable_size &&
84 oldParams.params.selection_only == newParams.params.selection_only && 91 oldParams.params.selection_only == newParams.params.selection_only &&
85 oldParams.params.page_size == newParams.params.page_size && 92 oldParams.params.page_size == newParams.params.page_size &&
86 oldParams.params.margin_top == newParams.params.margin_top && 93 oldParams.params.margin_top == newParams.params.margin_top &&
87 oldParams.params.margin_left == newParams.params.margin_left && 94 oldParams.params.margin_left == newParams.params.margin_left &&
88 oldParams.params.supports_alpha_blend == 95 oldParams.params.supports_alpha_blend ==
89 newParams.params.supports_alpha_blend && 96 newParams.params.supports_alpha_blend &&
90 oldParams.pages.size() == newParams.pages.size() && 97 oldParams.pages.size() == newParams.pages.size() &&
98 oldParams.params.header_footer ==
99 newParams.params.header_footer &&
91 std::equal(oldParams.pages.begin(), oldParams.pages.end(), 100 std::equal(oldParams.pages.begin(), oldParams.pages.end(),
92 newParams.pages.begin()); 101 newParams.pages.begin());
93 } 102 }
94 103
95 } // namespace 104 } // namespace
96 105
97 PrepareFrameAndViewForPrint::PrepareFrameAndViewForPrint( 106 PrepareFrameAndViewForPrint::PrepareFrameAndViewForPrint(
98 const PrintMsg_Print_Params& print_params, 107 const PrintMsg_Print_Params& print_params,
99 WebFrame* frame, 108 WebFrame* frame,
100 WebNode* node, 109 WebNode* node,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 } 160 }
152 161
153 PrintWebViewHelper::PrintWebViewHelper(RenderView* render_view) 162 PrintWebViewHelper::PrintWebViewHelper(RenderView* render_view)
154 : RenderViewObserver(render_view), 163 : RenderViewObserver(render_view),
155 RenderViewObserverTracker<PrintWebViewHelper>(render_view), 164 RenderViewObserverTracker<PrintWebViewHelper>(render_view),
156 print_web_view_(NULL), 165 print_web_view_(NULL),
157 script_initiated_preview_frame_(NULL), 166 script_initiated_preview_frame_(NULL),
158 context_menu_preview_node_(NULL), 167 context_menu_preview_node_(NULL),
159 user_cancelled_scripted_print_count_(0), 168 user_cancelled_scripted_print_count_(0),
160 notify_browser_of_print_failure_(true), 169 notify_browser_of_print_failure_(true),
161 preview_page_count_(0) { 170 preview_page_count_(0),
171 header_footer_interstice(printing::kSettingHeaderFooterInterstice) {
162 is_preview_ = switches::IsPrintPreviewEnabled(); 172 is_preview_ = switches::IsPrintPreviewEnabled();
163 } 173 }
164 174
165 PrintWebViewHelper::~PrintWebViewHelper() {} 175 PrintWebViewHelper::~PrintWebViewHelper() {}
166 176
167 // Prints |frame| which called window.print(). 177 // Prints |frame| which called window.print().
168 void PrintWebViewHelper::PrintPage(WebKit::WebFrame* frame) { 178 void PrintWebViewHelper::PrintPage(WebKit::WebFrame* frame) {
169 DCHECK(frame); 179 DCHECK(frame);
170 180
171 // Allow Prerendering to cancel this print request if necessary. 181 // Allow Prerendering to cancel this print request if necessary.
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 render_view()->webview()->mainFrame(); 269 render_view()->webview()->mainFrame();
260 return true; 270 return true;
261 } 271 }
262 272
263 void PrintWebViewHelper::OnPrintPages() { 273 void PrintWebViewHelper::OnPrintPages() {
264 WebFrame* frame; 274 WebFrame* frame;
265 if (GetPrintFrame(&frame)) 275 if (GetPrintFrame(&frame))
266 Print(frame, NULL); 276 Print(frame, NULL);
267 } 277 }
268 278
269 void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings) { 279 void PrintWebViewHelper::OnPrintPreview(const DictionaryValue& settings,
280 const DictionaryValue& header_footer_info) {
270 DCHECK(is_preview_); 281 DCHECK(is_preview_);
271 DCHECK(!context_menu_preview_node_.get() || !script_initiated_preview_frame_); 282 DCHECK(!context_menu_preview_node_.get() || !script_initiated_preview_frame_);
272 283
284 header_footer_info_ = header_footer_info.DeepCopy();
285
273 if (script_initiated_preview_frame_) { 286 if (script_initiated_preview_frame_) {
274 // Script initiated print preview. 287 // Script initiated print preview.
275 PrintPreview(script_initiated_preview_frame_, NULL, settings); 288 PrintPreview(script_initiated_preview_frame_, NULL, settings);
276 } else if (context_menu_preview_node_.get()) { 289 } else if (context_menu_preview_node_.get()) {
277 // User initiated - print node under context menu. 290 // User initiated - print node under context menu.
278 PrintPreview(context_menu_preview_node_->document().frame(), 291 PrintPreview(context_menu_preview_node_->document().frame(),
279 context_menu_preview_node_.get(), settings); 292 context_menu_preview_node_.get(), settings);
280 } else { 293 } else {
281 // User initiated - normal print preview. 294 // User initiated - normal print preview.
282 WebFrame* frame; 295 WebFrame* frame;
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 505
493 void PrintWebViewHelper::didStopLoading() { 506 void PrintWebViewHelper::didStopLoading() {
494 PrintMsg_PrintPages_Params* params = print_pages_params_.get(); 507 PrintMsg_PrintPages_Params* params = print_pages_params_.get();
495 DCHECK(params != NULL); 508 DCHECK(params != NULL);
496 PrintPages(*params, print_web_view_->mainFrame(), NULL); 509 PrintPages(*params, print_web_view_->mainFrame(), NULL);
497 } 510 }
498 511
499 void PrintWebViewHelper::GetPageSizeAndMarginsInPoints( 512 void PrintWebViewHelper::GetPageSizeAndMarginsInPoints(
500 WebFrame* frame, 513 WebFrame* frame,
501 int page_index, 514 int page_index,
502 const PrintMsg_Print_Params& default_params, 515 const PrintMsg_Print_Params& default_params) {
503 double* content_width_in_points,
504 double* content_height_in_points,
505 double* margin_top_in_points,
506 double* margin_right_in_points,
507 double* margin_bottom_in_points,
508 double* margin_left_in_points) {
509 int dpi = GetDPI(&default_params); 516 int dpi = GetDPI(&default_params);
510 517
511 WebSize page_size_in_pixels( 518 WebSize page_size_in_pixels(
512 ConvertUnit(default_params.page_size.width(), 519 ConvertUnit(default_params.page_size.width(),
513 dpi, printing::kPixelsPerInch), 520 dpi, printing::kPixelsPerInch),
514 ConvertUnit(default_params.page_size.height(), 521 ConvertUnit(default_params.page_size.height(),
515 dpi, printing::kPixelsPerInch)); 522 dpi, printing::kPixelsPerInch));
516 int margin_top_in_pixels = ConvertUnit( 523 int margin_top_in_pixels = ConvertUnit(
517 default_params.margin_top, 524 default_params.margin_top,
518 dpi, printing::kPixelsPerInch); 525 dpi, printing::kPixelsPerInch);
(...skipping 11 matching lines...) Expand all
530 537
531 if (frame) { 538 if (frame) {
532 frame->pageSizeAndMarginsInPixels(page_index, 539 frame->pageSizeAndMarginsInPixels(page_index,
533 page_size_in_pixels, 540 page_size_in_pixels,
534 margin_top_in_pixels, 541 margin_top_in_pixels,
535 margin_right_in_pixels, 542 margin_right_in_pixels,
536 margin_bottom_in_pixels, 543 margin_bottom_in_pixels,
537 margin_left_in_pixels); 544 margin_left_in_pixels);
538 } 545 }
539 546
540 *content_width_in_points = ConvertPixelsToPoint(page_size_in_pixels.width - 547 content_width_in_points = ConvertPixelsToPoint(page_size_in_pixels.width -
541 margin_left_in_pixels - 548 margin_left_in_pixels -
542 margin_right_in_pixels); 549 margin_right_in_pixels);
543 *content_height_in_points = ConvertPixelsToPoint(page_size_in_pixels.height - 550 content_height_in_points = ConvertPixelsToPoint(page_size_in_pixels.height -
544 margin_top_in_pixels - 551 margin_top_in_pixels -
545 margin_bottom_in_pixels); 552 margin_bottom_in_pixels);
546 553
547 // Invalid page size and/or margins. We just use the default setting. 554 // Invalid page size and/or margins. We just use the default setting.
548 if (*content_width_in_points < 1.0 || *content_height_in_points < 1.0) { 555 if (content_width_in_points < 1.0 || content_height_in_points < 1.0) {
549 GetPageSizeAndMarginsInPoints(NULL, 556 GetPageSizeAndMarginsInPoints(NULL,
550 page_index, 557 page_index,
551 default_params, 558 default_params);
552 content_width_in_points,
553 content_height_in_points,
554 margin_top_in_points,
555 margin_right_in_points,
556 margin_bottom_in_points,
557 margin_left_in_points);
558 return; 559 return;
559 } 560 }
560 561
561 if (margin_top_in_points) 562 margin_top_in_points = ConvertPixelsToPointDouble(margin_top_in_pixels);
562 *margin_top_in_points = 563 margin_right_in_points = ConvertPixelsToPointDouble(margin_right_in_pixels);
563 ConvertPixelsToPointDouble(margin_top_in_pixels); 564 margin_bottom_in_points =
564 if (margin_right_in_points)
565 *margin_right_in_points =
566 ConvertPixelsToPointDouble(margin_right_in_pixels);
567 if (margin_bottom_in_points)
568 *margin_bottom_in_points =
569 ConvertPixelsToPointDouble(margin_bottom_in_pixels); 565 ConvertPixelsToPointDouble(margin_bottom_in_pixels);
570 if (margin_left_in_points) 566 margin_left_in_points = ConvertPixelsToPointDouble(margin_left_in_pixels);
571 *margin_left_in_points =
572 ConvertPixelsToPointDouble(margin_left_in_pixels);
573 } 567 }
574 568
575 bool PrintWebViewHelper::IsModifiable(WebKit::WebFrame* frame, 569 bool PrintWebViewHelper::IsModifiable(WebKit::WebFrame* frame,
576 WebKit::WebNode* node) { 570 WebKit::WebNode* node) {
577 if (node) 571 if (node)
578 return false; 572 return false;
579 std::string mime(frame->dataSource()->response().mimeType().utf8()); 573 std::string mime(frame->dataSource()->response().mimeType().utf8());
580 if (mime == "application/pdf") 574 if (mime == "application/pdf")
581 return false; 575 return false;
582 return true; 576 return true;
583 } 577 }
584 578
585 void PrintWebViewHelper::UpdatePrintableSizeInPrintParameters( 579 void PrintWebViewHelper::UpdatePrintableSizeInPrintParameters(
586 WebFrame* frame, 580 WebFrame* frame,
587 WebNode* node, 581 WebNode* node,
588 PrintMsg_Print_Params* params) { 582 PrintMsg_Print_Params* params) {
589 double content_width_in_points;
590 double content_height_in_points;
591 double margin_top_in_points;
592 double margin_right_in_points;
593 double margin_bottom_in_points;
594 double margin_left_in_points;
595 PrepareFrameAndViewForPrint prepare(*params, frame, node, frame->view()); 583 PrepareFrameAndViewForPrint prepare(*params, frame, node, frame->view());
596 PrintWebViewHelper::GetPageSizeAndMarginsInPoints(frame, 0, *params, 584 PrintWebViewHelper::GetPageSizeAndMarginsInPoints(frame, 0, *params);
597 &content_width_in_points, &content_height_in_points,
598 &margin_top_in_points, &margin_right_in_points,
599 &margin_bottom_in_points, &margin_left_in_points);
600 int dpi = GetDPI(params); 585 int dpi = GetDPI(params);
601 params->printable_size = gfx::Size( 586 params->printable_size = gfx::Size(
602 static_cast<int>(ConvertUnitDouble(content_width_in_points, 587 static_cast<int>(ConvertUnitDouble(content_width_in_points,
603 printing::kPointsPerInch, dpi)), 588 printing::kPointsPerInch, dpi)),
604 static_cast<int>(ConvertUnitDouble(content_height_in_points, 589 static_cast<int>(ConvertUnitDouble(content_height_in_points,
605 printing::kPointsPerInch, dpi))); 590 printing::kPointsPerInch, dpi)));
606 591
607 double page_width_in_points = content_width_in_points + 592 double page_width_in_points = content_width_in_points +
608 margin_left_in_points + margin_right_in_points; 593 margin_left_in_points + margin_right_in_points;
609 double page_height_in_points = content_height_in_points + 594 double page_height_in_points = content_height_in_points +
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 PrintMsg_PrintPages_Params settings; 648 PrintMsg_PrintPages_Params settings;
664 settings.params.page_size = gfx::Size(2550, 3300); 649 settings.params.page_size = gfx::Size(2550, 3300);
665 settings.params.printable_size = gfx::Size(2250, 3000); 650 settings.params.printable_size = gfx::Size(2250, 3000);
666 settings.params.margin_top = 150; 651 settings.params.margin_top = 150;
667 settings.params.margin_left = 150; 652 settings.params.margin_left = 150;
668 settings.params.dpi = 300.0; 653 settings.params.dpi = 300.0;
669 settings.params.min_shrink = 1.25; 654 settings.params.min_shrink = 1.25;
670 settings.params.max_shrink = 2.0; 655 settings.params.max_shrink = 2.0;
671 settings.params.desired_dpi = 72; 656 settings.params.desired_dpi = 72;
672 settings.params.selection_only = false; 657 settings.params.selection_only = false;
673 settings.params.supports_alpha_blend = false; 658 settings.params.supports_alpha_blend = false;
kmadhusu 2011/07/14 01:50:15 You need to set "settings.header_footer = false;"
Aayush Kumar 2011/07/19 01:20:30 Done.
674 // TODO(abodenha@chromium.org) Parse page ranges from the job_settings. 659 // TODO(abodenha@chromium.org) Parse page ranges from the job_settings.
675 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); 660 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings));
676 return true; 661 return true;
677 } 662 }
678 663
679 bool PrintWebViewHelper::UpdatePrintSettingsLocal( 664 bool PrintWebViewHelper::UpdatePrintSettingsLocal(
680 const DictionaryValue& job_settings) { 665 const DictionaryValue& job_settings) {
681 PrintMsg_PrintPages_Params settings; 666 PrintMsg_PrintPages_Params settings;
682 667
683 Send(new PrintHostMsg_UpdatePrintSettings(routing_id(), 668 Send(new PrintHostMsg_UpdatePrintSettings(routing_id(),
684 print_pages_params_->params.document_cookie, job_settings, &settings)); 669 print_pages_params_->params.document_cookie, job_settings, &settings));
685 670
686 if (settings.params.dpi < kMinDpi || !settings.params.document_cookie) 671 if (settings.params.dpi < kMinDpi || !settings.params.document_cookie)
687 return false; 672 return false;
688 673
689 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings)); 674 print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings));
675 bool header_footer;
676 if (!job_settings.GetBoolean(printing::kSettingHeaderFooter, &header_footer))
677 NOTREACHED();
678 print_pages_params_.get()->params.header_footer = header_footer;
kmadhusu 2011/07/14 01:50:15 "print_pages_params_.get()" -> "print_pages_params
Aayush Kumar 2011/07/19 01:20:30 Done.
679
690 Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(), 680 Send(new PrintHostMsg_DidGetDocumentCookie(routing_id(),
691 settings.params.document_cookie)); 681 settings.params.document_cookie));
692 return true; 682 return true;
693 } 683 }
694 684
695 bool PrintWebViewHelper::UpdatePrintSettings( 685 bool PrintWebViewHelper::UpdatePrintSettings(
696 const DictionaryValue& job_settings) { 686 const DictionaryValue& job_settings) {
697 if (job_settings.HasKey(printing::kSettingCloudPrintId)) { 687 if (job_settings.HasKey(printing::kSettingCloudPrintId)) {
698 return UpdatePrintSettingsCloud(job_settings); 688 return UpdatePrintSettingsCloud(job_settings);
699 } else { 689 } else {
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 Send(new PrintHostMsg_RequestPrintPreview(routing_id())); 846 Send(new PrintHostMsg_RequestPrintPreview(routing_id()));
857 } 847 }
858 848
859 bool PrintWebViewHelper::PreviewPageRendered(int page_number) { 849 bool PrintWebViewHelper::PreviewPageRendered(int page_number) {
860 bool cancel = false; 850 bool cancel = false;
861 Send(new PrintHostMsg_DidPreviewPage(routing_id(), page_number, &cancel)); 851 Send(new PrintHostMsg_DidPreviewPage(routing_id(), page_number, &cancel));
862 if (cancel) 852 if (cancel)
863 notify_browser_of_print_failure_ = false; 853 notify_browser_of_print_failure_ = false;
864 return !cancel; 854 return !cancel;
865 } 855 }
856
857 size_t GetString16ByteLength(string16 text) {
858 return text.length()*sizeof(char16);
859 }
860
861 SkScalar PrintWebViewHelper::GetHorizontalCoordinate(
862 string16 text,
863 SkPaint paint,
864 HorizontalHeaderFooterPosition pos) {
865 SkScalar text_width_in_points = paint.measureText(text.c_str(),
866 GetString16ByteLength(text));
867
868 switch (pos) {
kmadhusu 2011/07/14 01:50:15 Why did you use switch() here and if() in GetVerti
Aayush Kumar 2011/07/19 01:20:30 Done.
869 case LEFT:
kmadhusu 2011/07/14 01:50:15 nit: curly braces. http://google-styleguide.googl
Aayush Kumar 2011/07/19 01:20:30 Done.
870 return margin_left_in_points*(-1) + header_footer_interstice;
871 case RIGHT:
872 return ((content_width_in_points+margin_right_in_points) -
kmadhusu 2011/07/14 01:50:15 nit: add space before and after '+'
Aayush Kumar 2011/07/19 01:20:30 Done.
873 (header_footer_interstice + text_width_in_points));
874 case CENTER:
875 SkScalar available_width = (margin_left_in_points +
876 margin_right_in_points +
877 content_width_in_points -
878 4*header_footer_interstice)/3;
879 return (available_width - margin_left_in_points +
880 (available_width - text_width_in_points)/2);
881 }
882 NOTREACHED();
883 return 0;
884 }
885
886 SkScalar PrintWebViewHelper::GetVerticalCoordinate(
kmadhusu 2011/07/14 01:50:15 Are you planning to call GetHorizontalCoordinate()
Aayush Kumar 2011/07/19 01:20:30 Done.
887 SkPaint paint,
888 VerticalHeaderFooterPosition pos) {
889 if (pos == TOP) {
890 return margin_top_in_points*(-1) + header_footer_interstice +
891 paint.getTextSize();
892 } else if (pos == BOTTOM) {
893 return margin_bottom_in_points+content_height_in_points -
kmadhusu 2011/07/14 01:50:15 nit: add space before and after '+'
Aayush Kumar 2011/07/19 01:20:30 Done.
894 header_footer_interstice;
895 } else {
896 NOTREACHED();
897 return 0;
898 }
899 }
900
901 void PrintWebViewHelper::PrintHeaderFooterText(
902 string16 text,
903 SkPaint paint,
904 const SkRefPtr<skia::VectorCanvas>& canvas,
905 HorizontalHeaderFooterPosition hor_pos,
906 VerticalHeaderFooterPosition ver_pos,
907 float webkit_scale_factor) {
908 SkScalar x_cord = GetHorizontalCoordinate(text, paint, hor_pos) /
909 webkit_scale_factor;
910 SkScalar y_cord = GetVerticalCoordinate(paint, ver_pos) /
911 webkit_scale_factor;
912 size_t byte_length = GetString16ByteLength(text);
913
914 canvas->drawText(text.c_str(), byte_length, x_cord, y_cord, paint);
915 }
916
917 void PrintWebViewHelper::PrintHeaderAndFooter(SkDevice *device,
918 const SkRefPtr<skia::VectorCanvas>& canvas,
919 int page_number, int total_pages, float webkit_scale_factor) {
920
921 // Set the drawing area to draw in the margins.
922 ((skia::VectorPlatformDeviceSkia* )device)->
kmadhusu 2011/07/14 01:50:15 Remove outer paranthesis "(skia::VectorPlatformDev
Aayush Kumar 2011/07/19 01:20:30 That doesn't work. It tries to call setDrawingAre
923 setDrawingArea(SkPDFDevice::kMargin_DrawingArea);
924
925 // Setting up styles for the headers and footers text.
926 SkPaint paint;
927 paint.setColor(SK_ColorBLACK);
928 paint.setTextSize(SkIntToScalar(8)/webkit_scale_factor);
kmadhusu 2011/07/14 01:50:15 Is there any specific reason to use "8"?
dpapad 2011/07/14 15:59:35 Spaces around /.
Aayush Kumar 2011/07/19 01:20:30 It's what looked good on the page according to me
Aayush Kumar 2011/07/19 01:20:30 Done.
929 paint.setTypeface(SkTypeface::CreateFromName(NULL, SkTypeface::kNormal));
930 paint.setTextEncoding(SkPaint::kUTF16_TextEncoding);
931
932 // Printing the Date
933 Time now = Time::Now();
934 string16 date = base::TimeFormatShortDateNumeric(now);
kmadhusu 2011/07/14 01:50:15 |now| is used only once. Change line 934 to base
Aayush Kumar 2011/07/19 01:20:30 Done.
935 PrintHeaderFooterText(date, paint, canvas, LEFT, TOP, webkit_scale_factor);
936
937 // Printing the title
938 string16 title;
939 if (!header_footer_info_->GetString("title", &title))
kmadhusu 2011/07/14 01:50:15 "title" -> printing::kSettingHeaderFooterTitle
Aayush Kumar 2011/07/19 01:20:30 Thanks! :) On 2011/07/14 01:50:15, kmadhusu wrote:
940 NOTREACHED();
941
942 SkScalar maxTitleSize = (margin_left_in_points +
943 content_width_in_points +
944 margin_right_in_points -
945 4*header_footer_interstice)/3;
946 title = ui::ElideText(title, paint, maxTitleSize, false);
947 PrintHeaderFooterText(title, paint, canvas, CENTER, TOP,
948 webkit_scale_factor);
kmadhusu 2011/07/14 01:50:15 Fix indentation. PrintHeaderFooterText(title, pai
Aayush Kumar 2011/07/19 01:20:30 Done.
949
950 // Printing the URL
951 std::string url;
952 if (!header_footer_info_->GetString("url", &url))
kmadhusu 2011/07/14 01:50:15 "url" -> printing::kSettingHeaderFooterURL
Aayush Kumar 2011/07/19 01:20:30 Done.
953 NOTREACHED();
954 GURL gurl(url);
955 string16 url_elided = ui::ElideUrl(gurl, paint, maxTitleSize,
956 std::string());
957 PrintHeaderFooterText(url_elided, paint, canvas, LEFT, BOTTOM,
958 webkit_scale_factor);
kmadhusu 2011/07/14 01:50:15 Fix indentation
Aayush Kumar 2011/07/19 01:20:30 Done.
959
960 // Printing the page numbers at the bottom right corner of page.
961 string16 page_on_page_total = base::IntToString16(page_number) +
962 UTF8ToUTF16("/") +
963 base::IntToString16(total_pages);
964 PrintHeaderFooterText(page_on_page_total, paint, canvas, RIGHT, BOTTOM,
965 webkit_scale_factor);
966
967 // Restore the drawing area to draw in the content area.
968 ((skia::VectorPlatformDeviceSkia* )device)->
969 setDrawingArea(SkPDFDevice::kContent_DrawingArea);
970 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698