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

Side by Side Diff: chrome/renderer/print_web_view_helper_mac.mm

Issue 7348010: Added Header and Footer support using Skia (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: style changes as per demetrios comments 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 #import <AppKit/AppKit.h> 7 #import <AppKit/AppKit.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/mac/scoped_nsautorelease_pool.h" 10 #include "base/mac/scoped_nsautorelease_pool.h"
(...skipping 18 matching lines...) Expand all
29 printing::NativeMetafile metafile; 29 printing::NativeMetafile metafile;
30 if (!metafile.Init()) 30 if (!metafile.Init())
31 return; 31 return;
32 32
33 float scale_factor = frame->getPrintPageShrink(params.page_number); 33 float scale_factor = frame->getPrintPageShrink(params.page_number);
34 int page_number = params.page_number; 34 int page_number = params.page_number;
35 35
36 // Render page for printing. 36 // Render page for printing.
37 gfx::Rect content_area(params.params.printable_size); 37 gfx::Rect content_area(params.params.printable_size);
38 RenderPage(params.params.printable_size, content_area, scale_factor, 38 RenderPage(params.params.printable_size, content_area, scale_factor,
39 page_number, frame, &metafile); 39 page_number, frame, &metafile, false,
40 params.params.display_header_footer);
40 metafile.FinishDocument(); 41 metafile.FinishDocument();
41 42
42 PrintHostMsg_DidPrintPage_Params page_params; 43 PrintHostMsg_DidPrintPage_Params page_params;
43 page_params.data_size = metafile.GetDataSize(); 44 page_params.data_size = metafile.GetDataSize();
44 page_params.page_number = page_number; 45 page_params.page_number = page_number;
45 page_params.document_cookie = params.params.document_cookie; 46 page_params.document_cookie = params.params.document_cookie;
46 page_params.actual_shrink = scale_factor; 47 page_params.actual_shrink = scale_factor;
47 page_params.page_size = params.params.page_size; 48 page_params.page_size = params.params.page_size;
48 page_params.content_area = gfx::Rect(params.params.margin_left, 49 page_params.content_area = gfx::Rect(params.params.margin_left,
49 params.params.margin_top, 50 params.params.margin_top,
(...skipping 11 matching lines...) Expand all
61 62
62 void PrintWebViewHelper::RenderPreviewPage(int page_number) { 63 void PrintWebViewHelper::RenderPreviewPage(int page_number) {
63 float scale_factor = print_preview_context_.frame()->getPrintPageShrink(0); 64 float scale_factor = print_preview_context_.frame()->getPrintPageShrink(0);
64 PrintMsg_Print_Params printParams = print_preview_context_.print_params(); 65 PrintMsg_Print_Params printParams = print_preview_context_.print_params();
65 gfx::Rect content_area(printParams.margin_left, printParams.margin_top, 66 gfx::Rect content_area(printParams.margin_left, printParams.margin_top,
66 printParams.printable_size.width(), 67 printParams.printable_size.width(),
67 printParams.printable_size.height()); 68 printParams.printable_size.height());
68 69
69 base::TimeTicks begin_time = base::TimeTicks::Now(); 70 base::TimeTicks begin_time = base::TimeTicks::Now();
70 RenderPage(printParams.page_size, content_area, scale_factor, page_number, 71 RenderPage(printParams.page_size, content_area, scale_factor, page_number,
71 print_preview_context_.frame(), print_preview_context_.metafile()); 72 print_preview_context_.frame(), print_preview_context_.metafile(),
73 true, printParams.display_header_footer);
72 print_preview_context_.RenderedPreviewPage( 74 print_preview_context_.RenderedPreviewPage(
73 base::TimeTicks::Now() - begin_time); 75 base::TimeTicks::Now() - begin_time);
74 PreviewPageRendered(page_number); 76 PreviewPageRendered(page_number);
75 } 77 }
76 78
77 void PrintWebViewHelper::RenderPage( 79 void PrintWebViewHelper::RenderPage(
78 const gfx::Size& page_size, const gfx::Rect& content_area, 80 const gfx::Size& page_size, const gfx::Rect& content_area,
79 const float& scale_factor, int page_number, WebFrame* frame, 81 const float& scale_factor, int page_number, WebFrame* frame,
80 printing::Metafile* metafile) { 82 printing::Metafile* metafile, bool is_preview,
83 bool display_header_footer) {
vandebo (ex-Chrome) 2011/07/22 22:58:33 Why two bools?
Aayush Kumar 2011/07/24 02:09:02 Removed the display_header_footer bool On 2011/07/
81 84
82 { 85 {
83 #if defined(USE_SKIA) 86 #if defined(USE_SKIA)
84 SkDevice* device = metafile->StartPageForVectorCanvas( 87 SkDevice* device = metafile->StartPageForVectorCanvas(
85 page_size, content_area, scale_factor); 88 page_size, content_area, scale_factor);
86 if (!device) 89 if (!device)
87 return; 90 return;
88 91
89 SkRefPtr<skia::VectorCanvas> canvas = new skia::VectorCanvas(device); 92 SkRefPtr<skia::VectorCanvas> canvas = new skia::VectorCanvas(device);
90 canvas->unref(); // SkRefPtr and new both took a reference. 93 canvas->unref(); // SkRefPtr and new both took a reference.
91 WebKit::WebCanvas* canvasPtr = canvas.get(); 94 WebKit::WebCanvas* canvasPtr = canvas.get();
92 printing::MetafileSkiaWrapper::SetMetafileOnCanvas(canvasPtr, metafile); 95 printing::MetafileSkiaWrapper::SetMetafileOnCanvas(canvasPtr, metafile);
93 #else 96 #else
94 bool success = metafile->StartPage(page_size, content_area, scale_factor); 97 bool success = metafile->StartPage(page_size, content_area, scale_factor);
95 DCHECK(success); 98 DCHECK(success);
96 // printPage can create autoreleased references to |context|. PDF contexts 99 // printPage can create autoreleased references to |context|. PDF contexts
97 // don't write all their data until they are destroyed, so we need to make 100 // don't write all their data until they are destroyed, so we need to make
98 // certain that there are no lingering references. 101 // certain that there are no lingering references.
99 base::mac::ScopedNSAutoreleasePool pool; 102 base::mac::ScopedNSAutoreleasePool pool;
100 CGContextRef cgContext = metafile->context(); 103 CGContextRef cgContext = metafile->context();
101 CGContextRef canvasPtr = cgContext; 104 CGContextRef canvasPtr = cgContext;
102 #endif 105 #endif
103 frame->printPage(page_number, canvasPtr); 106 float webkit_scale_factor = frame->printPage(page_number, canvasPtr);
107 #if defined(USE_SKIA)
108 if (is_preview && display_header_footer) {
109 PageSizeMargins page_size_margins_in_points =
110 GetPageSizeAndMarginsInPoints(frame, page_number,
111 print_preview_context_.print_params());
112 // The page_number count starts from 0, so we add 1.
113 PrintHeaderAndFooter(static_cast<skia::VectorPlatformDeviceSkia*>(device),
114 canvas, page_number + 1,
115 print_preview_context_.total_page_count(),
116 webkit_scale_factor, page_size_margins_in_points,
117 header_footer_info_);
118 }
119 #endif
104 } 120 }
105 121
106 // Done printing. Close the device context to retrieve the compiled metafile. 122 // Done printing. Close the device context to retrieve the compiled metafile.
107 metafile->FinishPage(); 123 metafile->FinishPage();
108 } 124 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698