<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[37472] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/37472">37472</a></dd>
<dt>Author</dt> <dd>hyatt@apple.com</dd>
<dt>Date</dt> <dd>2008-10-09 22:56:10 -0700 (Thu, 09 Oct 2008)</dd>
</dl>

<h3>Log Message</h3>
<pre>WebCore:

2008-10-09  David Hyatt  &lt;hyatt@apple.com&gt;

        Add support for pseudo classes on scrollbar pseudo elements.  As an initial proof of concept only
        :enabled/:disabled are supported.  More pseudo classes will follow quickly now that this works.

        Reviewed by Tim Hatcher

        Added scrollbars/disabled-scrollbar.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):
        * css/CSSStyleSelector.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getPseudoStyle):
        * rendering/RenderObject.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::setEnabled):
        (WebCore::RenderScrollbar::scrollbarForStyleResolve):
        (WebCore::RenderScrollbar::getScrollbarPseudoStyle):
        (WebCore::RenderScrollbar::paintPart):
        * rendering/RenderScrollbar.h:

LayoutTests:

2008-10-09  David Hyatt  &lt;hyatt@apple.com&gt;

        Add test case for disabled scrollbars.

        Reviewed by Tim Hatcher

        * platform/mac/scrollbars/disabled-scrollbar-expected.checksum: Added.
        * platform/mac/scrollbars/disabled-scrollbar-expected.png: Added.
        * platform/mac/scrollbars/disabled-scrollbar-expected.txt: Added.
        * scrollbars/disabled-scrollbar.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkWebCoreChangeLog">trunk/WebCore/ChangeLog</a></li>
<li><a href="#trunkWebCorecssCSSStyleSelectorcpp">trunk/WebCore/css/CSSStyleSelector.cpp</a></li>
<li><a href="#trunkWebCorecssCSSStyleSelectorh">trunk/WebCore/css/CSSStyleSelector.h</a></li>
<li><a href="#trunkWebCorerenderingRenderObjectcpp">trunk/WebCore/rendering/RenderObject.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderObjecth">trunk/WebCore/rendering/RenderObject.h</a></li>
<li><a href="#trunkWebCorerenderingRenderScrollbarcpp">trunk/WebCore/rendering/RenderScrollbar.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderScrollbarh">trunk/WebCore/rendering/RenderScrollbar.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsplatformmacscrollbarsdisabledscrollbarexpectedchecksum">trunk/LayoutTests/platform/mac/scrollbars/disabled-scrollbar-expected.checksum</a></li>
<li><a href="#trunkLayoutTestsplatformmacscrollbarsdisabledscrollbarexpectedpng">trunk/LayoutTests/platform/mac/scrollbars/disabled-scrollbar-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformmacscrollbarsdisabledscrollbarexpectedtxt">trunk/LayoutTests/platform/mac/scrollbars/disabled-scrollbar-expected.txt</a></li>
<li><a href="#trunkLayoutTestsscrollbarsdisabledscrollbarhtml">trunk/LayoutTests/scrollbars/disabled-scrollbar.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (37471 => 37472)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2008-10-10 04:34:30 UTC (rev 37471)
+++ trunk/LayoutTests/ChangeLog        2008-10-10 05:56:10 UTC (rev 37472)
</span><span class="lines">@@ -1,5 +1,16 @@
</span><span class="cx"> 2008-10-09  David Hyatt  &lt;hyatt@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Add test case for disabled scrollbars.
+
+        Reviewed by Tim Hatcher
+
+        * platform/mac/scrollbars/disabled-scrollbar-expected.checksum: Added.
+        * platform/mac/scrollbars/disabled-scrollbar-expected.png: Added.
+        * platform/mac/scrollbars/disabled-scrollbar-expected.txt: Added.
+        * scrollbars/disabled-scrollbar.html: Added.
+
+2008-10-09  David Hyatt  &lt;hyatt@apple.com&gt;
+
</ins><span class="cx">         Land layout test for CSS scrollbars.
</span><span class="cx"> 
</span><span class="cx">         Reviewed by Oliver Hunt
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacscrollbarsdisabledscrollbarexpectedchecksum"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/mac/scrollbars/disabled-scrollbar-expected.checksum (0 => 37472)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/scrollbars/disabled-scrollbar-expected.checksum                                (rev 0)
+++ trunk/LayoutTests/platform/mac/scrollbars/disabled-scrollbar-expected.checksum        2008-10-10 05:56:10 UTC (rev 37472)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+37e066c25f0be1dd8b36c2ccc0b53c05
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacscrollbarsdisabledscrollbarexpectedpng"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/platform/mac/scrollbars/disabled-scrollbar-expected.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/LayoutTests/platform/mac/scrollbars/disabled-scrollbar-expected.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestsplatformmacscrollbarsdisabledscrollbarexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/mac/scrollbars/disabled-scrollbar-expected.txt (0 => 37472)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/scrollbars/disabled-scrollbar-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/mac/scrollbars/disabled-scrollbar-expected.txt        2008-10-10 05:56:10 UTC (rev 37472)
</span><span class="lines">@@ -0,0 +1,154 @@
</span><ins>+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (8,8) size 200x200 clip at (8,8) size 183x183 scrollHeight 882
+  RenderBlock {DIV} at (0,0) size 200x200
+    RenderText {#text} at (0,0) size 35x18
+      text run at (0,0) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,14) size 0x0
+    RenderText {#text} at (0,18) size 35x18
+      text run at (0,18) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,32) size 0x0
+    RenderText {#text} at (0,36) size 35x18
+      text run at (0,36) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,50) size 0x0
+    RenderText {#text} at (0,54) size 35x18
+      text run at (0,54) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,68) size 0x0
+    RenderText {#text} at (0,72) size 35x18
+      text run at (0,72) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,86) size 0x0
+    RenderText {#text} at (0,90) size 35x18
+      text run at (0,90) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,104) size 0x0
+    RenderText {#text} at (0,108) size 35x18
+      text run at (0,108) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,122) size 0x0
+    RenderText {#text} at (0,126) size 35x18
+      text run at (0,126) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,140) size 0x0
+    RenderText {#text} at (0,144) size 35x18
+      text run at (0,144) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,158) size 0x0
+    RenderText {#text} at (0,162) size 35x18
+      text run at (0,162) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,176) size 0x0
+    RenderText {#text} at (0,180) size 35x18
+      text run at (0,180) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,194) size 0x0
+    RenderText {#text} at (0,198) size 35x18
+      text run at (0,198) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,212) size 0x0
+    RenderText {#text} at (0,216) size 35x18
+      text run at (0,216) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,230) size 0x0
+    RenderText {#text} at (0,234) size 35x18
+      text run at (0,234) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,248) size 0x0
+    RenderText {#text} at (0,252) size 35x18
+      text run at (0,252) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,266) size 0x0
+    RenderText {#text} at (0,270) size 35x18
+      text run at (0,270) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,284) size 0x0
+    RenderText {#text} at (0,288) size 35x18
+      text run at (0,288) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,302) size 0x0
+    RenderText {#text} at (0,306) size 35x18
+      text run at (0,306) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,320) size 0x0
+    RenderText {#text} at (0,324) size 35x18
+      text run at (0,324) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,338) size 0x0
+    RenderText {#text} at (0,342) size 35x18
+      text run at (0,342) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,356) size 0x0
+    RenderText {#text} at (0,360) size 35x18
+      text run at (0,360) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,374) size 0x0
+    RenderText {#text} at (0,378) size 35x18
+      text run at (0,378) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,392) size 0x0
+    RenderText {#text} at (0,396) size 35x18
+      text run at (0,396) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,410) size 0x0
+    RenderText {#text} at (0,414) size 35x18
+      text run at (0,414) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,428) size 0x0
+    RenderText {#text} at (0,432) size 35x18
+      text run at (0,432) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,446) size 0x0
+    RenderText {#text} at (0,450) size 35x18
+      text run at (0,450) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,464) size 0x0
+    RenderText {#text} at (0,468) size 35x18
+      text run at (0,468) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,482) size 0x0
+    RenderText {#text} at (0,486) size 35x18
+      text run at (0,486) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,500) size 0x0
+    RenderText {#text} at (0,504) size 35x18
+      text run at (0,504) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,518) size 0x0
+    RenderText {#text} at (0,522) size 35x18
+      text run at (0,522) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,536) size 0x0
+    RenderText {#text} at (0,540) size 35x18
+      text run at (0,540) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,554) size 0x0
+    RenderText {#text} at (0,558) size 35x18
+      text run at (0,558) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,572) size 0x0
+    RenderText {#text} at (0,576) size 35x18
+      text run at (0,576) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,590) size 0x0
+    RenderText {#text} at (0,594) size 35x18
+      text run at (0,594) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,608) size 0x0
+    RenderText {#text} at (0,612) size 35x18
+      text run at (0,612) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,626) size 0x0
+    RenderText {#text} at (0,630) size 35x18
+      text run at (0,630) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,644) size 0x0
+    RenderText {#text} at (0,648) size 35x18
+      text run at (0,648) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,662) size 0x0
+    RenderText {#text} at (0,666) size 35x18
+      text run at (0,666) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,680) size 0x0
+    RenderText {#text} at (0,684) size 35x18
+      text run at (0,684) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,698) size 0x0
+    RenderText {#text} at (0,702) size 35x18
+      text run at (0,702) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,716) size 0x0
+    RenderText {#text} at (0,720) size 35x18
+      text run at (0,720) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,734) size 0x0
+    RenderText {#text} at (0,738) size 35x18
+      text run at (0,738) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,752) size 0x0
+    RenderText {#text} at (0,756) size 35x18
+      text run at (0,756) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,770) size 0x0
+    RenderText {#text} at (0,774) size 35x18
+      text run at (0,774) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,788) size 0x0
+    RenderText {#text} at (0,792) size 35x18
+      text run at (0,792) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,806) size 0x0
+    RenderText {#text} at (0,810) size 35x18
+      text run at (0,810) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,824) size 0x0
+    RenderText {#text} at (0,828) size 35x18
+      text run at (0,828) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,842) size 0x0
+    RenderText {#text} at (0,846) size 35x18
+      text run at (0,846) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,860) size 0x0
+    RenderText {#text} at (0,864) size 35x18
+      text run at (0,864) width 35: &quot;Hello&quot;
+    RenderBR {BR} at (35,878) size 0x0
</ins></span></pre></div>
<a id="trunkLayoutTestsscrollbarsdisabledscrollbarhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/scrollbars/disabled-scrollbar.html (0 => 37472)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/scrollbars/disabled-scrollbar.html                                (rev 0)
+++ trunk/LayoutTests/scrollbars/disabled-scrollbar.html        2008-10-10 05:56:10 UTC (rev 37472)
</span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+&lt;head&gt;
+&lt;style&gt;
+div::-webkit-scrollbar {
+  width:17px;
+  height:17px;
+}
+
+div::-webkit-scrollbar-button {
+  width: 17px;
+  height: 17px;
+  background-color:lightblue;
+  border:2px solid black;
+}
+
+div::-webkit-scrollbar-thumb {
+  min-width:20px;
+  min-height:20px;
+  background-color: navy;
+  border:2px solid #cccccc;
+}
+
+div::-webkit-scrollbar-button:disabled {
+  display:none
+}
+
+div::-webkit-scrollbar-track {
+  background-color: maroon;
+}
+
+div::-webkit-scrollbar-track:disabled {
+  background-color: grey;
+}
+
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;div style=&quot;width:200px; height:200px; overflow-y:auto; overflow-x:scroll&quot;&gt;
+Hello&lt;br&gt;
+Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;
+Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;
+Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;
+Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;
+Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;
+Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;
+Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;
+Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;
+Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;
+Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;
+Hello&lt;br&gt;Hello&lt;br&gt;Hello&lt;br&gt;
+&lt;/div&gt;
</ins></span></pre></div>
<a id="trunkWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/ChangeLog (37471 => 37472)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/ChangeLog        2008-10-10 04:34:30 UTC (rev 37471)
+++ trunk/WebCore/ChangeLog        2008-10-10 05:56:10 UTC (rev 37472)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2008-10-09  David Hyatt  &lt;hyatt@apple.com&gt;
+
+        Add support for pseudo classes on scrollbar pseudo elements.  As an initial proof of concept only
+        :enabled/:disabled are supported.  More pseudo classes will follow quickly now that this works.
+
+        Reviewed by Tim Hatcher
+
+        Added scrollbars/disabled-scrollbar.html
+
+        * css/CSSStyleSelector.cpp:
+        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
+        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
+        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):
+        * css/CSSStyleSelector.h:
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::getPseudoStyle):
+        * rendering/RenderObject.h:
+        * rendering/RenderScrollbar.cpp:
+        (WebCore::RenderScrollbar::setEnabled):
+        (WebCore::RenderScrollbar::scrollbarForStyleResolve):
+        (WebCore::RenderScrollbar::getScrollbarPseudoStyle):
+        (WebCore::RenderScrollbar::paintPart):
+        * rendering/RenderScrollbar.h:
+
</ins><span class="cx"> 2008-10-09  Eric Carlson  &lt;eric.carlson@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Media controls should not show when element is not visible
</span></span></pre></div>
<a id="trunkWebCorecssCSSStyleSelectorcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/css/CSSStyleSelector.cpp (37471 => 37472)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/css/CSSStyleSelector.cpp        2008-10-10 04:34:30 UTC (rev 37471)
+++ trunk/WebCore/css/CSSStyleSelector.cpp        2008-10-10 05:56:10 UTC (rev 37472)
</span><span class="lines">@@ -67,6 +67,7 @@
</span><span class="cx"> #include &quot;PageGroup.h&quot;
</span><span class="cx"> #include &quot;Pair.h&quot;
</span><span class="cx"> #include &quot;Rect.h&quot;
</span><ins>+#include &quot;RenderScrollbar.h&quot;
</ins><span class="cx"> #include &quot;RenderTheme.h&quot;
</span><span class="cx"> #include &quot;RotateTransformOperation.h&quot;
</span><span class="cx"> #include &quot;ScaleTransformOperation.h&quot;
</span><span class="lines">@@ -1670,7 +1671,9 @@
</span><span class="cx">             break;
</span><span class="cx">         case CSSSelector::SubSelector:
</span><span class="cx">             // a selector is invalid if something follows a pseudo-element
</span><del>-            if (elementStyle &amp;&amp; dynamicPseudo != RenderStyle::NOPSEUDO)
</del><ins>+            // We make an exception for scrollbar pseudo elements and allow a set of pseudo classes (but nothing else)
+            // to follow the pseudo elements.
+            if (elementStyle &amp;&amp; dynamicPseudo != RenderStyle::NOPSEUDO &amp;&amp; !(RenderScrollbar::scrollbarForStyleResolve() &amp;&amp; sel-&gt;m_match == CSSSelector::PseudoClass))
</ins><span class="cx">                 return SelectorFailsCompletely;
</span><span class="cx">             return checkSelector(sel, e, selectorAttrs, dynamicPseudo, isAncestor, true, elementStyle, elementParentStyle);
</span><span class="cx">     }
</span><span class="lines">@@ -1834,6 +1837,13 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx">     if (sel-&gt;m_match == CSSSelector::PseudoClass) {
</span><ins>+        
+        // CSS scrollbars match a specific subset of pseudo classes, and they have specialized rules for each
+        // (since there are no elements involved).
+        if (RenderScrollbar::scrollbarForStyleResolve() &amp;&amp; dynamicPseudo != RenderStyle::NOPSEUDO)
+            return checkScrollbarPseudoClass(sel, dynamicPseudo);
+        
+        // Normal element pseudo class checking.
</ins><span class="cx">         switch (sel-&gt;pseudoType()) {
</span><span class="cx">             // Pseudo classes:
</span><span class="cx">             case CSSSelector::PseudoEmpty: {
</span><span class="lines">@@ -2369,6 +2379,20 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass(CSSSelector* sel, RenderStyle::PseudoId&amp; dynamicPseudo) const
+{
+    RenderScrollbar* scrollbar = RenderScrollbar::scrollbarForStyleResolve();
+    ASSERT(sel-&gt;m_match == CSSSelector::PseudoClass &amp;&amp; scrollbar);
+    switch (sel-&gt;pseudoType()) {
+        case CSSSelector::PseudoEnabled:
+            return scrollbar-&gt;enabled();
+        case CSSSelector::PseudoDisabled:
+            return !scrollbar-&gt;enabled();
+        default:
+            return false;
+    }
+}
+
</ins><span class="cx"> void CSSStyleSelector::addVariables(CSSVariablesRule* variables)
</span><span class="cx"> {
</span><span class="cx">     CSSVariablesDeclaration* decl = variables-&gt;variables();
</span></span></pre></div>
<a id="trunkWebCorecssCSSStyleSelectorh"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/css/CSSStyleSelector.h (37471 => 37472)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/css/CSSStyleSelector.h        2008-10-10 04:34:30 UTC (rev 37471)
+++ trunk/WebCore/css/CSSStyleSelector.h        2008-10-10 05:56:10 UTC (rev 37472)
</span><span class="lines">@@ -186,6 +186,7 @@
</span><span class="cx">             SelectorMatch checkSelector(CSSSelector*, Element*, HashSet&lt;AtomicStringImpl*&gt;* selectorAttrs, RenderStyle::PseudoId&amp; dynamicPseudo, bool isAncestor, bool isSubSelector, RenderStyle* = 0, RenderStyle* elementParentStyle = 0) const;
</span><span class="cx">             bool checkOneSelector(CSSSelector*, Element*, HashSet&lt;AtomicStringImpl*&gt;* selectorAttrs, RenderStyle::PseudoId&amp; dynamicPseudo, bool isAncestor, bool isSubSelector, RenderStyle*, RenderStyle* elementParentStyle) const;
</span><span class="cx">             PseudoState checkPseudoState(Element*, bool checkVisited = true) const;
</span><ins>+            bool checkScrollbarPseudoClass(CSSSelector*, RenderStyle::PseudoId&amp; dynamicPseudo) const;
</ins><span class="cx"> 
</span><span class="cx">             void allVisitedStateChanged();
</span><span class="cx">             void visitedStateChanged(unsigned visitedHash);
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderObject.cpp (37471 => 37472)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderObject.cpp        2008-10-10 04:34:30 UTC (rev 37471)
+++ trunk/WebCore/rendering/RenderObject.cpp        2008-10-10 05:56:10 UTC (rev 37472)
</span><span class="lines">@@ -2822,7 +2822,7 @@
</span><span class="cx">     return s;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RenderStyle* RenderObject::getPseudoStyle(RenderStyle::PseudoId pseudo, RenderStyle* parentStyle) const
</del><ins>+RenderStyle* RenderObject::getPseudoStyle(RenderStyle::PseudoId pseudo, RenderStyle* parentStyle, bool useCachedStyle) const
</ins><span class="cx"> {
</span><span class="cx">     if (pseudo &lt; RenderStyle::FIRST_INTERNAL_PSEUDOID &amp;&amp; !style()-&gt;hasPseudoStyle(pseudo))
</span><span class="cx">         return 0;
</span><span class="lines">@@ -2830,7 +2830,7 @@
</span><span class="cx">     if (!parentStyle)
</span><span class="cx">         parentStyle = style();
</span><span class="cx"> 
</span><del>-    RenderStyle* result = style()-&gt;getPseudoStyle(pseudo);
</del><ins>+    RenderStyle* result = useCachedStyle ? style()-&gt;getPseudoStyle(pseudo) : 0;
</ins><span class="cx">     if (result)
</span><span class="cx">         return result;
</span><span class="cx"> 
</span><span class="lines">@@ -2845,7 +2845,7 @@
</span><span class="cx">         result-&gt;setStyleType(RenderStyle::FIRST_LINE_INHERITED);
</span><span class="cx">     } else
</span><span class="cx">         result = document()-&gt;styleSelector()-&gt;pseudoStyleForElement(pseudo, static_cast&lt;Element*&gt;(node), parentStyle);
</span><del>-    if (result) {
</del><ins>+    if (result &amp;&amp; useCachedStyle) {
</ins><span class="cx">         style()-&gt;addPseudoStyle(result);
</span><span class="cx">         result-&gt;deref(document()-&gt;renderArena());
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderObjecth"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderObject.h (37471 => 37472)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderObject.h        2008-10-10 04:34:30 UTC (rev 37471)
+++ trunk/WebCore/rendering/RenderObject.h        2008-10-10 05:56:10 UTC (rev 37472)
</span><span class="lines">@@ -376,7 +376,7 @@
</span><span class="cx">     bool includeHorizontalScrollbarSize() const { return hasOverflowClip() &amp;&amp; (style()-&gt;overflowX() == OSCROLL || style()-&gt;overflowX() == OAUTO); }
</span><span class="cx"> 
</span><span class="cx"> public:
</span><del>-    RenderStyle* getPseudoStyle(RenderStyle::PseudoId, RenderStyle* parentStyle = 0) const;
</del><ins>+    RenderStyle* getPseudoStyle(RenderStyle::PseudoId, RenderStyle* parentStyle = 0, bool useCachedStyle = true) const;
</ins><span class="cx"> 
</span><span class="cx">     void updateDragState(bool dragOn);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderScrollbarcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderScrollbar.cpp (37471 => 37472)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderScrollbar.cpp        2008-10-10 04:34:30 UTC (rev 37471)
+++ trunk/WebCore/rendering/RenderScrollbar.cpp        2008-10-10 05:56:10 UTC (rev 37472)
</span><span class="lines">@@ -56,16 +56,29 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static ScrollbarPart gStyleResolvePart;
-static RenderScrollbar* gStyleResolveScrollbar;
</del><ins>+void RenderScrollbar::setEnabled(bool e)
+{
+    bool wasEnabled = enabled();
+    Scrollbar::setEnabled(e);
+    if (wasEnabled != e)
+        updateScrollbarParts();
+}
</ins><span class="cx"> 
</span><ins>+static ScrollbarPart s_styleResolvePart;
+static RenderScrollbar* s_styleResolveScrollbar;
+
+RenderScrollbar* RenderScrollbar::scrollbarForStyleResolve()
+{
+    return s_styleResolveScrollbar;
+}
+
</ins><span class="cx"> RenderStyle* RenderScrollbar::getScrollbarPseudoStyle(ScrollbarPart partType, RenderStyle::PseudoId pseudoId)
</span><span class="cx"> {
</span><del>-    gStyleResolvePart = partType;
-    gStyleResolveScrollbar = this;
-    RenderStyle* result = m_owner-&gt;getPseudoStyle(pseudoId, m_owner-&gt;style());
-    gStyleResolvePart = NoPart;
-    gStyleResolveScrollbar = 0;
</del><ins>+    s_styleResolvePart = partType;
+    s_styleResolveScrollbar = this;
+    RenderStyle* result = m_owner-&gt;getPseudoStyle(pseudoId, m_owner-&gt;style(), false);
+    s_styleResolvePart = NoPart;
+    s_styleResolveScrollbar = 0;
</ins><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -131,6 +144,8 @@
</span><span class="cx">     partRenderer-&gt;setPos(rect.x() - x(), rect.y() - y());
</span><span class="cx">     partRenderer-&gt;setWidth(rect.width());
</span><span class="cx">     partRenderer-&gt;setHeight(rect.height());
</span><ins>+    partRenderer-&gt;setOverflowWidth(max(rect.width(), partRenderer-&gt;overflowWidth()));
+    partRenderer-&gt;setOverflowHeight(max(rect.height(), partRenderer-&gt;overflowHeight()));
</ins><span class="cx"> 
</span><span class="cx">     // Now do the paint.
</span><span class="cx">     RenderObject::PaintInfo paintInfo(graphicsContext, rect, PaintPhaseBlockBackground, false, 0, 0);
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderScrollbarh"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderScrollbar.h (37471 => 37472)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderScrollbar.h        2008-10-10 04:34:30 UTC (rev 37471)
+++ trunk/WebCore/rendering/RenderScrollbar.h        2008-10-10 05:56:10 UTC (rev 37472)
</span><span class="lines">@@ -46,6 +46,7 @@
</span><span class="cx">     virtual ~RenderScrollbar();
</span><span class="cx"> 
</span><span class="cx">     virtual void setParent(ScrollView*);
</span><ins>+    virtual void setEnabled(bool);
</ins><span class="cx"> 
</span><span class="cx">     void updateScrollbarParts(RenderStyle* = 0, bool destroy = false);
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>