OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006 Eric Seidel <eric@webkit.org> | 2 * Copyright (C) 2006 Eric Seidel <eric@webkit.org> |
3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. | 3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. |
4 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 4 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 // Compensate for the container size rounding by adjusting the source rect. | 134 // Compensate for the container size rounding by adjusting the source rect. |
135 FloatSize adjustedSrcSize = scaledSrc.size(); | 135 FloatSize adjustedSrcSize = scaledSrc.size(); |
136 adjustedSrcSize.scale(roundedContainerSize.width() / containerSize.width(),
roundedContainerSize.height() / containerSize.height()); | 136 adjustedSrcSize.scale(roundedContainerSize.width() / containerSize.width(),
roundedContainerSize.height() / containerSize.height()); |
137 scaledSrc.setSize(adjustedSrcSize); | 137 scaledSrc.setSize(adjustedSrcSize); |
138 | 138 |
139 draw(context, dstRect, scaledSrc, colorSpace, compositeOp, blendMode); | 139 draw(context, dstRect, scaledSrc, colorSpace, compositeOp, blendMode); |
140 | 140 |
141 setImageObserver(observer); | 141 setImageObserver(observer); |
142 } | 142 } |
143 | 143 |
144 void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize
containerSize, float pageScale, float zoom, const FloatRect& srcRect, | 144 void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize
containerSize, float zoom, const FloatRect& srcRect, |
145 const AffineTransform& patternTransform, const FloatPoint& phase, ColorSpace
colorSpace, CompositeOperator compositeOp, const FloatRect& dstRect) | 145 const AffineTransform& patternTransform, const FloatPoint& phase, ColorSpace
colorSpace, CompositeOperator compositeOp, const FloatRect& dstRect) |
146 { | 146 { |
147 ASSERT(pageScale); | |
148 | |
149 FloatRect zoomedContainerRect = FloatRect(FloatPoint(), containerSize); | 147 FloatRect zoomedContainerRect = FloatRect(FloatPoint(), containerSize); |
150 zoomedContainerRect.scale(zoom); | 148 zoomedContainerRect.scale(zoom); |
151 FloatRect zoomedAndScaledContainerRect = zoomedContainerRect; | |
152 zoomedAndScaledContainerRect.scale(pageScale); | |
153 | 149 |
154 // FIXME(WK110065): This should take advantage of the ImageBuffer resolution
instead of scaling the buffer manually. | 150 // The ImageBuffer size needs to be scaled to match the final resolution. |
155 OwnPtr<ImageBuffer> buffer = ImageBuffer::create(expandedIntSize(zoomedAndSc
aledContainerRect.size()), 1); | 151 AffineTransform transform = context->getCTM(); |
156 drawForContainer(buffer->context(), containerSize, zoom, zoomedAndScaledCont
ainerRect, zoomedContainerRect, ColorSpaceDeviceRGB, CompositeSourceOver, BlendM
odeNormal); | 152 FloatSize imageBufferScale = FloatSize(transform.xScale(), transform.yScale(
)); |
| 153 ASSERT(imageBufferScale.width()); |
| 154 ASSERT(imageBufferScale.height()); |
| 155 |
| 156 FloatRect imageBufferSize = zoomedContainerRect; |
| 157 imageBufferSize.scale(imageBufferScale.width(), imageBufferScale.height()); |
| 158 |
| 159 OwnPtr<ImageBuffer> buffer = ImageBuffer::create(expandedIntSize(imageBuffer
Size.size()), 1); |
| 160 drawForContainer(buffer->context(), containerSize, zoom, imageBufferSize, zo
omedContainerRect, ColorSpaceDeviceRGB, CompositeSourceOver, BlendModeNormal); |
157 RefPtr<Image> image = buffer->copyImage(CopyBackingStore, Unscaled); | 161 RefPtr<Image> image = buffer->copyImage(CopyBackingStore, Unscaled); |
158 | 162 |
159 // Adjust the source rect and transform for image buffer scale due to pageSc
ale. | 163 // Adjust the source rect and transform due to the image buffer's scaling. |
160 FloatRect scaledSrcRect = srcRect; | 164 FloatRect scaledSrcRect = srcRect; |
161 scaledSrcRect.scale(pageScale); | 165 scaledSrcRect.scale(imageBufferScale.width(), imageBufferScale.height()); |
162 AffineTransform unscaledPatternTransform(patternTransform); | 166 AffineTransform unscaledPatternTransform(patternTransform); |
163 unscaledPatternTransform.scale(1 / pageScale); | 167 unscaledPatternTransform.scale(1 / imageBufferScale.width(), 1 / imageBuffer
Scale.height()); |
164 | 168 |
165 image->drawPattern(context, scaledSrcRect, unscaledPatternTransform, phase,
colorSpace, compositeOp, dstRect); | 169 image->drawPattern(context, scaledSrcRect, unscaledPatternTransform, phase,
colorSpace, compositeOp, dstRect); |
166 } | 170 } |
167 | 171 |
168 void SVGImage::draw(GraphicsContext* context, const FloatRect& dstRect, const Fl
oatRect& srcRect, ColorSpace, CompositeOperator compositeOp, BlendMode) | 172 void SVGImage::draw(GraphicsContext* context, const FloatRect& dstRect, const Fl
oatRect& srcRect, ColorSpace, CompositeOperator compositeOp, BlendMode) |
169 { | 173 { |
170 if (!m_page) | 174 if (!m_page) |
171 return; | 175 return; |
172 | 176 |
173 FrameView* view = frameView(); | 177 FrameView* view = frameView(); |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 { | 350 { |
347 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResou
rceImage); | 351 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResou
rceImage); |
348 Image::reportMemoryUsage(memoryObjectInfo); | 352 Image::reportMemoryUsage(memoryObjectInfo); |
349 info.addMember(m_chromeClient, "chromeClient"); | 353 info.addMember(m_chromeClient, "chromeClient"); |
350 info.addMember(m_page, "page"); | 354 info.addMember(m_page, "page"); |
351 } | 355 } |
352 | 356 |
353 } | 357 } |
354 | 358 |
355 #endif // ENABLE(SVG) | 359 #endif // ENABLE(SVG) |
OLD | NEW |