Add method to scroll current node to specific position in Chromium WebKit API
authorfsamuel@chromium.org <fsamuel@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 16 Sep 2011 01:25:24 +0000 (01:25 +0000)
committerfsamuel@chromium.org <fsamuel@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 16 Sep 2011 01:25:24 +0000 (01:25 +0000)
https://bugs.webkit.org/show_bug.cgi?id=68192

Patch by Varun Jain <varunjain@google.com> on 2011-09-15
Reviewed by Dimitri Glazkov.

*  Source/WebKit/chromium/public/WebView.h:
*  Source/WebKit/chromium/src/WebViewImpl.cpp:
*  Source/WebKit/chromium/src/WebViewImpl.h:

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

ChangeLog
Source/WebKit/chromium/public/WebView.h
Source/WebKit/chromium/src/WebViewImpl.cpp
Source/WebKit/chromium/src/WebViewImpl.h

index 376b0859660e3b9f23f02d0fdd001907729aad84..66e65deee522c992c327b7d45e06637087d11d22 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2011-09-15  Varun Jain  <varunjain@google.com>
+
+        Add method to scroll current node to specific position in Chromium WebKit API
+        https://bugs.webkit.org/show_bug.cgi?id=68192
+
+        Reviewed by Dimitri Glazkov.
+
+        *  Source/WebKit/chromium/public/WebView.h:
+        *  Source/WebKit/chromium/src/WebViewImpl.cpp:
+        *  Source/WebKit/chromium/src/WebViewImpl.h:
+
 2011-09-15  Eric Seidel  <eric@webkit.org>
 
         Remove ENABLE(SVG_AS_IMAGE) since all major ports have it on by default
 2011-09-15  Eric Seidel  <eric@webkit.org>
 
         Remove ENABLE(SVG_AS_IMAGE) since all major ports have it on by default
index 68683f1ab417899dd1974a3323c601e9004c3070..338c2ad945f082a4afea55aecd0a7094dbd1ba89 100644 (file)
@@ -174,6 +174,10 @@ public:
     // Scrolls the node currently in focus into view.
     virtual void scrollFocusedNodeIntoView() = 0;
 
     // Scrolls the node currently in focus into view.
     virtual void scrollFocusedNodeIntoView() = 0;
 
+    // Scrolls the node currently in focus into |rect|, where |rect| is in
+    // screen space.
+    virtual void scrollFocusedNodeIntoRect(const WebRect& rect) { }
+
 
     // Zoom ----------------------------------------------------------------
 
 
     // Zoom ----------------------------------------------------------------
 
index 5fa682f2f43161eed29f2234454e2918e3dae35b..bd1fa0cb1c649ff7a09f320f3052aa81565369ba 100644 (file)
@@ -1817,6 +1817,21 @@ void WebViewImpl::scrollFocusedNodeIntoView()
     }
 }
 
     }
 }
 
+void WebViewImpl::scrollFocusedNodeIntoRect(const WebRect& rect)
+{
+    Node* focusedNode = focusedWebCoreNode();
+    if (!focusedNode || !focusedNode->isElementNode())
+        return;
+    Element* elementNode = static_cast<Element*>(focusedNode);
+    LayoutRect bounds = elementNode->boundsInWindowSpace();
+    int centeringOffsetX = (rect.width - bounds.width()) / 2;
+    int centeringOffsetY = (rect.height - bounds.height()) / 2;
+    IntSize scrollOffset(bounds.x() - centeringOffsetX, bounds.y() - centeringOffsetY);
+    Frame* frame = mainFrameImpl()->frame();
+    if (frame && frame->view())
+        frame->view()->scrollBy(scrollOffset);
+}
+
 double WebViewImpl::zoomLevel()
 {
     return m_zoomLevel;
 double WebViewImpl::zoomLevel()
 {
     return m_zoomLevel;
index 6941f3242992d1357f291be45ac1824e06bdf999..c9892cc159155e010fc054900e82fa193f8cf17e 100644 (file)
@@ -153,6 +153,7 @@ public:
     virtual void setInitialFocus(bool reverse);
     virtual void clearFocusedNode();
     virtual void scrollFocusedNodeIntoView();
     virtual void setInitialFocus(bool reverse);
     virtual void clearFocusedNode();
     virtual void scrollFocusedNodeIntoView();
+    virtual void scrollFocusedNodeIntoRect(const WebRect&);
     virtual double zoomLevel();
     virtual double setZoomLevel(bool textOnly, double zoomLevel);
     virtual void zoomLimitsChanged(double minimumZoomLevel,
     virtual double zoomLevel();
     virtual double setZoomLevel(bool textOnly, double zoomLevel);
     virtual void zoomLimitsChanged(double minimumZoomLevel,