OSDN Git Service

Scroll position now passed to all layers
[android-x86/external-webkit.git] / Source / WebCore / platform / graphics / android / GLWebViewState.cpp
index a33c3d0..900d0fd 100644 (file)
@@ -84,9 +84,9 @@ GLWebViewState::GLWebViewState()
     , m_goingLeft(false)
     , m_expandedTileBoundsX(0)
     , m_expandedTileBoundsY(0)
+    , m_highEndGfx(false)
     , m_scale(1)
     , m_layersRenderingMode(kAllTextures)
-    , m_highEndGfx(false)
 {
     m_viewport.setEmpty();
     m_futureViewportTileBounds.setEmpty();
@@ -150,8 +150,10 @@ void GLWebViewState::setBaseLayer(BaseLayerAndroid* layer, const SkRegion& inval
     TilesManager::instance()->setShowVisualIndicator(showVisualIndicator);
 }
 
-void GLWebViewState::scrolledLayer(ScrollableLayerAndroid*)
+void GLWebViewState::scrollLayer(int layerId, int x, int y)
 {
+    m_treeManager.updateScrollableLayer(layerId, x, y);
+
     // TODO: only inval the area of the scrolled layer instead of
     // doing a fullInval()
     if (m_layersRenderingMode == kSingleSurfaceRendering)
@@ -335,7 +337,6 @@ double GLWebViewState::setupDrawing(IntRect& viewRect, SkRect& visibleRect,
     int top = viewRect.y();
     int width = viewRect.width();
     int height = viewRect.height();
-    glViewport(left, top, width, height);
 
     ShaderProgram* shader = TilesManager::instance()->shader();
     if (shader->program() == -1) {
@@ -343,12 +344,18 @@ double GLWebViewState::setupDrawing(IntRect& viewRect, SkRect& visibleRect,
         shader->init();
     }
     shader->setViewRect(viewRect);
-    shader->setViewport(visibleRect);
+    shader->setViewport(visibleRect, scale);
     shader->setWebViewRect(webViewRect);
     shader->setTitleBarHeight(titleBarHeight);
     shader->setScreenClip(screenClip);
     shader->resetBlending();
 
+    shader->calculateAnimationDelta();
+
+    glViewport(left + shader->getAnimationDeltaX(),
+               top - shader->getAnimationDeltaY(),
+               width, height);
+
     double currentTime = WTF::currentTime();
 
     setViewport(visibleRect, scale);
@@ -431,7 +438,8 @@ void GLWebViewState::fullInval()
 
 bool GLWebViewState::drawGL(IntRect& rect, SkRect& viewport, IntRect* invalRect,
                             IntRect& webViewRect, int titleBarHeight,
-                            IntRect& clip, float scale, bool* buffersSwappedPtr)
+                            IntRect& clip, float scale,
+                            bool* treesSwappedPtr, bool* newTreeHasAnimPtr)
 {
     m_scale = scale;
     TilesManager::instance()->getProfiler()->nextFrame(viewport.fLeft,
@@ -488,7 +496,8 @@ bool GLWebViewState::drawGL(IntRect& rect, SkRect& viewport, IntRect* invalRect,
     bool fastSwap = isScrolling() || m_layersRenderingMode == kSingleSurfaceRendering;
     ret |= m_treeManager.drawGL(currentTime, rect, viewport,
                                 scale, fastSwap,
-                                buffersSwappedPtr, &nbTexturesNeeded);
+                                treesSwappedPtr, newTreeHasAnimPtr,
+                                &nbTexturesNeeded);
     if (!ret)
         resetFrameworkInval();