Changeset 97727 in webkit
- Timestamp:
- Oct 18, 2011 1:39:18 AM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r97726 r97727 1 2011-10-18 Nikolas Zimmermann <nzimmermann@rim.com> 2 3 Prepare SVGImage intrinsic size negotiation: Add intrinsic size & ratio calculation functionality to Image 4 https://bugs.webkit.org/show_bug.cgi?id=70314 5 6 Reviewed by Antti Koivisto. 7 8 Add a "void computeIntrinsicDimension(Length& intrinsicWidth, Lengt& intrinsicHeight, FloatSize& intrinsicRatio)" helper method 9 to Image/GeneratedImage/SVGImage and make it accessible through StyleImage. 10 11 For a regular Image the intrinsicWidth/Height contains just a Length(size().width(), Fixed). In contrary SVGImages pass on the 12 style()->width()/height() values from the render style of the RenderSVGRoot renderer. These information are needed to implement 13 the size negotiation between embedded SVG images and the embedder. 14 15 No new tests, as this new functionality is not yet used. 16 17 * loader/cache/CachedImage.cpp: 18 (WebCore::CachedImage::computeIntrinsicDimensions): 19 * loader/cache/CachedImage.h: 20 * platform/graphics/GeneratedImage.cpp: 21 (WebCore::GeneratedImage::computeIntrinsicDimensions): 22 * platform/graphics/GeneratedImage.h: 23 * platform/graphics/Image.cpp: 24 (WebCore::Image::computeIntrinsicDimensions): 25 * platform/graphics/Image.h: 26 * platform/graphics/cg/PDFDocumentImage.cpp: 27 (WebCore::PDFDocumentImage::computeIntrinsicDimensions): 28 * platform/graphics/cg/PDFDocumentImage.h: 29 * rendering/style/StyleCachedImage.cpp: 30 (WebCore::StyleCachedImage::computeIntrinsicDimensions): 31 * rendering/style/StyleCachedImage.h: 32 * rendering/style/StyleGeneratedImage.cpp: 33 (WebCore::StyleGeneratedImage::computeIntrinsicDimensions): 34 * rendering/style/StyleGeneratedImage.h: 35 * rendering/style/StyleImage.h: 36 * rendering/style/StylePendingImage.h: 37 (WebCore::StylePendingImage::computeIntrinsicDimensions): 38 * svg/graphics/SVGImage.cpp: 39 (WebCore::SVGImage::computeIntrinsicDimensions): 40 * svg/graphics/SVGImage.h: 41 1 42 2011-10-17 Alexander Pavlov <apavlov@chromium.org> 2 43 -
trunk/Source/WebCore/loader/cache/CachedImage.cpp
r97491 r97727 240 240 height = max(1, height); 241 241 return IntSize(width, height); 242 } 243 244 void CachedImage::computeIntrinsicDimensions(const RenderObject* renderer, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) 245 { 246 if (Image* image = lookupImageForRenderer(renderer)) 247 image->computeIntrinsicDimensions(intrinsicWidth, intrinsicHeight, intrinsicRatio); 242 248 } 243 249 -
trunk/Source/WebCore/loader/cache/CachedImage.h
r97448 r97727 35 35 36 36 class CachedResourceLoader; 37 class Length; 38 class FloatSize; 37 39 class MemoryCache; 38 40 class RenderObject; … … 65 67 // This method takes a zoom multiplier that can be used to increase the natural size of the image by the zoom. 66 68 IntSize imageSizeForRenderer(const RenderObject*, float multiplier); // returns the size of the complete image. 69 void computeIntrinsicDimensions(const RenderObject*, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio); 67 70 68 71 virtual void didAddClient(CachedResourceClient*); -
trunk/Source/WebCore/platform/graphics/GeneratedImage.cpp
r95901 r97727 30 30 #include "GraphicsContext.h" 31 31 #include "ImageBuffer.h" 32 33 using namespace std; 32 #include "Length.h" 34 33 35 34 namespace WebCore { … … 68 67 } 69 68 69 void GeneratedImage::computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) 70 { 71 Image::computeIntrinsicDimensions(intrinsicWidth, intrinsicHeight, intrinsicRatio); 72 intrinsicRatio = FloatSize(); 70 73 } 74 75 } -
trunk/Source/WebCore/platform/graphics/GeneratedImage.h
r95901 r97727 45 45 virtual bool hasSingleSecurityOrigin() const { return true; } 46 46 47 // These are only used for SVGGeneratedImage right now48 47 virtual void setContainerSize(const IntSize& size) { m_size = size; } 49 48 virtual bool usesContainerSize() const { return true; } 50 49 virtual bool hasRelativeWidth() const { return true; } 51 50 virtual bool hasRelativeHeight() const { return true; } 51 virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio); 52 52 53 53 virtual IntSize size() const { return m_size; } -
trunk/Source/WebCore/platform/graphics/Image.cpp
r95129 r97727 32 32 #include "GraphicsContext.h" 33 33 #include "IntRect.h" 34 #include "Length.h" 34 35 #include "MIMETypeRegistry.h" 35 36 #include "SharedBuffer.h" … … 167 168 } 168 169 170 void Image::computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) 171 { 172 intrinsicRatio = size(); 173 intrinsicWidth = Length(intrinsicRatio.width(), Fixed); 174 intrinsicHeight = Length(intrinsicRatio.height(), Fixed); 175 } 169 176 170 177 } -
trunk/Source/WebCore/platform/graphics/Image.h
r97448 r97727 72 72 class FloatSize; 73 73 class GraphicsContext; 74 class Length; 74 75 class SharedBuffer; 75 76 … … 99 100 bool isNull() const { return size().isEmpty(); } 100 101 101 // These are only used for SVGImage right now102 102 virtual void setContainerSize(const IntSize&) { } 103 103 virtual bool usesContainerSize() const { return false; } 104 104 virtual bool hasRelativeWidth() const { return false; } 105 105 virtual bool hasRelativeHeight() const { return false; } 106 virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio); 106 107 107 108 virtual IntSize size() const = 0; -
trunk/Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp
r85501 r97727 32 32 #include "GraphicsContext.h" 33 33 #include "ImageObserver.h" 34 #include "Length.h" 34 35 #include "SharedBuffer.h" 35 36 #include <CoreGraphics/CGContext.h> … … 74 75 75 76 return IntSize((int)(fabsf(rotWidth) + 0.5f), (int)(fabsf(rotHeight) + 0.5f)); 77 } 78 79 void PDFDocumentImage::computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) 80 { 81 // FIXME: If we want size negotiation with PDF documents as-image, this is the place to implement it (https://bugs.webkit.org/show_bug.cgi?id=12095). 82 Image::computeIntrinsicDimensions(intrinsicWidth, intrinsicHeight, intrinsicRatio); 83 intrinsicRatio = FloatSize(); 76 84 } 77 85 -
trunk/Source/WebCore/platform/graphics/cg/PDFDocumentImage.h
r85501 r97727 60 60 virtual unsigned decodedSize() const { return 0; } 61 61 62 virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio); 62 63 virtual IntSize size() const; 63 64 -
trunk/Source/WebCore/rendering/style/StyleCachedImage.cpp
r97448 r97727 65 65 } 66 66 67 void StyleCachedImage::computeIntrinsicDimensions(const RenderObject* renderer, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) 68 { 69 m_image->computeIntrinsicDimensions(renderer, intrinsicWidth, intrinsicHeight, intrinsicRatio); 70 } 71 67 72 bool StyleCachedImage::usesImageContainerSize() const 68 73 { -
trunk/Source/WebCore/rendering/style/StyleCachedImage.h
r97448 r97727 47 47 virtual bool imageHasRelativeWidth() const; 48 48 virtual bool imageHasRelativeHeight() const; 49 virtual void computeIntrinsicDimensions(const RenderObject*, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio); 49 50 virtual bool usesImageContainerSize() const; 50 51 virtual void setContainerSizeForRenderer(const RenderObject*, const IntSize&); -
trunk/Source/WebCore/rendering/style/StyleGeneratedImage.cpp
r97448 r97727 59 59 } 60 60 61 void StyleGeneratedImage::computeIntrinsicDimensions(const RenderObject* renderer, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) 62 { 63 IntSize size = imageSize(renderer, 1); 64 intrinsicWidth = Length(size.width(), Fixed); 65 intrinsicHeight = Length(size.height(), Fixed); 66 intrinsicRatio = size; 67 } 68 61 69 void StyleGeneratedImage::addClient(RenderObject* renderer) 62 70 { -
trunk/Source/WebCore/rendering/style/StyleGeneratedImage.h
r97448 r97727 46 46 virtual bool imageHasRelativeWidth() const { return !m_fixedSize; } 47 47 virtual bool imageHasRelativeHeight() const { return !m_fixedSize; } 48 virtual void computeIntrinsicDimensions(const RenderObject*, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio); 48 49 virtual bool usesImageContainerSize() const { return !m_fixedSize; } 49 50 virtual void setContainerSizeForRenderer(const RenderObject*, const IntSize& containerSize) { m_containerSize = containerSize; } -
trunk/Source/WebCore/rendering/style/StyleImage.h
r97448 r97727 54 54 virtual bool errorOccurred() const { return false; } 55 55 virtual IntSize imageSize(const RenderObject*, float multiplier) const = 0; 56 virtual void computeIntrinsicDimensions(const RenderObject*, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) = 0; 56 57 virtual bool imageHasRelativeWidth() const = 0; 57 58 virtual bool imageHasRelativeHeight() const = 0; -
trunk/Source/WebCore/rendering/style/StylePendingImage.h
r97448 r97727 48 48 virtual bool imageHasRelativeWidth() const { return false; } 49 49 virtual bool imageHasRelativeHeight() const { return false; } 50 virtual void computeIntrinsicDimensions(const RenderObject*, Length& /* intrinsicWidth */ , Length& /* intrinsicHeight */, FloatSize& /* intrinsicRatio */) { } 50 51 virtual bool usesImageContainerSize() const { return false; } 51 52 virtual void setContainerSizeForRenderer(const RenderObject*, const IntSize&) { } -
trunk/Source/WebCore/svg/graphics/SVGImage.cpp
r97448 r97727 214 214 } 215 215 216 void SVGImage::computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) 217 { 218 if (!m_page) 219 return; 220 Frame* frame = m_page->mainFrame(); 221 SVGSVGElement* rootElement = static_cast<SVGDocument*>(frame->document())->rootElement(); 222 if (!rootElement) 223 return; 224 RenderBox* renderer = toRenderBox(rootElement->renderer()); 225 if (!renderer) 226 return; 227 228 intrinsicWidth = renderer->style()->width(); 229 intrinsicHeight = renderer->style()->height(); 230 // FIXME: Add intrinsicRatio calculation from webkit.org/b/47156. 231 intrinsicRatio = FloatSize(); 232 } 233 216 234 NativeImagePtr SVGImage::nativeImageForCurrentFrame() 217 235 { -
trunk/Source/WebCore/svg/graphics/SVGImage.h
r97448 r97727 56 56 virtual bool hasRelativeWidth() const; 57 57 virtual bool hasRelativeHeight() const; 58 virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio); 58 59 59 60 virtual IntSize size() const;
Note: See TracChangeset
for help on using the changeset viewer.