| Index: Source/WebCore/svg/graphics/SVGImage.cpp
|
| ===================================================================
|
| --- Source/WebCore/svg/graphics/SVGImage.cpp (revision 144238)
|
| +++ Source/WebCore/svg/graphics/SVGImage.cpp (working copy)
|
| @@ -141,26 +141,30 @@
|
| setImageObserver(observer);
|
| }
|
|
|
| -void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize containerSize, float pageScale, float zoom, const FloatRect& srcRect,
|
| +void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize containerSize, float zoom, const FloatRect& srcRect,
|
| const AffineTransform& patternTransform, const FloatPoint& phase, ColorSpace colorSpace, CompositeOperator compositeOp, const FloatRect& dstRect)
|
| {
|
| - ASSERT(pageScale);
|
| -
|
| FloatRect zoomedContainerRect = FloatRect(FloatPoint(), containerSize);
|
| zoomedContainerRect.scale(zoom);
|
| - FloatRect zoomedAndScaledContainerRect = zoomedContainerRect;
|
| - zoomedAndScaledContainerRect.scale(pageScale);
|
|
|
| - // 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);
|
| + // The ImageBuffer size needs to be scaled to match the final resolution.
|
| + AffineTransform transform = context->getCTM();
|
| + FloatSize imageBufferScale = FloatSize(transform.xScale(), transform.yScale());
|
| + ASSERT(imageBufferScale.width());
|
| + ASSERT(imageBufferScale.height());
|
| +
|
| + FloatRect imageBufferSize = zoomedContainerRect;
|
| + imageBufferSize.scale(imageBufferScale.width(), imageBufferScale.height());
|
| +
|
| + OwnPtr<ImageBuffer> buffer = ImageBuffer::create(expandedIntSize(imageBufferSize.size()), 1);
|
| + drawForContainer(buffer->context(), containerSize, zoom, imageBufferSize, zoomedContainerRect, ColorSpaceDeviceRGB, CompositeSourceOver, BlendModeNormal);
|
| RefPtr<Image> image = buffer->copyImage(CopyBackingStore, Unscaled);
|
|
|
| - // Adjust the source rect and transform for image buffer scale due to pageScale.
|
| + // Adjust the source rect and transform due to the image buffer's scaling.
|
| FloatRect scaledSrcRect = srcRect;
|
| - scaledSrcRect.scale(pageScale);
|
| + scaledSrcRect.scale(imageBufferScale.width(), imageBufferScale.height());
|
| AffineTransform unscaledPatternTransform(patternTransform);
|
| - unscaledPatternTransform.scale(1 / pageScale);
|
| + unscaledPatternTransform.scale(1 / imageBufferScale.width(), 1 / imageBufferScale.height());
|
|
|
| image->drawPattern(context, scaledSrcRect, unscaledPatternTransform, phase, colorSpace, compositeOp, dstRect);
|
| }
|
|
|