#ifndef DrawingAreaImpl_h
#define DrawingAreaImpl_h
#include "DrawingArea.h"
#include "LayerTreeHost.h"
#include <WebCore/Region.h>
#include <WebCore/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 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 bool layerTreeStateIsFrozen() const { return m_layerTreeStateIsFrozen; }
virtual LayerTreeHost* layerTreeHost() const { return m_layerTreeHost.get(); }
virtual void forceRepaint();
virtual void didInstallPageOverlay();
virtual void didUninstallPageOverlay();
virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&);
virtual void setPageOverlayOpacity(float);
virtual bool pageOverlayShouldApplyFadeWhenPainting() const;
virtual void setPaintingEnabled(bool);
virtual void setRootCompositingLayer(WebCore::GraphicsLayer*);
virtual void scheduleCompositingLayerSync();
#if PLATFORM(WIN)
virtual void scheduleChildWindowGeometryUpdate(const WindowGeometry&);
#endif
#if PLATFORM(MAC)
virtual void setLayerHostingMode(uint32_t) OVERRIDE;
#endif
#if USE(UI_SIDE_COMPOSITING)
virtual void didReceiveLayerTreeHostMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
#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();
virtual void pageCustomRepresentationChanged();
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;
WebCore::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;
WebCore::RunLoop::Timer<DrawingAreaImpl> m_displayTimer;
WebCore::RunLoop::Timer<DrawingAreaImpl> m_exitCompositingTimer;
RefPtr<LayerTreeHost> m_layerTreeHost;
};
}
#endif // DrawingAreaImpl_h