#ifndef RenderImageResource_h
#define RenderImageResource_h
#include "core/fetch/ImageResource.h"
#include "core/fetch/ResourcePtr.h"
#include "core/rendering/style/StyleImage.h"
namespace WebCore {
class RenderObject;
class RenderImageResource {
    WTF_MAKE_NONCOPYABLE(RenderImageResource); WTF_MAKE_FAST_ALLOCATED;
public:
    virtual ~RenderImageResource();
    static PassOwnPtr<RenderImageResource> create()
    {
        return adoptPtr(new RenderImageResource);
    }
    virtual void initialize(RenderObject*);
    virtual void shutdown();
    void setImageResource(ImageResource*);
    ImageResource* cachedImage() const { return m_cachedImage.get(); }
    virtual bool hasImage() const { return m_cachedImage; }
    void resetAnimation();
    virtual PassRefPtr<Image> image(int  = 0, int  = 0) const
    {
        return m_cachedImage ? m_cachedImage->imageForRenderer(m_renderer) : Image::nullImage();
    }
    virtual bool errorOccurred() const { return m_cachedImage && m_cachedImage->errorOccurred(); }
    virtual void setContainerSizeForRenderer(const IntSize&);
    virtual bool usesImageContainerSize() const { return m_cachedImage ? m_cachedImage->usesImageContainerSize() : false; }
    virtual bool imageHasRelativeWidth() const { return m_cachedImage ? m_cachedImage->imageHasRelativeWidth() : false; }
    virtual bool imageHasRelativeHeight() const { return m_cachedImage ? m_cachedImage->imageHasRelativeHeight() : false; }
    virtual LayoutSize imageSize(float multiplier) const { return getImageSize(multiplier, ImageResource::NormalSize); }
    virtual LayoutSize intrinsicSize(float multiplier) const { return getImageSize(multiplier, ImageResource::IntrinsicSize); }
    virtual WrappedImagePtr imagePtr() const { return m_cachedImage.get(); }
protected:
    RenderImageResource();
    RenderObject* m_renderer;
    ResourcePtr<ImageResource> m_cachedImage;
private:
    LayoutSize getImageSize(float multiplier, ImageResource::SizeType) const;
};
} 
#endif