| Index: Source/core/rendering/svg/RenderSVGResourcePattern.cpp
|
| diff --git a/Source/core/rendering/svg/RenderSVGResourcePattern.cpp b/Source/core/rendering/svg/RenderSVGResourcePattern.cpp
|
| index 49a587f962732fe0ef6cd4e4d4e0371949d2615d..2e3bf561ca74a4ad989f0def529656c0297064bd 100644
|
| --- a/Source/core/rendering/svg/RenderSVGResourcePattern.cpp
|
| +++ b/Source/core/rendering/svg/RenderSVGResourcePattern.cpp
|
| @@ -26,6 +26,7 @@
|
| #include "core/rendering/svg/SVGRenderSupport.h"
|
| #include "core/rendering/svg/SVGRenderingContext.h"
|
| #include "core/svg/SVGFitToViewBox.h"
|
| +#include "platform/graphics/UnacceleratedImageBufferSurface.h"
|
|
|
| namespace WebCore {
|
|
|
| @@ -240,12 +241,18 @@ PassOwnPtr<ImageBuffer> RenderSVGResourcePattern::createTileImage(const PatternA
|
| {
|
| clampedAbsoluteTileBoundaries = SVGRenderingContext::clampedAbsoluteTargetRect(absoluteTileBoundaries);
|
|
|
| - OwnPtr<ImageBuffer> tileImage = ImageBuffer::createBufferForTile(absoluteTileBoundaries.size(), clampedAbsoluteTileBoundaries.size(), Unaccelerated);
|
| - if (!tileImage)
|
| + IntSize imageSize(roundedIntSize(clampedAbsoluteTileBoundaries.size()));
|
| + if (imageSize.isEmpty())
|
| + return nullptr;
|
| + OwnPtr<ImageBufferSurface> surface = adoptPtr(new UnacceleratedImageBufferSurface(imageSize));
|
| + if (!surface->isValid())
|
| return nullptr;
|
| + OwnPtr<ImageBuffer> tileImage = adoptPtr(new ImageBuffer(surface.release()));
|
|
|
| GraphicsContext* tileImageContext = tileImage->context();
|
| ASSERT(tileImageContext);
|
| + IntSize unclampedImageSize(roundedIntSize(absoluteTileBoundaries.size()));
|
| + tileImageContext->scale(FloatSize(unclampedImageSize.width() / absoluteTileBoundaries.width(), unclampedImageSize.height() / absoluteTileBoundaries.height()));
|
|
|
| // The image buffer represents the final rendered size, so the content has to be scaled (to avoid pixelation).
|
| tileImageContext->scale(FloatSize(clampedAbsoluteTileBoundaries.width() / tileBoundaries.width(),
|
|
|