Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1342)

Unified Diff: Source/core/svg/graphics/SVGImage.cpp

Issue 104023007: Refactoring ImageBuffer to decouple it from Canvas2DLayerBridge (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: build fixes for win+mac Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/svg/graphics/SVGImage.cpp
diff --git a/Source/core/svg/graphics/SVGImage.cpp b/Source/core/svg/graphics/SVGImage.cpp
index 479856650550cc63ce863e0e9d7955ba30f7fce8..98c8fd62e2b869b091bf6b2c40bcc8096606479b 100644
--- a/Source/core/svg/graphics/SVGImage.cpp
+++ b/Source/core/svg/graphics/SVGImage.cpp
@@ -48,6 +48,7 @@
#include "platform/LengthFunctions.h"
#include "platform/geometry/IntRect.h"
#include "platform/graphics/ImageObserver.h"
+#include "platform/graphics/UnacceleratedImageBufferSurface.h"
#include "wtf/PassRefPtr.h"
namespace WebCore {
@@ -192,14 +193,15 @@ PassRefPtr<NativeImageSkia> SVGImage::nativeImageForCurrentFrame()
if (!m_page)
return 0;
- OwnPtr<ImageBuffer> buffer = ImageBuffer::create(size(), 1);
- if (!buffer) // failed to allocate image
+ OwnPtr<ImageBufferSurface> surface = adoptPtr(new UnacceleratedImageBufferSurface(size()));
+ if (!surface->isValid())
return 0;
+ ImageBuffer buffer(surface.release());
- drawForContainer(buffer->context(), size(), 1, rect(), rect(), CompositeSourceOver, blink::WebBlendModeNormal);
+ drawForContainer(buffer.context(), size(), 1, rect(), rect(), CompositeSourceOver, blink::WebBlendModeNormal);
// FIXME: WK(Bug 113657): We should use DontCopyBackingStore here.
- return buffer->copyImage(CopyBackingStore)->nativeImageForCurrentFrame();
+ return buffer.copyImage(CopyBackingStore)->nativeImageForCurrentFrame();
}
void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize containerSize, float zoom, const FloatRect& srcRect,
@@ -220,11 +222,12 @@ void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize
FloatRect imageBufferSize = zoomedContainerRect;
imageBufferSize.scale(imageBufferScale.width(), imageBufferScale.height());
- OwnPtr<ImageBuffer> buffer = ImageBuffer::create(expandedIntSize(imageBufferSize.size()), 1);
- if (!buffer) // Failed to allocate buffer.
+ OwnPtr<ImageBufferSurface> surface = adoptPtr(new UnacceleratedImageBufferSurface(expandedIntSize(imageBufferSize.size())));
+ if (!surface->isValid())
return;
- drawForContainer(buffer->context(), containerSize, zoom, imageBufferSize, zoomedContainerRect, CompositeSourceOver, blink::WebBlendModeNormal);
- RefPtr<Image> image = buffer->copyImage(DontCopyBackingStore, Unscaled);
+ ImageBuffer buffer(surface.release());
+ drawForContainer(buffer.context(), containerSize, zoom, imageBufferSize, zoomedContainerRect, CompositeSourceOver, blink::WebBlendModeNormal);
+ RefPtr<Image> image = buffer.copyImage(DontCopyBackingStore, Unscaled);
// Adjust the source rect and transform due to the image buffer's scaling.
FloatRect scaledSrcRect = srcRect;

Powered by Google App Engine
This is Rietveld 408576698