CSSImageGeneratorValue.h [plain text]
#ifndef CSSImageGeneratorValue_h
#define CSSImageGeneratorValue_h
#include "CSSValue.h"
#include "GeneratorGeneratedImage.h"
#include "IntSizeHash.h"
#include "Timer.h"
#include <wtf/HashCountedSet.h>
#include <wtf/RefPtr.h>
namespace WebCore {
class CachedResourceLoader;
class GeneratorGeneratedImage;
class RenderObject;
class StyleResolver;
class CSSImageGeneratorValue : public CSSValue {
public:
~CSSImageGeneratorValue();
void addClient(RenderObject*);
void removeClient(RenderObject*);
PassRefPtr<Image> image(RenderObject*, const IntSize&);
bool isFixedSize() const;
IntSize fixedSize(const RenderObject*);
bool isPending() const;
bool knownToBeOpaque(const RenderObject*) const;
void loadSubimages(CachedResourceLoader*);
protected:
CSSImageGeneratorValue(ClassType);
GeneratorGeneratedImage* cachedImageForSize(IntSize);
void saveCachedImageForSize(IntSize, PassRefPtr<GeneratorGeneratedImage>);
const HashCountedSet<RenderObject*>& clients() const { return m_clients; }
private:
class CachedGeneratedImage {
public:
CachedGeneratedImage(CSSImageGeneratorValue&, IntSize, PassRefPtr<GeneratorGeneratedImage>);
GeneratorGeneratedImage* image() { return m_image.get(); }
void puntEvictionTimer() { m_evictionTimer.restart(); }
private:
void evictionTimerFired(DeferrableOneShotTimer<CachedGeneratedImage>*);
CSSImageGeneratorValue& m_owner;
IntSize m_size;
RefPtr<GeneratorGeneratedImage> m_image;
DeferrableOneShotTimer<CachedGeneratedImage> m_evictionTimer;
};
friend class CachedGeneratedImage;
void evictCachedGeneratedImage(IntSize);
HashCountedSet<RenderObject*> m_clients;
HashMap<IntSize, OwnPtr<CachedGeneratedImage> > m_images;
};
}
#endif // CSSImageGeneratorValue_h