CoordinatedSurface.h [plain text]
#ifndef CoordinatedSurface_h
#define CoordinatedSurface_h
#if USE(COORDINATED_GRAPHICS)
#include "IntRect.h"
#include <wtf/PassRefPtr.h>
#include <wtf/ThreadSafeRefCounted.h>
namespace WebCore {
class BitmapTexture;
class GraphicsContext;
class CoordinatedSurface : public ThreadSafeRefCounted<CoordinatedSurface> {
public:
enum Flag {
NoFlags = 0,
SupportsAlpha = 1 << 0,
};
typedef unsigned Flags;
class Client {
public:
virtual ~Client() { }
virtual void paintToSurfaceContext(GraphicsContext*) = 0;
};
typedef PassRefPtr<CoordinatedSurface> Factory(const IntSize&, Flags);
static void setFactory(Factory);
static PassRefPtr<CoordinatedSurface> create(const IntSize&, Flags);
virtual ~CoordinatedSurface() { }
bool supportsAlpha() const { return flags() & SupportsAlpha; }
IntSize size() const { return m_size; }
virtual void paintToSurface(const IntRect&, Client*) = 0;
#if USE(TEXTURE_MAPPER)
virtual void copyToTexture(PassRefPtr<BitmapTexture>, const IntRect& target, const IntPoint& sourceOffset) = 0;
#endif
protected:
CoordinatedSurface(const IntSize&, Flags);
Flags flags() const { return m_flags; }
IntSize m_size;
Flags m_flags;
private:
static CoordinatedSurface::Factory* s_factory;
};
}
#endif // USE(COORDINATED_GRAPHICS)
#endif // CoordinatedSurface_h