Index: Source/core/html/ImageDocument.cpp |
diff --git a/Source/core/html/ImageDocument.cpp b/Source/core/html/ImageDocument.cpp |
index 417332d4d7b9dbc56dd798c70d5bb89392691ab8..eef84394aa9402bfd3dfad2b50ccf5de8f9caf8d 100644 |
--- a/Source/core/html/ImageDocument.cpp |
+++ b/Source/core/html/ImageDocument.cpp |
@@ -233,9 +233,9 @@ float ImageDocument::scale() const |
return min(widthScale, heightScale); |
} |
-void ImageDocument::resizeImageToFit() |
+void ImageDocument::resizeImageToFit(ScaleType type) |
{ |
- if (!m_imageElement || m_imageElement->document() != this || pageZoomFactor(this) > 1) |
+ if (!m_imageElement || m_imageElement->document() != this || (pageZoomFactor(this) > 1 && type == ScaleOnlyUnzoomedDocument)) |
return; |
LayoutSize imageSize = m_imageElement->cachedImage()->imageSizeForRenderer(m_imageElement->renderer(), pageZoomFactor(this)); |
@@ -255,9 +255,9 @@ void ImageDocument::imageClicked(int x, int y) |
m_shouldShrinkImage = !m_shouldShrinkImage; |
if (m_shouldShrinkImage) |
- windowSizeChanged(); |
+ windowSizeChanged(ScaleZoomedDocument); |
else { |
- restoreImageSize(); |
+ restoreImageSize(ScaleZoomedDocument); |
updateLayout(); |
@@ -284,13 +284,13 @@ void ImageDocument::imageUpdated() |
if (shouldShrinkToFit()) { |
// Force resizing of the image |
- windowSizeChanged(); |
+ windowSizeChanged(ScaleOnlyUnzoomedDocument); |
} |
} |
-void ImageDocument::restoreImageSize() |
+void ImageDocument::restoreImageSize(ScaleType type) |
{ |
- if (!m_imageElement || !m_imageSizeIsKnown || m_imageElement->document() != this || pageZoomFactor(this) < 1) |
+ if (!m_imageElement || !m_imageSizeIsKnown || m_imageElement->document() != this || (pageZoomFactor(this) < 1 && type == ScaleOnlyUnzoomedDocument)) |
return; |
LayoutSize imageSize = m_imageElement->cachedImage()->imageSizeForRenderer(m_imageElement->renderer(), 1.0f); |
@@ -320,7 +320,7 @@ bool ImageDocument::imageFitsInWindow() const |
return imageSize.width() <= windowSize.width() && imageSize.height() <= windowSize.height(); |
} |
-void ImageDocument::windowSizeChanged() |
+void ImageDocument::windowSizeChanged(ScaleType type) |
{ |
if (!m_imageElement || !m_imageSizeIsKnown || m_imageElement->document() != this) |
return; |
@@ -341,13 +341,13 @@ void ImageDocument::windowSizeChanged() |
// If the window has been resized so that the image fits, restore the image size |
// otherwise update the restored image size. |
if (fitsInWindow) |
- restoreImageSize(); |
+ restoreImageSize(type); |
else |
- resizeImageToFit(); |
+ resizeImageToFit(type); |
} else { |
// If the image isn't resized but needs to be, then resize it. |
if (!fitsInWindow) { |
- resizeImageToFit(); |
+ resizeImageToFit(type); |
m_didShrinkImage = true; |
} |
} |
@@ -385,7 +385,7 @@ void ImageDocument::trace(Visitor* visitor) |
void ImageEventListener::handleEvent(ExecutionContext*, Event* event) |
{ |
if (event->type() == EventTypeNames::resize) |
- m_doc->windowSizeChanged(); |
+ m_doc->windowSizeChanged(ImageDocument::ScaleOnlyUnzoomedDocument); |
else if (event->type() == EventTypeNames::click && event->isMouseEvent()) { |
MouseEvent* mouseEvent = toMouseEvent(event); |
m_doc->imageClicked(mouseEvent->x(), mouseEvent->y()); |