Title: [128142] trunk/Source/WebKit/blackberry
Revision
128142
Author
[email protected]
Date
2012-09-10 20:19:50 -0700 (Mon, 10 Sep 2012)

Log Message

[BlackBerry] add a way to overscroll non-overflown content
https://bugs.webkit.org/show_bug.cgi?id=96331
[UxD] Vertical lists should always be scrollable
PR #195305

Reviewed by Yong Li.
Patch by Antonio Gomes <[email protected]>
Internally reviewed by Gen Mak.

Check if the RenderLayer is composited / hardware acceleratable prior to
check if its contents overflows. If that is the case, check if
our custom data-blackberry-force-overscroll is present.

That makes it possible for us to align to UX requirements: settings
and CCM panels should be always scrollable.

* Api/InRegionScroller.cpp:
(BlackBerry::WebKit::canScrollRenderBox):
* WebKitSupport/InRegionScrollableArea.cpp:
(BlackBerry::WebKit::InRegionScrollableArea::InRegionScrollableArea):

Modified Paths

Diff

Modified: trunk/Source/WebKit/blackberry/Api/InRegionScroller.cpp (128141 => 128142)


--- trunk/Source/WebKit/blackberry/Api/InRegionScroller.cpp	2012-09-11 03:02:46 UTC (rev 128141)
+++ trunk/Source/WebKit/blackberry/Api/InRegionScroller.cpp	2012-09-11 03:19:50 UTC (rev 128142)
@@ -362,9 +362,23 @@
 // FIXME: Fix RenderBox::canBeScrolledAndHasScrollableArea method instead.
 static bool canScrollRenderBox(RenderBox* box)
 {
-    if (!box || !box->hasOverflowClip())
+    if (!box)
         return false;
 
+    // We use this to make non-overflown contents layers to actually
+    // be overscrollable.
+    if (box->layer() && box->layer()->usesCompositedScrolling()
+        && box->layer()->enclosingElement() && box->layer()->enclosingElement()->isElementNode()) {
+        DEFINE_STATIC_LOCAL(QualifiedName, forceOverscrollAttr, (nullAtom, "data-blackberry-force-overscroll", nullAtom));
+
+        Element* element = static_cast<Element*>(box->layer()->enclosingElement());
+        if (element->fastHasAttribute(forceOverscrollAttr))
+            return true;
+    }
+
+    if (!box->hasOverflowClip())
+        return false;
+
     if (box->scrollsOverflowX() && (box->scrollWidth() != box->clientWidth())
         || box->scrollsOverflowY() && (box->scrollHeight() != box->clientHeight()))
         return true;

Modified: trunk/Source/WebKit/blackberry/ChangeLog (128141 => 128142)


--- trunk/Source/WebKit/blackberry/ChangeLog	2012-09-11 03:02:46 UTC (rev 128141)
+++ trunk/Source/WebKit/blackberry/ChangeLog	2012-09-11 03:19:50 UTC (rev 128142)
@@ -1,3 +1,25 @@
+2012-09-10  Antonio Gomes  <[email protected]>
+
+        [BlackBerry] add a way to overscroll non-overflown content
+        https://bugs.webkit.org/show_bug.cgi?id=96331
+        [UxD] Vertical lists should always be scrollable
+        PR #195305
+
+        Reviewed by Yong Li.
+        Internally reviewed by Gen Mak.
+
+        Check if the RenderLayer is composited / hardware acceleratable prior to
+        check if its contents overflows. If that is the case, check if
+        our custom data-blackberry-force-overscroll is present.
+
+        That makes it possible for us to align to UX requirements: settings
+        and CCM panels should be always scrollable.
+
+        * Api/InRegionScroller.cpp:
+        (BlackBerry::WebKit::canScrollRenderBox):
+        * WebKitSupport/InRegionScrollableArea.cpp:
+        (BlackBerry::WebKit::InRegionScrollableArea::InRegionScrollableArea):
+
 2012-09-10  Genevieve Mak  <[email protected]>
 
         Change -data-blackberry-webworks-context to -data-webworks-context

Modified: trunk/Source/WebKit/blackberry/WebKitSupport/InRegionScrollableArea.cpp (128141 => 128142)


--- trunk/Source/WebKit/blackberry/WebKitSupport/InRegionScrollableArea.cpp	2012-09-11 03:02:46 UTC (rev 128141)
+++ trunk/Source/WebKit/blackberry/WebKitSupport/InRegionScrollableArea.cpp	2012-09-11 03:19:50 UTC (rev 128142)
@@ -94,6 +94,7 @@
 
         // Both caches below are self-exclusive.
         if (m_layer->usesCompositedScrolling()) {
+            m_forceContentToBeVerticallyScrollable = true;
             m_supportsCompositedScrolling = true;
             ASSERT(m_layer->backing()->hasScrollingLayer());
             m_camouflagedCompositedScrollableLayer = reinterpret_cast<unsigned>(m_layer->backing()->scrollingContentsLayer()->platformLayer());
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to