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

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

Issue 11359020: Print headers and footers with WebKit. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 145
146 ComputePageLayoutInPointsForCss(frame, page_number, params, 146 ComputePageLayoutInPointsForCss(frame, page_number, params,
147 ignore_css_margins_, &scale_factor, 147 ignore_css_margins_, &scale_factor,
148 &page_layout_in_points); 148 &page_layout_in_points);
149 GetPageSizeAndContentAreaFromPageLayout(page_layout_in_points, page_size, 149 GetPageSizeAndContentAreaFromPageLayout(page_layout_in_points, page_size,
150 &content_area); 150 &content_area);
151 if (content_rect) 151 if (content_rect)
152 *content_rect = content_area; 152 *content_rect = content_area;
153 153
154 scale_factor *= webkit_shrink_factor; 154 scale_factor *= webkit_shrink_factor;
155
156 gfx::Rect canvas_area =
157 params.display_header_footer ? gfx::Rect(*page_size) : content_area;
158
155 { 159 {
156 #if defined(USE_SKIA) 160 #if defined(USE_SKIA)
157 SkDevice* device = metafile->StartPageForVectorCanvas( 161 SkDevice* device = metafile->StartPageForVectorCanvas(
158 *page_size, content_area, scale_factor); 162 *page_size, canvas_area, scale_factor);
159 if (!device) 163 if (!device)
160 return; 164 return;
161 165
162 SkRefPtr<skia::VectorCanvas> canvas = new skia::VectorCanvas(device); 166 SkRefPtr<skia::VectorCanvas> canvas = new skia::VectorCanvas(device);
163 canvas->unref(); // SkRefPtr and new both took a reference. 167 canvas->unref(); // SkRefPtr and new both took a reference.
164 WebKit::WebCanvas* canvas_ptr = canvas.get(); 168 WebKit::WebCanvas* canvas_ptr = canvas.get();
165 printing::MetafileSkiaWrapper::SetMetafileOnCanvas(*canvas, metafile); 169 printing::MetafileSkiaWrapper::SetMetafileOnCanvas(*canvas, metafile);
166 skia::SetIsDraftMode(*canvas, is_print_ready_metafile_sent_); 170 skia::SetIsDraftMode(*canvas, is_print_ready_metafile_sent_);
167 skia::SetIsPreviewMetafile(*canvas, is_preview); 171 skia::SetIsPreviewMetafile(*canvas, is_preview);
168 #else 172 #else
Alexei Svitkine (slow) 2012/11/02 18:19:14 You can delete the #else block here and remove the
169 bool success = metafile->StartPage(*page_size, content_area, scale_factor); 173 bool success = metafile->StartPage(*page_size, canvas_area, scale_factor);
170 DCHECK(success); 174 DCHECK(success);
171 // printPage can create autoreleased references to |context|. PDF contexts 175 // printPage can create autoreleased references to |context|. PDF contexts
172 // don't write all their data until they are destroyed, so we need to make 176 // don't write all their data until they are destroyed, so we need to make
173 // certain that there are no lingering references. 177 // certain that there are no lingering references.
174 base::mac::ScopedNSAutoreleasePool pool; 178 base::mac::ScopedNSAutoreleasePool pool;
175 CGContextRef cgContext = metafile->context(); 179 CGContextRef cgContext = metafile->context();
176 CGContextRef canvas_ptr = cgContext; 180 CGContextRef canvas_ptr = cgContext;
177 181
178 // For CoreGraphics, print in the margins before printing in the content 182 #endif // !USE_SKIA
179 // area so that we don't spill over. Webkit draws a white background in the
180 // content area and this acts as a clip.
181 // TODO(aayushkumar): Combine the calls to PrintHeaderAndFooter once we
182 // can draw in the margins safely in Skia in any order.
183 if (print_pages_params_->params.display_header_footer) { 183 if (print_pages_params_->params.display_header_footer) {
184 PrintHeaderAndFooter(canvas_ptr, page_number + 1, 184 PrintHeaderAndFooter(canvas_ptr, page_number + 1,
185 print_preview_context_.total_page_count(), 185 print_preview_context_.total_page_count(),
186 scale_factor, page_layout_in_points, 186 scale_factor, page_layout_in_points,
187 *header_footer_info_, params); 187 *header_footer_info_, params);
188 } 188 }
189 #endif // !USE_SKIA 189 canvas_ptr->translate((content_area.x() - canvas_area.x()) / scale_factor,
190 (content_area.y() - canvas_area.y()) / scale_factor);
190 191
191 frame->printPage(page_number, canvas_ptr); 192 frame->printPage(page_number, canvas_ptr);
192
193 #if defined(USE_SKIA)
194 if (print_pages_params_->params.display_header_footer) {
195 // |page_number| is 0-based, so 1 is added.
196 PrintHeaderAndFooter(canvas_ptr, page_number + 1,
197 print_preview_context_.total_page_count(),
198 scale_factor, page_layout_in_points,
199 *header_footer_info_, params);
200 }
201 #endif // defined(USE_SKIA)
202 } 193 }
203 194
204 // Done printing. Close the device context to retrieve the compiled metafile. 195 // Done printing. Close the device context to retrieve the compiled metafile.
205 metafile->FinishPage(); 196 metafile->FinishPage();
206 } 197 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698