Chromium Code Reviews| 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 "webkit/plugins/ppapi/ppapi_plugin_instance.h" | 5 #include "webkit/plugins/ppapi/ppapi_plugin_instance.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/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 1302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1313 canvas->drawBitmapRect(*bitmap, &src_rect, dest_rect); | 1313 canvas->drawBitmapRect(*bitmap, &src_rect, dest_rect); |
| 1314 #endif // defined(OS_MACOSX) | 1314 #endif // defined(OS_MACOSX) |
| 1315 return true; | 1315 return true; |
| 1316 } | 1316 } |
| 1317 | 1317 |
| 1318 #if defined(OS_WIN) | 1318 #if defined(OS_WIN) |
| 1319 bool PluginInstance::DrawJPEGToPlatformDC( | 1319 bool PluginInstance::DrawJPEGToPlatformDC( |
| 1320 const SkBitmap& bitmap, | 1320 const SkBitmap& bitmap, |
| 1321 const gfx::Rect& printable_area, | 1321 const gfx::Rect& printable_area, |
| 1322 WebKit::WebCanvas* canvas) { | 1322 WebKit::WebCanvas* canvas) { |
| 1323 HDC dc = canvas->beginPlatformPaint(); | |
| 1324 // TODO(sanjeevr): This is a temporary hack. If we output a JPEG | |
| 1325 // to the EMF, the EnumEnhMetaFile call fails in the browser | |
| 1326 // process. The failure also happens if we output nothing here. | |
| 1327 // We need to investigate the reason for this failure and fix it. | |
| 1328 // In the meantime this temporary hack of drawing an empty | |
| 1329 // rectangle in the DC gets us by. | |
| 1330 Rectangle(dc, 0, 0, 0, 0); | |
| 1331 | |
| 1332 // Ideally we should add JPEG compression to the VectorPlatformDevice class | 1323 // Ideally we should add JPEG compression to the VectorPlatformDevice class |
| 1333 // However, Skia currently has no JPEG compression code and we cannot | 1324 // However, Skia currently has no JPEG compression code and we cannot |
| 1334 // depend on gfx/jpeg_codec.h in Skia. So we do the compression here. | 1325 // depend on gfx/jpeg_codec.h in Skia. So we do the compression here. |
| 1335 SkAutoLockPixels lock(bitmap); | 1326 SkAutoLockPixels lock(bitmap); |
| 1336 DCHECK(bitmap.getConfig() == SkBitmap::kARGB_8888_Config); | 1327 DCHECK(bitmap.getConfig() == SkBitmap::kARGB_8888_Config); |
| 1337 const uint32_t* pixels = | 1328 const uint32_t* pixels = |
| 1338 static_cast<const uint32_t*>(bitmap.getPixels()); | 1329 static_cast<const uint32_t*>(bitmap.getPixels()); |
| 1339 std::vector<unsigned char> compressed_image; | 1330 std::vector<unsigned char> compressed_image; |
| 1340 base::TimeTicks start_time = base::TimeTicks::Now(); | 1331 base::TimeTicks start_time = base::TimeTicks::Now(); |
| 1341 bool encoded = gfx::JPEGCodec::Encode( | 1332 bool encoded = gfx::JPEGCodec::Encode( |
| 1342 reinterpret_cast<const unsigned char*>(pixels), | 1333 reinterpret_cast<const unsigned char*>(pixels), |
| 1343 gfx::JPEGCodec::FORMAT_BGRA, bitmap.width(), bitmap.height(), | 1334 gfx::JPEGCodec::FORMAT_BGRA, bitmap.width(), bitmap.height(), |
| 1344 static_cast<int>(bitmap.rowBytes()), 100, &compressed_image); | 1335 static_cast<int>(bitmap.rowBytes()), 100, &compressed_image); |
| 1345 UMA_HISTOGRAM_TIMES("PepperPluginPrint.RasterBitmapCompressTime", | 1336 UMA_HISTOGRAM_TIMES("PepperPluginPrint.RasterBitmapCompressTime", |
| 1346 base::TimeTicks::Now() - start_time); | 1337 base::TimeTicks::Now() - start_time); |
| 1347 if (!encoded) { | 1338 if (!encoded) { |
| 1348 NOTREACHED(); | 1339 NOTREACHED(); |
| 1349 return false; | 1340 return false; |
| 1350 } | 1341 } |
| 1342 | |
| 1343 HDC dc = canvas->beginPlatformPaint(); | |
|
vandebo (ex-Chrome)
2011/04/05 20:38:49
*B*eginPlatformPaint
alokp
2011/04/05 20:49:29
This is a call on canvas, not device. I am not fix
vandebo (ex-Chrome)
2011/04/05 20:59:09
Oops, right.
| |
| 1344 // TODO(sanjeevr): This is a temporary hack. If we output a JPEG | |
| 1345 // to the EMF, the EnumEnhMetaFile call fails in the browser | |
| 1346 // process. The failure also happens if we output nothing here. | |
| 1347 // We need to investigate the reason for this failure and fix it. | |
| 1348 // In the meantime this temporary hack of drawing an empty | |
| 1349 // rectangle in the DC gets us by. | |
| 1350 Rectangle(dc, 0, 0, 0, 0); | |
| 1351 BITMAPINFOHEADER bmi = {0}; | 1351 BITMAPINFOHEADER bmi = {0}; |
| 1352 gfx::CreateBitmapHeader(bitmap.width(), bitmap.height(), &bmi); | 1352 gfx::CreateBitmapHeader(bitmap.width(), bitmap.height(), &bmi); |
| 1353 bmi.biCompression = BI_JPEG; | 1353 bmi.biCompression = BI_JPEG; |
| 1354 bmi.biSizeImage = compressed_image.size(); | 1354 bmi.biSizeImage = compressed_image.size(); |
| 1355 bmi.biHeight = -bmi.biHeight; | 1355 bmi.biHeight = -bmi.biHeight; |
| 1356 StretchDIBits(dc, printable_area.x(), printable_area.y(), | 1356 StretchDIBits(dc, printable_area.x(), printable_area.y(), |
| 1357 printable_area.width(), printable_area.height(), | 1357 printable_area.width(), printable_area.height(), |
| 1358 0, 0, bitmap.width(), bitmap.height(), | 1358 0, 0, bitmap.width(), bitmap.height(), |
| 1359 &compressed_image.front(), | 1359 &compressed_image.front(), |
| 1360 reinterpret_cast<const BITMAPINFO*>(&bmi), | 1360 reinterpret_cast<const BITMAPINFO*>(&bmi), |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1468 return found->second; | 1468 return found->second; |
| 1469 } | 1469 } |
| 1470 | 1470 |
| 1471 bool PluginInstance::IsFullPagePlugin() const { | 1471 bool PluginInstance::IsFullPagePlugin() const { |
| 1472 WebFrame* frame = container()->element().document().frame(); | 1472 WebFrame* frame = container()->element().document().frame(); |
| 1473 return frame->view()->mainFrame()->document().isPluginDocument(); | 1473 return frame->view()->mainFrame()->document().isPluginDocument(); |
| 1474 } | 1474 } |
| 1475 | 1475 |
| 1476 } // namespace ppapi | 1476 } // namespace ppapi |
| 1477 } // namespace webkit | 1477 } // namespace webkit |
| OLD | NEW |