2008-12-09 David Hyatt <hyatt@apple.com>
authorhyatt@apple.com <hyatt@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 9 Dec 2008 22:36:10 +0000 (22:36 +0000)
committerhyatt@apple.com <hyatt@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 9 Dec 2008 22:36:10 +0000 (22:36 +0000)
        Add code that will create custom CSS scrollbars from the <body>, the document element (<html>) and the owning
        frame/iframe.  If any of them set a custom style, it will be used.  The scrollbars do not update dynamically
        yet as you switch from page to page (until they are destroyed and recreated).

        Reviewed by Adele

        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar):

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

WebCore/ChangeLog
WebCore/page/FrameView.cpp

index dcb74512085464938d7c632f9bac670352c26134..1ffcfab8a55d0c81cd849be13d120eecdbfdbc35 100644 (file)
@@ -1,3 +1,14 @@
+2008-12-09  David Hyatt  <hyatt@apple.com>
+
+        Add code that will create custom CSS scrollbars from the <body>, the document element (<html>) and the owning
+        frame/iframe.  If any of them set a custom style, it will be used.  The scrollbars do not update dynamically
+        yet as you switch from page to page (until they are destroyed and recreated).
+
+        Reviewed by Adele
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::createScrollbar):
+
 2008-12-09  Ojan Vafai  <ojan@chromium.org>
 
         Reviewed by Dave Hyatt.
index 569441a765952abaecb6c67e10737a55402b13ce..456c068ee98a42e2244c385f9e0d5d1ada1d8261 100644 (file)
@@ -45,6 +45,7 @@
 #include "Page.h"
 #include "RenderPart.h"
 #include "RenderPartObject.h"
+#include "RenderScrollbar.h"
 #include "RenderTheme.h"
 #include "RenderView.h"
 #include "Settings.h"
@@ -315,7 +316,27 @@ void FrameView::setCanHaveScrollbars(bool canScroll)
 
 PassRefPtr<Scrollbar> FrameView::createScrollbar(ScrollbarOrientation orientation)
 {
-    // FIXME: Custom CSS scrollbar creation code will go here.
+    // FIXME: We need to update the scrollbar dynamically as documents change (or as doc elements and bodies get discovered that have custom styles).
+    Document* doc = m_frame->document();
+    if (!doc)
+        return ScrollView::createScrollbar(orientation);
+
+    // Try the <body> element first as a scrollbar source.
+    Element* body = doc->body();
+    if (body && body->renderer() && body->renderer()->style()->hasPseudoStyle(RenderStyle::SCROLLBAR))
+        return RenderScrollbar::createCustomScrollbar(this, orientation, body->renderer());
+    
+    // If the <body> didn't have a custom style, then the root element might.
+    Element* docElement = doc->documentElement();
+    if (docElement && docElement->renderer() && docElement->renderer()->style()->hasPseudoStyle(RenderStyle::SCROLLBAR))
+        return RenderScrollbar::createCustomScrollbar(this, orientation, docElement->renderer());
+        
+    // If we have an owning iframe/frame element, then it can set the custom scrollbar also.
+    RenderPart* frameRenderer = m_frame->ownerRenderer();
+    if (frameRenderer && frameRenderer->style()->hasPseudoStyle(RenderStyle::SCROLLBAR))
+        return RenderScrollbar::createCustomScrollbar(this, orientation, frameRenderer);
+    
+    // Nobody set a custom style, so we just use a native scrollbar.
     return ScrollView::createScrollbar(orientation);
 }