| Index: Source/core/html/HTMLCanvasElement.cpp
|
| diff --git a/Source/core/html/HTMLCanvasElement.cpp b/Source/core/html/HTMLCanvasElement.cpp
|
| index 1c2a8180f7870b72fc0a0db4e3acf48a3e621790..f8db1d2de7de8a593be8143c001474461dc517f7 100644
|
| --- a/Source/core/html/HTMLCanvasElement.cpp
|
| +++ b/Source/core/html/HTMLCanvasElement.cpp
|
| @@ -591,7 +591,7 @@ PassOwnPtr<ImageBufferSurface> HTMLCanvasElement::createImageBufferSurface(const
|
| OwnPtr<ImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(deviceSize, surfaceFactory.release(), opacityMode));
|
| if (surface->isValid())
|
| return surface.release();
|
| - surfaceFactory = createSurfaceFactory(deviceSize, msaaSampleCount); // recreate because old previous one was released
|
| + surfaceFactory = createSurfaceFactory(deviceSize, msaaSampleCount); // recreate because previous one was released
|
| }
|
|
|
| return surfaceFactory->createSurface(deviceSize, opacityMode);
|
| @@ -599,12 +599,12 @@ PassOwnPtr<ImageBufferSurface> HTMLCanvasElement::createImageBufferSurface(const
|
|
|
| void HTMLCanvasElement::createImageBuffer()
|
| {
|
| - createImageBufferInternal();
|
| + createImageBufferInternal(nullptr);
|
| if (m_didFailToCreateImageBuffer && m_context->is2d())
|
| toCanvasRenderingContext2D(m_context.get())->loseContext();
|
| }
|
|
|
| -void HTMLCanvasElement::createImageBufferInternal()
|
| +void HTMLCanvasElement::createImageBufferInternal(PassOwnPtr<ImageBufferSurface> externalSurface)
|
| {
|
| ASSERT(!m_imageBuffer);
|
| ASSERT(!m_contextStateSaver);
|
| @@ -615,8 +615,13 @@ void HTMLCanvasElement::createImageBufferInternal()
|
| if (!canCreateImageBuffer(size()))
|
| return;
|
|
|
| - int msaaSampleCount;
|
| - OwnPtr<ImageBufferSurface> surface = createImageBufferSurface(size(), &msaaSampleCount);
|
| + int msaaSampleCount = 0;
|
| + OwnPtr<ImageBufferSurface> surface;
|
| + if (externalSurface) {
|
| + surface = externalSurface;
|
| + } else {
|
| + surface = createImageBufferSurface(size(), &msaaSampleCount);
|
| + }
|
| m_imageBuffer = ImageBuffer::create(surface.release());
|
| if (!m_imageBuffer)
|
| return;
|
| @@ -732,6 +737,12 @@ ImageBuffer* HTMLCanvasElement::buffer() const
|
| return m_imageBuffer.get();
|
| }
|
|
|
| +void HTMLCanvasElement::createImageBufferUsingSurface(PassOwnPtr<ImageBufferSurface> surface)
|
| +{
|
| + discardImageBuffer();
|
| + createImageBufferInternal(surface);
|
| +}
|
| +
|
| void HTMLCanvasElement::ensureUnacceleratedImageBuffer()
|
| {
|
| ASSERT(m_context);
|
| @@ -855,4 +866,9 @@ FloatSize HTMLCanvasElement::sourceSize() const
|
| return FloatSize(width(), height());
|
| }
|
|
|
| +bool HTMLCanvasElement::isOpaque() const
|
| +{
|
| + return m_context && !m_context->hasAlpha();
|
| }
|
| +
|
| +} // blink
|
|
|