| 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 #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/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/process_util.h" | 9 #include "base/process_util.h" |
| 10 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 | 72 |
| 73 void PrintWebViewHelper::PrintPageInternal( | 73 void PrintWebViewHelper::PrintPageInternal( |
| 74 const PrintMsg_PrintPage_Params& params, | 74 const PrintMsg_PrintPage_Params& params, |
| 75 const gfx::Size& canvas_size, | 75 const gfx::Size& canvas_size, |
| 76 WebFrame* frame) { | 76 WebFrame* frame) { |
| 77 // Generate a memory-based metafile. It will use the current screen's DPI. | 77 // Generate a memory-based metafile. It will use the current screen's DPI. |
| 78 // Each metafile contains a single page. | 78 // Each metafile contains a single page. |
| 79 scoped_ptr<Metafile> metafile(new printing::NativeMetafile); | 79 scoped_ptr<Metafile> metafile(new printing::NativeMetafile); |
| 80 metafile->Init(); | 80 metafile->Init(); |
| 81 DCHECK(metafile->context()); | 81 DCHECK(metafile->context()); |
| 82 skia::PlatformDevice::InitializeDC(metafile->context()); | 82 skia::InitializeDC(metafile->context()); |
| 83 | 83 |
| 84 int page_number = params.page_number; | 84 int page_number = params.page_number; |
| 85 | 85 |
| 86 // Calculate the dpi adjustment. | 86 // Calculate the dpi adjustment. |
| 87 float scale_factor = static_cast<float>(params.params.desired_dpi / | 87 float scale_factor = static_cast<float>(params.params.desired_dpi / |
| 88 params.params.dpi); | 88 params.params.dpi); |
| 89 | 89 |
| 90 // Render page for printing. | 90 // Render page for printing. |
| 91 RenderPage(params.params, &scale_factor, page_number, false, frame, | 91 RenderPage(params.params, &scale_factor, page_number, false, frame, |
| 92 &metafile); | 92 &metafile); |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 // PrintContext will then set the correct clipping region. | 213 // PrintContext will then set the correct clipping region. |
| 214 width = static_cast<int>(content_width_in_points * params.max_shrink); | 214 width = static_cast<int>(content_width_in_points * params.max_shrink); |
| 215 height = static_cast<int>(content_height_in_points * params.max_shrink); | 215 height = static_cast<int>(content_height_in_points * params.max_shrink); |
| 216 } | 216 } |
| 217 | 217 |
| 218 gfx::Size page_size(width, height); | 218 gfx::Size page_size(width, height); |
| 219 gfx::Rect content_area(static_cast<int>(margin_left_in_points), | 219 gfx::Rect content_area(static_cast<int>(margin_left_in_points), |
| 220 static_cast<int>(margin_top_in_points), | 220 static_cast<int>(margin_top_in_points), |
| 221 static_cast<int>(content_width_in_points), | 221 static_cast<int>(content_width_in_points), |
| 222 static_cast<int>(content_height_in_points)); | 222 static_cast<int>(content_height_in_points)); |
| 223 skia::PlatformDevice* device = (*metafile)->StartPageForVectorCanvas( | 223 SkDevice* device = (*metafile)->StartPageForVectorCanvas( |
| 224 page_size, content_area, frame->getPrintPageShrink(page_number)); | 224 page_size, content_area, frame->getPrintPageShrink(page_number)); |
| 225 DCHECK(device); | 225 DCHECK(device); |
| 226 skia::VectorCanvas canvas(device); | 226 skia::VectorCanvas canvas(device); |
| 227 | 227 |
| 228 float webkit_scale_factor = frame->printPage(page_number, &canvas); | 228 float webkit_scale_factor = frame->printPage(page_number, &canvas); |
| 229 if (*scale_factor <= 0 || webkit_scale_factor <= 0) { | 229 if (*scale_factor <= 0 || webkit_scale_factor <= 0) { |
| 230 NOTREACHED() << "Printing page " << page_number << " failed."; | 230 NOTREACHED() << "Printing page " << page_number << " failed."; |
| 231 } else { | 231 } else { |
| 232 // Update the dpi adjustment with the "page |scale_factor|" calculated in | 232 // Update the dpi adjustment with the "page |scale_factor|" calculated in |
| 233 // webkit. | 233 // webkit. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 | 268 |
| 269 HGDIOBJ old_bitmap = SelectObject(bitmap_dc, hbitmap); | 269 HGDIOBJ old_bitmap = SelectObject(bitmap_dc, hbitmap); |
| 270 RECT rect = {0, 0, width, height }; | 270 RECT rect = {0, 0, width, height }; |
| 271 HBRUSH whiteBrush = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH)); | 271 HBRUSH whiteBrush = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH)); |
| 272 FillRect(bitmap_dc, &rect, whiteBrush); | 272 FillRect(bitmap_dc, &rect, whiteBrush); |
| 273 | 273 |
| 274 scoped_ptr<Metafile> metafile2(new printing::NativeMetafile); | 274 scoped_ptr<Metafile> metafile2(new printing::NativeMetafile); |
| 275 metafile2->Init(); | 275 metafile2->Init(); |
| 276 HDC hdc = metafile2->context(); | 276 HDC hdc = metafile2->context(); |
| 277 DCHECK(hdc); | 277 DCHECK(hdc); |
| 278 skia::PlatformDevice::InitializeDC(hdc); | 278 skia::InitializeDC(hdc); |
| 279 | 279 |
| 280 RECT metafile_bounds = (*metafile)->GetPageBounds(1).ToRECT(); | 280 RECT metafile_bounds = (*metafile)->GetPageBounds(1).ToRECT(); |
| 281 // Process the old metafile, placing all non-AlphaBlend calls into the | 281 // Process the old metafile, placing all non-AlphaBlend calls into the |
| 282 // new metafile, and copying the results of all the AlphaBlend calls | 282 // new metafile, and copying the results of all the AlphaBlend calls |
| 283 // from the bitmap DC. | 283 // from the bitmap DC. |
| 284 EnumEnhMetaFile(hdc, | 284 EnumEnhMetaFile(hdc, |
| 285 (*metafile)->emf(), | 285 (*metafile)->emf(), |
| 286 EnhMetaFileProc, | 286 EnhMetaFileProc, |
| 287 &bitmap_dc, | 287 &bitmap_dc, |
| 288 &metafile_bounds); | 288 &metafile_bounds); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 315 // Copy the bits into shared memory. | 315 // Copy the bits into shared memory. |
| 316 if (!metafile->GetData(shared_buf.memory(), buf_size)) { | 316 if (!metafile->GetData(shared_buf.memory(), buf_size)) { |
| 317 NOTREACHED() << "GetData() failed"; | 317 NOTREACHED() << "GetData() failed"; |
| 318 shared_buf.Unmap(); | 318 shared_buf.Unmap(); |
| 319 return false; | 319 return false; |
| 320 } | 320 } |
| 321 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), shared_mem_handle); | 321 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), shared_mem_handle); |
| 322 shared_buf.Unmap(); | 322 shared_buf.Unmap(); |
| 323 return true; | 323 return true; |
| 324 } | 324 } |
| OLD | NEW |