Index: webkit/plugins/ppapi/ppapi_plugin_instance.cc |
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc |
index 09554fab11a31d36cedbab2b37bb2629a9fe1a15..6ffd4249a748d8680a027aa9e2efe9a371839315 100644 |
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc |
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc |
@@ -1105,9 +1105,6 @@ bool PluginInstance::GetPreferredPrintOutputFormat( |
if (supported_formats & PP_PRINTOUTPUTFORMAT_PDF) { |
*format = PP_PRINTOUTPUTFORMAT_PDF; |
return true; |
- } else if (supported_formats & PP_PRINTOUTPUTFORMAT_RASTER) { |
- *format = PP_PRINTOUTPUTFORMAT_RASTER; |
- return true; |
} |
return false; |
} |
@@ -1194,8 +1191,6 @@ bool PluginInstance::PrintPageHelper(PP_PrintPageNumberRange_Dev* page_ranges, |
if (current_print_settings_.format == PP_PRINTOUTPUTFORMAT_PDF) |
ret = PrintPDFOutput(print_output, canvas); |
- else if (current_print_settings_.format == PP_PRINTOUTPUTFORMAT_RASTER) |
- ret = PrintRasterOutput(print_output, canvas); |
// Now we need to release the print output resource. |
PluginModule::GetCore()->ReleaseResource(print_output); |
@@ -1496,144 +1491,6 @@ bool PluginInstance::PrintPDFOutput(PP_Resource print_output, |
return ret; |
} |
-bool PluginInstance::PrintRasterOutput(PP_Resource print_output, |
- WebKit::WebCanvas* canvas) { |
- EnterResourceNoLock<PPB_ImageData_API> enter(print_output, true); |
- if (enter.failed()) |
- return false; |
- PPB_ImageData_Impl* image = |
- static_cast<PPB_ImageData_Impl*>(enter.object()); |
- |
- if (!image->Map()) |
- return false; |
- |
- const SkBitmap* bitmap = image->GetMappedBitmap(); |
- if (!bitmap) |
- return false; |
- |
- // Draw the printed image into the supplied canvas. |
- SkIRect src_rect; |
- src_rect.set(0, 0, bitmap->width(), bitmap->height()); |
- SkRect dest_rect; |
- dest_rect.set( |
- SkIntToScalar(current_print_settings_.printable_area.point.x), |
- SkIntToScalar(current_print_settings_.printable_area.point.y), |
- SkIntToScalar(current_print_settings_.printable_area.point.x + |
- current_print_settings_.printable_area.size.width), |
- SkIntToScalar(current_print_settings_.printable_area.point.y + |
- current_print_settings_.printable_area.size.height)); |
- bool draw_to_canvas = true; |
- gfx::Rect dest_rect_gfx; |
- dest_rect_gfx.set_x(current_print_settings_.printable_area.point.x); |
- dest_rect_gfx.set_y(current_print_settings_.printable_area.point.y); |
- dest_rect_gfx.set_width(current_print_settings_.printable_area.size.width); |
- dest_rect_gfx.set_height(current_print_settings_.printable_area.size.height); |
- |
-#if defined(OS_WIN) |
- // Since this is a raster output, the size of the bitmap can be |
- // huge (especially at high printer DPIs). On Windows, this can |
- // result in a HUGE EMF (on Mac and Linux the output goes to PDF |
- // which appears to Flate compress the bitmap). So, if this bitmap |
- // is larger than 20 MB, we save the bitmap as a JPEG into the EMF |
- // DC. Note: We chose JPEG over PNG because JPEG compression seems |
- // way faster (about 4 times faster). |
- static const int kCompressionThreshold = 20 * 1024 * 1024; |
- if (bitmap->getSize() > kCompressionThreshold) { |
- DrawJPEGToPlatformDC(*bitmap, dest_rect_gfx, canvas); |
- draw_to_canvas = false; |
- } |
-#endif // defined(OS_WIN) |
-#if defined(OS_MACOSX) && !defined(USE_SKIA) |
- draw_to_canvas = false; |
- DrawSkBitmapToCanvas(*bitmap, canvas, dest_rect_gfx, |
- current_print_settings_.printable_area.size.height); |
- // See comments in the header file. |
- last_printed_page_ = image; |
-#else // defined(OS_MACOSX) && !defined(USE_SKIA) |
- if (draw_to_canvas) |
- canvas->drawBitmapRect(*bitmap, &src_rect, dest_rect); |
-#endif // defined(OS_MACOSX) && !defined(USE_SKIA) |
- return true; |
-} |
- |
-#if defined(OS_WIN) |
-bool PluginInstance::DrawJPEGToPlatformDC( |
- const SkBitmap& bitmap, |
- const gfx::Rect& printable_area, |
- WebKit::WebCanvas* canvas) { |
- // Ideally we should add JPEG compression to the VectorPlatformDevice class |
- // However, Skia currently has no JPEG compression code and we cannot |
- // depend on gfx/jpeg_codec.h in Skia. So we do the compression here. |
- SkAutoLockPixels lock(bitmap); |
- DCHECK(bitmap.config() == SkBitmap::kARGB_8888_Config); |
- const uint32_t* pixels = |
- static_cast<const uint32_t*>(bitmap.getPixels()); |
- std::vector<unsigned char> compressed_image; |
- base::TimeTicks start_time = base::TimeTicks::Now(); |
- bool encoded = gfx::JPEGCodec::Encode( |
- reinterpret_cast<const unsigned char*>(pixels), |
- gfx::JPEGCodec::FORMAT_BGRA, bitmap.width(), bitmap.height(), |
- static_cast<int>(bitmap.rowBytes()), 100, &compressed_image); |
- UMA_HISTOGRAM_TIMES("PepperPluginPrint.RasterBitmapCompressTime", |
- base::TimeTicks::Now() - start_time); |
- if (!encoded) { |
- NOTREACHED(); |
- return false; |
- } |
- |
- skia::ScopedPlatformPaint scoped_platform_paint(canvas); |
- HDC dc = scoped_platform_paint.GetPlatformSurface(); |
- DrawEmptyRectangle(dc); |
- BITMAPINFOHEADER bmi = {0}; |
- gfx::CreateBitmapHeader(bitmap.width(), bitmap.height(), &bmi); |
- bmi.biCompression = BI_JPEG; |
- bmi.biSizeImage = compressed_image.size(); |
- bmi.biHeight = -bmi.biHeight; |
- StretchDIBits(dc, printable_area.x(), printable_area.y(), |
- printable_area.width(), printable_area.height(), |
- 0, 0, bitmap.width(), bitmap.height(), |
- &compressed_image.front(), |
- reinterpret_cast<const BITMAPINFO*>(&bmi), |
- DIB_RGB_COLORS, SRCCOPY); |
- return true; |
-} |
-#endif // OS_WIN |
- |
-#if defined(OS_MACOSX) && !defined(USE_SKIA) |
-void PluginInstance::DrawSkBitmapToCanvas( |
- const SkBitmap& bitmap, WebKit::WebCanvas* canvas, |
- const gfx::Rect& dest_rect, |
- int canvas_height) { |
- SkAutoLockPixels lock(bitmap); |
- DCHECK(bitmap.config() == SkBitmap::kARGB_8888_Config); |
- base::mac::ScopedCFTypeRef<CGDataProviderRef> data_provider( |
- CGDataProviderCreateWithData( |
- NULL, bitmap.getAddr32(0, 0), |
- bitmap.rowBytes() * bitmap.height(), NULL)); |
- base::mac::ScopedCFTypeRef<CGImageRef> image( |
- CGImageCreate( |
- bitmap.width(), bitmap.height(), |
- 8, 32, bitmap.rowBytes(), |
- base::mac::GetSystemColorSpace(), |
- kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host, |
- data_provider, NULL, false, kCGRenderingIntentDefault)); |
- |
- // Flip the transform |
- CGContextSaveGState(canvas); |
- CGContextTranslateCTM(canvas, 0, canvas_height); |
- CGContextScaleCTM(canvas, 1.0, -1.0); |
- |
- CGRect bounds; |
- bounds.origin.x = dest_rect.x(); |
- bounds.origin.y = canvas_height - dest_rect.y() - dest_rect.height(); |
- bounds.size.width = dest_rect.width(); |
- bounds.size.height = dest_rect.height(); |
- |
- CGContextDrawImage(canvas, bounds, image); |
- CGContextRestoreGState(canvas); |
-} |
-#endif // defined(OS_MACOSX) && !defined(USE_SKIA) |
- |
PPB_Graphics2D_Impl* PluginInstance::GetBoundGraphics2D() const { |
if (bound_graphics_.get() == NULL) |
return NULL; |