| OLD | NEW |
| 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 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/process_util.h" | 10 #include "base/process_util.h" |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 // Therefore, expecting a metafile with page count 1. | 272 // Therefore, expecting a metafile with page count 1. |
| 273 DCHECK_EQ(1U, metafile->GetPageCount()); | 273 DCHECK_EQ(1U, metafile->GetPageCount()); |
| 274 | 274 |
| 275 // Close the device context to retrieve the compiled metafile. | 275 // Close the device context to retrieve the compiled metafile. |
| 276 if (!metafile->FinishDocument()) | 276 if (!metafile->FinishDocument()) |
| 277 NOTREACHED(); | 277 NOTREACHED(); |
| 278 | 278 |
| 279 // Page used alpha blend, but printer doesn't support it. Rewrite the | 279 // Page used alpha blend, but printer doesn't support it. Rewrite the |
| 280 // metafile and flatten out the transparency. | 280 // metafile and flatten out the transparency. |
| 281 base::win::ScopedGetDC screen_dc(NULL); | 281 base::win::ScopedGetDC screen_dc(NULL); |
| 282 base::win::ScopedCreateDC bitmap_dc(CreateCompatibleDC(screen_dc)); | 282 base::win::ScopedCreateDC bitmap_dc(CreateCompatibleDC(screen_dc.get())); |
| 283 if (!bitmap_dc) | 283 if (!bitmap_dc.get()) |
| 284 NOTREACHED() << "Bitmap DC creation failed"; | 284 NOTREACHED() << "Bitmap DC creation failed"; |
| 285 SetGraphicsMode(bitmap_dc, GM_ADVANCED); | 285 SetGraphicsMode(bitmap_dc.get(), GM_ADVANCED); |
| 286 void* bits = NULL; | 286 void* bits = NULL; |
| 287 BITMAPINFO hdr; | 287 BITMAPINFO hdr; |
| 288 gfx::CreateBitmapHeader(page_size.width(), page_size.height(), | 288 gfx::CreateBitmapHeader(page_size.width(), page_size.height(), |
| 289 &hdr.bmiHeader); | 289 &hdr.bmiHeader); |
| 290 base::win::ScopedBitmap hbitmap(CreateDIBSection( | 290 base::win::ScopedBitmap hbitmap(CreateDIBSection( |
| 291 bitmap_dc, &hdr, DIB_RGB_COLORS, &bits, NULL, 0)); | 291 bitmap_dc.get(), &hdr, DIB_RGB_COLORS, &bits, NULL, 0)); |
| 292 if (!hbitmap) | 292 if (!hbitmap) |
| 293 NOTREACHED() << "Raster bitmap creation for printing failed"; | 293 NOTREACHED() << "Raster bitmap creation for printing failed"; |
| 294 | 294 |
| 295 base::win::ScopedSelectObject selectBitmap(bitmap_dc, hbitmap); | 295 base::win::ScopedSelectObject selectBitmap(bitmap_dc.get(), hbitmap); |
| 296 RECT rect = { 0, 0, page_size.width(), page_size.height() }; | 296 RECT rect = { 0, 0, page_size.width(), page_size.height() }; |
| 297 HBRUSH whiteBrush = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH)); | 297 HBRUSH whiteBrush = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH)); |
| 298 FillRect(bitmap_dc, &rect, whiteBrush); | 298 FillRect(bitmap_dc.get(), &rect, whiteBrush); |
| 299 | 299 |
| 300 Metafile* metafile2(new printing::NativeMetafile); | 300 Metafile* metafile2(new printing::NativeMetafile); |
| 301 metafile2->Init(); | 301 metafile2->Init(); |
| 302 HDC hdc = metafile2->context(); | 302 HDC hdc = metafile2->context(); |
| 303 DCHECK(hdc); | 303 DCHECK(hdc); |
| 304 skia::InitializeDC(hdc); | 304 skia::InitializeDC(hdc); |
| 305 | 305 |
| 306 RECT metafile_bounds = metafile->GetPageBounds(1).ToRECT(); | 306 RECT metafile_bounds = metafile->GetPageBounds(1).ToRECT(); |
| 307 // Process the old metafile, placing all non-AlphaBlend calls into the | 307 // Process the old metafile, placing all non-AlphaBlend calls into the |
| 308 // new metafile, and copying the results of all the AlphaBlend calls | 308 // new metafile, and copying the results of all the AlphaBlend calls |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 shared_buf.Unmap(); | 342 shared_buf.Unmap(); |
| 343 return false; | 343 return false; |
| 344 } | 344 } |
| 345 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), shared_mem_handle); | 345 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), shared_mem_handle); |
| 346 shared_buf.Unmap(); | 346 shared_buf.Unmap(); |
| 347 | 347 |
| 348 Send(new PrintHostMsg_DuplicateSection(routing_id(), *shared_mem_handle, | 348 Send(new PrintHostMsg_DuplicateSection(routing_id(), *shared_mem_handle, |
| 349 shared_mem_handle)); | 349 shared_mem_handle)); |
| 350 return true; | 350 return true; |
| 351 } | 351 } |
| OLD | NEW |