Title: [136947] trunk/Source/WebCore
Revision
136947
Author
[email protected]
Date
2012-12-07 05:03:24 -0800 (Fri, 07 Dec 2012)

Log Message

Rework bug 97927 to not depend on RenderLayer::allowsScrolling
https://bugs.webkit.org/show_bug.cgi?id=103999

Reviewed by James Robinson.
Patch by Antonio Gomes <[email protected]>

Patch makes it possible for methods like
RenderLayer::{updateScrollbarsAfterLayout,updateScrollbarsAfterStyleChange}
to not depend on RenderLayer::allowsScrolling to determine if a layer should
be added or removed from its FrameView's ScrollableArea set.

Following the same logic, the patch also fixes RenderBox::canBeScrolledAndHasScrollableArea
method to take into account the box' scroll allowance in a given direction only
when it overflows. This allows simplifying custom methods like InRegionScrollerPrivate::canScrollRenderBox
(@WebKit/blackberry/Api/InRegionScroller.cpp).

The naming pattern for the newly added methods were chosen to keep the consistency
with the existing ones, in the same class.

No new test: it is already covered by ScrollingCoordinatorChromiumTest.clippedBodyTest.

* rendering/RenderBox.cpp:
(WebCore::RenderBox::canBeScrolledAndHasScrollableArea):
* rendering/RenderBox.h:
(RenderBox):
(WebCore::RenderBox::hasScrollableOverflowX):
(WebCore::RenderBox::hasScrollableOverflowY):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::hasScrollableHorizontalOverflow):
(WebCore):
(WebCore::RenderLayer::hasScrollableVerticalOverflow):
(WebCore::RenderLayer::updateScrollbarsAfterLayout):
(WebCore::RenderLayer::updateScrollbarsAfterStyleChange):
* rendering/RenderLayer.h:
(RenderLayer):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (136946 => 136947)


--- trunk/Source/WebCore/ChangeLog	2012-12-07 12:57:51 UTC (rev 136946)
+++ trunk/Source/WebCore/ChangeLog	2012-12-07 13:03:24 UTC (rev 136947)
@@ -1,3 +1,40 @@
+2012-12-05  Antonio Gomes  <[email protected]>
+
+        Rework bug 97927 to not depend on RenderLayer::allowsScrolling
+        https://bugs.webkit.org/show_bug.cgi?id=103999
+
+        Reviewed by James Robinson.
+
+        Patch makes it possible for methods like
+        RenderLayer::{updateScrollbarsAfterLayout,updateScrollbarsAfterStyleChange}
+        to not depend on RenderLayer::allowsScrolling to determine if a layer should
+        be added or removed from its FrameView's ScrollableArea set.
+
+        Following the same logic, the patch also fixes RenderBox::canBeScrolledAndHasScrollableArea
+        method to take into account the box' scroll allowance in a given direction only
+        when it overflows. This allows simplifying custom methods like InRegionScrollerPrivate::canScrollRenderBox
+        (@WebKit/blackberry/Api/InRegionScroller.cpp).
+
+        The naming pattern for the newly added methods were chosen to keep the consistency
+        with the existing ones, in the same class.
+
+        No new test: it is already covered by ScrollingCoordinatorChromiumTest.clippedBodyTest.
+
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::canBeScrolledAndHasScrollableArea):
+        * rendering/RenderBox.h:
+        (RenderBox):
+        (WebCore::RenderBox::hasScrollableOverflowX):
+        (WebCore::RenderBox::hasScrollableOverflowY):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::hasScrollableHorizontalOverflow):
+        (WebCore):
+        (WebCore::RenderLayer::hasScrollableVerticalOverflow):
+        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
+        (WebCore::RenderLayer::updateScrollbarsAfterStyleChange):
+        * rendering/RenderLayer.h:
+        (RenderLayer):
+
 2012-12-07  Max Feil  <[email protected]>
 
         [BlackBerry] make "isVideo" information available to platform media player

Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (136946 => 136947)


--- trunk/Source/WebCore/rendering/RenderBox.cpp	2012-12-07 12:57:51 UTC (rev 136946)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp	2012-12-07 13:03:24 UTC (rev 136947)
@@ -615,7 +615,8 @@
 
 bool RenderBox::canBeScrolledAndHasScrollableArea() const
 {
-    return canBeProgramaticallyScrolled() && (scrollHeight() != clientHeight() || scrollWidth() != clientWidth());
+    bool hasScrollableOverflow = hasScrollableOverflowX() || hasScrollableOverflowY();
+    return hasScrollableOverflow && canBeProgramaticallyScrolled();
 }
     
 bool RenderBox::canBeProgramaticallyScrolled() const

Modified: trunk/Source/WebCore/rendering/RenderBox.h (136946 => 136947)


--- trunk/Source/WebCore/rendering/RenderBox.h	2012-12-07 12:57:51 UTC (rev 136946)
+++ trunk/Source/WebCore/rendering/RenderBox.h	2012-12-07 13:03:24 UTC (rev 136947)
@@ -440,11 +440,14 @@
     virtual void autoscroll();
     virtual void stopAutoscroll() { }
     virtual void panScroll(const IntPoint&);
+
     bool hasAutoVerticalScrollbar() const { return hasOverflowClip() && (style()->overflowY() == OAUTO || style()->overflowY() == OOVERLAY); }
     bool hasAutoHorizontalScrollbar() const { return hasOverflowClip() && (style()->overflowX() == OAUTO || style()->overflowX() == OOVERLAY); }
     bool scrollsOverflow() const { return scrollsOverflowX() || scrollsOverflowY(); }
     bool scrollsOverflowX() const { return hasOverflowClip() && (style()->overflowX() == OSCROLL || hasAutoHorizontalScrollbar()); }
     bool scrollsOverflowY() const { return hasOverflowClip() && (style()->overflowY() == OSCROLL || hasAutoVerticalScrollbar()); }
+    bool hasScrollableOverflowX() const { return scrollsOverflowX() && scrollWidth() != clientWidth(); }
+    bool hasScrollableOverflowY() const { return scrollsOverflowY() && scrollHeight() != clientHeight(); }
     bool usesCompositedScrolling() const;
     
     bool hasUnsplittableScrollingOverflow() const;

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (136946 => 136947)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2012-12-07 12:57:51 UTC (rev 136946)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2012-12-07 13:03:24 UTC (rev 136947)
@@ -2636,6 +2636,16 @@
     setScrollOrigin(IntPoint(-scrollableLeftOverflow, -scrollableTopOverflow));
 }
 
+bool RenderLayer::hasScrollableHorizontalOverflow() const
+{
+    return hasHorizontalOverflow() && renderBox()->scrollsOverflowX();
+}
+
+bool RenderLayer::hasScrollableVerticalOverflow() const
+{
+    return hasVerticalOverflow() && renderBox()->scrollsOverflowY();
+}
+
 bool RenderLayer::hasHorizontalOverflow() const
 {
     ASSERT(!m_scrollDimensionsDirty);
@@ -2718,7 +2728,7 @@
         m_vBar->setProportion(clientHeight, m_scrollSize.height());
     }
 
-    updateScrollableAreaSet((hasHorizontalOverflow || hasVerticalOverflow) && scrollsOverflow() && allowsScrolling());
+    updateScrollableAreaSet(hasScrollableHorizontalOverflow() || hasScrollableVerticalOverflow());
 }
 
 void RenderLayer::updateScrollInfoAfterLayout()
@@ -5098,7 +5108,7 @@
     }
 
     if (!m_scrollDimensionsDirty)
-        updateScrollableAreaSet((hasHorizontalOverflow() || hasVerticalOverflow()) && scrollsOverflow() && allowsScrolling());
+        updateScrollableAreaSet(hasScrollableHorizontalOverflow() || hasScrollableVerticalOverflow());
 }
 
 void RenderLayer::styleChanged(StyleDifference, const RenderStyle* oldStyle)

Modified: trunk/Source/WebCore/rendering/RenderLayer.h (136946 => 136947)


--- trunk/Source/WebCore/rendering/RenderLayer.h	2012-12-07 12:57:51 UTC (rev 136946)
+++ trunk/Source/WebCore/rendering/RenderLayer.h	2012-12-07 13:03:24 UTC (rev 136947)
@@ -825,6 +825,8 @@
     void computeScrollDimensions();
     bool hasHorizontalOverflow() const;
     bool hasVerticalOverflow() const;
+    bool hasScrollableHorizontalOverflow() const;
+    bool hasScrollableVerticalOverflow() const;
 
     bool shouldBeNormalFlowOnly() const;
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to