summaryrefslogtreecommitdiffstats
path: root/WebKit/android/jni/WebViewCore.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/android/jni/WebViewCore.cpp')
-rw-r--r--WebKit/android/jni/WebViewCore.cpp37
1 files changed, 15 insertions, 22 deletions
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp
index 1ed885a..31c6120 100644
--- a/WebKit/android/jni/WebViewCore.cpp
+++ b/WebKit/android/jni/WebViewCore.cpp
@@ -2360,7 +2360,8 @@ void WebViewCore::touchUp(int touchGeneration,
// Return the RenderLayer for the given RenderObject only if the layer is
// composited and it contains a scrollable content layer.
-static WebCore::RenderLayer* getLayerFromRenderer(WebCore::RenderObject* renderer)
+static WebCore::RenderLayer* getLayerFromRenderer(
+ WebCore::RenderObject* renderer, LayerAndroid** aLayer)
{
if (!renderer)
return 0;
@@ -2371,9 +2372,10 @@ static WebCore::RenderLayer* getLayerFromRenderer(WebCore::RenderObject* rendere
static_cast<GraphicsLayerAndroid*>(layer->backing()->graphicsLayer());
if (!graphicsLayer)
return 0;
- LayerAndroid* aLayer = graphicsLayer->contentLayer();
- if (!aLayer || !aLayer->contentIsScrollable())
+ LayerAndroid* layerAndroid = graphicsLayer->contentLayer();
+ if (!layerAndroid || !layerAndroid->contentIsScrollable())
return 0;
+ *aLayer = layerAndroid;
return layer;
}
@@ -2381,34 +2383,27 @@ static WebCore::RenderLayer* getLayerFromRenderer(WebCore::RenderObject* rendere
// done so that the node is visible when it is clicked.
static void scrollLayer(WebCore::RenderObject* renderer, WebCore::IntPoint* pos)
{
- WebCore::RenderLayer* layer = getLayerFromRenderer(renderer);
+ LayerAndroid* aLayer;
+ WebCore::RenderLayer* layer = getLayerFromRenderer(renderer, &aLayer);
if (!layer)
return;
WebCore::IntRect absBounds = renderer->absoluteBoundingBoxRect();
- WebCore::IntRect layerBounds = layer->absoluteBoundingBox();
+ // Do not include the outline when moving the node's bounds.
+ WebCore::IntRect layerBounds = layer->renderer()->absoluteBoundingBoxRect();
// Move the node's bounds into the layer's coordinates.
absBounds.move(-layerBounds.x(), -layerBounds.y());
+ int diffX = layer->scrollXOffset();
+ int diffY = layer->scrollYOffset();
// Scroll the layer to the node's position. The false parameters tell the
// layer not to invalidate.
- layer->scrollToOffset(absBounds.x(), absBounds.y(), false, false);
+ layer->scrollToOffset(absBounds.x(), absBounds.y(), false, true);
+ diffX = layer->scrollXOffset() - diffX;
+ diffY = layer->scrollYOffset() - diffY;
// Update the mouse position to the layer offset.
- pos->move(-layer->scrollXOffset(), -layer->scrollYOffset());
-}
-
-static void restoreScrolledLayer(WebCore::RenderObject* renderer,
- WebCore::IntPoint* pos)
-{
- WebCore::RenderLayer* layer = getLayerFromRenderer(renderer);
- if (!layer)
- return;
- // Move the mouse position back to it's original position.
- pos->move(layer->scrollXOffset(), layer->scrollYOffset());
-
- // Scroll the layer back to 0,0.
- layer->scrollToOffset(0, 0, false, false);
+ pos->move(-diffX, -diffY);
}
// Common code for both clicking with the trackball and touchUp
@@ -2508,8 +2503,6 @@ bool WebViewCore::handleMouseClick(WebCore::Frame* framePtr, WebCore::Node* node
requestKeyboard(true);
}
}
- if (nodePtr && valid)
- restoreScrolledLayer(nodePtr->renderer(), &m_mousePos);
return handled;
}