Changeset 120953 in webkit
- Timestamp:
- Jun 21, 2012 11:37:19 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r120952 r120953 1 2012-06-21 Tim Horton <timothy_horton@apple.com> 2 3 SVGImageCache isn't invalidated for <img> on dynamic page scale changes 4 https://bugs.webkit.org/show_bug.cgi?id=89621 5 <rdar://problem/11714677> 6 7 Reviewed by Simon Fraser. 8 9 Add a test that ensures that dynamic changes to pageScaleFactor are propagated through 10 to the SVGImageCache. 11 12 * platform/mac/svg/as-image/image-respects-pageScaleFactor-change-expected.png: Added. 13 * platform/mac/svg/as-image/image-respects-pageScaleFactor-change-expected.txt: Added. 14 * svg/as-image/image-respects-pageScaleFactor-change.html: Added. 15 1 16 2012-06-21 Beth Dakin <bdakin@apple.com> 2 17 -
trunk/Source/WebCore/ChangeLog
r120951 r120953 1 2012-06-21 Tim Horton <timothy_horton@apple.com> 2 3 SVGImageCache isn't invalidated for <img> on dynamic page scale changes 4 https://bugs.webkit.org/show_bug.cgi?id=89621 5 <rdar://problem/11714677> 6 7 Reviewed by Simon Fraser. 8 9 Previously, device and page scale factors were being cached as a part of the SVGImageCache's 10 size request. However, an <img> never has a reason to update its size request when the page 11 scale is changed via gesture zooming, as no layout occurs. 12 13 Instead, look up the relevant scales when the image is requested (which will occur during every 14 repaint), allowing page scale changes to take effect without requiring an updated size request. 15 16 Test: svg/as-image/image-respects-pageScaleFactor-change.html 17 18 * loader/cache/CachedImage.cpp: 19 (WebCore::CachedImage::lookupOrCreateImageForRenderer): 20 (WebCore::CachedImage::setContainerSizeForRenderer): 21 * svg/graphics/SVGImageCache.cpp: 22 (WebCore::SVGImageCache::lookupOrCreateBitmapImageForRenderer): 23 * svg/graphics/SVGImageCache.h: 24 (WebCore::SVGImageCache::SizeAndScales::SizeAndScales): 25 (SizeAndScales): 26 1 27 2012-06-21 Philip Rogers <pdr@google.com> 2 28 -
trunk/Source/WebCore/loader/cache/CachedImage.cpp
r120000 r120953 152 152 if (!m_image->isSVGImage()) 153 153 return m_image.get(); 154 Image* useImage = m_svgImageCache->lookupOrCreateBitmapImageFor Client(renderer);154 Image* useImage = m_svgImageCache->lookupOrCreateBitmapImageForRenderer(renderer); 155 155 if (useImage == Image::nullImage()) 156 156 return m_image.get(); … … 208 208 } 209 209 210 // FIXME (85335): This needs to take CSS transform scale into account as well. 211 float containerScale = renderer->document()->page()->deviceScaleFactor() * renderer->document()->page()->pageScaleFactor(); 212 213 m_svgImageCache->setRequestedSizeAndScales(renderer, SVGImageCache::SizeAndScales(containerSize, containerZoom, containerScale)); 210 m_svgImageCache->setRequestedSizeAndScales(renderer, SVGImageCache::SizeAndScales(containerSize, containerZoom)); 214 211 #else 215 212 UNUSED_PARAM(renderer); -
trunk/Source/WebCore/svg/graphics/SVGImageCache.cpp
r120000 r120953 26 26 #include "GraphicsContext.h" 27 27 #include "ImageBuffer.h" 28 #include "Page.h" 28 29 #include "RenderSVGRoot.h" 29 30 #include "SVGImage.h" … … 129 130 } 130 131 131 Image* SVGImageCache::lookupOrCreateBitmapImageFor Client(const CachedImageClient* client)132 Image* SVGImageCache::lookupOrCreateBitmapImageForRenderer(const RenderObject* renderer) 132 133 { 133 ASSERT(client); 134 ASSERT(renderer); 135 const CachedImageClient* client = renderer; 134 136 135 // The cache needs to know the size of the clientbefore querying an image for it.136 SizeAndScalesMap::iterator sizeIt = m_sizeAndScalesMap.find( client);137 // The cache needs to know the size of the renderer before querying an image for it. 138 SizeAndScalesMap::iterator sizeIt = m_sizeAndScalesMap.find(renderer); 137 139 if (sizeIt == m_sizeAndScalesMap.end()) 138 140 return Image::nullImage(); … … 141 143 float zoom = sizeIt->second.zoom; 142 144 float scale = sizeIt->second.scale; 145 146 // FIXME (85335): This needs to take CSS transform scale into account as well. 147 Page* page = renderer->document()->page(); 148 if (!scale) 149 scale = page->deviceScaleFactor() * page->pageScaleFactor(); 150 143 151 ASSERT(!size.isEmpty()); 144 152 … … 171 179 ASSERT(newImagePtr); 172 180 173 m_imageDataMap.add(client, ImageData(newBuffer.leakPtr(), newImage.release(), sizeIt->second));181 m_imageDataMap.add(client, ImageData(newBuffer.leakPtr(), newImage.release(), SizeAndScales(size, zoom, scale))); 174 182 return newImagePtr; 175 183 } -
trunk/Source/WebCore/svg/graphics/SVGImageCache.h
r120000 r120953 35 35 class ImageBuffer; 36 36 class SVGImage; 37 class RenderObject; 37 38 38 39 class SVGImageCache { … … 48 49 SizeAndScales() 49 50 : zoom(1) 50 , scale( 1)51 , scale(0) 51 52 { 52 53 } … … 59 60 } 60 61 62 SizeAndScales(const IntSize& newSize, float newZoom) 63 : size(newSize) 64 , zoom(newZoom) 65 , scale(0) 66 { 67 } 68 61 69 IntSize size; 62 70 float zoom; 63 float scale; 71 float scale; // A scale of 0 indicates that the default scale should be used. 64 72 }; 65 73 … … 69 77 SizeAndScales requestedSizeAndScales(const CachedImageClient*) const; 70 78 71 Image* lookupOrCreateBitmapImageFor Client(const CachedImageClient*);79 Image* lookupOrCreateBitmapImageForRenderer(const RenderObject*); 72 80 void imageContentChanged(); 73 81
Note: See TracChangeset
for help on using the changeset viewer.