summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp')
-rw-r--r--Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp60
1 files changed, 24 insertions, 36 deletions
diff --git a/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp b/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp
index 4c5e61d..7c83f86 100644
--- a/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp
+++ b/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp
@@ -187,7 +187,6 @@ WKCACFLayerRenderer::WKCACFLayerRenderer(WKCACFLayerRendererClient* client)
, m_context(wkCACFContextCreate())
, m_hostWindow(0)
, m_renderTimer(this, &WKCACFLayerRenderer::renderTimerFired)
- , m_backingStoreDirty(false)
, m_mustResetLostDeviceBeforeRendering(false)
, m_syncLayerChanges(false)
{
@@ -224,32 +223,33 @@ WKCACFLayerRenderer::WKCACFLayerRenderer(WKCACFLayerRendererClient* client)
WKCACFLayerRenderer::~WKCACFLayerRenderer()
{
- destroyRenderer();
+ setHostWindow(0);
+ WKCACFContextFlusher::shared().removeContext(m_context);
wkCACFContextDestroy(m_context);
}
-PlatformCALayer* WKCACFLayerRenderer::rootLayer() const
+void WKCACFLayerRenderer::setHostWindow(HWND window)
{
- return m_rootLayer.get();
-}
+ if (window == m_hostWindow)
+ return;
-void WKCACFLayerRenderer::addPendingAnimatedLayer(PassRefPtr<PlatformCALayer> layer)
-{
- m_pendingAnimatedLayers.add(layer);
+ if (m_hostWindow)
+ destroyRenderer();
+
+ m_hostWindow = window;
+
+ if (m_hostWindow)
+ createRenderer();
}
-void WKCACFLayerRenderer::setRootContents(CGImageRef image)
+PlatformCALayer* WKCACFLayerRenderer::rootLayer() const
{
- ASSERT(m_rootLayer);
- m_rootLayer->setContents(image);
- renderSoon();
+ return m_rootLayer.get();
}
-void WKCACFLayerRenderer::setRootContentsAndDisplay(CGImageRef image)
+void WKCACFLayerRenderer::addPendingAnimatedLayer(PassRefPtr<PlatformCALayer> layer)
{
- ASSERT(m_rootLayer);
- m_rootLayer->setContents(image);
- paint();
+ m_pendingAnimatedLayers.add(layer);
}
void WKCACFLayerRenderer::setRootChildLayer(PlatformCALayer* layer)
@@ -266,16 +266,6 @@ void WKCACFLayerRenderer::layerTreeDidChange()
renderSoon();
}
-void WKCACFLayerRenderer::setNeedsDisplay(bool sync)
-{
- if (!m_syncLayerChanges && sync)
- m_syncLayerChanges = true;
-
- ASSERT(m_rootLayer);
- m_rootLayer->setNeedsDisplay(0);
- renderSoon();
-}
-
bool WKCACFLayerRenderer::createRenderer()
{
if (m_d3dDevice || !m_mightBeAbleToCreateDeviceLater)
@@ -340,7 +330,7 @@ bool WKCACFLayerRenderer::createRenderer()
initD3DGeometry();
- wkCACFContextInitializeD3DDevice(m_context, m_d3dDevice.get());
+ wkCACFContextSetD3DDevice(m_context, m_d3dDevice.get());
if (IsWindow(m_hostWindow))
m_rootLayer->setBounds(bounds());
@@ -352,6 +342,7 @@ void WKCACFLayerRenderer::destroyRenderer()
{
wkCACFContextSetLayer(m_context, m_rootLayer->platformLayer());
+ wkCACFContextSetD3DDevice(m_context, 0);
m_d3dDevice = 0;
if (s_d3d)
s_d3d->Release();
@@ -422,15 +413,6 @@ void WKCACFLayerRenderer::paint()
return;
}
- if (m_backingStoreDirty) {
- // If the backing store is still dirty when we are about to draw the
- // composited content, we need to force the window to paint into the
- // backing store. The paint will only paint the dirty region that
- // if being tracked in WebView.
- UpdateWindow(m_hostWindow);
- return;
- }
-
Vector<CGRect> dirtyRects;
getDirtyRects(m_hostWindow, dirtyRects);
render(dirtyRects);
@@ -545,6 +527,12 @@ void WKCACFLayerRenderer::renderSoon()
m_renderTimer.startOneShot(0);
}
+void WKCACFLayerRenderer::syncCompositingStateSoon()
+{
+ m_syncLayerChanges = true;
+ renderSoon();
+}
+
CGRect WKCACFLayerRenderer::bounds() const
{
RECT clientRect;