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

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

Issue 6696076: Adding CreateFromData to NativeMetafileFactory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebasing Created 9 years, 9 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 "base/logging.h" 7 #include "base/logging.h"
8 #include "base/process_util.h" 8 #include "base/process_util.h"
9 #include "chrome/common/print_messages.h" 9 #include "chrome/common/print_messages.h"
10 #include "content/common/view_messages.h" 10 #include "content/common/view_messages.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 67
68 } // namespace 68 } // namespace
69 69
70 void PrintWebViewHelper::PrintPage(const PrintMsg_PrintPage_Params& params, 70 void PrintWebViewHelper::PrintPage(const PrintMsg_PrintPage_Params& params,
71 const gfx::Size& canvas_size, 71 const gfx::Size& canvas_size,
72 WebFrame* frame) { 72 WebFrame* frame) {
73 // Generate a memory-based metafile. It will use the current screen's DPI. 73 // Generate a memory-based metafile. It will use the current screen's DPI.
74 // Each metafile contains a single page. 74 // Each metafile contains a single page.
75 scoped_ptr<printing::NativeMetafile> metafile( 75 scoped_ptr<printing::NativeMetafile> metafile(
76 printing::NativeMetafileFactory::Create()); 76 printing::NativeMetafileFactory::Create());
77 metafile->Init();
78 DCHECK(metafile->context()); 77 DCHECK(metafile->context());
79 skia::PlatformDevice::InitializeDC(metafile->context()); 78 skia::PlatformDevice::InitializeDC(metafile->context());
80 79
81 int page_number = params.page_number; 80 int page_number = params.page_number;
82 81
83 // Calculate the dpi adjustment. 82 // Calculate the dpi adjustment.
84 float scale_factor = static_cast<float>(params.params.desired_dpi / 83 float scale_factor = static_cast<float>(params.params.desired_dpi /
85 params.params.dpi); 84 params.params.dpi);
86 85
87 // Render page for printing. 86 // Render page for printing.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 133
135 // NOTE: This is an enhanced-format metafile(EMF) which has an appearance of 134 // NOTE: This is an enhanced-format metafile(EMF) which has an appearance of
136 // single page metafile. For print preview, we need a metafile with multiple 135 // single page metafile. For print preview, we need a metafile with multiple
137 // pages. 136 // pages.
138 // TODO(kmadhusu): Use a PDF metafile to support multiple pages. After "Skia 137 // TODO(kmadhusu): Use a PDF metafile to support multiple pages. After "Skia
139 // PDF backend" work is completed for windows, make changes to replace this 138 // PDF backend" work is completed for windows, make changes to replace this
140 // EMF with PDF metafile. 139 // EMF with PDF metafile.
141 // http://code.google.com/p/chromium/issues/detail?id=62889 140 // http://code.google.com/p/chromium/issues/detail?id=62889
142 scoped_ptr<printing::NativeMetafile> metafile( 141 scoped_ptr<printing::NativeMetafile> metafile(
143 printing::NativeMetafileFactory::Create()); 142 printing::NativeMetafileFactory::Create());
144 metafile->Init();
145 DCHECK(metafile->context()); 143 DCHECK(metafile->context());
146 skia::PlatformDevice::InitializeDC(metafile->context()); 144 skia::PlatformDevice::InitializeDC(metafile->context());
147 145
148 // Calculate the dpi adjustment. 146 // Calculate the dpi adjustment.
149 float shrink = static_cast<float>(params.params.desired_dpi / 147 float shrink = static_cast<float>(params.params.desired_dpi /
150 params.params.dpi); 148 params.params.dpi);
151 149
152 if (params.pages.empty()) { 150 if (params.pages.empty()) {
153 for (int i = 0; i < page_count; ++i) { 151 for (int i = 0; i < page_count; ++i) {
154 float scale_factor = shrink; 152 float scale_factor = shrink;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 HBITMAP hbitmap = CreateDIBSection( 252 HBITMAP hbitmap = CreateDIBSection(
255 bitmap_dc, &hdr, DIB_RGB_COLORS, &bits, NULL, 0); 253 bitmap_dc, &hdr, DIB_RGB_COLORS, &bits, NULL, 0);
256 if (!hbitmap) 254 if (!hbitmap)
257 NOTREACHED() << "Raster bitmap creation for printing failed"; 255 NOTREACHED() << "Raster bitmap creation for printing failed";
258 256
259 HGDIOBJ old_bitmap = SelectObject(bitmap_dc, hbitmap); 257 HGDIOBJ old_bitmap = SelectObject(bitmap_dc, hbitmap);
260 RECT rect = {0, 0, width, height }; 258 RECT rect = {0, 0, width, height };
261 HBRUSH whiteBrush = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH)); 259 HBRUSH whiteBrush = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
262 FillRect(bitmap_dc, &rect, whiteBrush); 260 FillRect(bitmap_dc, &rect, whiteBrush);
263 261
264 metafile2->Init();
265 HDC hdc = metafile2->context(); 262 HDC hdc = metafile2->context();
266 DCHECK(hdc); 263 DCHECK(hdc);
267 skia::PlatformDevice::InitializeDC(hdc); 264 skia::PlatformDevice::InitializeDC(hdc);
268 265
269 RECT metafile_bounds = (*metafile)->GetPageBounds(1).ToRECT(); 266 RECT metafile_bounds = (*metafile)->GetPageBounds(1).ToRECT();
270 // Process the old metafile, placing all non-AlphaBlend calls into the 267 // Process the old metafile, placing all non-AlphaBlend calls into the
271 // new metafile, and copying the results of all the AlphaBlend calls 268 // new metafile, and copying the results of all the AlphaBlend calls
272 // from the bitmap DC. 269 // from the bitmap DC.
273 EnumEnhMetaFile(hdc, 270 EnumEnhMetaFile(hdc,
274 (*metafile)->emf(), 271 (*metafile)->emf(),
(...skipping 29 matching lines...) Expand all
304 // Copy the bits into shared memory. 301 // Copy the bits into shared memory.
305 if (!metafile->GetData(shared_buf.memory(), buf_size)) { 302 if (!metafile->GetData(shared_buf.memory(), buf_size)) {
306 NOTREACHED() << "GetData() failed"; 303 NOTREACHED() << "GetData() failed";
307 shared_buf.Unmap(); 304 shared_buf.Unmap();
308 return false; 305 return false;
309 } 306 }
310 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), shared_mem_handle); 307 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), shared_mem_handle);
311 shared_buf.Unmap(); 308 shared_buf.Unmap();
312 return true; 309 return true;
313 } 310 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698