| Index: Source/core/html/HTMLCanvasElement.cpp
|
| diff --git a/Source/core/html/HTMLCanvasElement.cpp b/Source/core/html/HTMLCanvasElement.cpp
|
| index c7cca4d73eabc4a4f92fac2aa4b0d86ec78bea16..44c70e50b3bb62d1ac3ff0d7f118cca2b0bbc244 100644
|
| --- a/Source/core/html/HTMLCanvasElement.cpp
|
| +++ b/Source/core/html/HTMLCanvasElement.cpp
|
| @@ -73,7 +73,6 @@ HTMLCanvasElement::HTMLCanvasElement(const QualifiedName& tagName, Document& doc
|
| , m_ignoreReset(false)
|
| , m_deviceScaleFactor(1)
|
| , m_originClean(true)
|
| - , m_hasCreatedImageBuffer(false)
|
| , m_didClearImageBuffer(false)
|
| , m_accelerationDisabled(false)
|
| , m_externallyAllocatedMemory(0)
|
| @@ -238,7 +237,7 @@ void HTMLCanvasElement::reset()
|
| return;
|
|
|
| bool ok;
|
| - bool hadImageBuffer = hasCreatedImageBuffer();
|
| + bool hadImageBuffer = m_imageBuffer.get();
|
|
|
| int w = getAttribute(widthAttr).toInt(&ok);
|
| if (!ok || w < 0)
|
| @@ -265,7 +264,7 @@ void HTMLCanvasElement::reset()
|
|
|
| // If the size of an existing buffer matches, we can just clear it instead of reallocating.
|
| // This optimization is only done for 2D canvases for now.
|
| - if (m_hasCreatedImageBuffer && oldSize == newSize && m_deviceScaleFactor == newDeviceScaleFactor && m_context && m_context->is2d()) {
|
| + if (m_imageBuffer && oldSize == newSize && m_deviceScaleFactor == newDeviceScaleFactor && m_context && m_context->is2d()) {
|
| if (!m_didClearImageBuffer)
|
| clearImageBuffer();
|
| return;
|
| @@ -323,15 +322,13 @@ void HTMLCanvasElement::paint(GraphicsContext* context, const LayoutRect& r, boo
|
| m_context->paintRenderingResultsToCanvas();
|
| }
|
|
|
| - if (hasCreatedImageBuffer()) {
|
| - ImageBuffer* imageBuffer = buffer();
|
| - if (imageBuffer) {
|
| - CompositeOperator compositeOperator = !m_context || m_context->hasAlpha() ? CompositeSourceOver : CompositeCopy;
|
| - if (m_presentedImage)
|
| - context->drawImage(m_presentedImage.get(), pixelSnappedIntRect(r), compositeOperator, DoNotRespectImageOrientation, useLowQualityScale);
|
| - else
|
| - context->drawImageBuffer(imageBuffer, pixelSnappedIntRect(r), compositeOperator, BlendModeNormal, useLowQualityScale);
|
| - }
|
| + ImageBuffer* imageBuffer = buffer();
|
| + if (imageBuffer) {
|
| + CompositeOperator compositeOperator = !m_context || m_context->hasAlpha() ? CompositeSourceOver : CompositeCopy;
|
| + if (m_presentedImage)
|
| + context->drawImage(m_presentedImage.get(), pixelSnappedIntRect(r), compositeOperator, DoNotRespectImageOrientation, useLowQualityScale);
|
| + else
|
| + context->drawImageBuffer(imageBuffer, pixelSnappedIntRect(r), compositeOperator, BlendModeNormal, useLowQualityScale);
|
| }
|
|
|
| if (is3D())
|
| @@ -359,7 +356,6 @@ void HTMLCanvasElement::clearPresentationCopy()
|
| void HTMLCanvasElement::setSurfaceSize(const IntSize& size)
|
| {
|
| m_size = size;
|
| - m_hasCreatedImageBuffer = false;
|
| m_contextStateSaver.clear();
|
| m_imageBuffer.clear();
|
| setExternallyAllocatedMemory(0);
|
| @@ -478,7 +474,6 @@ void HTMLCanvasElement::createImageBuffer()
|
| {
|
| ASSERT(!m_imageBuffer);
|
|
|
| - m_hasCreatedImageBuffer = true;
|
| m_didClearImageBuffer = true;
|
|
|
| FloatSize logicalSize = size();
|
| @@ -533,7 +528,7 @@ GraphicsContext* HTMLCanvasElement::drawingContext() const
|
|
|
| GraphicsContext* HTMLCanvasElement::existingDrawingContext() const
|
| {
|
| - if (!m_hasCreatedImageBuffer)
|
| + if (!m_imageBuffer)
|
| return 0;
|
|
|
| return drawingContext();
|
| @@ -541,7 +536,7 @@ GraphicsContext* HTMLCanvasElement::existingDrawingContext() const
|
|
|
| ImageBuffer* HTMLCanvasElement::buffer() const
|
| {
|
| - if (!m_hasCreatedImageBuffer)
|
| + if (!m_imageBuffer)
|
| const_cast<HTMLCanvasElement*>(this)->createImageBuffer();
|
| return m_imageBuffer.get();
|
| }
|
| @@ -558,7 +553,7 @@ Image* HTMLCanvasElement::copiedImage() const
|
|
|
| void HTMLCanvasElement::clearImageBuffer()
|
| {
|
| - ASSERT(m_hasCreatedImageBuffer);
|
| + ASSERT(m_imageBuffer);
|
| ASSERT(!m_didClearImageBuffer);
|
| ASSERT(m_context);
|
|
|
| @@ -579,7 +574,7 @@ void HTMLCanvasElement::clearCopiedImage()
|
|
|
| AffineTransform HTMLCanvasElement::baseTransform() const
|
| {
|
| - ASSERT(m_hasCreatedImageBuffer);
|
| + ASSERT(m_imageBuffer);
|
| FloatSize unscaledSize = size();
|
| FloatSize deviceSize = convertLogicalToDevice(unscaledSize);
|
| IntSize size(deviceSize.width(), deviceSize.height());
|
|
|