TiledBackingStoreRemoteTile.h [plain text]
#ifndef TiledBackingStoreRemoteTile_h
#define TiledBackingStoreRemoteTile_h
#if USE(TILED_BACKING_STORE)
#include "ShareableSurface.h"
#include "Tile.h"
#include "TiledBackingStore.h"
#include "WebCore/IntRect.h"
namespace WebCore {
class ImageBuffer;
class TiledBackingStore;
}
namespace WebKit {
class TiledBackingStoreRemoteTileClient;
class SurfaceUpdateInfo;
class TiledBackingStoreRemoteTile : public WebCore::Tile {
public:
static PassRefPtr<Tile> create(TiledBackingStoreRemoteTileClient* client, WebCore::TiledBackingStore* tiledBackingStore, const Coordinate& tileCoordinate) { return adoptRef(new TiledBackingStoreRemoteTile(client, tiledBackingStore, tileCoordinate)); }
~TiledBackingStoreRemoteTile();
bool isDirty() const;
void invalidate(const WebCore::IntRect&);
Vector<WebCore::IntRect> updateBackBuffer();
void swapBackBufferToFront();
bool isReadyToPaint() const;
void paint(WebCore::GraphicsContext*, const WebCore::IntRect&);
const Coordinate& coordinate() const { return m_coordinate; }
const WebCore::IntRect& rect() const { return m_rect; }
void resize(const WebCore::IntSize&);
private:
TiledBackingStoreRemoteTile(TiledBackingStoreRemoteTileClient*, WebCore::TiledBackingStore*, const Coordinate&);
TiledBackingStoreRemoteTileClient* m_client;
WebCore::TiledBackingStore* m_tiledBackingStore;
Coordinate m_coordinate;
WebCore::IntRect m_rect;
int m_ID;
WebCore::IntRect m_dirtyRect;
OwnPtr<WebCore::ImageBuffer> m_localBuffer;
};
class TiledBackingStoreRemoteTileClient {
public:
virtual ~TiledBackingStoreRemoteTileClient() { }
virtual void createTile(int tileID, const SurfaceUpdateInfo&, const WebCore::IntRect&) = 0;
virtual void updateTile(int tileID, const SurfaceUpdateInfo&, const WebCore::IntRect&) = 0;
virtual void removeTile(int tileID) = 0;
virtual PassOwnPtr<WebCore::GraphicsContext> beginContentUpdate(const WebCore::IntSize&, ShareableSurface::Handle&, WebCore::IntPoint&) = 0;
};
class TiledBackingStoreRemoteTileBackend : public WebCore::TiledBackingStoreBackend {
public:
static PassOwnPtr<WebCore::TiledBackingStoreBackend> create(TiledBackingStoreRemoteTileClient* client) { return adoptPtr(new TiledBackingStoreRemoteTileBackend(client)); }
PassRefPtr<WebCore::Tile> createTile(WebCore::TiledBackingStore*, const WebCore::Tile::Coordinate&);
void paintCheckerPattern(WebCore::GraphicsContext*, const WebCore::FloatRect&);
private:
TiledBackingStoreRemoteTileBackend(TiledBackingStoreRemoteTileClient*);
TiledBackingStoreRemoteTileClient* m_client;
};
}
#endif // USE(TILED_BACKING_STORE)
#endif // TiledBackingStoreRemoteTile