Index: Source/core/html/ImageDocument.cpp |
diff --git a/Source/core/html/ImageDocument.cpp b/Source/core/html/ImageDocument.cpp |
index d5d8eb2d399b021118858d7581e75f739f110525..66414d4d6fd450b9a77cb58eec91f2d947ac511f 100644 |
--- a/Source/core/html/ImageDocument.cpp |
+++ b/Source/core/html/ImageDocument.cpp |
@@ -142,7 +142,7 @@ void ImageDocumentParser::finish() |
// Report the natural image size in the page title, regardless of zoom level. |
// At a zoom level of 1 the image is guaranteed to have an integer size. |
- IntSize size = flooredIntSize(cachedImage->imageSizeForRenderer(document()->imageElement()->renderer(), 1.0f)); |
+ IntSize size = flooredIntSize(document()->cachedImageSize(1.0f)); |
if (size.width()) { |
// Compute the title, we use the decoded filename of the resource, falling |
// back on the (decoded) hostname if there is no path. |
@@ -221,7 +221,7 @@ float ImageDocument::scale() const |
if (!view) |
return 1; |
- LayoutSize imageSize = m_imageElement->cachedImage()->imageSizeForRenderer(m_imageElement->renderer(), pageZoomFactor(this)); |
+ LayoutSize imageSize = cachedImageSize(pageZoomFactor(this)); |
LayoutSize windowSize = LayoutSize(view->width(), view->height()); |
float widthScale = (float)windowSize.width() / imageSize.width(); |
@@ -235,7 +235,7 @@ void ImageDocument::resizeImageToFit() |
if (!m_imageElement || m_imageElement->document() != this || pageZoomFactor(this) > 1) |
return; |
- LayoutSize imageSize = m_imageElement->cachedImage()->imageSizeForRenderer(m_imageElement->renderer(), pageZoomFactor(this)); |
+ LayoutSize imageSize = cachedImageSize(pageZoomFactor(this)); |
float scale = this->scale(); |
m_imageElement->setWidth(static_cast<int>(imageSize.width() * scale)); |
@@ -274,7 +274,7 @@ void ImageDocument::imageUpdated() |
if (m_imageSizeIsKnown) |
return; |
- if (m_imageElement->cachedImage()->imageSizeForRenderer(m_imageElement->renderer(), pageZoomFactor(this)).isEmpty()) |
+ if (cachedImageSize(pageZoomFactor(this)).isEmpty()) |
return; |
m_imageSizeIsKnown = true; |
@@ -290,7 +290,7 @@ void ImageDocument::restoreImageSize() |
if (!m_imageElement || !m_imageSizeIsKnown || m_imageElement->document() != this || pageZoomFactor(this) < 1) |
return; |
- LayoutSize imageSize = m_imageElement->cachedImage()->imageSizeForRenderer(m_imageElement->renderer(), 1.0f); |
+ LayoutSize imageSize = cachedImageSize(1.0f); |
m_imageElement->setWidth(imageSize.width()); |
m_imageElement->setHeight(imageSize.height()); |
@@ -311,7 +311,7 @@ bool ImageDocument::imageFitsInWindow() const |
if (!view) |
return true; |
- LayoutSize imageSize = m_imageElement->cachedImage()->imageSizeForRenderer(m_imageElement->renderer(), pageZoomFactor(this)); |
+ LayoutSize imageSize = cachedImageSize(pageZoomFactor(this)); |
LayoutSize windowSize = LayoutSize(view->width(), view->height()); |
return imageSize.width() <= windowSize.width() && imageSize.height() <= windowSize.height(); |
@@ -369,6 +369,18 @@ void ImageDocument::dispose() |
HTMLDocument::dispose(); |
} |
+LayoutSize ImageDocument::cachedImageSize(float zoomFactor) const |
+{ |
+ if (!m_imageElement) |
+ return LayoutSize(); |
+ |
+ ImageResource* imageResource = m_imageElement->cachedImage(); |
+ if (!m_imageElement->renderer() && imageResource->hasImage() && imageResource->image()->isBitmapImage()) |
+ return imageResource->bitmapImageSizeRespectingOrientation(zoomFactor); |
+ |
+ return imageResource->imageSizeForRenderer(m_imageElement->renderer(), zoomFactor); |
abarth-chromium
2014/02/15 18:58:33
Won't this still be broken for non-bitmap images?
|
+} |
+ |
// -------- |
void ImageEventListener::handleEvent(ExecutionContext*, Event* event) |