diff options
author | Victoria Lease <violets@google.com> | 2012-03-01 09:55:04 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-03-01 09:55:04 -0800 |
commit | a0798fea895a9be431e9357b9a0481a189b69980 (patch) | |
tree | 63b3a40514b400887608ca28b33a74f0974c7a2c /Source/WebKit | |
parent | 868265ada276afa86d397c7a6771138ffe6add91 (diff) | |
parent | a30818b6d22801f8f2f4d6f29dd83d3eddb67b6f (diff) | |
download | external_webkit-a0798fea895a9be431e9357b9a0481a189b69980.zip external_webkit-a0798fea895a9be431e9357b9a0481a189b69980.tar.gz external_webkit-a0798fea895a9be431e9357b9a0481a189b69980.tar.bz2 |
Merge "pin find-on-page scrolls to content edges"
Diffstat (limited to 'Source/WebKit')
-rw-r--r-- | Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
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 <wtf/android/AndroidThreading.h> #include <wtf/MainThread.h> +#include <algorithm> + 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); } } } |