| Index: Source/core/platform/graphics/ImageBuffer.cpp
|
| diff --git a/Source/core/platform/graphics/ImageBuffer.cpp b/Source/core/platform/graphics/ImageBuffer.cpp
|
| index d130b56eeb7ca153613677805429016c17297ccb..3b32828787952c01d9c604c2099acb354510111d 100644
|
| --- a/Source/core/platform/graphics/ImageBuffer.cpp
|
| +++ b/Source/core/platform/graphics/ImageBuffer.cpp
|
| @@ -63,7 +63,7 @@ using namespace std;
|
|
|
| namespace WebCore {
|
|
|
| -static SkCanvas* createAcceleratedCanvas(const IntSize& size, OwnPtr<Canvas2DLayerBridge>* outLayerBridge, OpacityMode opacityMode)
|
| +SkCanvas* ImageBuffer::createAcceleratedCanvas(const IntSize& size, OwnPtr<Canvas2DLayerBridge>* outLayerBridge, OpacityMode opacityMode)
|
| {
|
| RefPtr<GraphicsContext3D> context3D = SharedGraphicsContext3D::get();
|
| if (!context3D)
|
| @@ -78,21 +78,28 @@ static SkCanvas* createAcceleratedCanvas(const IntSize& size, OwnPtr<Canvas2DLay
|
| info.fHeight = size.height();
|
| info.fColorType = SkImage::kPMColor_ColorType;
|
| info.fAlphaType = SkImage::kPremul_AlphaType;
|
| - SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context3D->grContext(), info));
|
| - if (!surface.get())
|
| + m_surface = adoptRef(SkSurface::NewRenderTarget(context3D->grContext(), info));
|
| + if (!m_surface.get())
|
| return 0;
|
| - SkDeferredCanvas* canvas = new SkDeferredCanvas(surface.get());
|
| + SkDeferredCanvas* canvas = new SkDeferredCanvas(m_surface.get());
|
| *outLayerBridge = Canvas2DLayerBridge::create(context3D.release(), canvas, bridgeOpacityMode);
|
| // If canvas buffer allocation failed, debug build will have asserted
|
| // For release builds, we must verify whether the device has a render target
|
| return canvas;
|
| }
|
|
|
| -static SkCanvas* createNonPlatformCanvas(const IntSize& size)
|
| +SkCanvas* ImageBuffer::createNonPlatformCanvas(const IntSize& size)
|
| {
|
| - SkAutoTUnref<SkDevice> device(new SkDevice(SkBitmap::kARGB_8888_Config, size.width(), size.height()));
|
| - SkPixelRef* pixelRef = device->accessBitmap(false).pixelRef();
|
| - return pixelRef ? new SkCanvas(device) : 0;
|
| + SkImage::Info info;
|
| + info.fWidth = size.width();
|
| + info.fHeight = size.height();
|
| + info.fColorType = SkImage::kPMColor_ColorType;
|
| + info.fAlphaType = SkImage::kPremul_AlphaType;
|
| + m_surface = SkSurface::NewRaster(info);
|
| + if (!m_surface.get())
|
| + return 0;
|
| + SkCanvas* canvas = m_surface->getCanvas();
|
| + return canvas;
|
| }
|
|
|
| PassOwnPtr<ImageBuffer> ImageBuffer::createCompatibleBuffer(const IntSize& size, float resolutionScale, const GraphicsContext* context, bool hasAlpha)
|
| @@ -195,6 +202,13 @@ static SkBitmap deepSkBitmapCopy(const SkBitmap& bitmap)
|
| return tmp;
|
| }
|
|
|
| +SkImage* ImageBuffer::imageSnapshot() const
|
| +{
|
| + if (!m_surface.get())
|
| + return 0;
|
| + return m_surface->newImageSnapshot();
|
| +}
|
| +
|
| PassRefPtr<Image> ImageBuffer::copyImage(BackingStoreCopy copyBehavior, ScaleBehavior) const
|
| {
|
| const SkBitmap& bitmap = *context()->bitmap();
|
|
|