Chromium Code Reviews| Index: Source/core/html/canvas/CanvasRenderingContext2D.cpp | 
| diff --git a/Source/core/html/canvas/CanvasRenderingContext2D.cpp b/Source/core/html/canvas/CanvasRenderingContext2D.cpp | 
| index 4bc56b201c406dea598180b30114f4f276b1512c..0f08c405b0f65b286602acd1660a22b5e37f440d 100644 | 
| --- a/Source/core/html/canvas/CanvasRenderingContext2D.cpp | 
| +++ b/Source/core/html/canvas/CanvasRenderingContext2D.cpp | 
| @@ -1207,11 +1207,22 @@ bool CanvasRenderingContext2D::shouldDrawShadows() const | 
| return alphaChannel(state().m_shadowColor) && (state().m_shadowBlur || !state().m_shadowOffset.isZero()); | 
| } | 
| -static LayoutSize sizeFor(HTMLImageElement* image) | 
| +enum ImageSizeType { | 
| + ScaledSize, | 
| + UnscaledSize | 
| +}; | 
| + | 
| +static LayoutSize sizeFor(HTMLImageElement* image, ImageSizeType sizeType) | 
| 
 
pdr.
2013/10/11 05:17:33
Can you help me understand why this is needed?
I
 
Yoav Weiss
2013/10/11 07:22:32
For what I've seen, drawImage calls sizeFor 3 time
 
 | 
| { | 
| - if (ImageResource* cachedImage = image->cachedImage()) | 
| - return cachedImage->imageSizeForRenderer(image->renderer(), 1.0f); // FIXME: Not sure about this. | 
| - return IntSize(); | 
| + LayoutSize size; | 
| + ImageResource* cachedImage = image->cachedImage(); | 
| + if (cachedImage) { | 
| + size = cachedImage->imageSizeForRenderer(image->renderer(), 1.0f); // FIXME: Not sure about this. | 
| + | 
| + if (sizeType == ScaledSize && image->renderer() && cachedImage->image() && !cachedImage->image()->hasRelativeWidth()) | 
| + size.scale(image->renderer()->intrinsicSizeFactor()); | 
| + } | 
| + return size; | 
| } | 
| static IntSize sizeFor(HTMLVideoElement* video) | 
| @@ -1362,7 +1373,7 @@ void CanvasRenderingContext2D::drawImage(HTMLImageElement* image, float x, float | 
| es.throwUninformativeAndGenericDOMException(TypeMismatchError); | 
| return; | 
| } | 
| - LayoutSize size = sizeFor(image); | 
| + LayoutSize size = sizeFor(image, ScaledSize); | 
| drawImage(image, x, y, size.width(), size.height(), es); | 
| } | 
| @@ -1373,7 +1384,7 @@ void CanvasRenderingContext2D::drawImage(HTMLImageElement* image, | 
| es.throwUninformativeAndGenericDOMException(TypeMismatchError); | 
| return; | 
| } | 
| - LayoutSize size = sizeFor(image); | 
| + LayoutSize size = sizeFor(image, UnscaledSize); | 
| drawImage(image, FloatRect(0, 0, size.width(), size.height()), FloatRect(x, y, width, height), es); | 
| } | 
| @@ -1404,7 +1415,7 @@ void CanvasRenderingContext2D::drawImage(HTMLImageElement* image, const FloatRec | 
| if (!cachedImage || !image->complete()) | 
| return; | 
| - LayoutSize size = sizeFor(image); | 
| + LayoutSize size = sizeFor(image, UnscaledSize); | 
| if (!size.width() || !size.height()) { | 
| es.throwUninformativeAndGenericDOMException(InvalidStateError); | 
| return; |