#ifndef DrawingAreaImpl_h
#define DrawingAreaImpl_h
#include "DrawingArea.h"
#include "LayerTreeHost.h"
#include <WebCore/Region.h>
#include <wtf/RunLoop.h>
namespace WebCore {
class GraphicsContext;
}
namespace WebKit {
class ShareableBitmap;
class UpdateInfo;
class DrawingAreaImpl : public DrawingArea {
public:
DrawingAreaImpl(WebPage&, const WebPageCreationParameters&);
virtual ~DrawingAreaImpl();
void layerHostDidFlushLayers();
private:
virtual void setNeedsDisplay() override;
virtual void setNeedsDisplayInRect(const WebCore::IntRect&) override;
virtual void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollDelta) override;
virtual void pageBackgroundTransparencyChanged() override;
virtual void setLayerTreeStateIsFrozen(bool) override;
virtual bool layerTreeStateIsFrozen() const override { return m_layerTreeStateIsFrozen; }
virtual LayerTreeHost* layerTreeHost() const override { return m_layerTreeHost.get(); }
virtual void forceRepaint() override;
virtual bool forceRepaintAsync(uint64_t callbackID) override;
virtual void setPaintingEnabled(bool) override;
virtual void mainFrameContentSizeChanged(const WebCore::IntSize&) override;
virtual void updatePreferences(const WebPreferencesStore&) override;
virtual WebCore::GraphicsLayerFactory* graphicsLayerFactory() override;
virtual void setRootCompositingLayer(WebCore::GraphicsLayer*) override;
virtual void scheduleCompositingLayerFlush() override;
virtual void scheduleCompositingLayerFlushImmediately() override;
virtual void attachViewOverlayGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer*) override;
#if USE(TEXTURE_MAPPER_GL) && PLATFORM(GTK)
virtual void setNativeSurfaceHandleForCompositing(uint64_t) override;
#endif
virtual void updateBackingStoreState(uint64_t backingStoreStateID, bool respondImmediately, float deviceScaleFactor, const WebCore::IntSize&, const WebCore::IntSize& scrollOffset) override;
virtual void didUpdate() override;
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&);
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;
RunLoop::Timer<DrawingAreaImpl> m_displayTimer;
RunLoop::Timer<DrawingAreaImpl> m_exitCompositingTimer;
RefPtr<LayerTreeHost> m_layerTreeHost;
};
}
#endif // DrawingAreaImpl_h