diff options
Diffstat (limited to 'Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp')
-rw-r--r-- | Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp | 60 |
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; |