2012-04-16 Antonio Gomes <agomes@rim.com>
authortonikitoo@webkit.org <tonikitoo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 16 Apr 2012 20:00:42 +0000 (20:00 +0000)
committertonikitoo@webkit.org <tonikitoo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 16 Apr 2012 20:00:42 +0000 (20:00 +0000)
        Screen shift down when VKB shows by clicking in a input box MKS_3601371
        PR #149846

        Reviewed by Rob Buis.

        After switching from ScrollView::canOverscroll to ScrollView::constrainsScrollingToContentEdge
        we had a less restricted code path allowing/disallowing overscrolling. That caused
        some webpages like google.com to get on overscroll when adjusting the scroll
        position to ensure the focused input field is visible.

        Patch restricts the way we allow overscrolling to the bottom, where the virtual
        keyboard pops up from, clamping it to 0, 0 if it tries to
        overscroll upwards, and to maximum scroll position if it overscrolls
        downwards.

        Internally reviewed by Mike Fenton.
        PR #149846

        * WebKitSupport/InputHandler.cpp:
        (BlackBerry::WebKit::InputHandler::ensureFocusTextElementVisible):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@114288 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/blackberry/ChangeLog
Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp

index 89d11e3..8c62f09 100644 (file)
@@ -1,3 +1,26 @@
+2012-04-16  Antonio Gomes  <agomes@rim.com>
+
+        Screen shift down when VKB shows by clicking in a input box MKS_3601371
+        https://bugs.webkit.org/show_bug.cgi?id=84057
+
+        Reviewed by Rob Buis.
+
+        After switching from ScrollView::canOverscroll to ScrollView::constrainsScrollingToContentEdge
+        we had a less restricted code path allowing/disallowing overscrolling. That caused
+        some webpages like google.com to get on overscroll when adjusting the scroll
+        position to ensure the focused input field is visible.
+
+        Patch restricts the way we allow overscrolling to the bottom, where the virtual
+        keyboard pops up from, clamping it to 0, 0 if it tries to
+        overscroll upwards, and to maximum scroll position if it overscrolls
+        downwards.
+
+        PR #149846
+        Internally reviewed by Mike Fenton.
+
+        * WebKitSupport/InputHandler.cpp:
+        (BlackBerry::WebKit::InputHandler::ensureFocusTextElementVisible):
+
 2012-04-16  Yongxin Dai  <yodai@rim.com>
 
         [BlackBerry] Increase padding for text element
index c6c8472..0b9e025 100644 (file)
@@ -634,7 +634,16 @@ void InputHandler::ensureFocusTextElementVisible(CaretScrollType scrollType)
                                                                  horizontalScrollAlignment,
                                                                  verticalScrollAlignment);
 
-            mainFrameView->setScrollPosition(revealRect.location());
+            mainFrameView->setConstrainsScrollingToContentEdge(false);
+            // In order to adjust the scroll position to ensure the focused input field is visible,
+            // we allow overscrolling. However this overscroll has to be strictly allowed towards the
+            // bottom of the page on the y axis only, where the virtual keyboard pops up from.
+            WebCore::IntPoint scrollLocation = revealRect.location();
+            scrollLocation.clampNegativeToZero();
+            WebCore::IntPoint maximumScrollPosition = WebCore::IntPoint(mainFrameView->contentsWidth() - actualScreenRect.width(), mainFrameView->contentsHeight() - actualScreenRect.height());
+            scrollLocation = scrollLocation.shrunkTo(maximumScrollPosition);
+            mainFrameView->setScrollPosition(scrollLocation);
+            mainFrameView->setConstrainsScrollingToContentEdge(true);
         }
     }