Chromium Code Reviews| Index: Source/core/platform/graphics/skia/ImageBufferSkia.cpp |
| diff --git a/Source/core/platform/graphics/skia/ImageBufferSkia.cpp b/Source/core/platform/graphics/skia/ImageBufferSkia.cpp |
| index 959faf574c04aa50414a64561283402cde7d18a5..8e9d1e27d6c20aa10e812816d06a3d7b5380d779 100644 |
| --- a/Source/core/platform/graphics/skia/ImageBufferSkia.cpp |
| +++ b/Source/core/platform/graphics/skia/ImageBufferSkia.cpp |
| @@ -69,7 +69,7 @@ ImageBufferData::ImageBufferData(const IntSize& size) |
| { |
| } |
| -static SkCanvas* createAcceleratedCanvas(const IntSize& size, ImageBufferData* data) |
| +static SkCanvas* createAcceleratedCanvas(const IntSize& size, ImageBufferData* data, OpacityMode opacityMode) |
| { |
| RefPtr<GraphicsContext3D> context3D = SharedGraphicsContext3D::get(); |
| if (!context3D) |
| @@ -89,8 +89,9 @@ static SkCanvas* createAcceleratedCanvas(const IntSize& size, ImageBufferData* d |
| return 0; |
| SkCanvas* canvas; |
| SkAutoTUnref<SkDevice> device(new SkGpuDevice(gr, texture.get())); |
| + Canvas2DLayerBridge::OpacityMode bridgeOpacityMode = opacityMode == Opaque ? Canvas2DLayerBridge::Opaque : Canvas2DLayerBridge::NonOpaque; |
| Canvas2DLayerBridge::ThreadMode threadMode = WebKit::Platform::current()->isThreadedCompositingEnabled() ? Canvas2DLayerBridge::Threaded : Canvas2DLayerBridge::SingleThread; |
| - data->m_layerBridge = Canvas2DLayerBridge::create(context3D.release(), size, threadMode, texture.get()->getTextureHandle()); |
| + data->m_layerBridge = Canvas2DLayerBridge::create(context3D.release(), size, bridgeOpacityMode, threadMode, texture.get()->getTextureHandle()); |
| canvas = data->m_layerBridge->skCanvas(device.get()); |
| data->m_platformContext.setAccelerated(true); |
| return canvas; |
| @@ -144,7 +145,7 @@ ImageBuffer::ImageBuffer(const IntSize& size, float resolutionScale, ColorSpace, |
| success = true; |
| } |
| -ImageBuffer::ImageBuffer(const IntSize& size, float resolutionScale, ColorSpace, RenderingMode renderingMode, bool& success) |
| +ImageBuffer::ImageBuffer(const IntSize& size, float resolutionScale, ColorSpace, RenderingMode renderingMode, OpacityMode opacityMode, bool& success) |
| : m_data(size) |
| , m_size(size) |
| , m_logicalSize(size) |
| @@ -153,7 +154,7 @@ ImageBuffer::ImageBuffer(const IntSize& size, float resolutionScale, ColorSpace, |
| OwnPtr<SkCanvas> canvas; |
| if (renderingMode == Accelerated) |
| - canvas = adoptPtr(createAcceleratedCanvas(size, &m_data)); |
| + canvas = adoptPtr(createAcceleratedCanvas(size, &m_data, opacityMode)); |
| else if (renderingMode == UnacceleratedNonPlatformBuffer) |
| canvas = adoptPtr(createNonPlatformCanvas(size)); |
| @@ -168,13 +169,16 @@ ImageBuffer::ImageBuffer(const IntSize& size, float resolutionScale, ColorSpace, |
| m_data.m_canvas = canvas.release(); |
| m_data.m_platformContext.setCanvas(m_data.m_canvas.get()); |
| m_context = adoptPtr(new GraphicsContext(&m_data.m_platformContext)); |
| - m_context->setShouldSmoothFonts(false); |
| + m_context->setShouldSmoothFonts(opacityMode == Opaque); |
|
jamesr
2013/04/26 18:30:09
is this a sufficient check? what about transforms,
|
| m_context->scale(FloatSize(m_resolutionScale, m_resolutionScale)); |
| - // Make the background transparent. It would be nice if this wasn't |
| + // Clear the background transparent or opaque, as required. It would be nice if this wasn't |
| // required, but the canvas is currently filled with the magic transparency |
| // color. Can we have another way to manage this? |
| - m_data.m_canvas->drawARGB(0, 0, 0, 0, SkXfermode::kClear_Mode); |
| + if (opacityMode == Opaque) |
| + m_data.m_canvas->drawARGB(255, 0, 0, 0, SkXfermode::kSrc_Mode); |
| + else |
| + m_data.m_canvas->drawARGB(0, 0, 0, 0, SkXfermode::kClear_Mode); |
| success = true; |
| } |