#ifndef DrawingAreaImpl_h
#define DrawingAreaImpl_h
#include "DrawingArea.h"
#include "LayerTreeHost.h"
#include "Region.h"
#include "RunLoop.h"
namespace WebCore {
class GraphicsContext;
}
namespace WebKit {
class ShareableBitmap;
class UpdateInfo;
class DrawingAreaImpl : public DrawingArea {
public:
static PassOwnPtr<DrawingAreaImpl> create(WebPage*, const WebPageCreationParameters&);
virtual ~DrawingAreaImpl();
void setLayerHostNeedsDisplay();
void layerHostDidFlushLayers();
private:
DrawingAreaImpl(WebPage*, const WebPageCreationParameters&);
virtual void setNeedsDisplay(const WebCore::IntRect&);
virtual void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset);
virtual void setLayerTreeStateIsFrozen(bool);
virtual void forceRepaint();
virtual void enableDisplayThrottling();
virtual void disableDisplayThrottling();
virtual void didInstallPageOverlay();
virtual void didUninstallPageOverlay();
virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&);
virtual void setPaintingEnabled(bool);
virtual void setRootCompositingLayer(WebCore::GraphicsLayer*);
virtual void scheduleCompositingLayerSync();
virtual void syncCompositingLayers();
virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
#if PLATFORM(WIN)
virtual void scheduleChildWindowGeometryUpdate(const WindowGeometry&);
#endif
virtual void updateBackingStoreState(uint64_t backingStoreStateID, bool respondImmediately, float deviceScaleFactor, const WebCore::IntSize&, const WebCore::IntSize& scrollOffset);
virtual void didUpdate();
virtual void suspendPainting();
virtual void resumePainting();
void sendDidUpdateBackingStoreState();
void enterAcceleratedCompositingMode(WebCore::GraphicsLayer*);
void exitAcceleratedCompositingModeSoon();
bool exitAcceleratedCompositingModePending() const { return m_exitCompositingTimer.isActive(); }
void exitAcceleratedCompositingMode();
void scheduleDisplay();
void displayTimerFired();
void display();
void display(UpdateInfo&);
PassOwnPtr<WebCore::GraphicsContext> createGraphicsContext(ShareableBitmap*);
uint64_t m_backingStoreStateID;
Region m_dirtyRegion;
WebCore::IntRect m_scrollRect;
WebCore::IntSize m_scrollOffset;
bool m_isPaintingEnabled;
bool m_inUpdateBackingStoreState;
bool m_shouldSendDidUpdateBackingStoreState;
bool m_isWaitingForDidUpdate;
bool m_compositingAccordingToProxyMessages;
bool m_layerTreeStateIsFrozen;
bool m_wantsToExitAcceleratedCompositingMode;
bool m_isPaintingSuspended;
bool m_alwaysUseCompositing;
bool m_shouldThrottleDisplay;
double m_lastDisplayTime;
RunLoop::Timer<DrawingAreaImpl> m_displayTimer;
RunLoop::Timer<DrawingAreaImpl> m_exitCompositingTimer;
RefPtr<LayerTreeHost> m_layerTreeHost;
};
}
#endif // DrawingAreaImpl_h