WKCACFLayerRenderer.h [plain text]
#ifndef WKCACFLayerRenderer_h
#define WKCACFLayerRenderer_h
#if USE(ACCELERATED_COMPOSITING)
#include "COMPtr.h"
#include "Timer.h"
#include "WKCACFLayer.h"
#include <wtf/Noncopyable.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>
#include <wtf/RetainPtr.h>
#include <CoreGraphics/CGGeometry.h>
interface IDirect3DDevice9;
typedef struct _CACFContext* CACFContextRef;
typedef struct _CARenderContext CARenderContext;
typedef struct _CARenderOGLContext CARenderOGLContext;
namespace WebCore {
class WKCACFRootLayer;
class WKCACFLayerRendererClient {
public:
virtual ~WKCACFLayerRendererClient() { }
virtual bool shouldRender() const = 0;
};
class WKCACFLayerRenderer : public Noncopyable {
public:
static PassOwnPtr<WKCACFLayerRenderer> create(WKCACFLayerRendererClient*);
~WKCACFLayerRenderer();
static bool acceleratedCompositingAvailable();
static void didFlushContext(CACFContextRef);
void setScrollFrame(const IntPoint&, const IntSize&);
void setRootContents(CGImageRef);
void setRootContentsAndDisplay(CGImageRef);
void setRootChildLayer(WKCACFLayer* layer);
void setNeedsDisplay();
void setHostWindow(HWND window) { m_hostWindow = window; }
void setBackingStoreDirty(bool dirty) { m_backingStoreDirty = dirty; }
bool createRenderer();
void destroyRenderer();
void resize();
void renderSoon();
void updateScrollFrame();
protected:
WKCACFLayer* rootLayer() const;
private:
WKCACFLayerRenderer(WKCACFLayerRendererClient*);
void renderTimerFired(Timer<WKCACFLayerRenderer>*);
CGRect bounds() const;
void initD3DGeometry();
enum ResetReason { ChangedWindowSize, LostDevice };
bool resetDevice(ResetReason);
void render(const Vector<CGRect>& dirtyRects = Vector<CGRect>());
void paint();
WKCACFLayerRendererClient* m_client;
bool m_mightBeAbleToCreateDeviceLater;
COMPtr<IDirect3DDevice9> m_d3dDevice;
RefPtr<WKCACFRootLayer> m_rootLayer;
RefPtr<WKCACFLayer> m_viewLayer;
RefPtr<WKCACFLayer> m_scrollLayer;
RefPtr<WKCACFLayer> m_rootChildLayer;
RefPtr<WKCACFLayer> m_clipLayer;
RetainPtr<CACFContextRef> m_context;
CARenderContext* m_renderContext;
CARenderOGLContext* m_renderer;
HWND m_hostWindow;
Timer<WKCACFLayerRenderer> m_renderTimer;
IntPoint m_scrollPosition;
IntSize m_scrollSize;
bool m_backingStoreDirty;
bool m_mustResetLostDeviceBeforeRendering;
#ifndef NDEBUG
bool m_printTree;
#endif
};
}
#endif // USE(ACCELERATED_COMPOSITING)
#endif // WKCACFLayerRenderer_h