RenderImageResource.cpp [plain text]
#include "config.h"
#include "RenderImageResource.h"
#include "CachedImage.h"
#include "Image.h"
#include "RenderElement.h"
#include "RenderImage.h"
#include "RenderImageResourceStyleImage.h"
namespace WebCore {
RenderImageResource::RenderImageResource()
: m_renderer(0)
{
}
RenderImageResource::~RenderImageResource()
{
}
void RenderImageResource::initialize(RenderElement* renderer)
{
ASSERT(!m_renderer);
ASSERT(renderer);
m_renderer = renderer;
}
void RenderImageResource::shutdown()
{
ASSERT(m_renderer);
if (m_cachedImage)
m_cachedImage->removeClient(m_renderer);
}
void RenderImageResource::setCachedImage(CachedImage* newImage)
{
ASSERT(m_renderer);
if (m_cachedImage == newImage)
return;
if (m_cachedImage)
m_cachedImage->removeClient(m_renderer);
m_cachedImage = newImage;
if (m_cachedImage) {
m_cachedImage->addClient(m_renderer);
if (m_cachedImage->errorOccurred())
m_renderer->imageChanged(m_cachedImage.get());
}
}
void RenderImageResource::resetAnimation()
{
ASSERT(m_renderer);
if (!m_cachedImage)
return;
image()->resetAnimation();
if (!m_renderer->needsLayout())
m_renderer->repaint();
}
PassRefPtr<Image> RenderImageResource::image(int, int) const
{
return m_cachedImage ? m_cachedImage->imageForRenderer(m_renderer) : Image::nullImage();
}
bool RenderImageResource::errorOccurred() const
{
return m_cachedImage && m_cachedImage->errorOccurred();
}
void RenderImageResource::setContainerSizeForRenderer(const IntSize& imageContainerSize)
{
ASSERT(m_renderer);
if (m_cachedImage)
m_cachedImage->setContainerSizeForRenderer(m_renderer, imageContainerSize, m_renderer->style().effectiveZoom());
}
bool RenderImageResource::imageHasRelativeWidth() const
{
return m_cachedImage ? m_cachedImage->imageHasRelativeWidth() : false;
}
bool RenderImageResource::imageHasRelativeHeight() const
{
return m_cachedImage ? m_cachedImage->imageHasRelativeHeight() : false;
}
LayoutSize RenderImageResource::imageSize(float multiplier) const
{
return getImageSize(multiplier, CachedImage::UsedSize);
}
LayoutSize RenderImageResource::intrinsicSize(float multiplier) const
{
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 (m_renderer && m_renderer->isRenderImage())
size.scale(toRenderImage(m_renderer)->imageDevicePixelRatio());
return size;
}
}