Title: [92893] trunk/Source/WebKit/chromium
Revision
92893
Author
[email protected]
Date
2011-08-11 17:18:59 -0700 (Thu, 11 Aug 2011)

Log Message

[chromium] Expose "min/max scroll size", "has horizontal/vertical scrollbar", "number of wheel handlers" to clients
https://bugs.webkit.org/show_bug.cgi?id=66094

Reviewed by James Robinson.

We want to implement two-finger-swipe for history like safari does on
os x lion. The way this works is:
* If a page has no horizontal scrollbars, or the page is all the way
  to the left, scrolling to the left will go back in history instead.
* Same for right/forward.

This is modelled after the WebKit2 functions
WKPageIsPinnedToLeftSide(), WKPageIsPinnedToRightSide(),
WKPageHasHorizontalScrollbar(), and
webPageProxy::willHandleHorizontalScrollEvents().

* public/WebFrame.h:
* public/WebViewClient.h:
(WebKit::WebViewClient::numWheelEventHandlersChanged):
* src/ChromeClientImpl.cpp:
(WebKit::ChromeClientImpl::numWheelEventHandlersChanged):
* src/ChromeClientImpl.h:
* src/WebFrameImpl.cpp:
(WebKit::WebFrameImpl::hasHorizontalScrollbar):
(WebKit::WebFrameImpl::hasVerticalScrollbar):
(WebKit::WebFrameImpl::isPinnedToLeft):
(WebKit::WebFrameImpl::isPinnedToRight):
* src/WebFrameImpl.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/chromium/ChangeLog (92892 => 92893)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-08-12 00:11:08 UTC (rev 92892)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-08-12 00:18:59 UTC (rev 92893)
@@ -1,3 +1,34 @@
+2011-08-11  Nico Weber  <[email protected]>
+
+        [chromium] Expose "min/max scroll size", "has horizontal/vertical scrollbar", "number of wheel handlers" to clients
+        https://bugs.webkit.org/show_bug.cgi?id=66094
+
+        Reviewed by James Robinson.
+
+        We want to implement two-finger-swipe for history like safari does on
+        os x lion. The way this works is:
+        * If a page has no horizontal scrollbars, or the page is all the way
+          to the left, scrolling to the left will go back in history instead.
+        * Same for right/forward.
+
+        This is modelled after the WebKit2 functions
+        WKPageIsPinnedToLeftSide(), WKPageIsPinnedToRightSide(),
+        WKPageHasHorizontalScrollbar(), and
+        webPageProxy::willHandleHorizontalScrollEvents().
+
+        * public/WebFrame.h:
+        * public/WebViewClient.h:
+        (WebKit::WebViewClient::numWheelEventHandlersChanged):
+        * src/ChromeClientImpl.cpp:
+        (WebKit::ChromeClientImpl::numWheelEventHandlersChanged):
+        * src/ChromeClientImpl.h:
+        * src/WebFrameImpl.cpp:
+        (WebKit::WebFrameImpl::hasHorizontalScrollbar):
+        (WebKit::WebFrameImpl::hasVerticalScrollbar):
+        (WebKit::WebFrameImpl::isPinnedToLeft):
+        (WebKit::WebFrameImpl::isPinnedToRight):
+        * src/WebFrameImpl.h:
+
 2011-08-11  Marja Hölttä  <[email protected]>
 
         Remove the temporary workaround added by http://trac.webkit.org/changeset/51338

Modified: trunk/Source/WebKit/chromium/public/WebFrame.h (92892 => 92893)


--- trunk/Source/WebKit/chromium/public/WebFrame.h	2011-08-12 00:11:08 UTC (rev 92892)
+++ trunk/Source/WebKit/chromium/public/WebFrame.h	2011-08-12 00:18:59 UTC (rev 92893)
@@ -148,6 +148,10 @@
     virtual WebSize scrollOffset() const = 0;
     virtual void setScrollOffset(const WebSize&) = 0;
 
+    // The minimum and maxium scroll positions in pixels.
+    virtual WebSize minimumScrollOffset() const = 0;
+    virtual WebSize maximumScrollOffset() const = 0;
+ 
     // The size of the contents area.
     virtual WebSize contentsSize() const = 0;
 
@@ -163,7 +167,10 @@
     // Returns true if the contents (minus scrollbars) has non-zero area.
     virtual bool hasVisibleContent() const = 0;
 
+    virtual bool hasHorizontalScrollbar() const = 0;
+    virtual bool hasVerticalScrollbar() const = 0;
 
+
     // Hierarchy ----------------------------------------------------------
 
     // Returns the containing view.

Modified: trunk/Source/WebKit/chromium/public/WebViewClient.h (92892 => 92893)


--- trunk/Source/WebKit/chromium/public/WebViewClient.h	2011-08-12 00:11:08 UTC (rev 92892)
+++ trunk/Source/WebKit/chromium/public/WebViewClient.h	2011-08-12 00:18:59 UTC (rev 92893)
@@ -247,6 +247,7 @@
     // Called when a new node gets focused.
     virtual void focusedNodeChanged(const WebNode&) { }
 
+    virtual void numberOfWheelEventHandlersChanged(unsigned) { }
 
     // Session history -----------------------------------------------------
 

Modified: trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp (92892 => 92893)


--- trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp	2011-08-12 00:11:08 UTC (rev 92892)
+++ trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp	2011-08-12 00:18:59 UTC (rev 92893)
@@ -968,4 +968,10 @@
     return false;
 }
 
+void ChromeClientImpl::numWheelEventHandlersChanged(unsigned numberOfWheelHandlers)
+{
+    if (m_webView->client())
+        m_webView->client()->numberOfWheelEventHandlersChanged(numberOfWheelHandlers);
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit/chromium/src/ChromeClientImpl.h (92892 => 92893)


--- trunk/Source/WebKit/chromium/src/ChromeClientImpl.h	2011-08-12 00:11:08 UTC (rev 92892)
+++ trunk/Source/WebKit/chromium/src/ChromeClientImpl.h	2011-08-12 00:18:59 UTC (rev 92893)
@@ -199,7 +199,7 @@
     virtual bool shouldRunModalDialogDuringPageDismissal(const DialogType&, const String& dialogMessage, WebCore::FrameLoader::PageDismissalType) const;
 
     virtual bool shouldRubberBandInDirection(WebCore::ScrollDirection) const { return true; }
-    virtual void numWheelEventHandlersChanged(unsigned) { }
+    virtual void numWheelEventHandlersChanged(unsigned);
 
 private:
     void getPopupMenuInfo(WebCore::PopupContainer*, WebPopupMenuInfo*);

Modified: trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp (92892 => 92893)


--- trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp	2011-08-12 00:11:08 UTC (rev 92892)
+++ trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp	2011-08-12 00:18:59 UTC (rev 92893)
@@ -552,6 +552,24 @@
     return WebSize();
 }
 
+WebSize WebFrameImpl::minimumScrollOffset() const
+{
+    FrameView* view = frameView();
+    if (view)
+        return view->minimumScrollPosition() - IntPoint();
+
+    return WebSize();
+}
+
+WebSize WebFrameImpl::maximumScrollOffset() const
+{
+    FrameView* view = frameView();
+    if (view)
+        return view->maximumScrollPosition() - IntPoint();
+
+    return WebSize();
+}
+
 void WebFrameImpl::setScrollOffset(const WebSize& offset)
 {
     if (FrameView* view = frameView())
@@ -582,6 +600,16 @@
     return frame()->view()->visibleWidth() > 0 && frame()->view()->visibleHeight() > 0;
 }
 
+bool WebFrameImpl::hasHorizontalScrollbar() const
+{
+    return m_frame && m_frame->view() && m_frame->view()->horizontalScrollbar();
+}
+
+bool WebFrameImpl::hasVerticalScrollbar() const
+{
+    return m_frame && m_frame->view() && m_frame->view()->verticalScrollbar();
+}
+
 WebView* WebFrameImpl::view() const
 {
     return viewImpl();

Modified: trunk/Source/WebKit/chromium/src/WebFrameImpl.h (92892 => 92893)


--- trunk/Source/WebKit/chromium/src/WebFrameImpl.h	2011-08-12 00:11:08 UTC (rev 92892)
+++ trunk/Source/WebKit/chromium/src/WebFrameImpl.h	2011-08-12 00:18:59 UTC (rev 92893)
@@ -72,10 +72,14 @@
     virtual WebVector<WebIconURL> iconURLs(int iconTypes) const;
     virtual WebSize scrollOffset() const;
     virtual void setScrollOffset(const WebSize&);
+    virtual WebSize minimumScrollOffset() const;
+    virtual WebSize maximumScrollOffset() const;
     virtual WebSize contentsSize() const;
     virtual int contentsPreferredWidth() const;
     virtual int documentElementScrollHeight() const;
     virtual bool hasVisibleContent() const;
+    virtual bool hasHorizontalScrollbar() const;
+    virtual bool hasVerticalScrollbar() const;
     virtual WebView* view() const;
     virtual WebFrame* opener() const;
     virtual void clearOpener();
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to