LayoutTests:
authoradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 Aug 2006 23:44:05 +0000 (23:44 +0000)
committeradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 Aug 2006 23:44:05 +0000 (23:44 +0000)
        Reviewed by Hyatt.

        New tests and updated tests for styled selects.

        * fast/borders/borderRadiusInvalidColor-expected.checksum: Added.
        * fast/borders/borderRadiusInvalidColor-expected.png: Added.
        * fast/borders/borderRadiusInvalidColor-expected.txt: Added.
        * fast/borders/borderRadiusInvalidColor.html: Added.

        * fast/forms/select-baseline-expected.checksum: Added.
        * fast/forms/select-baseline-expected.png: Added.
        * fast/forms/select-baseline-expected.txt: Added.
        * fast/forms/select-baseline.html: Added.

        * editing/pasteboard/4641033-expected.txt:
        * editing/selection/replaced-boundaries-3-expected.txt:
        * editing/selection/select-box-expected.txt:
        * fast/block/margin-collapse/103-expected.txt:
        * fast/forms/001-expected.checksum:
        * fast/forms/001-expected.png:
        * fast/forms/001-expected.txt:
        * fast/forms/003-expected.txt:
        * fast/forms/004-expected.txt:
        * fast/forms/HTMLOptionElement_label01-expected.txt:
        * fast/forms/HTMLOptionElement_label02-expected.txt:
        * fast/forms/HTMLOptionElement_label03-expected.txt:
        * fast/forms/HTMLOptionElement_label04-expected.txt:
        * fast/forms/HTMLOptionElement_label06-expected.txt:
        * fast/forms/HTMLOptionElement_label07-expected.txt:
        * fast/forms/form-element-geometry-expected.checksum:
        * fast/forms/form-element-geometry-expected.png:
        * fast/forms/form-element-geometry-expected.txt:
        * fast/forms/option-script-expected.txt:
        * fast/forms/option-text-clip-expected.txt:
        * fast/forms/select-change-listbox-to-popup-expected.txt:
        * fast/forms/select-selected-expected.txt:
        * fast/forms/select-style-expected.txt:
        * fast/forms/select-visual-hebrew-expected.txt:
        * fast/invalid/014-expected.txt:
        * fast/parser/document-write-option-expected.txt:
        * fast/replaced/width100percent-expected.txt:
        * http/tests/navigation/anchor-basic-expected.txt:
        * http/tests/navigation/anchor-frames-expected.txt:
        * http/tests/navigation/anchor-goback-expected.txt:
        * http/tests/navigation/anchor-subframeload-expected.txt:
        * http/tests/navigation/javascriptlink-basic-expected.txt:
        * http/tests/navigation/javascriptlink-frames-expected.txt:
        * http/tests/navigation/javascriptlink-goback-expected.txt:
        * http/tests/navigation/javascriptlink-subframeload-expected.txt:
        * http/tests/navigation/metaredirect-basic-expected.txt:
        * http/tests/navigation/metaredirect-frames-expected.txt:
        * http/tests/navigation/metaredirect-goback-expected.txt:
        * http/tests/navigation/metaredirect-subframeload-expected.txt:
        * http/tests/navigation/post-goback2-expected.txt:
        * http/tests/navigation/postredirect-goback2-expected.txt:
        * http/tests/navigation/redirect302-basic-expected.txt:
        * http/tests/navigation/redirect302-frames-expected.txt:
        * http/tests/navigation/redirect302-goback-expected.txt:
        * http/tests/navigation/redirect302-subframeload-expected.txt:
        * http/tests/navigation/relativeanchor-basic-expected.txt:
        * http/tests/navigation/relativeanchor-frames-expected.txt:
        * http/tests/navigation/relativeanchor-goback-expected.txt:
        * http/tests/navigation/slowmetaredirect-basic-expected.txt:
        * http/tests/navigation/slowtimerredirect-basic-expected.txt:
        * http/tests/navigation/success200-basic-expected.txt:
        * http/tests/navigation/success200-frames-expected.txt:
        * http/tests/navigation/success200-frames-loadsame-expected.txt:
        * http/tests/navigation/success200-goback-expected.txt:
        * http/tests/navigation/success200-loadsame-expected.txt:
        * http/tests/navigation/success200-reload-expected.txt:
        * http/tests/navigation/success200-subframeload-expected.txt:
        * http/tests/navigation/timerredirect-basic-expected.txt:
        * http/tests/navigation/timerredirect-frames-expected.txt:
        * http/tests/navigation/timerredirect-goback-expected.txt:
        * http/tests/navigation/timerredirect-subframeload-expected.txt:
        * tables/mozilla/bugs/bug1188-expected.txt:
        * tables/mozilla/bugs/bug18359-expected.txt:
        * tables/mozilla/bugs/bug2479-3-expected.txt:
        * tables/mozilla/bugs/bug2479-4-expected.txt:
        * tables/mozilla/bugs/bug29326-expected.txt:
        * tables/mozilla/bugs/bug33855-expected.txt:
        * tables/mozilla/bugs/bug4382-expected.txt:
        * tables/mozilla/bugs/bug96334-expected.txt:
        * tables/mozilla/core/margins-expected.txt:
        * tables/mozilla/dom/tableDom-expected.txt:
        * tables/mozilla_expected_failures/bugs/bug2479-5-expected.txt:

WebCore:

        Reviewed by Hyatt.

        Enable styling for popup menus. Also fixed baseline calculation for buttons and selects.

        Tests:   fast/forms/select-baseline.html
                 fast/borders/borderRadiusInvalidColor.html
        updated: fast/forms/select-style-expected.txt and more...

        * css/html4.css: Added style rules for styled select elements.

        * platform/GraphicsContext.h: Added argument for antialiasing.
        * platform/cg/GraphicsContextCG.cpp: (WebCore::GraphicsContext::drawConvexPolygon): ditto.
        * platform/cairo/GraphicsContextCairo.cpp: (WebCore::GraphicsContext::drawConvexPolygon): ditto.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBorderArc): Added textColor argument so this can be used when the border color is invalid.
        (WebCore::RenderObject::drawBorder): Removed invalidisInvert since its dead code
         (any callers that set this to true were already ensuring that their color was valid).
         Updated drawConvexPolygon call to use FloatPoints instead of IntPoints.
        (WebCore::RenderObject::paintBorder): Updated to remove invalidisInvert argument from drawBorder call.
        (WebCore::RenderObject::paintOutline): ditto.
        * rendering/RenderFlow.cpp: (WebCore::RenderFlow::paintOutlineForLine): ditto.
        * rendering/RenderObject.h: Updated arguments for drawBorder and drawBorderArc.

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::getBaselineOfLastLineBox): Changed isRootLineBox argument to true when setting line height.
          Added case for when there's no children to check for hasLineIfEmpty.
        * rendering/RenderBlock.h:
        * rendering/bidi.cpp: (WebCore::RenderBlock::layoutInlineChildren): Changed isRootLineBox argument to true when setting line height.
        * rendering/RenderButton.h: (WebCore::RenderButton::hasLineIfEmpty): Added so buttons always get a line height.
        * rendering/RenderMenuList.h: (WebCore::RenderMenuList::hasLineIfEmpty): ditto.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox): Added code to check hasLineIfEmpty to give flex boxes line height.
        (WebCore::RenderFlexibleBox::layoutVerticalBox): ditto.

        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::adjustRenderStyle): Moved the appearance adjustment code into adjust style.
        * rendering/RenderBox.cpp: (WebCore::RenderBox::paintBoxDecorations): Lets the theme paint "decorations", like the arrow control and gradients
         immediately after painting the background.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle): This now checks whether the control is styled, and adjusts the appearance property appropriately.
        For styled selects, instead of setting the appearance to none, which is what we do for other styled controls, we set the appearance
        to MenulistButtonAppearance, which indicates that we will draw the arrow controls and button appearance in the engine.
        (WebCore::RenderTheme::paintDecorations): Added. Paints MenulistButtonAppearance in a different function,
         so the arrow control will draw at the right time (after the background).
        (WebCore::RenderTheme::paint): Added case for MenulistButtonAppearance.
        (WebCore::RenderTheme::paintBorderOnly): ditto.
        (WebCore::RenderTheme::isControlContainer): Removed cases for MenuListAppearance and MenulistButtonAppearance since the baseline is no longer provided by the theme.
        (WebCore::RenderTheme::adjustMenuListButtonStyle): Added.
        * rendering/RenderTheme.h: (WebCore::RenderTheme::paintMenuListButton): Added.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::isControlStyled): Removed code that made selects unstyle-able.
        (WebCore::RenderThemeMac::baselinePosition): Removed cases for MenuListAppearance and MenulistButtonAppearance.
        (WebCore::RenderThemeMac::popupButtonPadding): Added top and bottom padding so empty popups have the right baseline.
        (WebCore::TopGradientInterpolate): Added.
        (WebCore::BottomGradientInterpolate): Added.
        (WebCore::MainGradientInterpolate): Added.
        (WebCore::RenderThemeMac::paintMenuListButtonGradients): Added.  Draws gradients for styled popup menu button appearance.
        (WebCore::RenderThemeMac::paintMenuListButton): Calls paintMenuListButtonGradients, and draws arrow control.
        (WebCore::RenderThemeMac::adjustMenuListButtonStyle): Added to set padding and border radius to account for the arrow control size and font size.

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

102 files changed:
LayoutTests/ChangeLog
LayoutTests/editing/pasteboard/4641033-expected.txt
LayoutTests/editing/selection/replaced-boundaries-3-expected.txt
LayoutTests/editing/selection/select-box-expected.txt
LayoutTests/fast/block/margin-collapse/103-expected.txt
LayoutTests/fast/borders/borderRadiusInvalidColor-expected.checksum [new file with mode: 0644]
LayoutTests/fast/borders/borderRadiusInvalidColor-expected.png [new file with mode: 0644]
LayoutTests/fast/borders/borderRadiusInvalidColor-expected.txt [new file with mode: 0644]
LayoutTests/fast/borders/borderRadiusInvalidColor.html [new file with mode: 0644]
LayoutTests/fast/forms/001-expected.checksum
LayoutTests/fast/forms/001-expected.png
LayoutTests/fast/forms/001-expected.txt
LayoutTests/fast/forms/003-expected.txt
LayoutTests/fast/forms/004-expected.txt
LayoutTests/fast/forms/HTMLOptionElement_label01-expected.txt
LayoutTests/fast/forms/HTMLOptionElement_label02-expected.txt
LayoutTests/fast/forms/HTMLOptionElement_label03-expected.txt
LayoutTests/fast/forms/HTMLOptionElement_label04-expected.txt
LayoutTests/fast/forms/HTMLOptionElement_label06-expected.txt
LayoutTests/fast/forms/HTMLOptionElement_label07-expected.txt
LayoutTests/fast/forms/form-element-geometry-expected.checksum
LayoutTests/fast/forms/form-element-geometry-expected.png
LayoutTests/fast/forms/form-element-geometry-expected.txt
LayoutTests/fast/forms/option-script-expected.txt
LayoutTests/fast/forms/option-text-clip-expected.txt
LayoutTests/fast/forms/select-baseline-expected.checksum [new file with mode: 0644]
LayoutTests/fast/forms/select-baseline-expected.png [new file with mode: 0644]
LayoutTests/fast/forms/select-baseline-expected.txt [new file with mode: 0644]
LayoutTests/fast/forms/select-baseline.html [new file with mode: 0644]
LayoutTests/fast/forms/select-change-listbox-to-popup-expected.txt
LayoutTests/fast/forms/select-selected-expected.txt
LayoutTests/fast/forms/select-style-expected.txt
LayoutTests/fast/forms/select-visual-hebrew-expected.txt
LayoutTests/fast/invalid/014-expected.txt
LayoutTests/fast/parser/document-write-option-expected.txt
LayoutTests/fast/replaced/width100percent-expected.txt
LayoutTests/http/tests/navigation/anchor-basic-expected.txt
LayoutTests/http/tests/navigation/anchor-frames-expected.txt
LayoutTests/http/tests/navigation/anchor-goback-expected.txt
LayoutTests/http/tests/navigation/anchor-subframeload-expected.txt
LayoutTests/http/tests/navigation/javascriptlink-basic-expected.txt
LayoutTests/http/tests/navigation/javascriptlink-frames-expected.txt
LayoutTests/http/tests/navigation/javascriptlink-goback-expected.txt
LayoutTests/http/tests/navigation/javascriptlink-subframeload-expected.txt
LayoutTests/http/tests/navigation/metaredirect-basic-expected.txt
LayoutTests/http/tests/navigation/metaredirect-frames-expected.txt
LayoutTests/http/tests/navigation/metaredirect-goback-expected.txt
LayoutTests/http/tests/navigation/metaredirect-subframeload-expected.txt
LayoutTests/http/tests/navigation/post-goback2-expected.txt
LayoutTests/http/tests/navigation/postredirect-goback2-expected.txt
LayoutTests/http/tests/navigation/redirect302-basic-expected.txt
LayoutTests/http/tests/navigation/redirect302-frames-expected.txt
LayoutTests/http/tests/navigation/redirect302-goback-expected.txt
LayoutTests/http/tests/navigation/redirect302-subframeload-expected.txt
LayoutTests/http/tests/navigation/relativeanchor-basic-expected.txt
LayoutTests/http/tests/navigation/relativeanchor-frames-expected.txt
LayoutTests/http/tests/navigation/relativeanchor-goback-expected.txt
LayoutTests/http/tests/navigation/slowmetaredirect-basic-expected.txt
LayoutTests/http/tests/navigation/slowtimerredirect-basic-expected.txt
LayoutTests/http/tests/navigation/success200-basic-expected.txt
LayoutTests/http/tests/navigation/success200-frames-expected.txt
LayoutTests/http/tests/navigation/success200-frames-loadsame-expected.txt
LayoutTests/http/tests/navigation/success200-goback-expected.txt
LayoutTests/http/tests/navigation/success200-loadsame-expected.txt
LayoutTests/http/tests/navigation/success200-reload-expected.txt
LayoutTests/http/tests/navigation/success200-subframeload-expected.txt
LayoutTests/http/tests/navigation/timerredirect-basic-expected.txt
LayoutTests/http/tests/navigation/timerredirect-frames-expected.txt
LayoutTests/http/tests/navigation/timerredirect-goback-expected.txt
LayoutTests/http/tests/navigation/timerredirect-subframeload-expected.txt
LayoutTests/tables/mozilla/bugs/bug1188-expected.txt
LayoutTests/tables/mozilla/bugs/bug18359-expected.txt
LayoutTests/tables/mozilla/bugs/bug2479-3-expected.txt
LayoutTests/tables/mozilla/bugs/bug2479-4-expected.txt
LayoutTests/tables/mozilla/bugs/bug29326-expected.txt
LayoutTests/tables/mozilla/bugs/bug33855-expected.txt
LayoutTests/tables/mozilla/bugs/bug4382-expected.txt
LayoutTests/tables/mozilla/bugs/bug96334-expected.txt
LayoutTests/tables/mozilla/core/margins-expected.txt
LayoutTests/tables/mozilla/dom/tableDom-expected.txt
LayoutTests/tables/mozilla_expected_failures/bugs/bug2479-5-expected.txt
WebCore/ChangeLog
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/css/cssstyleselector.cpp
WebCore/css/html4.css
WebCore/platform/GraphicsContext.h
WebCore/platform/cairo/GraphicsContextCairo.cpp
WebCore/platform/cg/GraphicsContextCG.cpp
WebCore/rendering/RenderBlock.cpp
WebCore/rendering/RenderBlock.h
WebCore/rendering/RenderBox.cpp
WebCore/rendering/RenderButton.h
WebCore/rendering/RenderFlexibleBox.cpp
WebCore/rendering/RenderFlow.cpp
WebCore/rendering/RenderMenuList.h
WebCore/rendering/RenderObject.cpp
WebCore/rendering/RenderObject.h
WebCore/rendering/RenderTheme.cpp
WebCore/rendering/RenderTheme.h
WebCore/rendering/RenderThemeMac.h
WebCore/rendering/RenderThemeMac.mm
WebCore/rendering/bidi.cpp

index f7c3d80..65f4ba8 100644 (file)
@@ -1,3 +1,92 @@
+2006-08-25  Adele Peterson  <adele@apple.com>
+
+        Reviewed by Hyatt.
+
+        New tests and updated tests for styled selects.
+
+        * fast/borders/borderRadiusInvalidColor-expected.checksum: Added.
+        * fast/borders/borderRadiusInvalidColor-expected.png: Added.
+        * fast/borders/borderRadiusInvalidColor-expected.txt: Added.
+        * fast/borders/borderRadiusInvalidColor.html: Added.
+
+        * fast/forms/select-baseline-expected.checksum: Added.
+        * fast/forms/select-baseline-expected.png: Added.
+        * fast/forms/select-baseline-expected.txt: Added.
+        * fast/forms/select-baseline.html: Added.
+
+        * editing/pasteboard/4641033-expected.txt:
+        * editing/selection/replaced-boundaries-3-expected.txt:
+        * editing/selection/select-box-expected.txt:
+        * fast/block/margin-collapse/103-expected.txt:
+        * fast/forms/001-expected.checksum:
+        * fast/forms/001-expected.png:
+        * fast/forms/001-expected.txt:
+        * fast/forms/003-expected.txt:
+        * fast/forms/004-expected.txt:
+        * fast/forms/HTMLOptionElement_label01-expected.txt:
+        * fast/forms/HTMLOptionElement_label02-expected.txt:
+        * fast/forms/HTMLOptionElement_label03-expected.txt:
+        * fast/forms/HTMLOptionElement_label04-expected.txt:
+        * fast/forms/HTMLOptionElement_label06-expected.txt:
+        * fast/forms/HTMLOptionElement_label07-expected.txt:
+        * fast/forms/form-element-geometry-expected.checksum:
+        * fast/forms/form-element-geometry-expected.png:
+        * fast/forms/form-element-geometry-expected.txt:
+        * fast/forms/option-script-expected.txt:
+        * fast/forms/option-text-clip-expected.txt:
+        * fast/forms/select-change-listbox-to-popup-expected.txt:
+        * fast/forms/select-selected-expected.txt:
+        * fast/forms/select-style-expected.txt:
+        * fast/forms/select-visual-hebrew-expected.txt:
+        * fast/invalid/014-expected.txt:
+        * fast/parser/document-write-option-expected.txt:
+        * fast/replaced/width100percent-expected.txt:
+        * http/tests/navigation/anchor-basic-expected.txt:
+        * http/tests/navigation/anchor-frames-expected.txt:
+        * http/tests/navigation/anchor-goback-expected.txt:
+        * http/tests/navigation/anchor-subframeload-expected.txt:
+        * http/tests/navigation/javascriptlink-basic-expected.txt:
+        * http/tests/navigation/javascriptlink-frames-expected.txt:
+        * http/tests/navigation/javascriptlink-goback-expected.txt:
+        * http/tests/navigation/javascriptlink-subframeload-expected.txt:
+        * http/tests/navigation/metaredirect-basic-expected.txt:
+        * http/tests/navigation/metaredirect-frames-expected.txt:
+        * http/tests/navigation/metaredirect-goback-expected.txt:
+        * http/tests/navigation/metaredirect-subframeload-expected.txt:
+        * http/tests/navigation/post-goback2-expected.txt:
+        * http/tests/navigation/postredirect-goback2-expected.txt:
+        * http/tests/navigation/redirect302-basic-expected.txt:
+        * http/tests/navigation/redirect302-frames-expected.txt:
+        * http/tests/navigation/redirect302-goback-expected.txt:
+        * http/tests/navigation/redirect302-subframeload-expected.txt:
+        * http/tests/navigation/relativeanchor-basic-expected.txt:
+        * http/tests/navigation/relativeanchor-frames-expected.txt:
+        * http/tests/navigation/relativeanchor-goback-expected.txt:
+        * http/tests/navigation/slowmetaredirect-basic-expected.txt:
+        * http/tests/navigation/slowtimerredirect-basic-expected.txt:
+        * http/tests/navigation/success200-basic-expected.txt:
+        * http/tests/navigation/success200-frames-expected.txt:
+        * http/tests/navigation/success200-frames-loadsame-expected.txt:
+        * http/tests/navigation/success200-goback-expected.txt:
+        * http/tests/navigation/success200-loadsame-expected.txt:
+        * http/tests/navigation/success200-reload-expected.txt:
+        * http/tests/navigation/success200-subframeload-expected.txt:
+        * http/tests/navigation/timerredirect-basic-expected.txt:
+        * http/tests/navigation/timerredirect-frames-expected.txt:
+        * http/tests/navigation/timerredirect-goback-expected.txt:
+        * http/tests/navigation/timerredirect-subframeload-expected.txt:
+        * tables/mozilla/bugs/bug1188-expected.txt:
+        * tables/mozilla/bugs/bug18359-expected.txt:
+        * tables/mozilla/bugs/bug2479-3-expected.txt:
+        * tables/mozilla/bugs/bug2479-4-expected.txt:
+        * tables/mozilla/bugs/bug29326-expected.txt:
+        * tables/mozilla/bugs/bug33855-expected.txt:
+        * tables/mozilla/bugs/bug4382-expected.txt:
+        * tables/mozilla/bugs/bug96334-expected.txt:
+        * tables/mozilla/core/margins-expected.txt:
+        * tables/mozilla/dom/tableDom-expected.txt:
+        * tables/mozilla_expected_failures/bugs/bug2479-5-expected.txt:
+
 2006-08-24  Darin Adler  <darin@apple.com>
 
         Reviewed by Justin.
index ae1f2d0..949d785 100644 (file)
@@ -31,12 +31,12 @@ layer at (0,0) size 800x600
         RenderImage {IMG} at (0,0) size 76x103
         RenderText {#text} at (76,89) size 4x18
           text run at (76,89) width 4: " "
-        RenderMenuList {SELECT} at (82,90) size 36x18
+        RenderMenuList {SELECT} at (82,90) size 36x18 [bgcolor=#FFFFFF]
       RenderBlock (anonymous) at (0,196) size 784x110
         RenderImage {IMG} at (0,0) size 76x103
         RenderText {#text} at (76,89) size 4x18
           text run at (76,89) width 4: " "
-        RenderMenuList {SELECT} at (82,90) size 52x18
+        RenderMenuList {SELECT} at (82,90) size 52x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 21x13
             RenderText at (0,0) size 19x13
               text run at (0,0) width 19: "    1"
index 078d2c8..4db3561 100644 (file)
@@ -18,7 +18,7 @@ layer at (0,0) size 800x600
         RenderText {#text} at (0,0) size 22x18
           text run at (0,0) width 22: "abc"
         RenderBR {BR} at (22,14) size 0x0
-        RenderMenuList {SELECT} at (2,20) size 226x18
+        RenderMenuList {SELECT} at (2,20) size 226x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 195x13
             RenderText at (0,0) size 195x13
               text run at (0,0) width 195: "this select box shouldn't be selected"
index 0ad8b58..a0f07b7 100644 (file)
@@ -64,7 +64,7 @@ layer at (0,0) size 800x600
         RenderBlock {DIV} at (0,0) size 784x22
           RenderText {#text} at (0,1) size 71x18
             text run at (0,1) width 71: "select box: "
-          RenderMenuList {SELECT} at (73,2) size 38x18
+          RenderMenuList {SELECT} at (73,2) size 38x18 [bgcolor=#FFFFFF]
             RenderBlock (anonymous) at (8,2) size 7x13
               RenderText at (0,0) size 7x13
                 text run at (0,0) width 7: "1"
index 646208a..f898721 100644 (file)
@@ -37,21 +37,21 @@ layer at (0,0) size 785x1701
             RenderBlock (floating) {SPAN} at (0,68) size 325x20 [color=#333333]
               RenderText {#text} at (0,2) size 128x15
                 text run at (0,2) width 128: "Your degree program*"
-            RenderMenuList {SELECT} at (325,68) size 180x18
+            RenderMenuList {SELECT} at (325,68) size 180x18 [bgcolor=#FFFFFF]
               RenderBlock (anonymous) at (8,2) size 149x13
                 RenderText at (0,0) size 90x13
                   text run at (0,0) width 90: "Program options"
             RenderBlock (floating) {SPAN} at (0,88) size 325x20 [color=#333333]
               RenderText {#text} at (0,2) size 110x15
                 text run at (0,2) width 110: "Your year of study*"
-            RenderMenuList {SELECT} at (325,88) size 180x18
+            RenderMenuList {SELECT} at (325,88) size 180x18 [bgcolor=#FFFFFF]
               RenderBlock (anonymous) at (8,2) size 149x13
                 RenderText at (0,0) size 124x13
                   text run at (0,0) width 124: "Years you've been here"
             RenderBlock (floating) {SPAN} at (0,108) size 325x20 [color=#333333]
               RenderText {#text} at (0,2) size 152x15
                 text run at (0,2) width 152: "Shakespeare classes taken"
-            RenderMenuList {SELECT} at (325,108) size 180x18
+            RenderMenuList {SELECT} at (325,108) size 180x18 [bgcolor=#FFFFFF]
               RenderBlock (anonymous) at (8,2) size 149x13
                 RenderText at (0,0) size 76x13
                   text run at (0,0) width 76: "Number taken"
@@ -64,7 +64,7 @@ layer at (0,0) size 785x1701
             RenderBlock (floating) {SPAN} at (0,210) size 325x20 [color=#333333]
               RenderText {#text} at (0,2) size 321x15
                 text run at (0,2) width 321: "What percentage of your research time is spent online?"
-            RenderMenuList {SELECT} at (325,210) size 180x18
+            RenderMenuList {SELECT} at (325,210) size 180x18 [bgcolor=#FFFFFF]
               RenderBlock (anonymous) at (8,2) size 149x13
                 RenderText at (0,0) size 106x13
                   text run at (0,0) width 106: "Percentages of time"
@@ -72,7 +72,7 @@ layer at (0,0) size 785x1701
               RenderText {#text} at (0,2) size 300x35
                 text run at (0,2) width 300: "What is holding you back from doing more research"
                 text run at (0,22) width 41: "online?"
-            RenderMenuList {SELECT} at (325,230) size 180x18
+            RenderMenuList {SELECT} at (325,230) size 180x18 [bgcolor=#FFFFFF]
               RenderBlock (anonymous) at (8,2) size 149x13
                 RenderText at (0,0) size 44x13
                   text run at (0,0) width 44: "Reasons"
@@ -112,14 +112,14 @@ layer at (0,0) size 785x1701
             RenderBlock (floating) {SPAN} at (0,427) size 325x20 [color=#333333]
               RenderText {#text} at (0,2) size 274x15
                 text run at (0,2) width 274: "Which area of the ISE did you find most useful?"
-            RenderMenuList {SELECT} at (325,427) size 180x18
+            RenderMenuList {SELECT} at (325,427) size 180x18 [bgcolor=#FFFFFF]
               RenderBlock (anonymous) at (8,2) size 149x13
                 RenderText at (0,0) size 99x13
                   text run at (0,0) width 99: "Sections of the ISE"
             RenderBlock (floating) {SPAN} at (0,447) size 325x20 [color=#333333]
               RenderText {#text} at (0,2) size 252x15
                 text run at (0,2) width 252: "How did you find the navigation of the ISE?"
-            RenderMenuList {SELECT} at (325,447) size 180x18
+            RenderMenuList {SELECT} at (325,447) size 180x18 [bgcolor=#FFFFFF]
               RenderBlock (anonymous) at (8,2) size 149x13
                 RenderText at (0,0) size 91x13
                   text run at (0,0) width 91: "Level of difficulty"
diff --git a/LayoutTests/fast/borders/borderRadiusInvalidColor-expected.checksum b/LayoutTests/fast/borders/borderRadiusInvalidColor-expected.checksum
new file mode 100644 (file)
index 0000000..0d72ecb
--- /dev/null
@@ -0,0 +1 @@
+d0f38e91f0a6d66c67aaf50ec472b8b9
\ No newline at end of file
diff --git a/LayoutTests/fast/borders/borderRadiusInvalidColor-expected.png b/LayoutTests/fast/borders/borderRadiusInvalidColor-expected.png
new file mode 100644 (file)
index 0000000..ec1f147
Binary files /dev/null and b/LayoutTests/fast/borders/borderRadiusInvalidColor-expected.png differ
diff --git a/LayoutTests/fast/borders/borderRadiusInvalidColor-expected.txt b/LayoutTests/fast/borders/borderRadiusInvalidColor-expected.txt
new file mode 100644 (file)
index 0000000..11a4be8
--- /dev/null
@@ -0,0 +1,11 @@
+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 (anonymous) at (0,0) size 784x18
+        RenderText {#text} at (0,0) size 600x18
+          text run at (0,0) width 600: "This tests that border radius will choose the foreground color when no border color is specified."
+      RenderBlock {DIV} at (0,18) size 56x24 [color=#FF0000] [bgcolor=#ADD8E6] [border: (3px solid #FF0000)]
+        RenderText {#text} at (3,3) size 21x18
+          text run at (3,3) width 21: "test"
diff --git a/LayoutTests/fast/borders/borderRadiusInvalidColor.html b/LayoutTests/fast/borders/borderRadiusInvalidColor.html
new file mode 100644 (file)
index 0000000..767a2d5
--- /dev/null
@@ -0,0 +1,12 @@
+<style>
+.myDiv {
+    -webkit-border-radius : 5px;
+    width: 50px;
+    color: red;
+    background-color: lightblue;
+    border: 3px solid;
+}
+</style>
+This tests that border radius will choose the foreground color when no border color is specified.
+
+<div class="myDiv">test</div>
index 193392a..eb4279a 100644 (file)
@@ -1 +1 @@
-64b27f49c223c43307733f846fac6fd3
\ No newline at end of file
+30c93784fba4675931e35b46fcefe87d
\ No newline at end of file
index a2d5646..44b4f5a 100644 (file)
Binary files a/LayoutTests/fast/forms/001-expected.png and b/LayoutTests/fast/forms/001-expected.png differ
index 9b85c19..3d579ba 100644 (file)
@@ -6,30 +6,30 @@ layer at (0,0) size 800x600
       RenderBlock {H1} at (0,0) size 784x37
         RenderText {#text} at (0,0) size 234x37
           text run at (0,0) width 234: "Min-Width Tests"
-      RenderTable {TABLE} at (0,58) size 784x24 [border: (2px outset #808080)]
-        RenderTableSection {TBODY} at (2,2) size 780x20
-          RenderTableRow {TR} at (0,0) size 780x20
-            RenderTableCell {TD} at (0,0) size 57x20 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
-              RenderMenuList {SELECT} at (3,1) size 51x18
-                RenderBlock (anonymous) at (8,2) size 20x13
+      RenderTable {TABLE} at (0,58) size 784x89 [border: (2px outset #808080)]
+        RenderTableSection {TBODY} at (2,2) size 780x85
+          RenderTableRow {TR} at (0,0) size 780x85
+            RenderTableCell {TD} at (0,0) size 135x85 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
+              RenderMenuList {SELECT} at (3,1) size 129x83 [bgcolor=#FFFFFF] [border: (40px solid #FF0000)]
+                RenderBlock (anonymous) at (48,41) size 20x13
                   RenderText at (0,0) size 20x13
                     text run at (0,0) width 20: "Foo"
-            RenderTableCell {TD} at (57,9) size 723x2 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
-      RenderBlock {P} at (0,98) size 784x24
+            RenderTableCell {TD} at (135,41) size 645x2 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
+      RenderBlock {P} at (0,163) size 784x24
         RenderTable {TABLE} at (0,0) size 784x24 [border: (2px outset #808080)]
           RenderTableSection {TBODY} at (2,2) size 780x20
             RenderTableRow {TR} at (0,0) size 780x20
               RenderTableCell {TD} at (0,0) size 20x20 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
                 RenderBlock {INPUT} at (4,4) size 12x12
               RenderTableCell {TD} at (20,9) size 760x2 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
-      RenderBlock {P} at (0,138) size 784x24
+      RenderBlock {P} at (0,203) size 784x24
         RenderTable {TABLE} at (0,0) size 784x24 [border: (2px outset #808080)]
           RenderTableSection {TBODY} at (2,2) size 780x20
             RenderTableRow {TR} at (0,0) size 780x20
               RenderTableCell {TD} at (0,0) size 20x20 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
                 RenderBlock {INPUT} at (4,4) size 12x12
               RenderTableCell {TD} at (20,9) size 760x2 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
-      RenderBlock {P} at (0,178) size 784x28
+      RenderBlock {P} at (0,243) size 784x28
         RenderTable {TABLE} at (0,0) size 784x28 [border: (2px outset #808080)]
           RenderTableSection {TBODY} at (2,2) size 780x24
             RenderTableRow {TR} at (0,0) size 780x24
@@ -39,7 +39,7 @@ layer at (0,0) size 800x600
                     RenderText at (0,0) size 20x13
                       text run at (0,0) width 20: "Foo"
               RenderTableCell {TD} at (42,11) size 738x2 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
-      RenderBlock {P} at (0,222) size 784x267
+      RenderBlock {P} at (0,287) size 784x267
         RenderTable {TABLE} at (0,0) size 784x91 [border: (2px outset #808080)]
           RenderTableSection {TBODY} at (2,2) size 780x87
             RenderTableRow {TR} at (0,0) size 780x87
index e537522..b8c7912 100644 (file)
@@ -3,7 +3,7 @@ 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
-      RenderMenuList {SELECT} at (2,0) size 59x18
+      RenderMenuList {SELECT} at (2,0) size 59x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 28x13
           RenderText at (0,0) size 28x13
             text run at (0,0) width 28: "Hello"
index dcccabc..22b989b 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
-      RenderMenuList {SELECT} at (2,2) size 59x18
+      RenderMenuList {SELECT} at (2,2) size 59x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 28x13
           RenderText at (0,0) size 28x13
             text run at (0,0) width 28: "Hello"
       RenderText {#text} at (63,1) size 4x18
         text run at (63,1) width 4: " "
-      RenderMenuList {SELECT} at (69,2) size 79x18
+      RenderMenuList {SELECT} at (69,2) size 79x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 48x13
           RenderText at (0,0) size 48x13
             text run at (0,0) width 48: "Goodbye"
index d44d0b8..ef05376 100644 (file)
@@ -6,7 +6,7 @@ layer at (0,0) size 800x600
       RenderText {#text} at (0,0) size 673x18
         text run at (0,0) width 673: "In the selection list below, the text 'The label for this element is \"1\"' should appear, and not the character '1'"
       RenderBR {BR} at (673,14) size 0x0
-      RenderMenuList {SELECT} at (2,20) size 197x18
+      RenderMenuList {SELECT} at (2,20) size 197x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 166x13
           RenderText at (0,0) size 166x13
             text run at (0,0) width 166: "the label for this element is \"1\""
index 82e57db..7561e7d 100644 (file)
@@ -6,7 +6,7 @@ layer at (0,0) size 800x600
       RenderText {#text} at (0,0) size 300x18
         text run at (0,0) width 300: "With the label empty, the enclosing text is used."
       RenderBR {BR} at (300,14) size 0x0
-      RenderMenuList {SELECT} at (2,20) size 309x18
+      RenderMenuList {SELECT} at (2,20) size 309x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 278x13
           RenderText at (0,0) size 279x13
             text run at (0,0) width 279: "empty label should display empty string to match IE"
index 611bd44..c38f675 100644 (file)
@@ -6,7 +6,7 @@ layer at (0,0) size 800x600
       RenderText {#text} at (0,0) size 436x18
         text run at (0,0) width 436: "When the label contains only white space, the containing text is used."
       RenderBR {BR} at (436,14) size 0x0
-      RenderMenuList {SELECT} at (2,20) size 338x18
+      RenderMenuList {SELECT} at (2,20) size 338x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 307x13
           RenderText at (0,0) size 308x13
             text run at (0,0) width 308: "white space label should display empty string to match IE"
index a25669b..ae57d97 100644 (file)
@@ -6,7 +6,7 @@ layer at (0,0) size 800x600
       RenderText {#text} at (0,0) size 595x18
         text run at (0,0) width 595: "The label attribute appears, but is missing the equals value piece, so the containing text is used."
       RenderBR {BR} at (595,14) size 0x0
-      RenderMenuList {SELECT} at (2,20) size 464x18
+      RenderMenuList {SELECT} at (2,20) size 464x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 433x13
           RenderText at (0,0) size 433x13
             text run at (0,0) width 433: "the label attribute is mentioned but no value is specified; this text should appear"
index c5138f7..e8922de 100644 (file)
@@ -6,7 +6,7 @@ layer at (0,0) size 800x600
       RenderText {#text} at (0,0) size 718x18
         text run at (0,0) width 718: "The select item below has a label specified, and no enclosed text. There should be no text shown in the select box."
       RenderBR {BR} at (718,14) size 0x0
-      RenderMenuList {SELECT} at (2,20) size 53x18
+      RenderMenuList {SELECT} at (2,20) size 53x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 22x13
           RenderText at (0,0) size 22x13
             text run at (0,0) width 22: "text"
index 0c7a39e..4d99940 100644 (file)
@@ -7,5 +7,5 @@ layer at (0,0) size 800x600
         text run at (0,0) width 781: "The select item below has a label specified, and enclosed text that is whitespace. There should be no text shown in the select"
         text run at (0,18) width 28: "box."
       RenderBR {BR} at (28,32) size 0x0
-      RenderMenuList {SELECT} at (2,38) size 36x18
+      RenderMenuList {SELECT} at (2,38) size 36x18 [bgcolor=#FFFFFF]
       RenderText {#text} at (0,0) size 0x0
index 8180734..fa6d4a8 100644 (file)
@@ -1 +1 @@
-eddcc7aa8111d729c3cb56d3fa81566c
\ No newline at end of file
+8a8f3798c469460bda12c28dc5b8e130
\ No newline at end of file
index b5fdb59..76f2aa6 100644 (file)
Binary files a/LayoutTests/fast/forms/form-element-geometry-expected.png and b/LayoutTests/fast/forms/form-element-geometry-expected.png differ
index 20d7d5d..336e219 100644 (file)
@@ -25,7 +25,7 @@ layer at (0,0) size 785x627
             RenderTableCell {TD} at (62,2) size 68x24 [r=0 c=1 rs=1 cs=1]
               RenderBlock {DIV} at (1,1) size 66x22 [border: (2px solid #0000FF)]
                 RenderInline {FONT} at (0,0) size 62x18
-                  RenderMenuList {SELECT} at (2,2) size 62x18
+                  RenderMenuList {SELECT} at (2,2) size 62x18 [bgcolor=#FFFFFF]
                     RenderBlock (anonymous) at (8,2) size 31x13
                       RenderText at (0,0) size 31x13
                         text run at (0,0) width 31: "menu"
@@ -54,7 +54,7 @@ layer at (0,0) size 785x627
                       text run at (0,0) width 36: "button"
             RenderTableCell {TD} at (62,2) size 68x24 [r=0 c=1 rs=1 cs=1]
               RenderBlock {DIV} at (1,1) size 66x22 [border: (2px solid #0000FF)]
-                RenderMenuList {SELECT} at (2,2) size 62x18
+                RenderMenuList {SELECT} at (2,2) size 62x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 31x13
                     RenderText at (0,0) size 31x13
                       text run at (0,0) width 31: "menu"
@@ -77,7 +77,7 @@ layer at (0,0) size 785x627
             RenderTableCell {TD} at (62,2) size 68x24 [r=0 c=1 rs=1 cs=1]
               RenderBlock {DIV} at (1,1) size 66x22 [border: (2px solid #0000FF)]
                 RenderInline {FONT} at (0,0) size 62x13
-                  RenderMenuList {SELECT} at (2,2) size 62x18
+                  RenderMenuList {SELECT} at (2,2) size 62x18 [bgcolor=#FFFFFF]
                     RenderBlock (anonymous) at (8,2) size 31x13
                       RenderText at (0,0) size 31x13
                         text run at (0,0) width 31: "menu"
@@ -117,7 +117,7 @@ layer at (0,0) size 785x627
                 text run at (0,0) width 36: "button"
           RenderText {#text} at (99,0) size 6x28
             text run at (99,0) width 6: " "
-          RenderMenuList {SELECT} at (107,9) size 62x18
+          RenderMenuList {SELECT} at (107,9) size 62x18 [bgcolor=#FFFFFF]
             RenderBlock (anonymous) at (8,2) size 31x13
               RenderText at (0,0) size 31x13
                 text run at (0,0) width 31: "menu"
@@ -137,7 +137,7 @@ layer at (0,0) size 785x627
               text run at (0,0) width 36: "button"
         RenderText {#text} at (83,1) size 4x18
           text run at (83,1) width 4: " "
-        RenderMenuList {SELECT} at (89,2) size 62x18
+        RenderMenuList {SELECT} at (89,2) size 62x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 31x13
             RenderText at (0,0) size 31x13
               text run at (0,0) width 31: "menu"
@@ -158,7 +158,7 @@ layer at (0,0) size 785x627
                 text run at (0,0) width 36: "button"
           RenderText {#text} at (74,5) size 3x13
             text run at (74,5) width 3: " "
-          RenderMenuList {SELECT} at (79,2) size 62x18
+          RenderMenuList {SELECT} at (79,2) size 62x18 [bgcolor=#FFFFFF]
             RenderBlock (anonymous) at (8,2) size 31x13
               RenderText at (0,0) size 31x13
                 text run at (0,0) width 31: "menu"
@@ -186,31 +186,31 @@ layer at (0,0) size 785x627
       RenderBlock {DIV} at (0,538) size 769x29
         RenderInline {FONT} at (0,0) size 181x28
           RenderText {#text} at (0,0) size 0x0
-          RenderMenuList {SELECT} at (2,9) size 36x18
+          RenderMenuList {SELECT} at (2,9) size 36x18 [bgcolor=#FFFFFF]
           RenderText {#text} at (40,0) size 6x28
             text run at (40,0) width 6: " "
-          RenderMenuList {SELECT} at (48,9) size 36x18
+          RenderMenuList {SELECT} at (48,9) size 36x18 [bgcolor=#FFFFFF]
             RenderBlock (anonymous) at (8,2) size 5x13
               RenderText at (0,0) size 5x13
                 text run at (0,0) width 5: "|"
           RenderText {#text} at (86,0) size 6x28
             text run at (86,0) width 6: " "
-          RenderMenuList {SELECT} at (94,9) size 85x18
+          RenderMenuList {SELECT} at (94,9) size 85x18 [bgcolor=#FFFFFF]
             RenderBlock (anonymous) at (8,2) size 54x13
               RenderText at (0,0) size 54x13
                 text run at (0,0) width 54: "xxxxxxxx"
           RenderText {#text} at (0,0) size 0x0
       RenderBlock {DIV} at (0,567) size 769x22
-        RenderMenuList {SELECT} at (2,2) size 36x18
+        RenderMenuList {SELECT} at (2,2) size 36x18 [bgcolor=#FFFFFF]
         RenderText {#text} at (40,1) size 4x18
           text run at (40,1) width 4: " "
-        RenderMenuList {SELECT} at (46,2) size 36x18
+        RenderMenuList {SELECT} at (46,2) size 36x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 5x13
             RenderText at (0,0) size 5x13
               text run at (0,0) width 5: "|"
         RenderText {#text} at (84,1) size 4x18
           text run at (84,1) width 4: " "
-        RenderMenuList {SELECT} at (90,2) size 85x18
+        RenderMenuList {SELECT} at (90,2) size 85x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 54x13
             RenderText at (0,0) size 54x13
               text run at (0,0) width 54: "xxxxxxxx"
@@ -218,16 +218,16 @@ layer at (0,0) size 785x627
       RenderBlock {DIV} at (0,589) size 769x22
         RenderInline {FONT} at (0,0) size 175x13
           RenderText {#text} at (0,0) size 0x0
-          RenderMenuList {SELECT} at (2,2) size 36x18
+          RenderMenuList {SELECT} at (2,2) size 36x18 [bgcolor=#FFFFFF]
           RenderText {#text} at (40,5) size 3x13
             text run at (40,5) width 3: " "
-          RenderMenuList {SELECT} at (45,2) size 36x18
+          RenderMenuList {SELECT} at (45,2) size 36x18 [bgcolor=#FFFFFF]
             RenderBlock (anonymous) at (8,2) size 5x13
               RenderText at (0,0) size 5x13
                 text run at (0,0) width 5: "|"
           RenderText {#text} at (83,5) size 3x13
             text run at (83,5) width 3: " "
-          RenderMenuList {SELECT} at (88,2) size 85x18
+          RenderMenuList {SELECT} at (88,2) size 85x18 [bgcolor=#FFFFFF]
             RenderBlock (anonymous) at (8,2) size 54x13
               RenderText at (0,0) size 54x13
                 text run at (0,0) width 54: "xxxxxxxx"
index af32516..7f61e84 100644 (file)
@@ -11,7 +11,7 @@ layer at (0,0) size 800x600
         text run at (0,18) width 109: "TEST FAILED: "
         text run at (109,18) width 316: "If the popup menu says \"document.write('Text')\". "
       RenderBR {BR} at (425,32) size 0x0
-      RenderMenuList {SELECT} at (2,38) size 55x18
+      RenderMenuList {SELECT} at (2,38) size 55x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 24x13
           RenderText at (0,0) size 24x13
             text run at (0,0) width 24: "Text"
index 89f0934..f7cce24 100644 (file)
@@ -6,7 +6,7 @@ layer at (0,0) size 800x600
       RenderText {#text} at (0,0) size 702x18
         text run at (0,0) width 702: "This tests that the option text is clipped properly, and doesn't spill over into the arrow part of the popup control. "
       RenderBR {BR} at (702,14) size 0x0
-      RenderMenuList {SELECT} at (0,20) size 150x18
+      RenderMenuList {SELECT} at (0,20) size 150x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 119x13
           RenderText at (0,0) size 130x13
             text run at (0,0) width 130: "12345 6789 ABCD EFGH"
diff --git a/LayoutTests/fast/forms/select-baseline-expected.checksum b/LayoutTests/fast/forms/select-baseline-expected.checksum
new file mode 100644 (file)
index 0000000..8998f5b
--- /dev/null
@@ -0,0 +1 @@
+ef709cdc25c1d59bad19f264a10bd4a7
\ No newline at end of file
diff --git a/LayoutTests/fast/forms/select-baseline-expected.png b/LayoutTests/fast/forms/select-baseline-expected.png
new file mode 100644 (file)
index 0000000..fba8e23
Binary files /dev/null and b/LayoutTests/fast/forms/select-baseline-expected.png differ
diff --git a/LayoutTests/fast/forms/select-baseline-expected.txt b/LayoutTests/fast/forms/select-baseline-expected.txt
new file mode 100644 (file)
index 0000000..436e056
--- /dev/null
@@ -0,0 +1,43 @@
+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
+      RenderText {#text} at (0,0) size 462x18
+        text run at (0,0) width 462: "This tests that empty select controls and buttons have the correct baseline."
+      RenderBR {BR} at (462,14) size 0x0
+      RenderMenuList {SELECT} at (2,20) size 36x18 [bgcolor=#FFFFFF]
+      RenderText {#text} at (40,19) size 29x18
+        text run at (40,19) width 29: " test "
+      RenderMenuList {SELECT} at (71,20) size 51x18 [bgcolor=#FFFFFF]
+        RenderBlock (anonymous) at (8,2) size 20x13
+          RenderText at (0,0) size 20x13
+            text run at (0,0) width 20: "test"
+      RenderText {#text} at (124,19) size 4x18
+        text run at (124,19) width 4: " "
+      RenderMenuList {SELECT} at (130,20) size 36x18 [color=#00008B] [bgcolor=#ADD8E6] [border: (1px solid #00008B)]
+      RenderText {#text} at (168,19) size 29x18
+        text run at (168,19) width 29: " test "
+      RenderMenuList {SELECT} at (199,20) size 51x18 [color=#00008B] [bgcolor=#ADD8E6] [border: (1px solid #00008B)]
+        RenderBlock (anonymous) at (9,2) size 20x13
+          RenderText at (0,0) size 20x13
+            text run at (0,0) width 20: "test"
+      RenderText {#text} at (252,19) size 4x18
+        text run at (252,19) width 4: " "
+      RenderButton {BUTTON} at (258,20) size 16x18 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0) none (2px outset #C0C0C0)]
+      RenderText {#text} at (276,19) size 4x18
+        text run at (276,19) width 4: " "
+      RenderButton {BUTTON} at (282,20) size 36x18 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0) none (2px outset #C0C0C0)]
+        RenderBlock (anonymous) at (8,2) size 20x13
+          RenderText {#text} at (0,0) size 20x13
+            text run at (0,0) width 20: "test"
+      RenderText {#text} at (320,19) size 4x18
+        text run at (320,19) width 4: " "
+      RenderButton {BUTTON} at (324,18) size 16x22 [color=#00008B] [bgcolor=#ADD8E6] [border: (2px outset #C0C0C0)]
+      RenderText {#text} at (340,19) size 4x18
+        text run at (340,19) width 4: " "
+      RenderButton {BUTTON} at (344,18) size 36x22 [color=#00008B] [bgcolor=#ADD8E6] [border: (2px outset #C0C0C0)]
+        RenderBlock (anonymous) at (8,4) size 20x13
+          RenderText {#text} at (0,0) size 20x13
+            text run at (0,0) width 20: "test"
+      RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/fast/forms/select-baseline.html b/LayoutTests/fast/forms/select-baseline.html
new file mode 100644 (file)
index 0000000..b89347e
--- /dev/null
@@ -0,0 +1,25 @@
+<style>
+.styledControl {
+    background-color: lightblue;
+    color: darkblue;
+}
+</style>
+This tests that empty select controls and buttons have the correct baseline.<br>
+<select>
+    <option>
+</select>
+test
+<select>
+    <option>test
+</select>
+<select class="styledControl">
+    <option>
+</select>
+test
+<select class="styledControl">
+    <option>test
+</select>
+<button></button>
+<button>test</button>
+<button class="styledControl"></button>
+<button class="styledControl">test</button>
index 50c58ec..f45937b 100644 (file)
@@ -6,7 +6,7 @@ layer at (0,0) size 800x600
       RenderText {#text} at (0,0) size 441x18
         text run at (0,0) width 441: "This tests that you can dynamically change a list box to a popup menu"
       RenderBR {BR} at (441,14) size 0x0
-      RenderMenuList {SELECT} at (2,20) size 225x18
+      RenderMenuList {SELECT} at (2,20) size 225x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 194x13
           RenderText at (0,0) size 195x13
             text run at (0,0) width 195: "This should turn into a popup menu"
index ce9d5e0..504b774 100644 (file)
@@ -3,7 +3,7 @@ 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
-      RenderMenuList {SELECT} at (2,2) size 262x18
+      RenderMenuList {SELECT} at (2,2) size 262x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 231x13
           RenderText at (0,0) size 166x13
             text run at (0,0) width 166: "should see this option selected"
index 0fad066..d6e196a 100644 (file)
@@ -7,7 +7,7 @@ layer at (0,0) size 800x600
         text run at (0,0) width 250: "This tests that styled popups look right. "
         text run at (250,0) width 308: "(Aqua for now- later, we will honor the styling). "
       RenderBR {BR} at (0,0) size 0x0
-      RenderMenuList {SELECT} at (2,20) size 51x18 [bgcolor=#FF0000]
-        RenderBlock (anonymous) at (8,2) size 20x13
+      RenderMenuList {SELECT} at (2,20) size 51x18 [bgcolor=#FF0000] [border: (1px solid #000000)]
+        RenderBlock (anonymous) at (9,2) size 20x13
           RenderText at (0,0) size 20x13
             text run at (0,0) width 20: "test"
index 4ce97d6..3d0d851 100644 (file)
@@ -12,7 +12,7 @@ layer at (0,0) size 800x600
           text run at (0,0) width 348 LTR override: "Text on the pop-up and in the list should look like this: "
           text run at (348,0) width 43 LTR override: "\x{5E8}\x{5D5}\x{5EA}\x{5E4}\x{5DB}"
       RenderBlock (anonymous) at (0,86) size 784x22
-        RenderMenuList {SELECT} at (2,2) size 61x18
+        RenderMenuList {SELECT} at (2,2) size 61x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 30x13
             RenderText at (0,0) size 30x13
               text run at (0,0) width 30 RTL: "\x{5DB}\x{5E4}\x{5EA}\x{5D5}\x{5E8}"
index e56a572..c9cd1cb 100644 (file)
@@ -9,7 +9,7 @@ layer at (0,0) size 800x600
           text run at (282,0) width 321: "H2 should allow a form inside it, but p should not. "
         RenderText {#text} at (0,0) size 0x0
       RenderBlock {FORM} at (0,18) size 784x22
-        RenderMenuList {SELECT} at (2,2) size 39x18
+        RenderMenuList {SELECT} at (2,2) size 39x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 8x13
             RenderText at (0,0) size 8x13
               text run at (0,0) width 8: "A"
@@ -18,7 +18,7 @@ layer at (0,0) size 800x600
 layer at (470,45) size 47x50
   RenderBlock (positioned) {H2} at (470,45) size 47x50 [border: (2px solid #008000)]
     RenderBlock {FORM} at (2,2) size 43x22
-      RenderMenuList {SELECT} at (2,2) size 39x18
+      RenderMenuList {SELECT} at (2,2) size 39x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 8x13
           RenderText at (0,0) size 8x13
             text run at (0,0) width 8: "A"
index 1f7c611..d4a0d87 100644 (file)
@@ -3,7 +3,7 @@ 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
-      RenderMenuList {SELECT} at (2,2) size 324x18
+      RenderMenuList {SELECT} at (2,2) size 324x18 [bgcolor=#FFFFFF]
         RenderBlock (anonymous) at (8,2) size 293x13
           RenderText at (0,0) size 294x13
             text run at (0,0) width 294: "This is a very long string so it makes the select bigger."
index e08e51c..9e6917c 100644 (file)
@@ -167,17 +167,17 @@ layer at (0,0) size 785x980
         RenderTableSection {TBODY} at (0,0) size 769x26
           RenderTableRow {TR} at (0,1) size 769x24
             RenderTableCell {TD} at (1,1) size 53x24 [r=0 c=0 rs=1 cs=1]
-              RenderMenuList {SELECT} at (1,3) size 51x18
+              RenderMenuList {SELECT} at (1,3) size 51x18 [bgcolor=#FFFFFF]
                 RenderBlock (anonymous) at (8,2) size 20x13
                   RenderText at (0,0) size 20x13
                     text run at (0,0) width 20: "one"
             RenderTableCell {TD} at (55,1) size 33x24 [r=0 c=1 rs=1 cs=1]
-              RenderMenuList {SELECT} at (1,3) size 31x18
+              RenderMenuList {SELECT} at (1,3) size 31x18 [bgcolor=#FFFFFF]
                 RenderBlock (anonymous) at (8,2) size 0x13
                   RenderText at (0,0) size 20x13
                     text run at (0,0) width 20: "two"
             RenderTableCell {TD} at (89,1) size 33x24 [r=0 c=2 rs=1 cs=1]
-              RenderMenuList {SELECT} at (1,3) size 31x18
+              RenderMenuList {SELECT} at (1,3) size 31x18 [bgcolor=#FFFFFF]
                 RenderBlock (anonymous) at (8,2) size 0x13
                   RenderText at (0,0) size 28x13
                     text run at (0,0) width 28: "three"
index 5571bf4..e482e59 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 63x13
               text run at (0,0) width 63: "Initial Value"
index 165748d..4ef75cc 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index 41ddbf3..4783870 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 225x13
               text run at (0,0) width 225: "Value set by User that should be Restored"
index 9170a37..6124ef6 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index 7b42a2b..387cb0b 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 63x13
               text run at (0,0) width 63: "Initial Value"
index aeee4eb..2ce0d26 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index 6e8f96e..187d3e8 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 225x13
               text run at (0,0) width 225: "Value set by User that should be Restored"
index bff9b0d..9c8cc65 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index 47ac96d..03e486c 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 63x13
               text run at (0,0) width 63: "Initial Value"
index 2ab124f..5c028a2 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index ab966a6..164f05e 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 225x13
               text run at (0,0) width 225: "Value set by User that should be Restored"
index d13b66c..fa83da0 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index 87076aa..dd8dec8 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 225x13
               text run at (0,0) width 225: "Value set by User that should be Restored"
index 2c09878..842305e 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 225x13
               text run at (0,0) width 225: "Value set by User that should be Restored"
index d113d68..ba86e7c 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 63x13
               text run at (0,0) width 63: "Initial Value"
index d4c94e0..95e35fb 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index bceb041..6b008b5 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 225x13
               text run at (0,0) width 225: "Value set by User that should be Restored"
index f63d47c..62c6591 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index 7ee9fa4..86e58bd 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 63x13
               text run at (0,0) width 63: "Initial Value"
index bbd145f..3b50b05 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index 9969666..b9adf21 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 225x13
               text run at (0,0) width 225: "Value set by User that should be Restored"
index 150d723..1612c06 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 63x13
               text run at (0,0) width 63: "Initial Value"
index 99a1648..e86c7a0 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 63x13
               text run at (0,0) width 63: "Initial Value"
index db415bf..0431f83 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 63x13
               text run at (0,0) width 63: "Initial Value"
index 60cab64..428239f 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index 26b149d..5cc205a 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index bee9401..e79a385 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 225x13
               text run at (0,0) width 225: "Value set by User that should be Restored"
index 85298cf..a458341 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 63x13
               text run at (0,0) width 63: "Initial Value"
index a61d639..061d828 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 63x13
               text run at (0,0) width 63: "Initial Value"
index 4a3738e..8f80f1a 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index 1e3b9c1..7bb08f8 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 63x13
               text run at (0,0) width 63: "Initial Value"
index fb72918..27f0c15 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index 0313980..b35c04c 100644 (file)
@@ -50,7 +50,7 @@ layer at (0,0) size 785x1550
         RenderText {#text} at (18,229) size 130x37
           text run at (18,229) width 130: " option #2"
         RenderBR {BR} at (148,258) size 0x0
-        RenderMenuList {SELECT} at (2,268) size 255x18
+        RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 224x13
             RenderText at (0,0) size 225x13
               text run at (0,0) width 225: "Value set by User that should be Restored"
index e34c3d7..059247d 100644 (file)
@@ -56,7 +56,7 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (18,229) size 130x37
                   text run at (18,229) width 130: " option #2"
                 RenderBR {BR} at (148,258) size 0x0
-                RenderMenuList {SELECT} at (2,268) size 255x18
+                RenderMenuList {SELECT} at (2,268) size 255x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 224x13
                     RenderText at (0,0) size 63x13
                       text run at (0,0) width 63: "Initial Value"
index d7bb128..f196269 100644 (file)
@@ -19,7 +19,7 @@ layer at (0,0) size 800x600
                       text run at (49,5) width 127: "Search the Web with"
                 RenderText {#text} at (176,3) size 4x18
                   text run at (176,3) width 4: " "
-                RenderMenuList {SELECT} at (182,4) size 80x18
+                RenderMenuList {SELECT} at (182,4) size 80x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 49x13
                     RenderText at (0,0) size 49x13
                       text run at (0,0) width 49: "Netscape"
index 16ebe84..3fe5fc0 100644 (file)
@@ -28,7 +28,7 @@ layer at (0,0) size 800x600
                   RenderText {#text} at (1,1) size 105x18
                     text run at (1,1) width 105: "Run Test Case:"
               RenderTableCell {TD} at (111,29) size 467x24 [r=1 c=1 rs=1 cs=1]
-                RenderMenuList {SELECT} at (3,3) size 262x18
+                RenderMenuList {SELECT} at (3,3) size 262x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 231x13
                     RenderText at (0,0) size 73x13
                       text run at (0,0) width 73: "a_abortinstall"
index 318dfb0..e3304a4 100644 (file)
@@ -66,7 +66,7 @@ layer at (0,0) size 785x680
         RenderBlock {P} at (0,0) size 769x45
           RenderText {#text} at (0,2) size 263x18
             text run at (0,2) width 263: "How does your browser fare on this test? "
-          RenderMenuList {SELECT} at (265,3) size 246x18
+          RenderMenuList {SELECT} at (265,3) size 246x18 [bgcolor=#FFFFFF]
             RenderBlock (anonymous) at (8,2) size 215x13
               RenderText at (0,0) size 140x13
                 text run at (0,0) width 140: "The test renders correctly."
index cce81ce..4c450f1 100644 (file)
@@ -184,7 +184,7 @@ layer at (0,0) size 785x2526
         RenderBlock {P} at (0,0) size 769x45
           RenderText {#text} at (0,1) size 263x18
             text run at (0,1) width 263: "How does your browser fare on this test? "
-          RenderMenuList {SELECT} at (265,2) size 473x18
+          RenderMenuList {SELECT} at (265,2) size 473x18 [bgcolor=#FFFFFF]
             RenderBlock (anonymous) at (8,2) size 442x13
               RenderText at (0,0) size 442x13
                 text run at (0,0) width 442: "The tests all render identically, and this browser may or may not grok CSS2 tables."
index 14802eb..59fad87 100644 (file)
@@ -8,7 +8,7 @@ layer at (0,0) size 800x600
           RenderTableRow {TR} at (0,2) size 398x42
             RenderTableCell {TD} at (2,2) size 394x42 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
               RenderBlock {FORM} at (2,2) size 390x22
-                RenderMenuList {SELECT} at (2,2) size 54x18
+                RenderMenuList {SELECT} at (2,2) size 54x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 23x13
                     RenderText at (0,0) size 23x13
                       text run at (0,0) width 23: "Test"
index 79528a2..463b2d1 100644 (file)
@@ -31,7 +31,7 @@ layer at (0,0) size 800x600
                     RenderText at (0,0) size 47x13
                       text run at (0,0) width 47: "Move to:"
               RenderTableCell {TD} at (666,2) size 116x24 [r=0 c=5 rs=1 cs=1]
-                RenderMenuList {SELECT} at (3,3) size 110x18
+                RenderMenuList {SELECT} at (3,3) size 110x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 79x13
                     RenderText at (0,0) size 78x13
                       text run at (0,0) width 78: "Choose folder "
index b82d229..9968d71 100644 (file)
@@ -16,7 +16,7 @@ layer at (0,0) size 800x600
         RenderTextField {INPUT} at (53,2) size 134x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
         RenderText {#text} at (189,2) size 4x18
           text run at (189,2) width 4: " "
-        RenderMenuList {SELECT} at (195,3) size 77x18
+        RenderMenuList {SELECT} at (195,3) size 77x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 46x13
             RenderText at (0,0) size 32x13
               text run at (0,0) width 32: "Excite"
@@ -27,7 +27,7 @@ layer at (0,0) size 800x600
           text run at (0,18) width 264: "The select should not contain blank items "
         RenderBR {BR} at (264,32) size 0x0
       RenderBlock {FORM} at (0,93) size 784x22
-        RenderMenuList {SELECT} at (2,2) size 230x18
+        RenderMenuList {SELECT} at (2,2) size 230x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 199x13
             RenderText at (0,0) size 57x13
               text run at (0,0) width 57: "Quick Link"
index 6674aa3..c5f1a5f 100644 (file)
@@ -31,7 +31,7 @@ layer at (0,0) size 999x585
                         RenderTableSection {TBODY} at (2,2) size 187x30
                           RenderTableRow {TR} at (0,2) size 187x26
                             RenderTableCell {TD} at (2,2) size 183x26 [border: (1px solid #C0C0C0)] [r=0 c=0 rs=1 cs=1]
-                              RenderMenuList {SELECT} at (4,4) size 175x18
+                              RenderMenuList {SELECT} at (4,4) size 175x18 [bgcolor=#FFFFFF]
                                 RenderBlock (anonymous) at (8,2) size 144x13
                                   RenderText at (0,0) size 144x13
                                     text run at (0,0) width 144: "USE THIS JAVASCRIPT HERE"
index 24f5a56..f590583 100644 (file)
@@ -11,7 +11,7 @@ layer at (0,0) size 800x600
           RenderTableRow {TR} at (0,2) size 398x42
             RenderTableCell {TD} at (2,2) size 394x42 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
               RenderBlock {FORM} at (2,2) size 390x22
-                RenderMenuList {SELECT} at (2,2) size 54x18
+                RenderMenuList {SELECT} at (2,2) size 54x18 [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 23x13
                     RenderText at (0,0) size 23x13
                       text run at (0,0) width 23: "Test"
index 8eccae1..58771b0 100644 (file)
@@ -4,7 +4,7 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock {FORM} at (0,0) size 784x23
-        RenderMenuList {SELECT} at (2,3) size 95x18
+        RenderMenuList {SELECT} at (2,3) size 95x18 [bgcolor=#FFFFFF]
           RenderBlock (anonymous) at (8,2) size 64x13
             RenderText at (0,0) size 62x13
               text run at (0,0) width 62: "append cell"
index 60297c2..cb885ab 100644 (file)
@@ -134,7 +134,7 @@ layer at (8,8) size 769x1776
               RenderBlock {P} at (1,17) size 458x63
                 RenderText {#text} at (0,0) size 259x18
                   text run at (0,0) width 259: "How does your browser fare on this test?"
-                RenderMenuList {SELECT} at (2,20) size 454x18 [color=#000000]
+                RenderMenuList {SELECT} at (2,20) size 454x18 [color=#000000] [bgcolor=#FFFFFF]
                   RenderBlock (anonymous) at (8,2) size 423x13
                     RenderText at (0,0) size 214x13
                       text run at (0,0) width 214: "Document renders exactly as described."
index e94a157..22a9803 100644 (file)
@@ -1,3 +1,67 @@
+2006-08-25  Adele Peterson  <adele@apple.com>
+
+        Reviewed by Hyatt.
+
+        Enable styling for popup menus. Also fixed baseline calculation for buttons and selects.
+
+        Tests:   fast/forms/select-baseline.html
+                 fast/borders/borderRadiusInvalidColor.html
+        updated: fast/forms/select-style-expected.txt and more...
+
+        * css/html4.css: Added style rules for styled select elements.
+
+        * platform/GraphicsContext.h: Added argument for antialiasing.
+        * platform/cg/GraphicsContextCG.cpp: (WebCore::GraphicsContext::drawConvexPolygon): ditto.
+        * platform/cairo/GraphicsContextCairo.cpp: (WebCore::GraphicsContext::drawConvexPolygon): ditto.
+
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::drawBorderArc): Added textColor argument so this can be used when the border color is invalid.
+        (WebCore::RenderObject::drawBorder): Removed invalidisInvert since its dead code 
+         (any callers that set this to true were already ensuring that their color was valid).
+         Updated drawConvexPolygon call to use FloatPoints instead of IntPoints.
+        (WebCore::RenderObject::paintBorder): Updated to remove invalidisInvert argument from drawBorder call.
+        (WebCore::RenderObject::paintOutline): ditto.
+        * rendering/RenderFlow.cpp: (WebCore::RenderFlow::paintOutlineForLine): ditto.
+        * rendering/RenderObject.h: Updated arguments for drawBorder and drawBorderArc.
+
+        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::getBaselineOfLastLineBox): Changed isRootLineBox argument to true when setting line height.
+          Added case for when there's no children to check for hasLineIfEmpty.
+        * rendering/RenderBlock.h:
+        * rendering/bidi.cpp: (WebCore::RenderBlock::layoutInlineChildren): Changed isRootLineBox argument to true when setting line height.
+        * rendering/RenderButton.h: (WebCore::RenderButton::hasLineIfEmpty): Added so buttons always get a line height.
+        * rendering/RenderMenuList.h: (WebCore::RenderMenuList::hasLineIfEmpty): ditto.
+        * rendering/RenderFlexibleBox.cpp:
+        (WebCore::RenderFlexibleBox::layoutHorizontalBox): Added code to check hasLineIfEmpty to give flex boxes line height.
+        (WebCore::RenderFlexibleBox::layoutVerticalBox): ditto.
+
+        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::adjustRenderStyle): Moved the appearance adjustment code into adjust style.
+        * rendering/RenderBox.cpp: (WebCore::RenderBox::paintBoxDecorations): Lets the theme paint "decorations", like the arrow control and gradients
+         immediately after painting the background.
+
+        * rendering/RenderTheme.cpp:
+        (WebCore::RenderTheme::adjustStyle): This now checks whether the control is styled, and adjusts the appearance property appropriately.
+        For styled selects, instead of setting the appearance to none, which is what we do for other styled controls, we set the appearance
+        to MenulistButtonAppearance, which indicates that we will draw the arrow controls and button appearance in the engine.
+        (WebCore::RenderTheme::paintDecorations): Added. Paints MenulistButtonAppearance in a different function, 
+         so the arrow control will draw at the right time (after the background).
+        (WebCore::RenderTheme::paint): Added case for MenulistButtonAppearance.
+        (WebCore::RenderTheme::paintBorderOnly): ditto.
+        (WebCore::RenderTheme::isControlContainer): Removed cases for MenuListAppearance and MenulistButtonAppearance since the baseline is no longer provided by the theme.
+        (WebCore::RenderTheme::adjustMenuListButtonStyle): Added.
+        * rendering/RenderTheme.h: (WebCore::RenderTheme::paintMenuListButton): Added.
+
+        * rendering/RenderThemeMac.h:
+        * rendering/RenderThemeMac.mm:
+        (WebCore::RenderThemeMac::isControlStyled): Removed code that made selects unstyle-able.
+        (WebCore::RenderThemeMac::baselinePosition): Removed cases for MenuListAppearance and MenulistButtonAppearance.
+        (WebCore::RenderThemeMac::popupButtonPadding): Added top and bottom padding so empty popups have the right baseline.
+        (WebCore::TopGradientInterpolate): Added.
+        (WebCore::BottomGradientInterpolate): Added.
+        (WebCore::MainGradientInterpolate): Added.
+        (WebCore::RenderThemeMac::paintMenuListButtonGradients): Added.  Draws gradients for styled popup menu button appearance.
+        (WebCore::RenderThemeMac::paintMenuListButton): Calls paintMenuListButtonGradients, and draws arrow control.
+        (WebCore::RenderThemeMac::adjustMenuListButtonStyle): Added to set padding and border radius to account for the arrow control size and font size.
+
 2006-08-25  Brady Eidson  <beidson@apple.com>
 
         Reviewed by Adam
index e094213..9c90d6a 100644 (file)
                0867D690FE84028FC02AAC07 /* Project object */ = {
                        isa = PBXProject;
                        buildConfigurationList = 149C284308902B11008A9EFC /* Build configuration list for PBXProject "WebCore" */;
-                       compatibilityVersion = "Xcode 2.4";
                        hasScannedForEncodings = 1;
                        knownRegions = (
                                English,
                        mainGroup = 0867D691FE84028FC02AAC07 /* WebKit */;
                        productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
                        projectDirPath = "";
-                       projectRoot = "";
-                       shouldCheckCompatibility = 1;
                        targets = (
                                93F198A508245E59001E9ABC /* WebCore */,
                                DD041FBE09D9DDBE0010AF2A /* Derived Sources */,
index 3f9a8a5..53576de 100644 (file)
@@ -1079,12 +1079,8 @@ void CSSStyleSelector::adjustRenderStyle(RenderStyle* style, Element *e)
     style->adjustBackgroundLayers();
 
     // Let the theme also have a crack at adjusting the style.
-    if (style->hasAppearance()) {
-        if (m_hasUAAppearance && theme()->isControlStyled(style, m_borderData, m_backgroundData, m_backgroundColor))
-            style->setAppearance(NoAppearance);
-        else
-            theme()->adjustStyle(this, style, e);
-    }
+    if (style->hasAppearance())
+        theme()->adjustStyle(this, style, e, m_hasUAAppearance, m_borderData, m_backgroundData, m_backgroundColor);
     
 #ifdef SVG_SUPPORT
     if (e && e->isSVGElement()) {
index 8d93842..a07370a 100644 (file)
@@ -367,7 +367,7 @@ input[type="button"], input[type="submit"], input[type="reset"], button {
     box-sizing: border-box
 }
 
-input[type="button"]:disabled, input[type="submit"]:disabled, input[type="reset"]:disabled, button:disabled {
+input[type="button"]:disabled, input[type="submit"]:disabled, input[type="reset"]:disabled, button:disabled, select:disabled {
     color: GrayText
 }
 
@@ -402,14 +402,23 @@ select {
     box-sizing: border-box;
     -webkit-box-align: center;
     -webkit-rtl-ordering: logical;
+    color: black;
+    border: 1px solid;
+    -webkit-border-radius: 5px;
+    background-color: white;
+    white-space: pre;
 }
 
 select[size],
 select[multiple],
 select[size][multiple] {
+    // FIXME: When converting the list box implementation, remove these.
     -webkit-appearance: none;
     -webkit-box-align: initial;
     box-sizing: initial;
+    color: initial;
+    border: initial;
+    background-color: initial;
 }
  
 select[size="0"],
@@ -417,6 +426,10 @@ select[size="1"] {
     -webkit-appearance: menulist;
     box-sizing: border-box;
     -webkit-box-align: center;
+    color: black;
+    border: 1px solid;
+    -webkit-border-radius: 5px;
+    background-color: white;
 }
 
 optgroup {
index 03f2e38..0499e0a 100644 (file)
@@ -93,7 +93,7 @@ namespace WebCore {
         void drawLine(const IntPoint&, const IntPoint&);
         void drawEllipse(const IntRect&);
         void drawArc(const IntRect&, float thickness, int startAngle, int angleSpan);
-        void drawConvexPolygon(size_t numPoints, const IntPoint*);
+        void drawConvexPolygon(size_t numPoints, const FloatPoint*, bool shouldAntialias = false);
 
         void fillRect(const IntRect&, const Color&);
         void fillRect(const FloatRect&, const Color&);
index a2e67d1..7aca790 100644 (file)
@@ -317,7 +317,7 @@ void GraphicsContext::drawArc(const IntRect& rect, float thickness, int startAng
     }
 }
 
-void GraphicsContext::drawConvexPolygon(size_t npoints, const IntPoint* points)
+void GraphicsContext::drawConvexPolygon(size_t npoints, const IntPoint* points, bool shouldAntialias)
 {
     if (paintingDisabled())
         return;
@@ -328,7 +328,7 @@ void GraphicsContext::drawConvexPolygon(size_t npoints, const IntPoint* points)
     cairo_t* context = m_data->context;
 
     cairo_save(context);
-    cairo_set_antialias(context, CAIRO_ANTIALIAS_NONE);
+    cairo_set_antialias(context, shouldAntialias ? CAIRO_ANTIALIAS_DEFAULT : CAIRO_ANTIALIAS_NONE);
     cairo_move_to(context, points[0].x(), points[0].y());
     for (size_t i = 1; i < npoints; i++)
         cairo_line_to(context, points[i].x(), points[i].y());
index 150917a..87d211e 100644 (file)
@@ -386,7 +386,7 @@ void GraphicsContext::drawArc(const IntRect& rect, float thickness, int startAng
     CGContextRestoreGState(context);
 }
 
-void GraphicsContext::drawConvexPolygon(size_t npoints, const IntPoint* points)
+void GraphicsContext::drawConvexPolygon(size_t npoints, const FloatPoint* points, bool shouldAntialias)
 {
     if (paintingDisabled())
         return;
@@ -398,7 +398,7 @@ void GraphicsContext::drawConvexPolygon(size_t npoints, const IntPoint* points)
 
     CGContextSaveGState(context);
 
-    CGContextSetShouldAntialias(context, false);
+    CGContextSetShouldAntialias(context, shouldAntialias);
     
     CGContextBeginPath(context);
     CGContextMoveToPoint(context, points[0].x(), points[0].y());
index bf71444..ef46b24 100644 (file)
@@ -3331,19 +3331,23 @@ int RenderBlock::getBaselineOfLastLineBox() const
 
     if (childrenInline()) {
         if (!firstLineBox() && hasLineIfEmpty())
-            return RenderFlow::baselinePosition(true) + borderTop() + paddingTop();
+            return RenderFlow::baselinePosition(true, true) + borderTop() + paddingTop();
         if (m_lastLineBox)
             return m_lastLineBox->yPos() + m_lastLineBox->baseline();
         return -1;
     }
     else {
+        bool haveNormalFlowChild = false;
         for (RenderObject* curr = lastChild(); curr; curr = curr->previousSibling()) {
             if (!curr->isFloatingOrPositioned()) {
+                haveNormalFlowChild = true;
                 int result = curr->getBaselineOfLastLineBox();
                 if (result != -1)
                     return curr->yPos() + result; // Translate to our coordinate space.
             }
         }
+        if (!haveNormalFlowChild && hasLineIfEmpty())
+            return RenderFlow::baselinePosition(true, true) + borderTop() + paddingTop();
     }
 
     return -1;
index 244e8a8..7fbc722 100644 (file)
@@ -278,13 +278,12 @@ public:
 
 protected:
     void newLine();
+    virtual bool hasLineIfEmpty() const;
 
 private:
     Position positionForBox(InlineBox *box, bool start=true) const;
     Position positionForRenderer(RenderObject *renderer, bool start=true) const;
-    
-    bool hasLineIfEmpty() const;
-    
+        
 protected:
     struct FloatingObject {
         enum Type {
index 9485533..cfdcdcc 100644 (file)
@@ -368,6 +368,8 @@ void RenderBox::paintBoxDecorations(PaintInfo& i, int _tx, int _ty)
         // since the root could be inline and wrapped in an anonymous block.
         if (!isBody() || !document()->isHTMLDocument() || document()->documentElement()->renderer()->style()->hasBackground())
             paintBackgrounds(i.p, style()->backgroundColor(), style()->backgroundLayers(), my, mh, _tx, _ty, w, h);
+        if (style()->hasAppearance())
+            theme()->paintDecorations(this, i, IntRect(_tx, _ty, w, h));
     }
     
     // The theme will tell us whether or not we should also paint the CSS border.
index 7d65577..06a6b43 100644 (file)
@@ -50,6 +50,8 @@ public:
     virtual const char* renderName() const { return "RenderButton"; }
 
 protected:
+    virtual bool hasLineIfEmpty() const { return true; }
+
     RenderText* m_buttonText;
     RenderBlock* m_inner;
 };
index e7f7ad7..c30ce58 100644 (file)
@@ -284,7 +284,7 @@ void RenderFlexibleBox::layoutBlock(bool relayoutChildren)
         layoutHorizontalBox(relayoutChildren);
     else
         layoutVerticalBox(relayoutChildren);
-    
+
     int oldHeight = m_height;
     calcHeight();
     if (oldHeight != m_height) {
@@ -418,6 +418,10 @@ void RenderFlexibleBox::layoutHorizontalBox(bool relayoutChildren)
 
             child = iterator.next();
         }
+        
+        if (!iterator.first() && hasLineIfEmpty())
+            m_height += lineHeight(true, true);
+        
         m_height += toAdd;
 
         // Always make sure our overflowheight is at least our height.
@@ -873,6 +877,10 @@ void RenderFlexibleBox::layoutVerticalBox(bool relayoutChildren)
         }
 
         yPos = m_height;
+        
+        if (!iterator.first() && hasLineIfEmpty())
+            m_height += lineHeight(true, true);
+    
         m_height += toAdd;
 
         // Negative margins can cause our height to shrink below our minimal height (border/padding).
@@ -1043,7 +1051,7 @@ void RenderFlexibleBox::layoutVerticalBox(bool relayoutChildren)
     // So that the calcHeight in layoutBlock() knows to relayout positioned objects because of
     // a height change, we revert our height back to the intrinsic height before returning.
     if (heightSpecified)
-        m_height = oldHeight;    
+        m_height = oldHeight; 
 }
 
 void RenderFlexibleBox::placeChild(RenderObject* child, int x, int y)
index 3bdc391..209504c 100644 (file)
@@ -742,8 +742,7 @@ void RenderFlow::paintOutlineForLine(GraphicsContext* p, int tx, int ty, const I
                BSLeft,
                oc, style()->color(), os,
                (lastline.isEmpty() || thisline.x() < lastline.x() || (lastline.right() - 1) <= thisline.x() ? ow : -ow),
-               (nextline.isEmpty() || thisline.x() <= nextline.x() || (nextline.right() - 1) <= thisline.x() ? ow : -ow),
-               true);
+               (nextline.isEmpty() || thisline.x() <= nextline.x() || (nextline.right() - 1) <= thisline.x() ? ow : -ow));
     
     // right edge
     drawBorder(p,
@@ -754,8 +753,7 @@ void RenderFlow::paintOutlineForLine(GraphicsContext* p, int tx, int ty, const I
                BSRight,
                oc, style()->color(), os,
                (lastline.isEmpty() || lastline.right() < thisline.right() || (thisline.right() - 1) <= lastline.x() ? ow : -ow),
-               (nextline.isEmpty() || nextline.right() <= thisline.right() || (thisline.right() - 1) <= nextline.x() ? ow : -ow),
-               true);
+               (nextline.isEmpty() || nextline.right() <= thisline.right() || (thisline.right() - 1) <= nextline.x() ? ow : -ow));
     // upper edge
     if (thisline.x() < lastline.x())
         drawBorder(p,
@@ -765,8 +763,7 @@ void RenderFlow::paintOutlineForLine(GraphicsContext* p, int tx, int ty, const I
                    t ,
                    BSTop, oc, style()->color(), os,
                    ow,
-                   (!lastline.isEmpty() && tx + lastline.x() + 1 < r + ow) ? -ow : ow,
-                   true);
+                   (!lastline.isEmpty() && tx + lastline.x() + 1 < r + ow) ? -ow : ow);
     
     if (lastline.right() < thisline.right())
         drawBorder(p,
@@ -776,8 +773,7 @@ void RenderFlow::paintOutlineForLine(GraphicsContext* p, int tx, int ty, const I
                    t ,
                    BSTop, oc, style()->color(), os,
                    (!lastline.isEmpty() && l - ow < tx + lastline.right()) ? -ow : ow,
-                   ow,
-                   true);
+                   ow);
     
     // lower edge
     if (thisline.x() < nextline.x())
@@ -788,8 +784,7 @@ void RenderFlow::paintOutlineForLine(GraphicsContext* p, int tx, int ty, const I
                    b + ow,
                    BSBottom, oc, style()->color(), os,
                    ow,
-                   (!nextline.isEmpty() && tx + nextline.x() + 1 < r + ow) ? -ow : ow,
-                   true);
+                   (!nextline.isEmpty() && tx + nextline.x() + 1 < r + ow) ? -ow : ow);
     
     if (nextline.right() < thisline.right())
         drawBorder(p,
@@ -799,8 +794,7 @@ void RenderFlow::paintOutlineForLine(GraphicsContext* p, int tx, int ty, const I
                    b + ow,
                    BSBottom, oc, style()->color(), os,
                    (!nextline.isEmpty() && l - ow < tx + nextline.right()) ? -ow : ow,
-                   ow,
-                   true);
+                   ow);
 }
 
 }
index 002c832..85656cd 100644 (file)
@@ -61,6 +61,9 @@ public:
 
     String text();
 
+protected:
+    virtual bool hasLineIfEmpty() const { return true; }
+
 private:
     void createInnerBlock();
     void setText(const String&);
index 9fccfdb..41e1582 100644 (file)
@@ -811,12 +811,19 @@ bool RenderObject::mustRepaintBackgroundOrBorder() const
 }
 
 void RenderObject::drawBorderArc(GraphicsContext* p, int x, int y, float thickness, IntSize radius, int angleStart, 
-    int angleSpan, BorderSide s, Color c, EBorderStyle style, bool firstCorner)
+    int angleSpan, BorderSide s, Color c, const Color& textColor, EBorderStyle style, bool firstCorner)
 {
     if ((style == DOUBLE && ((thickness / 2) < 3)) || 
         ((style == RIDGE || style == GROOVE) && ((thickness / 2) < 2)))
         style = SOLID;
     
+    if (!c.isValid()) {
+        if (style == INSET || style == OUTSET || style == RIDGE || style == GROOVE)
+            c.setRGB(238, 238, 238);
+        else
+            c = textColor;
+    }
+    
     switch (style) {
         case BNONE:
         case BHIDDEN:
@@ -896,7 +903,7 @@ void RenderObject::drawBorderArc(GraphicsContext* p, int x, int y, float thickne
 
 void RenderObject::drawBorder(GraphicsContext* p, int x1, int y1, int x2, int y2,
                               BorderSide s, Color c, const Color& textcolor, EBorderStyle style,
-                              int adjbw1, int adjbw2, bool invalidisInvert)
+                              int adjbw1, int adjbw2)
 {
     int width = (s == BSTop || s == BSBottom ? y2 - y1 : x2 - x1);
 
@@ -904,15 +911,10 @@ void RenderObject::drawBorder(GraphicsContext* p, int x1, int y1, int x2, int y2
         style = SOLID;
 
     if (!c.isValid()) {
-        if (invalidisInvert)
-            // FIXME: The original KHTML did XOR here -- what do we want to do instead?
-            c = Color::white;
-        else {
-            if (style == INSET || style == OUTSET || style == RIDGE || style == GROOVE)
-                c.setRGB(238, 238, 238);
-            else
-                c = textcolor;
-        }
+        if (style == INSET || style == OUTSET || style == RIDGE || style == GROOVE)
+            c.setRGB(238, 238, 238);
+        else
+            c = textcolor;
     }
 
     switch(style)
@@ -1072,31 +1074,31 @@ void RenderObject::drawBorder(GraphicsContext* p, int x1, int y1, int x2, int y2
             p->drawRect(IntRect(x1, y1, x2 - x1, y2 - y1));
             return;
         }
-        IntPoint quad[4];
+        FloatPoint quad[4];
         switch (s) {
             case BSTop:
-                quad[0] = IntPoint(x1 + max(-adjbw1, 0), y1);
-                quad[1] = IntPoint(x1 + max( adjbw1, 0), y2);
-                quad[2] = IntPoint(x2 - max( adjbw2, 0), y2);
-                quad[3] = IntPoint(x2 - max(-adjbw2, 0), y1);
+                quad[0] = FloatPoint(x1 + max(-adjbw1, 0), y1);
+                quad[1] = FloatPoint(x1 + max( adjbw1, 0), y2);
+                quad[2] = FloatPoint(x2 - max( adjbw2, 0), y2);
+                quad[3] = FloatPoint(x2 - max(-adjbw2, 0), y1);
                 break;
             case BSBottom:
-                quad[0] = IntPoint(x1 + max( adjbw1, 0), y1);
-                quad[1] = IntPoint(x1 + max(-adjbw1, 0), y2);
-                quad[2] = IntPoint(x2 - max(-adjbw2, 0), y2);
-                quad[3] = IntPoint(x2 - max( adjbw2, 0), y1);
+                quad[0] = FloatPoint(x1 + max( adjbw1, 0), y1);
+                quad[1] = FloatPoint(x1 + max(-adjbw1, 0), y2);
+                quad[2] = FloatPoint(x2 - max(-adjbw2, 0), y2);
+                quad[3] = FloatPoint(x2 - max( adjbw2, 0), y1);
                 break;
             case BSLeft:
-                quad[0] = IntPoint(x1, y1 + max(-adjbw1, 0));
-                quad[1] = IntPoint(x1, y2 - max(-adjbw2, 0));
-                quad[2] = IntPoint(x2, y2 - max( adjbw2, 0));
-                quad[3] = IntPoint(x2, y1 + max( adjbw1, 0));
+                quad[0] = FloatPoint(x1, y1 + max(-adjbw1, 0));
+                quad[1] = FloatPoint(x1, y2 - max(-adjbw2, 0));
+                quad[2] = FloatPoint(x2, y2 - max( adjbw2, 0));
+                quad[3] = FloatPoint(x2, y1 + max( adjbw1, 0));
                 break;
             case BSRight:
-                quad[0] = IntPoint(x1, y1 + max( adjbw1, 0));
-                quad[1] = IntPoint(x1, y2 - max( adjbw2, 0));
-                quad[2] = IntPoint(x2, y2 - max(-adjbw2, 0));
-                quad[3] = IntPoint(x2, y1 + max(-adjbw1, 0));
+                quad[0] = FloatPoint(x1, y1 + max( adjbw1, 0));
+                quad[1] = FloatPoint(x1, y2 - max( adjbw2, 0));
+                quad[2] = FloatPoint(x2, y2 - max(-adjbw2, 0));
+                quad[3] = FloatPoint(x2, y1 + max(-adjbw1, 0));
                 break;
         }
         p->drawConvexPolygon(4, quad);
@@ -1323,7 +1325,7 @@ void RenderObject::paintBorder(GraphicsContext* p, int _tx, int _ty, int w, int
             
             // Draw upper left arc
             drawBorderArc(p, leftX, leftY, thickness, topLeft, firstAngleStart, firstAngleSpan,
-                BSTop, tc, ts, true);
+                BSTop, tc, style->color(), ts, true);
             if (applyLeftInnerClip)
                 p->restore();
             
@@ -1338,7 +1340,7 @@ void RenderObject::paintBorder(GraphicsContext* p, int _tx, int _ty, int w, int
             
             // Draw upper right arc
             drawBorderArc(p, rightX, leftY, thickness, topRight, secondAngleStart, secondAngleSpan,
-                BSTop, tc, ts, false);
+                BSTop, tc, style->color(), ts, false);
             if (applyRightInnerClip)
                 p->restore();
         }
@@ -1393,7 +1395,7 @@ void RenderObject::paintBorder(GraphicsContext* p, int _tx, int _ty, int w, int
             
             // Draw lower left arc
             drawBorderArc(p, leftX, leftY, thickness, bottomLeft, firstAngleStart, firstAngleSpan,
-                BSBottom, bc, bs, true);
+                BSBottom, bc, style->color(), bs, true);
             if (applyLeftInnerClip)
                 p->restore();
                 
@@ -1408,7 +1410,7 @@ void RenderObject::paintBorder(GraphicsContext* p, int _tx, int _ty, int w, int
             
             // Draw lower right arc
             drawBorderArc(p, rightX, leftY, thickness, bottomRight, secondAngleStart, secondAngleSpan,
-                BSBottom, bc, bs, false);
+                BSBottom, bc, style->color(), bs, false);
             if (applyRightInnerClip)
                 p->restore();
         }
@@ -1456,7 +1458,7 @@ void RenderObject::paintBorder(GraphicsContext* p, int _tx, int _ty, int w, int
             
             // Draw top left arc
             drawBorderArc(p, topX, topY, thickness, topLeft, firstAngleStart, firstAngleSpan,
-                BSLeft, lc, ls, true);
+                BSLeft, lc, style->color(), ls, true);
             if (applyTopInnerClip)
                 p->restore();
             
@@ -1471,7 +1473,7 @@ void RenderObject::paintBorder(GraphicsContext* p, int _tx, int _ty, int w, int
             
             // Draw bottom left arc
             drawBorderArc(p, topX, bottomY, thickness, bottomLeft, secondAngleStart, secondAngleSpan,
-                BSLeft, lc, ls, false);
+                BSLeft, lc, style->color(), ls, false);
             if (applyBottomInnerClip)
                 p->restore();
         }
@@ -1519,7 +1521,7 @@ void RenderObject::paintBorder(GraphicsContext* p, int _tx, int _ty, int w, int
             
             // Draw top right arc
             drawBorderArc(p, topX, topY, thickness, topRight, firstAngleStart, firstAngleSpan,
-                BSRight, rc, rs, true);
+                BSRight, rc, style->color(), rs, true);
             if (applyTopInnerClip)
                 p->restore();
             
@@ -1534,7 +1536,7 @@ void RenderObject::paintBorder(GraphicsContext* p, int _tx, int _ty, int w, int
             
             // Draw bottom right arc
             drawBorderArc(p, topX, bottomY, thickness, bottomRight, secondAngleStart, secondAngleSpan,
-                BSRight, rc, rs, false);
+                BSRight, rc, style->color(), rs, false);
             if (applyBottomInnerClip)
                 p->restore();
         }
@@ -1647,19 +1649,19 @@ void RenderObject::paintOutline(GraphicsContext* p, int _tx, int _ty, int w, int
     
     drawBorder(p, _tx-ow, _ty-ow, _tx, _ty+h+ow, BSLeft,
                Color(oc), style->color(),
-               os, ow, ow, true);
+               os, ow, ow);
 
     drawBorder(p, _tx-ow, _ty-ow, _tx+w+ow, _ty, BSTop,
                Color(oc), style->color(),
-               os, ow, ow, true);
+               os, ow, ow);
 
     drawBorder(p, _tx+w, _ty-ow, _tx+w+ow, _ty+h+ow, BSRight,
                Color(oc), style->color(),
-               os, ow, ow, true);
+               os, ow, ow);
 
     drawBorder(p, _tx-ow, _ty+h, _tx+w+ow, _ty+h+ow, BSBottom,
                Color(oc), style->color(),
-               os, ow, ow, true);
+               os, ow, ow);
 
 }
 
index 51e5276..8702a3c 100644 (file)
@@ -702,9 +702,9 @@ public:
         BSTop, BSBottom, BSLeft, BSRight
     };
     void drawBorderArc(GraphicsContext*, int x, int y, float thickness, IntSize radius, int angleStart,
-        int angleSpan, BorderSide, Color, EBorderStyle, bool firstCorner);
+        int angleSpan, BorderSide, Color, const Color& textcolor, EBorderStyle, bool firstCorner);
     void drawBorder(GraphicsContext*, int x1, int y1, int x2, int y2, BorderSide,
-        Color, const Color& textcolor, EBorderStyle, int adjbw1, int adjbw2, bool invalidisInvert = false);
+        Color, const Color& textcolor, EBorderStyle, int adjbw1, int adjbw2);
 
     virtual void setTable(RenderTable*) {};
 
index 0a049ee..a65d22d 100644 (file)
@@ -35,8 +35,10 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-void RenderTheme::adjustStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e)
+void RenderTheme::adjustStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e, 
+                              bool UAHasAppearance, const BorderData& border, const BackgroundLayer& background, const Color& backgroundColor)
 {
+
     // Force inline and table display styles to be inline-block (except for table- which is block)
     if (style->display() == INLINE || style->display() == INLINE_TABLE || style->display() == TABLE_ROW_GROUP || 
         style->display() == TABLE_HEADER_GROUP || style->display() == TABLE_FOOTER_GROUP ||
@@ -46,6 +48,13 @@ void RenderTheme::adjustStyle(CSSStyleSelector* selector, RenderStyle* style, El
     else if (style->display() == COMPACT || style->display() == RUN_IN || style->display() == LIST_ITEM || style->display() == TABLE)
         style->setDisplay(BLOCK);
     
+    if (UAHasAppearance && theme()->isControlStyled(style, border, background, backgroundColor)) {
+        if (style->appearance() == MenulistAppearance)
+            style->setAppearance(MenulistButtonAppearance);
+        else
+            style->setAppearance(NoAppearance);
+    }
+
     // Call the appropriate style adjustment method based off the appearance value.
     switch (style->appearance()) {
         case CheckboxAppearance:
@@ -62,6 +71,8 @@ void RenderTheme::adjustStyle(CSSStyleSelector* selector, RenderStyle* style, El
             return adjustTextAreaStyle(selector, style, e);
         case MenulistAppearance:
             return adjustMenuListStyle(selector, style, e);
+        case MenulistButtonAppearance:
+            return adjustMenuListButtonStyle(selector, style, e);
         default:
             break;
     }
@@ -92,6 +103,7 @@ bool RenderTheme::paint(RenderObject* o, const RenderObject::PaintInfo& i, const
             return paintButton(o, i, r);
         case MenulistAppearance:
             return paintMenuList(o, i, r);
+        case MenulistButtonAppearance:
         case TextFieldAppearance:
         case TextAreaAppearance:
             return true;
@@ -113,6 +125,32 @@ bool RenderTheme::paintBorderOnly(RenderObject* o, const RenderObject::PaintInfo
             return paintTextField(o, i, r);
         case TextAreaAppearance:
             return paintTextArea(o, i, r);
+        case MenulistButtonAppearance:
+            return true;
+        case CheckboxAppearance:
+        case RadioAppearance:
+        case PushButtonAppearance:
+        case SquareButtonAppearance:
+        case ButtonAppearance:
+        case MenulistAppearance:
+        default:
+            break;
+    }
+    
+    return false;
+}
+
+bool RenderTheme::paintDecorations(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
+{
+    if (i.p->paintingDisabled())
+        return false;
+        
+    // Call the appropriate paint method based off the appearance value.
+    switch (o->style()->appearance()) {
+        case MenulistButtonAppearance:
+            return paintMenuListButton(o, i, r);
+        case TextFieldAppearance:
+        case TextAreaAppearance:
         case CheckboxAppearance:
         case RadioAppearance:
         case PushButtonAppearance:
@@ -173,7 +211,7 @@ bool RenderTheme::isControlContainer(EAppearance appearance) const
 {
     // There are more leaves than this, but we'll patch this function as we add support for
     // more controls.
-    return appearance != CheckboxAppearance && appearance != RadioAppearance && appearance != MenulistAppearance;
+    return appearance != CheckboxAppearance && appearance != RadioAppearance;
 }
 
 bool RenderTheme::isControlStyled(const RenderStyle* style, const BorderData& border, const BackgroundLayer& background,
@@ -316,4 +354,8 @@ void RenderTheme::adjustMenuListStyle(CSSStyleSelector* selector, RenderStyle* s
 {
 }
 
+void RenderTheme::adjustMenuListButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
+{
+}
+
 }
index 3977f38..36834be 100644 (file)
@@ -43,13 +43,15 @@ public:
     // metrics and defaults given the contents of the style.  This includes sophisticated operations like
     // selection of control size based off the font, the disabling of appearance when certain other properties like
     // "border" are set, or if the appearance is not supported by the theme.
-    void adjustStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e);
+    void adjustStyle(CSSStyleSelector*, RenderStyle*, Element*, 
+                    bool UAHasAppearance, const BorderData&, const BackgroundLayer&, const Color& backgroundColor);
     
     // This method is called to paint the widget as a background of the RenderObject.  A widget's foreground, e.g., the
     // text of a button, is always rendered by the engine itself.  The boolean return value indicates
     // whether the CSS border/background should also be painted.
     bool paint(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r);
     bool paintBorderOnly(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r);
+    bool paintDecorations(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r);
 
     // The remaining methods should be implemented by the platform-specific portion of the theme, e.g.,
     // RenderThemeMac.cpp for Mac OS X.
@@ -139,6 +141,8 @@ protected:
     virtual void adjustMenuListStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const;
     virtual bool paintMenuList(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) { return true; }
 
+    virtual void adjustMenuListButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const;
+    virtual bool paintMenuListButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) { return true; }
 };
 
 // Function to obtain the theme.  This is implemented in your platform-specific theme implementation to hand
index e67508a..4f83039 100644 (file)
@@ -83,6 +83,9 @@ protected:
     virtual bool paintMenuList(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
     virtual void adjustMenuListStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
 
+    virtual bool paintMenuListButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
+    virtual void adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
+    
 private:
     IntRect inflateRect(const IntRect&, const IntSize&, const int* margins) const;
 
@@ -119,6 +122,7 @@ private:
     const IntSize* popupButtonSizes() const;
     const int* popupButtonMargins() const;
     const int* popupButtonPadding(NSControlSize) const;
+    void paintMenuListButtonGradients(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
 
 private:
     NSButtonCell* checkbox;
index bd85e63..2f81530 100644 (file)
@@ -144,9 +144,6 @@ bool RenderThemeMac::isControlStyled(const RenderStyle* style, const BorderData&
 {
     if (style->appearance() == TextFieldAppearance || style->appearance() == TextAreaAppearance)
         return style->border() != border;
-    // FIXME: We should allow menulists to be styled- but not until we have a good design for styled popups.
-    if (style->appearance() == MenulistAppearance)
-        return false;
     return RenderTheme::isControlStyled(style, border, background, backgroundColor);
 }
 
@@ -265,8 +262,6 @@ short RenderThemeMac::baselinePosition(const RenderObject* o) const
 {
     if (o->style()->appearance() == CheckboxAppearance || o->style()->appearance() == RadioAppearance)
         return o->marginTop() + o->height() - 2; // The baseline is 2px up from the bottom of the checkbox/radio in AppKit.
-    if (o->style()->appearance() == MenulistAppearance)
-        return o->marginTop() + o->height() - 5; // This is to match AppKit.  There might be a better way to calculate this though.
     return RenderTheme::baselinePosition(o);
 }
 
@@ -678,9 +673,9 @@ const int* RenderThemeMac::popupButtonPadding(NSControlSize size) const
 {
     static const int padding[3][4] = 
     {
-        { 0, 26, 0, 8 },
-        { 0, 23, 0, 8 },
-        { 0, 22, 0, 10 }
+        { 2, 26, 3, 8 },
+        { 2, 23, 3, 8 },
+        { 2, 22, 3, 10 }
     };
     return padding[size];
 }
@@ -709,6 +704,169 @@ bool RenderThemeMac::paintMenuList(RenderObject* o, const RenderObject::PaintInf
     return false;
 }
 
+const float baseFontSize = 11.0;
+const float baseArrowHeight = 4.0;
+const float baseArrowWidth = 5.0;
+const float baseSpaceBetweenArrows = 2.0;
+const int arrowPaddingLeft = 6;
+const int arrowPaddingRight = 6;
+const int paddingBeforeSeparator = 4;
+const int baseBorderRadius = 5;
+const int styledPopupPaddingLeft = 8;
+const int styledPopupPaddingTop = 1;
+const int styledPopupPaddingBottom = 2;
+
+static void TopGradientInterpolate( void *info, float const *inData, float *outData )
+{
+    static float dark[4] = { 1, 1, 1, 0.4 };
+    static float light[4] = { 1, 1, 1, 0.15 };
+    float a = inData[0];
+    int i = 0;
+    for( i = 0; i < 4; i++ )
+        outData[i] = ( 1.0 - a ) * dark[i] + a * light[i];
+}
+
+static void BottomGradientInterpolate( void *info, float const *inData, float *outData )
+{
+    static float dark[4] = { 1, 1, 1, 0 };
+    static float light[4] = { 1, 1, 1, 0.3 };
+    float a = inData[0];
+    int i = 0;
+    for( i = 0; i < 4; i++ )
+        outData[i] = ( 1.0 - a ) * dark[i] + a * light[i];
+}
+
+static void MainGradientInterpolate( void *info, float const *inData, float *outData )
+{
+    static float dark[4] = { 0, 0, 0, 0.15 };
+    static float light[4] = { 0, 0, 0, 0 };
+    float a = inData[0];
+    int i = 0;
+    for( i = 0; i < 4; i++ )
+        outData[i] = ( 1.0 - a ) * dark[i] + a * light[i];
+}
+
+void RenderThemeMac::paintMenuListButtonGradients(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
+{
+    CGContextRef context = i.p->platformContext();
+        
+    i.p->save();
+
+    int radius = o->style()->borderTopLeftRadius().width();
+    
+    CGColorSpaceRef cspace = CGColorSpaceCreateDeviceRGB();    
+
+    IntRect topGradient(r.x(), r.y(), r.width(), r.height() / 2.0);
+    struct CGFunctionCallbacks topCallbacks = { 0, TopGradientInterpolate, NULL };
+    CGFunctionRef topFunction = CGFunctionCreate( NULL, 1, NULL, 4, NULL, &topCallbacks );
+    CGShadingRef topShading = CGShadingCreateAxial( cspace, CGPointMake(topGradient.x(),  topGradient.y()), 
+                            CGPointMake(topGradient.x(), topGradient.bottom()), topFunction, false, false );
+
+    IntRect bottomGradient(r.x() + radius, r.y() + r.height() / 2.0, r.width() - 2 * radius, r.height() / 2.0);
+    struct CGFunctionCallbacks bottomCallbacks = { 0, BottomGradientInterpolate, NULL };
+    CGFunctionRef bottomFunction = CGFunctionCreate( NULL, 1, NULL, 4, NULL, &bottomCallbacks );
+    CGShadingRef bottomShading = CGShadingCreateAxial( cspace, CGPointMake(bottomGradient.x(),  bottomGradient.y()), 
+                            CGPointMake(bottomGradient.x(), bottomGradient.bottom()), bottomFunction, false, false );
+
+    struct CGFunctionCallbacks mainCallbacks = { 0, MainGradientInterpolate, NULL };
+    CGFunctionRef mainFunction = CGFunctionCreate( NULL, 1, NULL, 4, NULL, &mainCallbacks );
+    CGShadingRef mainShading = CGShadingCreateAxial( cspace, CGPointMake(r.x(),  r.y()), 
+                            CGPointMake(r.x(), r.bottom()), mainFunction, false, false );
+
+    CGShadingRef leftShading = CGShadingCreateAxial( cspace, CGPointMake(r.x(),  r.y()), 
+                            CGPointMake(r.x() + radius, r.y()), mainFunction, false, false );                        
+
+    CGShadingRef rightShading = CGShadingCreateAxial( cspace, CGPointMake(r.right(),  r.y()), 
+                            CGPointMake(r.right() - radius, r.y()), mainFunction, false, false );                             
+    i.p->save();
+    CGContextClipToRect(context, r);
+    i.p->addRoundedRectClip(r, 
+        o->style()->borderTopLeftRadius(), o->style()->borderTopRightRadius(),
+        o->style()->borderBottomLeftRadius(), o->style()->borderBottomRightRadius());
+    CGContextDrawShading(context, mainShading);  
+    i.p->restore();      
+
+    i.p->save();
+    CGContextClipToRect(context, topGradient);
+    i.p->addRoundedRectClip(topGradient, 
+        o->style()->borderTopLeftRadius(), o->style()->borderTopRightRadius(),
+        IntSize(), IntSize());
+    CGContextDrawShading(context, topShading);  
+    i.p->restore();      
+
+    i.p->save();
+    CGContextClipToRect(context, bottomGradient);
+    i.p->addRoundedRectClip(bottomGradient, 
+        IntSize(), IntSize(),
+        o->style()->borderBottomLeftRadius(), o->style()->borderBottomRightRadius());
+    CGContextDrawShading(context, bottomShading); 
+    i.p->restore();
+    
+    i.p->save();
+    CGContextClipToRect(context, r);
+    i.p->addRoundedRectClip(r, 
+        o->style()->borderTopLeftRadius(), o->style()->borderTopRightRadius(),
+        o->style()->borderBottomLeftRadius(), o->style()->borderBottomRightRadius());
+    CGContextDrawShading(context, leftShading);
+    CGContextDrawShading(context, rightShading);
+    i.p->restore();
+    
+    i.p->restore();
+}
+
+bool RenderThemeMac::paintMenuListButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
+{        
+    i.p->save();
+        
+    IntRect bounds = IntRect(r.x() + o->style()->borderLeftWidth(), 
+                             r.y() + o->style()->borderTopWidth(), 
+                             r.width() - o->style()->borderLeftWidth() - o->style()->borderRightWidth(),
+                             r.height() - o->style()->borderTopWidth() - o->style()->borderBottomWidth());
+    // Draw the gradients to give the styled popup menu a button appearance
+    paintMenuListButtonGradients(o, i, bounds);
+                
+    float fontScale = o->style()->fontSize() / baseFontSize;
+    float centerY = bounds.y() + bounds.height() / 2.0;
+    float arrowHeight = baseArrowHeight * fontScale;
+    float arrowWidth = baseArrowWidth * fontScale;    
+    float leftEdge = bounds.right() - arrowPaddingRight - arrowWidth;
+    float spaceBetweenArrows = baseSpaceBetweenArrows * fontScale;
+    
+    i.p->setFillColor(o->style()->color());
+    i.p->setPen(Pen(o->style()->color()));
+    
+    FloatPoint arrow1[3];
+    arrow1[0] = FloatPoint(leftEdge, centerY - spaceBetweenArrows / 2.0);
+    arrow1[1] = FloatPoint(leftEdge + arrowWidth, centerY - spaceBetweenArrows / 2.0);
+    arrow1[2] = FloatPoint(leftEdge + arrowWidth / 2.0, centerY - spaceBetweenArrows / 2.0 - arrowHeight);
+
+    // Draw the top arrow
+    i.p->drawConvexPolygon(3, arrow1, true);
+
+    FloatPoint arrow2[3];
+    arrow2[0] = FloatPoint(leftEdge, centerY + spaceBetweenArrows / 2.0);
+    arrow2[1] = FloatPoint(leftEdge + arrowWidth, centerY + spaceBetweenArrows / 2.0);
+    arrow2[2] = FloatPoint(leftEdge + arrowWidth / 2.0, centerY + spaceBetweenArrows / 2.0 + arrowHeight);   
+    
+    // Draw the bottom arrow
+    i.p->drawConvexPolygon(3, arrow2, true); 
+    
+    Color leftSeparatorColor(0, 0, 0, 40);
+    Color rightSeparatorColor(255, 255, 255, 40);
+    int separatorSpace = 2;
+    int leftEdgeOfSeparator = leftEdge - arrowPaddingLeft;
+    
+    // Draw the separator to the left of the arrows
+    i.p->setPen(Pen(leftSeparatorColor));
+    i.p->drawLine(IntPoint(leftEdgeOfSeparator, bounds.y()), IntPoint(leftEdgeOfSeparator, bounds.bottom()));
+
+    i.p->setPen(Pen(rightSeparatorColor));
+    i.p->drawLine(IntPoint(leftEdgeOfSeparator + separatorSpace, bounds.y()), IntPoint(leftEdgeOfSeparator + separatorSpace, bounds.bottom()));
+
+    i.p->restore();
+    return false;
+}
+
 void RenderThemeMac::adjustMenuListStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
 {
     NSControlSize controlSize = controlSizeForFont(style);
@@ -739,6 +897,30 @@ void RenderThemeMac::adjustMenuListStyle(CSSStyleSelector* selector, RenderStyle
     setFontFromControlSize(selector, style, controlSize);
 }
 
+void RenderThemeMac::adjustMenuListButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
+{
+    // Add in intrinsic margins if the font size isn't too small
+    if (style->fontSize() >= 11)
+        addIntrinsicMargins(style, NSRegularControlSize);
+        
+    float fontScale = style->fontSize() / baseFontSize;
+    float arrowWidth = baseArrowWidth * fontScale;
+    
+    // We're overriding the padding to allow for the arrow control.  WinIE doesn't honor padding on selects, so
+    // this shouldn't cause problems on the web.  If IE7 changes that, we should reconsider this.
+    style->setPaddingLeft(Length(styledPopupPaddingLeft, Fixed));
+    style->setPaddingRight(Length(arrowWidth + arrowPaddingLeft + arrowPaddingRight + paddingBeforeSeparator, Fixed));
+    style->setPaddingTop(Length(styledPopupPaddingTop, Fixed));
+    style->setPaddingBottom(Length(styledPopupPaddingBottom, Fixed));
+    
+    if (style->hasBorderRadius()) {
+        style->setBorderRadius(IntSize(baseBorderRadius + fontScale - 1, baseBorderRadius + fontScale - 1));
+    }
+    
+    const int minHeight = 15;
+    style->setMinHeight(Length(minHeight, Fixed));
+}
+
 void RenderThemeMac::setPopupButtonCellState(const RenderObject* o, const IntRect& r)
 {
     if (!popupButton) {
index e61831b..0bbac55 100644 (file)
@@ -1750,7 +1750,7 @@ IntRect RenderBlock::layoutInlineChildren(bool relayoutChildren)
     }
 
     if (!firstLineBox() && hasLineIfEmpty())
-        m_height += lineHeight(true);
+        m_height += lineHeight(true, true);
 
     // See if we have any lines that spill out of our block.  If we do, then we will possibly need to
     // truncate text.