diff options
Diffstat (limited to 'Source/WebCore/rendering/RenderImageResource.cpp')
-rw-r--r-- | Source/WebCore/rendering/RenderImageResource.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/Source/WebCore/rendering/RenderImageResource.cpp b/Source/WebCore/rendering/RenderImageResource.cpp index e6a1dc459..bd1e55e40 100644 --- a/Source/WebCore/rendering/RenderImageResource.cpp +++ b/Source/WebCore/rendering/RenderImageResource.cpp @@ -31,6 +31,7 @@ #include "CachedImage.h" #include "Image.h" #include "RenderElement.h" +#include "RenderImage.h" #include "RenderImageResourceStyleImage.h" namespace WebCore { @@ -55,8 +56,10 @@ void RenderImageResource::shutdown() { ASSERT(m_renderer); - if (m_cachedImage) - m_cachedImage->removeClient(m_renderer); + if (m_cachedImage) { + image()->stopAnimation(); + m_cachedImage->removeClient(*m_renderer); + } } void RenderImageResource::setCachedImage(CachedImage* newImage) @@ -67,10 +70,10 @@ void RenderImageResource::setCachedImage(CachedImage* newImage) return; if (m_cachedImage) - m_cachedImage->removeClient(m_renderer); + m_cachedImage->removeClient(*m_renderer); m_cachedImage = newImage; if (m_cachedImage) { - m_cachedImage->addClient(m_renderer); + m_cachedImage->addClient(*m_renderer); if (m_cachedImage->errorOccurred()) m_renderer->imageChanged(m_cachedImage.get()); } @@ -89,7 +92,7 @@ void RenderImageResource::resetAnimation() m_renderer->repaint(); } -PassRefPtr<Image> RenderImageResource::image(int, int) const +RefPtr<Image> RenderImageResource::image(const IntSize&) const { return m_cachedImage ? m_cachedImage->imageForRenderer(m_renderer) : Image::nullImage(); } @@ -118,12 +121,22 @@ bool RenderImageResource::imageHasRelativeHeight() const LayoutSize RenderImageResource::imageSize(float multiplier) const { - return m_cachedImage ? m_cachedImage->imageSizeForRenderer(m_renderer, multiplier) : LayoutSize(); + return getImageSize(multiplier, CachedImage::UsedSize); } LayoutSize RenderImageResource::intrinsicSize(float multiplier) const { - return m_cachedImage ? m_cachedImage->imageSizeForRenderer(m_renderer, multiplier, CachedImage::IntrinsicSize) : LayoutSize(); + return getImageSize(multiplier, CachedImage::IntrinsicSize); +} + +LayoutSize RenderImageResource::getImageSize(float multiplier, CachedImage::SizeType type) const +{ + if (!m_cachedImage) + return LayoutSize(); + LayoutSize size = m_cachedImage->imageSizeForRenderer(m_renderer, multiplier, type); + if (is<RenderImage>(m_renderer)) + size.scale(downcast<RenderImage>(*m_renderer).imageDevicePixelRatio()); + return size; } } // namespace WebCore |