WebCore:
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 16 Dec 2007 19:26:02 +0000 (19:26 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 16 Dec 2007 19:26:02 +0000 (19:26 +0000)
        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=6129
        Incomplete implementation of CSS 2.1 system colors

        Test: fast/css/css2-system-color.html

        Based on original patch by Rob Buis.

        System colors are retrieved from NSColor as appropriate. If the color is a pattern color
        (and therefore NSColor won't let us retrieve a color from it) we draw a 1x1 image of the
        color and sample that to get a solid color.

        * css/CSSStyleSelector.cpp:
        (WebCore::):
        (WebCore::colorForCSSValue):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::systemColor):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::getSystemColor):
        (WebCore::RenderThemeMac::platformColorsDidChange):
        (WebCore::RenderThemeMac::systemColor):

LayoutTests:

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=6129
        Incomplete implementation of CSS 2.1 system colors

        Add layout test for this bug and update tests for new system-derived colors

        * fast/css/css2-system-color.html: Added.
        * platform/mac/fast/css/css2-system-color-expected.checksum: Added.
        * platform/mac/fast/css/css2-system-color-expected.png: Added.
        * platform/mac/fast/css/css2-system-color-expected.txt: Added.
        * platform/mac/fast/css/css2-system-fonts-expected.checksum:
        * platform/mac/tables/mozilla/bugs/bug103533-expected.txt:

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

14 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/css/css2-system-color.html [new file with mode: 0644]
LayoutTests/platform/mac/fast/css/css2-system-color-expected.checksum [new file with mode: 0644]
LayoutTests/platform/mac/fast/css/css2-system-color-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/css/css2-system-color-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/fast/css/css2-system-fonts-expected.checksum
LayoutTests/platform/mac/tables/mozilla/bugs/bug103533-expected.txt
WebCore/ChangeLog
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/css/CSSStyleSelector.cpp
WebCore/rendering/RenderTheme.cpp
WebCore/rendering/RenderTheme.h
WebCore/rendering/RenderThemeMac.h
WebCore/rendering/RenderThemeMac.mm

index e50b325..289c123 100644 (file)
@@ -1,3 +1,19 @@
+2007-12-16  Andrew Wellington  <proton@wiretapped.net>
+
+        Reviewed by Darin.
+        
+        http://bugs.webkit.org/show_bug.cgi?id=6129
+        Incomplete implementation of CSS 2.1 system colors
+        
+        Add layout test for this bug and update tests for new system-derived colors
+
+        * fast/css/css2-system-color.html: Added.
+        * platform/mac/fast/css/css2-system-color-expected.checksum: Added.
+        * platform/mac/fast/css/css2-system-color-expected.png: Added.
+        * platform/mac/fast/css/css2-system-color-expected.txt: Added.
+        * platform/mac/fast/css/css2-system-fonts-expected.checksum:
+        * platform/mac/tables/mozilla/bugs/bug103533-expected.txt:
+
 2007-12-16  Dan Bernstein  <mitz@apple.com>
 
         Reviewed by Darin Adler.
diff --git a/LayoutTests/fast/css/css2-system-color.html b/LayoutTests/fast/css/css2-system-color.html
new file mode 100644 (file)
index 0000000..41d983a
--- /dev/null
@@ -0,0 +1,60 @@
+<html><head><title>Color Test</title>
+<style>
+    html { text-align: center; font-size: 10px; font-family: verdana; }
+    .content {
+        border: 1px solid black;
+        margin: 0 auto;
+        text-align: left;
+        width: 750px;
+        padding: 2px 2px 1px 2px;
+    }
+    .box { width: 100%; margin-bottom: 1px; }
+    .box:after {
+        content: " ";
+        display: block;
+        visibility: hidden;
+        clear: both;
+        height: 0.1px;
+        font-size: 0.1em;
+        line-height: 0;
+    }
+    * html .box { display: inline-block; }
+    * html .box { height: 1%; }
+    .box { display: block; }
+    
+    .inner { width: 620px; float: right; }
+    .text { float: left; }
+</style>
+</head><body>
+
+<div class="content">
+    <div class="box"><div class="text">ActiveBorder</div><div class="inner" style="background-color: ActiveBorder">&nbsp;</div></div>
+    <div class="box"><div class="text">ActiveCaption</div><div class="inner" style="background-color: ActiveCaption">&nbsp;</div></div>
+    <div class="box"><div class="text">AppWorkspace</div><div class="inner" style="background-color: AppWorkspace">&nbsp;</div></div>
+    <div class="box"><div class="text">Background</div><div class="inner" style="background-color: Background">&nbsp;</div></div>
+    <div class="box"><div class="text">ButtonFace</div><div class="inner" style="background-color: ButtonFace">&nbsp;</div></div>
+    <div class="box"><div class="text">ButtonHighlight</div><div class="inner" style="background-color: ButtonHighlight">&nbsp;</div></div>
+    <div class="box"><div class="text">ButtonShadow</div><div class="inner" style="background-color: ButtonShadow">&nbsp;</div></div>
+    <div class="box"><div class="text">ButtonText</div><div class="inner" style="background-color: ButtonText">&nbsp;</div></div>
+    <div class="box"><div class="text">CaptionText</div><div class="inner" style="background-color: CaptionText">&nbsp;</div></div>
+    <div class="box"><div class="text">GrayText</div><div class="inner" style="background-color: GrayText">&nbsp;</div></div>
+    <div class="box"><div class="text">Highlight</div><div class="inner" style="background-color: Highlight">&nbsp;</div></div>
+    <div class="box"><div class="text">HighlightText</div><div class="inner" style="background-color: HighlightText">&nbsp;</div></div>
+    <div class="box"><div class="text">InactiveBorder</div><div class="inner" style="background-color: InactiveBorder">&nbsp;</div></div>
+    <div class="box"><div class="text">InactiveCaption</div><div class="inner" style="background-color: InactiveCaption">&nbsp;</div></div>
+    <div class="box"><div class="text">InactiveCaptionText</div><div class="inner" style="background-color: InactiveCaptionText">&nbsp;</div></div>
+    <div class="box"><div class="text">InfoBackground</div><div class="inner" style="background-color: InfoBackground">&nbsp;</div></div>
+    <div class="box"><div class="text">InfoText</div><div class="inner" style="background-color: InfoText">&nbsp;</div></div>
+    <div class="box"><div class="text">Menu</div><div class="inner" style="background-color: Menu">&nbsp;</div></div>
+    <div class="box"><div class="text">MenuText</div><div class="inner" style="background-color: MenuText">&nbsp;</div></div>
+    <div class="box"><div class="text">Scrollbar</div><div class="inner" style="background-color: Scrollbar">&nbsp;</div></div>
+    <div class="box"><div class="text">ThreeDDarkShadow</div><div class="inner" style="background-color: ThreeDDarkShadow">&nbsp;</div></div>
+    <div class="box"><div class="text">ThreeDFace</div><div class="inner" style="background-color: ThreeDFace">&nbsp;</div></div>
+    <div class="box"><div class="text">ThreeDHighlight</div><div class="inner" style="background-color: ThreeDHighlight">&nbsp;</div></div>
+    <div class="box"><div class="text">ThreeDLightShadow</div><div class="inner" style="background-color: ThreeDLightShadow">&nbsp;</div></div>
+    <div class="box"><div class="text">ThreeDShadow</div><div class="inner" style="background-color: ThreeDShadow">&nbsp;</div></div>
+    <div class="box"><div class="text">Window</div><div class="inner" style="background-color: Window">&nbsp;</div></div>
+    <div class="box"><div class="text">WindowFrame</div><div class="inner" style="background-color: WindowFrame">&nbsp;</div></div>
+    <div class="box"><div class="text">WindowText</div><div class="inner" style="background-color: WindowText">&nbsp;</div></div>
+</div>
+</body></html>
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/css/css2-system-color-expected.checksum b/LayoutTests/platform/mac/fast/css/css2-system-color-expected.checksum
new file mode 100644 (file)
index 0000000..d7617de
--- /dev/null
@@ -0,0 +1 @@
+a1d748eabcfbfab2d4417fd10760b0f1
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/css/css2-system-color-expected.png b/LayoutTests/platform/mac/fast/css/css2-system-color-expected.png
new file mode 100644 (file)
index 0000000..124457c
Binary files /dev/null and b/LayoutTests/platform/mac/fast/css/css2-system-color-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/css/css2-system-color-expected.txt b/LayoutTests/platform/mac/fast/css/css2-system-color-expected.txt
new file mode 100644 (file)
index 0000000..df3a55a
--- /dev/null
@@ -0,0 +1,258 @@
+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
+      RenderBlock {DIV} at (14,0) size 756x369 [border: (1px solid #000000)]
+        RenderBlock {DIV} at (3,3) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 64x12
+            RenderText {#text} at (0,0) size 64x12
+              text run at (0,0) width 64: "ActiveBorder"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#4B89D0]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,16) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 69x12
+            RenderText {#text} at (0,0) size 69x12
+              text run at (0,0) width 69: "ActiveCaption"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#000000]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,29) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 73x12
+            RenderText {#text} at (0,0) size 73x12
+              text run at (0,0) width 73: "AppWorkspace"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#AAAAAA]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,42) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 58x12
+            RenderText {#text} at (0,0) size 58x12
+              text run at (0,0) width 58: "Background"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#6363CE]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,55) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 56x12
+            RenderText {#text} at (0,0) size 56x12
+              text run at (0,0) width 56: "ButtonFace"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#C0C0C0]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,68) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 78x12
+            RenderText {#text} at (0,0) size 78x12
+              text run at (0,0) width 78: "ButtonHighlight"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#E9E9E9]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,81) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 72x12
+            RenderText {#text} at (0,0) size 72x12
+              text run at (0,0) width 72: "ButtonShadow"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#939393]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,94) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 55x12
+            RenderText {#text} at (0,0) size 55x12
+              text run at (0,0) width 55: "ButtonText"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#000000]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,107) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 60x12
+            RenderText {#text} at (0,0) size 60x12
+              text run at (0,0) width 60: "CaptionText"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#000000]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,120) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 46x12
+            RenderText {#text} at (0,0) size 46x12
+              text run at (0,0) width 46: "GrayText"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#808080]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,133) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 45x12
+            RenderText {#text} at (0,0) size 45x12
+              text run at (0,0) width 45: "Highlight"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#B5D5FF]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,146) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 67x12
+            RenderText {#text} at (0,0) size 67x12
+              text run at (0,0) width 67: "HighlightText"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#000000]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,159) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 73x12
+            RenderText {#text} at (0,0) size 73x12
+              text run at (0,0) width 73: "InactiveBorder"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#FFFFFF]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,172) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 78x12
+            RenderText {#text} at (0,0) size 78x12
+              text run at (0,0) width 78: "InactiveCaption"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#FFFFFF]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,185) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 100x12
+            RenderText {#text} at (0,0) size 100x12
+              text run at (0,0) width 100: "InactiveCaptionText"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#000000]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,198) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 78x12
+            RenderText {#text} at (0,0) size 78x12
+              text run at (0,0) width 78: "InfoBackground"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#FBFCC5]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,211) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 42x12
+            RenderText {#text} at (0,0) size 42x12
+              text run at (0,0) width 42: "InfoText"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#000000]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,224) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 26x12
+            RenderText {#text} at (0,0) size 26x12
+              text run at (0,0) width 26: "Menu"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#0E37FF]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,237) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 48x12
+            RenderText {#text} at (0,0) size 48x12
+              text run at (0,0) width 48: "MenuText"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#FFFFFF]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,250) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 44x12
+            RenderText {#text} at (0,0) size 44x12
+              text run at (0,0) width 44: "Scrollbar"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#AAAAAA]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,263) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 99x12
+            RenderText {#text} at (0,0) size 99x12
+              text run at (0,0) width 99: "ThreeDDarkShadow"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#000000]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,276) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 59x12
+            RenderText {#text} at (0,0) size 59x12
+              text run at (0,0) width 59: "ThreeDFace"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#C0C0C0]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,289) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 81x12
+            RenderText {#text} at (0,0) size 81x12
+              text run at (0,0) width 81: "ThreeDHighlight"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#FFFFFF]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,302) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 100x12
+            RenderText {#text} at (0,0) size 100x12
+              text run at (0,0) width 100: "ThreeDLightShadow"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#FFFFFF]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,315) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 75x12
+            RenderText {#text} at (0,0) size 75x12
+              text run at (0,0) width 75: "ThreeDShadow"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#000000]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,328) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 39x12
+            RenderText {#text} at (0,0) size 39x12
+              text run at (0,0) width 39: "Window"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#E8E8FF]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,341) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 71x12
+            RenderText {#text} at (0,0) size 71x12
+              text run at (0,0) width 71: "WindowFrame"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#AAAAAA]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
+        RenderBlock {DIV} at (3,354) size 750x12
+          RenderBlock (floating) {DIV} at (0,0) size 61x12
+            RenderText {#text} at (0,0) size 61x12
+              text run at (0,0) width 61: "WindowText"
+          RenderBlock (floating) {DIV} at (130,0) size 620x12 [bgcolor=#000000]
+            RenderText {#text} at (0,0) size 4x12
+              text run at (0,0) width 4: " "
+          RenderBlock (generated) at (0,12) size 750x0
+            RenderText at (0,0) size 0x0
index 18ce982..78c4cf0 100644 (file)
@@ -3,13 +3,13 @@ layer 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
-      RenderTable {TABLE} at (0,0) size 216x24
+      RenderTable {TABLE} at (0,0) size 216x24 [bgcolor=#6363CE]
         RenderTableSection {TBODY} at (0,0) size 216x24
           RenderTableRow {TR} at (0,2) size 216x20
             RenderTableCell {TD} at (2,2) size 212x20 [r=0 c=0 rs=1 cs=1]
               RenderText {#text} at (1,1) size 210x18
                 text run at (1,1) width 210: "This table should NOT be visible"
-      RenderTable {TABLE} at (0,24) size 216x24
+      RenderTable {TABLE} at (0,24) size 216x24 [bgcolor=#6363CE]
         RenderTableSection {TBODY} at (0,0) size 216x24
           RenderTableRow {TR} at (0,2) size 216x20
             RenderTableCell {TD} at (2,2) size 212x20 [r=0 c=0 rs=1 cs=1]
index 92f5cda..511891d 100644 (file)
@@ -1,3 +1,30 @@
+2007-12-16  Andrew Wellington  <proton@wiretapped.net>
+
+        Reviewed by Darin.
+        
+        http://bugs.webkit.org/show_bug.cgi?id=6129
+        Incomplete implementation of CSS 2.1 system colors
+
+        Test: fast/css/css2-system-color.html
+        
+        Based on original patch by Rob Buis.
+        
+        System colors are retrieved from NSColor as appropriate. If the color is a pattern color
+        (and therefore NSColor won't let us retrieve a color from it) we draw a 1x1 image of the
+        color and sample that to get a solid color.
+
+        * css/CSSStyleSelector.cpp:
+        (WebCore::):
+        (WebCore::colorForCSSValue):
+        * rendering/RenderTheme.cpp:
+        (WebCore::RenderTheme::systemColor):
+        * rendering/RenderTheme.h:
+        * rendering/RenderThemeMac.h:
+        * rendering/RenderThemeMac.mm:
+        (WebCore::getSystemColor):
+        (WebCore::RenderThemeMac::platformColorsDidChange):
+        (WebCore::RenderThemeMac::systemColor):
+
 2007-12-16  Dan Bernstein  <mitz@apple.com>
 
         Reviewed by Darin Adler.
index 5270e41..94a590f 100644 (file)
                0867D690FE84028FC02AAC07 /* Project object */ = {
                        isa = PBXProject;
                        buildConfigurationList = 149C284308902B11008A9EFC /* Build configuration list for PBXProject "WebCore" */;
+                       compatibilityVersion = "Xcode 2.4";
                        hasScannedForEncodings = 1;
                        knownRegions = (
                                English,
index 11ea2f2..1e8ec54 100644 (file)
@@ -4648,9 +4648,8 @@ float CSSStyleSelector::smallerFontSize(float size, bool quirksMode) const
     return size / 1.2f;
 }
 
-// color mapping code
 struct ColorValue {
-    int css_value;
+    int cssValueId;
     RGBA32 color;
 };
 
@@ -4674,44 +4673,15 @@ static const ColorValue colorValues[] = {
     { CSS_VAL_YELLOW, 0xFFFFFF00 },
     { CSS_VAL_TRANSPARENT, 0x00000000 },
     { CSS_VAL_GREY, 0xFF808080 },
-    { CSS_VAL_ACTIVEBORDER, 0xFFFFFFFF },
-    { CSS_VAL_ACTIVECAPTION, 0xFFCCCCCC },
-    { CSS_VAL_APPWORKSPACE, 0xFFFFFFFF },
-    { CSS_VAL_BUTTONFACE, 0xFFC0C0C0 },
-    { CSS_VAL_BUTTONHIGHLIGHT, 0xFFDDDDDD },
-    { CSS_VAL_BUTTONSHADOW, 0xFF888888 },
-    { CSS_VAL_BUTTONTEXT, 0xFF000000 },
-    { CSS_VAL_CAPTIONTEXT, 0xFF000000 },
-    { CSS_VAL_GRAYTEXT, 0xFF808080 },
-    { CSS_VAL_HIGHLIGHT, 0xFFB5D5FF },
-    { CSS_VAL_HIGHLIGHTTEXT, 0xFF000000 },
-    { CSS_VAL_INACTIVEBORDER, 0xFFFFFFFF },
-    { CSS_VAL_INACTIVECAPTION, 0xFFFFFFFF },
-    { CSS_VAL_INACTIVECAPTIONTEXT, 0xFF7F7F7F },
-    { CSS_VAL_INFOBACKGROUND, 0xFFFBFCC5 },
-    { CSS_VAL_INFOTEXT, 0xFF000000 },
-    { CSS_VAL_MENU, 0xFFC0C0C0 },
-    { CSS_VAL_MENUTEXT, 0xFF000000 },
-    { CSS_VAL_SCROLLBAR, 0xFFFFFFFF },
-    { CSS_VAL_TEXT, 0xFF000000 },
-    { CSS_VAL_THREEDDARKSHADOW, 0xFF666666 },
-    { CSS_VAL_THREEDFACE, 0xFFC0C0C0 },
-    { CSS_VAL_THREEDHIGHLIGHT, 0xFFDDDDDD },
-    { CSS_VAL_THREEDLIGHTSHADOW, 0xFFC0C0C0 },
-    { CSS_VAL_THREEDSHADOW, 0xFF888888 },
-    { CSS_VAL_WINDOW, 0xFFFFFFFF },
-    { CSS_VAL_WINDOWFRAME, 0xFFCCCCCC },
-    { CSS_VAL_WINDOWTEXT, 0xFF000000 },
     { 0, 0 }
 };
 
-
-static Color colorForCSSValue(int css_value)
+static Color colorForCSSValue(int cssValueId)
 {
-    for (const ColorValue* col = colorValues; col->css_value; ++col)
-        if (col->css_value == css_value)
+    for (const ColorValue* col = colorValues; col->cssValueId; ++col)
+        if (col->cssValueId == cssValueId)
             return col->color;
-    return Color();
+    return theme()->systemColor(cssValueId);
 }
 
 Color CSSStyleSelector::getColorFromPrimitiveValue(CSSPrimitiveValue* primitiveValue)
index 1c68b20..8e7711b 100644 (file)
@@ -22,6 +22,7 @@
 #include "config.h"
 #include "RenderTheme.h"
 
+#include "CSSValueKeywords.h"
 #include "Document.h"
 #include "Frame.h"
 #include "GraphicsContext.h"
@@ -478,6 +479,71 @@ void RenderTheme::platformColorsDidChange()
     m_inactiveSelectionColor = Color();
 }
 
+Color RenderTheme::systemColor(int cssValueId) const
+{
+    switch (cssValueId) {
+        case CSS_VAL_ACTIVEBORDER:
+            return 0xFFFFFFFF;
+        case CSS_VAL_ACTIVECAPTION:
+            return 0xFFCCCCCC;
+        case CSS_VAL_APPWORKSPACE:
+            return 0xFFFFFFFF;
+        case CSS_VAL_BACKGROUND:
+            return 0xFF6363CE;
+        case CSS_VAL_BUTTONFACE:
+            return 0xFFECECEC;
+        case CSS_VAL_BUTTONHIGHLIGHT:
+            return 0xFFDDDDDD;
+        case CSS_VAL_BUTTONSHADOW:
+            return 0xFF888888;
+        case CSS_VAL_BUTTONTEXT:
+            return 0xFF000000;
+        case CSS_VAL_CAPTIONTEXT:
+            return 0xFF000000;
+        case CSS_VAL_GRAYTEXT:
+            return 0xFF808080;
+        case CSS_VAL_HIGHLIGHT:
+            return 0xFFB5D5FF;
+        case CSS_VAL_HIGHLIGHTTEXT:
+            return 0xFF000000;
+        case CSS_VAL_INACTIVEBORDER:
+            return 0xFFFFFFFF;
+        case CSS_VAL_INACTIVECAPTION:
+            return 0xFFFFFFFF;
+        case CSS_VAL_INACTIVECAPTIONTEXT:
+            return 0xFF7F7F7F;
+        case CSS_VAL_INFOBACKGROUND:
+            return 0xFFFBFCC5;
+        case CSS_VAL_INFOTEXT:
+            return 0xFF000000;
+        case CSS_VAL_MENU:
+            return 0xFFC0C0C0;
+        case CSS_VAL_MENUTEXT:
+            return 0xFF000000;
+        case CSS_VAL_SCROLLBAR:
+            return 0xFFFFFFFF;
+        case CSS_VAL_TEXT:
+            return 0xFF000000;
+        case CSS_VAL_THREEDDARKSHADOW:
+            return 0xFF666666;
+        case CSS_VAL_THREEDFACE:
+            return 0xFFECECEC;
+        case CSS_VAL_THREEDHIGHLIGHT:
+            return 0xFFDDDDDD;
+        case CSS_VAL_THREEDLIGHTSHADOW:
+            return 0xFFC0C0C0;
+        case CSS_VAL_THREEDSHADOW:
+            return 0xFF888888;
+        case CSS_VAL_WINDOW:
+            return 0xFFFFFFFF;
+        case CSS_VAL_WINDOWFRAME:
+            return 0xFFCCCCCC;
+        case CSS_VAL_WINDOWTEXT:
+            return 0xFF000000;
+    }
+    return Color();
+}
+
 Color RenderTheme::platformTextSearchHighlightColor() const
 {
     return Color(255, 255, 0);
index a807873..9ab2d94 100644 (file)
@@ -117,12 +117,13 @@ public:
     virtual Color inactiveListBoxSelectionBackgroundColor() const;
     virtual Color inactiveListBoxSelectionForegroundColor() const;
 
-    void platformColorsDidChange();
+    virtual void platformColorsDidChange();
 
     virtual double caretBlinkFrequency() const { return 0.5; }
 
-    // System fonts.
-    virtual void systemFont(int propId, FontDescription&) const = 0;
+    // System fonts and colors for CSS.
+    virtual void systemFont(int cssValueId, FontDescription&) const = 0;
+    virtual Color systemColor(int cssValueId) const;
 
     virtual int minimumMenuListSize(RenderStyle*) const { return 0; }
 
index 59be0ac..f1f8029 100644 (file)
@@ -24,6 +24,7 @@
 #define RenderThemeMac_h
 
 #import "RenderTheme.h"
+#import <wtf/HashMap.h>
 #import <wtf/RetainPtr.h>
 
 #ifdef __OBJC__
@@ -62,9 +63,11 @@ public:
     virtual Color platformActiveSelectionBackgroundColor() const;
     virtual Color platformInactiveSelectionBackgroundColor() const;
     virtual Color activeListBoxSelectionBackgroundColor() const;
+    
+    virtual void platformColorsDidChange();
 
     // System fonts.
-    virtual void systemFont(int propId, FontDescription&) const;
+    virtual void systemFont(int cssValueId, FontDescription&) const;
 
     virtual int minimumMenuListSize(RenderStyle*) const;
 
@@ -77,6 +80,8 @@ public:
     
     virtual bool paintCapsLockIndicator(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
 
+    virtual Color systemColor(int cssValueId) const;
+
 protected:
     // Methods for each appearance value.
     virtual bool paintCheckbox(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
@@ -190,6 +195,8 @@ private:
     bool m_isSliderThumbHorizontalPressed;
     bool m_isSliderThumbVerticalPressed;
 
+    mutable HashMap<int, RGBA32> m_systemColorCache;
+
     RetainPtr<WebCoreRenderThemeNotificationObserver> m_notificationObserver;
 };
 
index 16ab241..8aff698 100644 (file)
@@ -131,7 +131,7 @@ Color RenderThemeMac::activeListBoxSelectionBackgroundColor() const
     return Color(static_cast<int>(255.0 * [color redComponent]), static_cast<int>(255.0 * [color greenComponent]), static_cast<int>(255.0 * [color blueComponent]));
 }
 
-void RenderThemeMac::systemFont(int propId, FontDescription& fontDescription) const
+void RenderThemeMac::systemFont(int cssValueId, FontDescription& fontDescription) const
 {
     static FontDescription systemFont;
     static FontDescription smallSystemFont;
@@ -143,7 +143,7 @@ void RenderThemeMac::systemFont(int propId, FontDescription& fontDescription) co
 
     FontDescription* cachedDesc;
     NSFont* font = nil;
-    switch (propId) {
+    switch (cssValueId) {
         case CSS_VAL_SMALL_CAPTION:
             cachedDesc = &smallSystemFont;
             if (!smallSystemFont.isAbsoluteSize())
@@ -192,6 +192,162 @@ void RenderThemeMac::systemFont(int propId, FontDescription& fontDescription) co
     fontDescription = *cachedDesc;
 }
 
+static RGBA32 convertNSColorToColor(NSColor *color)
+{
+    NSColor *colorInColorSpace = [color colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
+    if (colorInColorSpace) {
+        static const double scaleFactor = nextafter(256.0, 0.0);
+        return makeRGB(static_cast<int>(scaleFactor * [colorInColorSpace redComponent]),
+            static_cast<int>(scaleFactor * [colorInColorSpace greenComponent]),
+            static_cast<int>(scaleFactor * [colorInColorSpace blueComponent]));
+    }
+
+    // This conversion above can fail if the NSColor in question is an NSPatternColor 
+    // (as many system colors are). These colors are actually a repeating pattern
+    // not just a solid color. To work around this we simply draw a 1x1 image of
+    // the color and use that pixel's color. It might be better to use an average of
+    // the colors in the pattern instead.
+    NSBitmapImageRep *offscreenRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil
+                                                                             pixelsWide:1
+                                                                             pixelsHigh:1
+                                                                          bitsPerSample:8
+                                                                        samplesPerPixel:4
+                                                                               hasAlpha:YES
+                                                                               isPlanar:NO
+                                                                         colorSpaceName:NSCalibratedRGBColorSpace
+                                                                            bytesPerRow:4
+                                                                           bitsPerPixel:32];
+
+    [NSGraphicsContext saveGraphicsState];
+    [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithBitmapImageRep:offscreenRep]];
+    NSEraseRect(NSMakeRect(0, 0, 1, 1));
+    [color drawSwatchInRect:NSMakeRect(0, 0, 1, 1)];
+    [NSGraphicsContext restoreGraphicsState];
+
+    NSUInteger pixel[3];
+    [offscreenRep getPixel:pixel atX:0 y:0];
+
+    [offscreenRep release];
+
+    return makeRGB(pixel[0], pixel[1], pixel[3]);
+}
+
+void RenderThemeMac::platformColorsDidChange()
+{
+    m_systemColorCache.clear();
+    RenderTheme::platformColorsDidChange();
+}
+
+Color RenderThemeMac::systemColor(int cssValueId) const
+{
+    if (m_systemColorCache.contains(cssValueId))
+        return m_systemColorCache.get(cssValueId);
+    
+    Color color;
+    switch (cssValueId) {
+        case CSS_VAL_ACTIVEBORDER:
+            color = convertNSColorToColor([NSColor keyboardFocusIndicatorColor]);
+            break;
+        case CSS_VAL_ACTIVECAPTION:
+            color = convertNSColorToColor([NSColor windowFrameTextColor]);
+            break;
+        case CSS_VAL_APPWORKSPACE:
+            color = convertNSColorToColor([NSColor headerColor]);
+            break;
+        case CSS_VAL_BACKGROUND:
+            // Use theme independent default
+            break;
+        case CSS_VAL_BUTTONFACE:
+            // We use this value instead of NSColor's controlColor to avoid website incompatibilities.
+            // We may want to change this to use the NSColor in future.
+            color = 0xFFC0C0C0;
+            break;
+        case CSS_VAL_BUTTONHIGHLIGHT:
+            color = convertNSColorToColor([NSColor controlHighlightColor]);
+            break;
+        case CSS_VAL_BUTTONSHADOW:
+            color = convertNSColorToColor([NSColor controlShadowColor]);
+            break;
+        case CSS_VAL_BUTTONTEXT:
+            color = convertNSColorToColor([NSColor controlTextColor]);
+            break;
+        case CSS_VAL_CAPTIONTEXT:
+            color = convertNSColorToColor([NSColor textColor]);
+            break;
+        case CSS_VAL_GRAYTEXT:
+            color = convertNSColorToColor([NSColor disabledControlTextColor]);
+            break;
+        case CSS_VAL_HIGHLIGHT:
+            color = convertNSColorToColor([NSColor selectedTextBackgroundColor]);
+            break;
+        case CSS_VAL_HIGHLIGHTTEXT:
+            color = convertNSColorToColor([NSColor selectedTextColor]);
+            break;
+        case CSS_VAL_INACTIVEBORDER:
+            color = convertNSColorToColor([NSColor controlBackgroundColor]);
+            break;
+        case CSS_VAL_INACTIVECAPTION:
+            color = convertNSColorToColor([NSColor controlBackgroundColor]);
+            break;
+        case CSS_VAL_INACTIVECAPTIONTEXT:
+            color = convertNSColorToColor([NSColor textColor]);
+            break;
+        case CSS_VAL_INFOBACKGROUND:
+            // There is no corresponding NSColor for this so we use a hard coded value.
+            color = 0xFFFBFCC5;
+            break;
+        case CSS_VAL_INFOTEXT:
+            color = convertNSColorToColor([NSColor textColor]);
+            break;
+        case CSS_VAL_MENU:
+            color = convertNSColorToColor([NSColor selectedMenuItemColor]);
+            break;
+        case CSS_VAL_MENUTEXT:
+            color = convertNSColorToColor([NSColor selectedMenuItemTextColor]);
+            break;
+        case CSS_VAL_SCROLLBAR:
+            color = convertNSColorToColor([NSColor scrollBarColor]);
+            break;
+        case CSS_VAL_TEXT:
+            color = convertNSColorToColor([NSColor textColor]);
+            break;
+        case CSS_VAL_THREEDDARKSHADOW:
+            color = convertNSColorToColor([NSColor controlDarkShadowColor]);
+            break;
+        case CSS_VAL_THREEDSHADOW:
+            color = convertNSColorToColor([NSColor shadowColor]);
+            break;
+        case CSS_VAL_THREEDFACE:
+            // We use this value instead of NSColor's controlColor to avoid website incompatibilities.
+            // We may want to change this to use the NSColor in future.
+            color = 0xFFC0C0C0;
+            break;
+        case CSS_VAL_THREEDHIGHLIGHT:
+            color = convertNSColorToColor([NSColor highlightColor]);
+            break;
+        case CSS_VAL_THREEDLIGHTSHADOW:
+            color = convertNSColorToColor([NSColor controlLightHighlightColor]);
+            break;
+        case CSS_VAL_WINDOW:
+            color = convertNSColorToColor([NSColor windowBackgroundColor]);
+            break;
+        case CSS_VAL_WINDOWFRAME:
+            color = convertNSColorToColor([NSColor windowFrameColor]);
+            break;
+        case CSS_VAL_WINDOWTEXT:
+            color = convertNSColorToColor([NSColor windowFrameTextColor]);
+            break;
+    }
+
+    if (!color.isValid())
+        color = RenderTheme::systemColor(cssValueId);
+
+    if (color.isValid())
+        m_systemColorCache.set(cssValueId, color.rgb());
+
+    return color;
+}
+
 bool RenderThemeMac::isControlStyled(const RenderStyle* style, const BorderData& border,
                                      const BackgroundLayer& background, const Color& backgroundColor) const
 {