From a30818b6d22801f8f2f4d6f29dd83d3eddb67b6f Mon Sep 17 00:00:00 2001 From: Victoria Lease Date: Wed, 29 Feb 2012 17:22:42 -0800 Subject: pin find-on-page scrolls to content edges Bug: 6066283 This change also contains code to prevent find-on-page from scrolling in unnecessary circumstances, for example when a match is already being displayed. Change-Id: I555c84f8851a82e854d12cb34b8805c9d3f22f5e --- .../android/WebCoreSupport/PlatformBridge.cpp | 25 +++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'Source') diff --git a/Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp b/Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp index b684a1a..e536701 100644 --- a/Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp +++ b/Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp @@ -49,6 +49,8 @@ #include #include +#include + using namespace android; namespace WebCore { @@ -169,18 +171,21 @@ void PlatformBridge::updateTextfield(FrameView* frameView, Node* nodePtr, bool c } void PlatformBridge::setScrollPosition(ScrollView* scrollView, int x, int y) { + FrameView* frameView = scrollView->frameView(); + if (!frameView) return; // Check to make sure the view is the main FrameView. android::WebViewCore *webViewCore = android::WebViewCore::getWebViewCore(scrollView); - if (webViewCore->mainFrame()->view() == scrollView) - webViewCore->scrollTo(x, y); - else { - FrameView* frameView = scrollView->frameView(); - if (frameView) { - RenderView* renderer = frameView->frame()->contentRenderer(); - if (renderer) { - RenderLayer* layer = renderer->layer(); - layer->scrollToOffset(x, y); - } + if (webViewCore->mainFrame()->view() == scrollView) { + const IntRect& visibleContentRect = frameView->visibleContentRect(); + x = std::max(0, std::min(frameView->contentsWidth(), x)); + y = std::max(0, std::min(frameView->contentsHeight(), y)); + if ((x != visibleContentRect.x()) || (y != visibleContentRect.y())) + webViewCore->scrollTo(x, y); + } else { + RenderView* renderer = frameView->frame()->contentRenderer(); + if (renderer) { + RenderLayer* layer = renderer->layer(); + layer->scrollToOffset(x, y); } } } -- cgit v1.1