| Index: Source/WebCore/svg/graphics/SVGImage.cpp
|
| ===================================================================
|
| --- Source/WebCore/svg/graphics/SVGImage.cpp (revision 144237)
|
| +++ Source/WebCore/svg/graphics/SVGImage.cpp (working copy)
|
| @@ -144,15 +144,25 @@
|
| void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize containerSize, float pageScale, float zoom, const FloatRect& srcRect,
|
| const AffineTransform& patternTransform, const FloatPoint& phase, ColorSpace colorSpace, CompositeOperator compositeOp, const FloatRect& dstRect)
|
| {
|
| - FloatSize zoomedContainerSize(containerSize);
|
| - zoomedContainerSize.scale(zoom);
|
| - FloatRect zoomedContainerRect = FloatRect(FloatPoint(), zoomedContainerSize);
|
| + ASSERT(pageScale);
|
|
|
| - OwnPtr<ImageBuffer> buffer = ImageBuffer::create(expandedIntSize(zoomedContainerSize), pageScale);
|
| - drawForContainer(buffer->context(), containerSize, zoom, zoomedContainerRect, zoomedContainerRect, ColorSpaceDeviceRGB, CompositeSourceOver, BlendModeNormal);
|
| + FloatRect zoomedContainerRect = FloatRect(FloatPoint(), containerSize);
|
| + zoomedContainerRect.scale(zoom);
|
| + FloatRect zoomedAndScaledContainerRect = zoomedContainerRect;
|
| + zoomedAndScaledContainerRect.scale(pageScale);
|
|
|
| - RefPtr<Image> image = buffer->copyImage(CopyBackingStore);
|
| - image->drawPattern(context, srcRect, patternTransform, phase, colorSpace, compositeOp, dstRect);
|
| + // FIXME(WK110065): This should take advantage of the ImageBuffer resolution instead of scaling the buffer manually.
|
| + OwnPtr<ImageBuffer> buffer = ImageBuffer::create(expandedIntSize(zoomedAndScaledContainerRect.size()), 1);
|
| + drawForContainer(buffer->context(), containerSize, zoom, zoomedAndScaledContainerRect, zoomedContainerRect, ColorSpaceDeviceRGB, CompositeSourceOver, BlendModeNormal);
|
| + RefPtr<Image> image = buffer->copyImage(CopyBackingStore, Unscaled);
|
| +
|
| + // Adjust the source rect and transform for image buffer scale due to pageScale.
|
| + FloatRect scaledSrcRect = srcRect;
|
| + scaledSrcRect.scale(pageScale);
|
| + AffineTransform unscaledPatternTransform(patternTransform);
|
| + unscaledPatternTransform.scale(1 / pageScale);
|
| +
|
| + image->drawPattern(context, scaledSrcRect, unscaledPatternTransform, phase, colorSpace, compositeOp, dstRect);
|
| }
|
|
|
| void SVGImage::draw(GraphicsContext* context, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace, CompositeOperator compositeOp, BlendMode)
|
|
|