CoordinatedImageBacking.h [plain text]
#ifndef CoordinatedImageBacking_h
#define CoordinatedImageBacking_h
#if USE(COORDINATED_GRAPHICS)
#include "CoordinatedGraphicsState.h"
#include "CoordinatedSurface.h"
#include "Image.h"
#include "Timer.h"
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
namespace WebCore {
class CoordinatedImageBacking : public RefCounted<CoordinatedImageBacking> {
public:
class Client {
public:
virtual void createImageBacking(CoordinatedImageBackingID) = 0;
virtual void updateImageBacking(CoordinatedImageBackingID, PassRefPtr<CoordinatedSurface>) = 0;
virtual void clearImageBackingContents(CoordinatedImageBackingID) = 0;
virtual void removeImageBacking(CoordinatedImageBackingID) = 0;
};
class Host {
public:
virtual bool imageBackingVisible() = 0;
};
static PassRefPtr<CoordinatedImageBacking> create(Client*, PassRefPtr<Image>);
virtual ~CoordinatedImageBacking();
static CoordinatedImageBackingID getCoordinatedImageBackingID(Image*);
CoordinatedImageBackingID id() const { return m_id; }
void addHost(Host*);
void removeHost(Host*);
void markDirty();
void update();
private:
CoordinatedImageBacking(Client*, PassRefPtr<Image>);
void releaseSurfaceIfNeeded();
void updateVisibilityIfNeeded(bool& changedToVisible);
void clearContentsTimerFired(Timer<CoordinatedImageBacking>*);
Client* m_client;
RefPtr<Image> m_image;
NativeImagePtr m_nativeImagePtr;
CoordinatedImageBackingID m_id;
Vector<Host*> m_hosts;
RefPtr<CoordinatedSurface> m_surface;
Timer<CoordinatedImageBacking> m_clearContentsTimer;
bool m_isDirty;
bool m_isVisible;
};
} #endif // USE(COORDINATED_GRAPHICS)
#endif // CoordinatedImageBacking_h