Index: Source/core/html/HTMLCanvasElement.cpp |
diff --git a/Source/core/html/HTMLCanvasElement.cpp b/Source/core/html/HTMLCanvasElement.cpp |
index dddb0c2a382b5744dc7627a6200ae86b39a4d7fd..09b49ae0bb73169d524682f03dfd5f3109095ae3 100644 |
--- a/Source/core/html/HTMLCanvasElement.cpp |
+++ b/Source/core/html/HTMLCanvasElement.cpp |
@@ -62,17 +62,26 @@ namespace blink { |
using namespace HTMLNames; |
+namespace { |
+ |
// These values come from the WhatWG spec. |
-static const int DefaultWidth = 300; |
-static const int DefaultHeight = 150; |
+const int DefaultWidth = 300; |
+const int DefaultHeight = 150; |
// Firefox limits width/height to 32767 pixels, but slows down dramatically before it |
// reaches that limit. We limit by area instead, giving us larger maximum dimensions, |
// in exchange for a smaller maximum canvas size. |
-static const int MaxCanvasArea = 32768 * 8192; // Maximum canvas area in CSS pixels |
+const int MaxCanvasArea = 32768 * 8192; // Maximum canvas area in CSS pixels |
//In Skia, we will also limit width/height to 32767. |
-static const int MaxSkiaDim = 32767; // Maximum width/height in CSS pixels. |
+const int MaxSkiaDim = 32767; // Maximum width/height in CSS pixels. |
+ |
+CanvasRenderingContext::SourceBuffer convertSourceBuffer(HTMLCanvasElement::SourceBuffer sourceBuffer) |
+{ |
+ return static_cast<CanvasRenderingContext::SourceBuffer>(sourceBuffer); |
+} |
+ |
+} // namespace |
DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(CanvasObserver); |
@@ -381,26 +390,18 @@ String HTMLCanvasElement::toEncodingMimeType(const String& mimeType) |
const AtomicString HTMLCanvasElement::imageSourceURL() const |
{ |
- return AtomicString(toDataURLInternal("image/png", 0, true)); |
+ return AtomicString(toDataURLInternal("image/png", 0, Front)); |
} |
-String HTMLCanvasElement::toDataURLInternal(const String& mimeType, const double* quality, bool isSaving) const |
+String HTMLCanvasElement::toDataURLInternal(const String& mimeType, const double* quality, SourceBuffer sourceBuffer) const |
{ |
if (m_size.isEmpty() || !buffer()) |
return String("data:,"); |
- String encodingMimeType = toEncodingMimeType(mimeType); |
- |
- // Try to get ImageData first, as that may avoid lossy conversions. |
dshwang
2014/11/20 21:14:28
comment is wrong. buffer() contains not-lossy cont
|
- RefPtrWillBeRawPtr<ImageData> imageData = getImageData(); |
- |
- if (imageData) |
- return ImageDataToDataURL(ImageDataBuffer(imageData->size(), imageData->data()), encodingMimeType, quality); |
- |
- if (m_context && m_context->is3d()) { |
- m_context->paintRenderingResultsToCanvas(isSaving ? CanvasRenderingContext::Front : CanvasRenderingContext::Back); |
- } |
+ if (m_context && m_context->is3d()) |
+ m_context->paintRenderingResultsToCanvas(convertSourceBuffer(sourceBuffer)); |
+ String encodingMimeType = toEncodingMimeType(mimeType); |
return buffer()->toDataURL(encodingMimeType, quality); |
} |
@@ -411,14 +412,7 @@ String HTMLCanvasElement::toDataURL(const String& mimeType, const double* qualit |
return String(); |
} |
- return toDataURLInternal(mimeType, quality); |
-} |
- |
-PassRefPtrWillBeRawPtr<ImageData> HTMLCanvasElement::getImageData() const |
-{ |
- if (!m_context || !m_context->is3d()) |
- return nullptr; |
- return toWebGLRenderingContext(m_context.get())->paintRenderingResultsToImageData(); |
+ return toDataURLInternal(mimeType, quality, Back); |
} |
SecurityOrigin* HTMLCanvasElement::securityOrigin() const |
@@ -666,12 +660,11 @@ void HTMLCanvasElement::ensureUnacceleratedImageBuffer() |
m_didFailToCreateImageBuffer = !m_imageBuffer; |
} |
-Image* HTMLCanvasElement::copiedImage() const |
+Image* HTMLCanvasElement::copiedImage(SourceBuffer sourceBuffer) const |
{ |
if (!m_copiedImage && buffer()) { |
- if (m_context && m_context->is3d()) { |
- m_context->paintRenderingResultsToCanvas(CanvasRenderingContext::Front); |
- } |
+ if (m_context && m_context->is3d()) |
+ m_context->paintRenderingResultsToCanvas(convertSourceBuffer(sourceBuffer)); |
m_copiedImage = buffer()->copyImage(CopyBackingStore, Unscaled); |
updateExternallyAllocatedMemory(); |
} |