Skip to content
  • yael.aharon@nokia.com's avatar
    Initial support for fixed position elements in Qt WebKit2 · f8c85743
    yael.aharon@nokia.com authored
    https://bugs.webkit.org/show_bug.cgi?id=81786
    
    Reviewed by Noam Rosenthal.
    
    .: 
    
    * ManualTests/fixed-position.html: Added.
    
    Source/WebCore: 
    
    When the setting acceleratedCompositingForFixedPositionEnabled is true, we update
    the position of fixed layers, and send updates to the UI process as we scroll.
    Before painting, TextureMapperLayer receives a delta of the scroll positions between the UI 
    and the web processes, and adjusts its transform position accordingly.
    
    * page/FrameView.cpp:
    (WebCore::FrameView::setFixedVisibleContentRect):
    * platform/graphics/texmap/TextureMapperLayer.cpp:
    (WebCore::TextureMapperLayer::setScrollPositionDelta):
    (WebCore):
    * platform/graphics/texmap/TextureMapperLayer.h:
    (TextureMapperLayer):
    
    Source/WebKit2: 
    
    Turn on the flag acceleratedCompositingForFixedPositionEnabled when using fixed layout.
    As we scroll, we keep track of the delta in scroll position between the UI and web processes,
    and adjust the position of all the fixed layers by that delta.
    When WebLayerTreeRenderer receives a new scroll position from the web process, it keeps it as pending,
    and commit the new scroll position in flushLayerChanges.
    This patch does not address scrolling overshoot and it does not fix the wrong positioning
    that occurs when we zoom. These issues will be addressed in future patches.
    
    * Shared/WebLayerTreeInfo.h:
    * UIProcess/API/qt/qquickwebpage.cpp:
    (QQuickWebPagePrivate::updateSize):
    * UIProcess/LayerTreeHostProxy.cpp:
    (WebKit::LayerTreeHostProxy::setContentsSize):
    (WebKit):
    (WebKit::LayerTreeHostProxy::renderNextFrame):
    (WebKit::LayerTreeHostProxy::didChangeScrollPosition):
    * UIProcess/LayerTreeHostProxy.h:
    (LayerTreeHostProxy):
    * UIProcess/LayerTreeHostProxy.messages.in:
    * UIProcess/WebLayerTreeRenderer.cpp:
    (WebKit::boundedScrollPosition):
    (WebKit):
    (WebKit::WebLayerTreeRenderer::paintToCurrentGLContext):
    (WebKit::WebLayerTreeRenderer::setContentsSize):
    (WebKit::WebLayerTreeRenderer::adjustPositionForFixedLayers):
    (WebKit::WebLayerTreeRenderer::didChangeScrollPosition):
    (WebKit::WebLayerTreeRenderer::syncLayerParameters):
    (WebKit::WebLayerTreeRenderer::deleteLayer):
    (WebKit::WebLayerTreeRenderer::flushLayerChanges):
    * UIProcess/WebLayerTreeRenderer.h:
    (WebLayerTreeRenderer):
    * WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:
    (WebCore::WebGraphicsLayer::WebGraphicsLayer):
    (WebCore::WebGraphicsLayer::syncCompositingState):
    (WebCore::WebGraphicsLayer::syncCompositingStateForThisLayerOnly):
    * WebProcess/WebCoreSupport/WebGraphicsLayer.h:
    (WebGraphicsLayerClient):
    (WebCore::WebGraphicsLayer::fixedToViewport):
    (WebCore::WebGraphicsLayer::setFixedToViewport):
    (WebGraphicsLayer):
    * WebProcess/WebPage/WebPage.cpp:
    (WebKit::WebPage::setResizesToContentsUsingLayoutSize):
    * WebProcess/WebPage/qt/LayerTreeHostQt.cpp:
    (WebKit::LayerTreeHostQt::LayerTreeHostQt):
    (WebKit::LayerTreeHostQt::didSyncCompositingStateForLayer):
    (WebKit::updateOffsetFromViewportForSelf):
    (WebKit):
    (WebKit::updateOffsetFromViewportForLayer):
    (WebKit::LayerTreeHostQt::syncFixedLayers):
    (WebKit::LayerTreeHostQt::setVisibleContentsRect):
    * WebProcess/WebPage/qt/LayerTreeHostQt.h:
    (LayerTreeHostQt):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@113791 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    f8c85743