CoordinatedSurface.h [plain text]
#ifndef CoordinatedSurface_h
#define CoordinatedSurface_h
#if USE(COORDINATED_GRAPHICS)
#include "IntRect.h"
#include <wtf/PassOwnPtr.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; }
virtual IntSize size() const = 0;
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:
virtual Flags flags() const = 0;
private:
static CoordinatedSurface::Factory* s_factory;
};
}
#endif // USE(COORDINATED_GRAPHICS)
#endif // CoordinatedSurface_h