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