Reviewed by Maciej.
authoradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Jul 2006 07:19:24 +0000 (07:19 +0000)
committeradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Jul 2006 07:19:24 +0000 (07:19 +0000)
        Fix for <rdar://problem/4463835> Switch to use new popup menu implementation for <select>

        * css/html4.css: Added style for new selects, and for list boxes.
        * html/HTMLSelectElement.h: (WebCore::HTMLSelectElement::shouldUseMenuList): Removed check for appearance so new popups can be styled.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::setStyle): Removed padding.  This is now set by the theme.
        (WebCore::RenderMenuList::calcMinMaxWidth): Now takes minimum text size into account.
        * rendering/RenderMenuList.h: Removed baselinePosition since we're letting the theme calculate that.

        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::isControlContainer): Added menuList as a ControlContainer,
        so RenderThemeMac will compute its baseline.
        * rendering/RenderTheme.h: (WebCore::RenderTheme::minimumTextSize): Added.
        * rendering/RenderThemeMac.h: Added minimumTextSize, setPopupPaddingFromControlSize, popupButtonSizes, popupButtonMargins, popupButtonPadding.
        Removed sizeOfArrowControl.
        * rendering/RenderThemeMac.mm:
        (WebCore::): Added enum for padding.
        (WebCore::RenderThemeMac::adjustRepaintRect): Now inflates rect to account for control shadow.
        (WebCore::RenderThemeMac::baselinePosition): Now calculates baseline for menulist.
        (WebCore::RenderThemeMac::popupButtonMargins): Tweaked values.
        (WebCore::RenderThemeMac::popupButtonSizes): Added.
        (WebCore::RenderThemeMac::popupButtonPadding): Added, so different padding can be set for different control sizes.
        (WebCore::RenderThemeMac::setPopupPaddingFromControlSize): Added.
        (WebCore::RenderThemeMac::paintMenuList): Now inflates rect to account for control shadow.
        (WebCore::RenderThemeMac::adjustMenuListStyle): Resets border, sets padding, sets control size.
        (WebCore::RenderThemeMac::setPopupButtonCellState): Removed unnecessary class name.
        (WebCore::RenderThemeMac::minimumTextSize): Added.

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

41 files changed:
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/dom/option-properties-expected.txt
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.txt
LayoutTests/fast/forms/option-script-expected.txt
LayoutTests/fast/forms/option-strip-whitespace-expected.txt
LayoutTests/fast/forms/select-remove-option-expected.txt
LayoutTests/fast/forms/select-replace-option-expected.txt
LayoutTests/fast/forms/select-reset-expected.txt
LayoutTests/fast/invalid/014-expected.txt
LayoutTests/fast/parser/document-write-option-expected.txt
LayoutTests/fast/replaced/width100percent-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
WebCore/ChangeLog
WebCore/css/html4.css
WebCore/html/HTMLSelectElement.h
WebCore/rendering/RenderMenuList.cpp
WebCore/rendering/RenderMenuList.h
WebCore/rendering/RenderTheme.cpp
WebCore/rendering/RenderTheme.h
WebCore/rendering/RenderThemeMac.h
WebCore/rendering/RenderThemeMac.mm

index 535bd4b..3341743 100644 (file)
@@ -1,7 +1,7 @@
 EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > BODY > HTML > #document to 5 of DIV > BODY > HTML > #document
 EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document toDOMRange:range from 1 of #text > DIV > BODY > HTML > #document to 2 of SELECT > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document toDOMRange:range from 1 of #text > DIV > BODY > HTML > #document to 0 of SELECT > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
@@ -18,7 +18,10 @@ 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
-        DeprecatedRenderSelect {SELECT} at (2,20) size 226x18
+        RenderMenuList {SELECT} at (2,20) size 226x18
+          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"
         RenderText {#text} at (0,0) size 0x0
 selection start: position 1 of child 0 {#text} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
-selection end:   position 1 of child 1 {BR} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+selection end:   position 0 of child 3 {SELECT} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index feedeea..9c388e2 100644 (file)
@@ -51,6 +51,8 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
@@ -64,7 +66,10 @@ 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: "
-          DeprecatedRenderSelect {SELECT} at (73,2) size 38x18
+          RenderMenuList {SELECT} at (73,2) size 38x18
+            RenderBlock (anonymous) at (8,2) size 7x13
+              RenderText at (0,0) size 7x13
+                text run at (0,0) width 7: "1"
           RenderText {#text} at (113,1) size 66x18
             text run at (113,1) width 66: " the end ..."
 caret: position 1 of child 0 {#text} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 0e031cc..646208a 100644 (file)
@@ -37,15 +37,24 @@ 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*"
-            DeprecatedRenderSelect {SELECT} at (325,68) size 180x18
+            RenderMenuList {SELECT} at (325,68) size 180x18
+              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*"
-            DeprecatedRenderSelect {SELECT} at (325,88) size 180x18
+            RenderMenuList {SELECT} at (325,88) size 180x18
+              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"
-            DeprecatedRenderSelect {SELECT} at (325,108) size 180x18
+            RenderMenuList {SELECT} at (325,108) size 180x18
+              RenderBlock (anonymous) at (8,2) size 149x13
+                RenderText at (0,0) size 76x13
+                  text run at (0,0) width 76: "Number taken"
             RenderBlock {P} at (0,139) size 560x20 [color=#333333]
               RenderText {#text} at (0,2) size 156x15
                 text run at (0,2) width 156: "* indicates a required field"
@@ -55,12 +64,18 @@ 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?"
-            DeprecatedRenderSelect {SELECT} at (325,210) size 180x18
+            RenderMenuList {SELECT} at (325,210) size 180x18
+              RenderBlock (anonymous) at (8,2) size 149x13
+                RenderText at (0,0) size 106x13
+                  text run at (0,0) width 106: "Percentages of time"
             RenderBlock (floating) {SPAN} at (0,230) size 325x20 [color=#333333]
               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?"
-            DeprecatedRenderSelect {SELECT} at (325,230) size 180x18
+            RenderMenuList {SELECT} at (325,230) size 180x18
+              RenderBlock (anonymous) at (8,2) size 149x13
+                RenderText at (0,0) size 44x13
+                  text run at (0,0) width 44: "Reasons"
             RenderBlock (floating) {SPAN} at (0,250) size 325x20 [color=#333333]
               RenderText {#text} at (0,2) size 220x15
                 text run at (0,2) width 220: "Your research is primarily focused on:"
@@ -97,11 +112,17 @@ 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?"
-            DeprecatedRenderSelect {SELECT} at (325,427) size 180x18
+            RenderMenuList {SELECT} at (325,427) size 180x18
+              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?"
-            DeprecatedRenderSelect {SELECT} at (325,447) size 180x18
+            RenderMenuList {SELECT} at (325,447) size 180x18
+              RenderBlock (anonymous) at (8,2) size 149x13
+                RenderText at (0,0) size 91x13
+                  text run at (0,0) width 91: "Level of difficulty"
             RenderBlock (floating) {SPAN} at (0,467) size 325x20 [color=#333333]
               RenderText {#text} at (0,2) size 206x15
                 text run at (0,2) width 206: "Please describe your use of the ISE."
index f956d95..13bf0fe 100644 (file)
@@ -6,4 +6,3 @@ PASS: document.getElementById('sel').options.selectedIndex should be 1 and is.
 PASS: document.getElementById('sel').options[1].selected should be true and is.
 PASS: document.getElementById('sel').options[1].text should be PASS and is.
 
-
index 4cb0d9e..44f5a98 100644 (file)
@@ -6,27 +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]
-              DeprecatedRenderSelect {SELECT} at (3,1) size 51x18
-            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
+      RenderTable {TABLE} at (0,58) size 784x86 [border: (2px outset #808080)]
+        RenderTableSection {TBODY} at (2,2) size 780x82
+          RenderTableRow {TR} at (0,0) size 780x82
+            RenderTableCell {TD} at (0,0) size 102x82 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
+              RenderMenuList {SELECT} at (1,1) size 100x80 [border: (40px solid #FF0000)]
+                RenderBlock (anonymous) at (40,40) size 20x13
+                  RenderText at (0,0) size 20x13
+                    text run at (0,0) width 20: "Foo"
+            RenderTableCell {TD} at (102,40) size 678x2 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
+      RenderBlock {P} at (0,160) 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,200) 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,240) 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
@@ -36,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,284) 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 e0e074b..e537522 100644 (file)
@@ -3,7 +3,10 @@ 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
-      DeprecatedRenderSelect {SELECT} at (2,0) size 59x18
+      RenderMenuList {SELECT} at (2,0) size 59x18
+        RenderBlock (anonymous) at (8,2) size 28x13
+          RenderText at (0,0) size 28x13
+            text run at (0,0) width 28: "Hello"
       RenderBlock (anonymous) at (0,20) size 784x18
         RenderText {#text} at (0,0) size 292x18
           text run at (0,0) width 292: "This text should be *below* the select widget."
index 73e75f4..dcccabc 100644 (file)
@@ -3,8 +3,14 @@ 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
-      DeprecatedRenderSelect {SELECT} at (2,2) size 59x18
+      RenderMenuList {SELECT} at (2,2) size 59x18
+        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: " "
-      DeprecatedRenderSelect {SELECT} at (69,2) size 79x18
+      RenderMenuList {SELECT} at (69,2) size 79x18
+        RenderBlock (anonymous) at (8,2) size 48x13
+          RenderText at (0,0) size 48x13
+            text run at (0,0) width 48: "Goodbye"
       RenderText {#text} at (0,0) size 0x0
index 4a6a0bb..d44d0b8 100644 (file)
@@ -6,5 +6,8 @@ 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
-      DeprecatedRenderSelect {SELECT} at (2,20) size 197x18
+      RenderMenuList {SELECT} at (2,20) size 197x18
+        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\""
       RenderText {#text} at (0,0) size 0x0
index afe23f6..82e57db 100644 (file)
@@ -6,5 +6,8 @@ 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
-      DeprecatedRenderSelect {SELECT} at (2,20) size 309x18
+      RenderMenuList {SELECT} at (2,20) size 309x18
+        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"
       RenderText {#text} at (0,0) size 0x0
index 1b26551..611bd44 100644 (file)
@@ -6,5 +6,8 @@ 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
-      DeprecatedRenderSelect {SELECT} at (2,20) size 338x18
+      RenderMenuList {SELECT} at (2,20) size 338x18
+        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"
       RenderText {#text} at (0,0) size 0x0
index 5e1740a..a25669b 100644 (file)
@@ -6,5 +6,8 @@ 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
-      DeprecatedRenderSelect {SELECT} at (2,20) size 464x18
+      RenderMenuList {SELECT} at (2,20) size 464x18
+        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"
       RenderText {#text} at (0,0) size 0x0
index 4349969..c5138f7 100644 (file)
@@ -6,5 +6,8 @@ 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
-      DeprecatedRenderSelect {SELECT} at (2,20) size 53x18
+      RenderMenuList {SELECT} at (2,20) size 53x18
+        RenderBlock (anonymous) at (8,2) size 22x13
+          RenderText at (0,0) size 22x13
+            text run at (0,0) width 22: "text"
       RenderText {#text} at (0,0) size 0x0
index 350c2f6..0c7a39e 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
-      DeprecatedRenderSelect {SELECT} at (2,38) size 36x18
+      RenderMenuList {SELECT} at (2,38) size 36x18
       RenderText {#text} at (0,0) size 0x0
index 40902c3..20d7d5d 100644 (file)
@@ -25,7 +25,10 @@ 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
-                  DeprecatedRenderSelect {SELECT} at (2,2) size 62x18
+                  RenderMenuList {SELECT} at (2,2) size 62x18
+                    RenderBlock (anonymous) at (8,2) size 31x13
+                      RenderText at (0,0) size 31x13
+                        text run at (0,0) width 31: "menu"
               RenderBlock (anonymous) at (1,23) size 66x0
                 RenderInline {FONT} at (0,0) size 0x0
             RenderTableCell {TD} at (132,4) size 18x19 [r=0 c=2 rs=1 cs=1]
@@ -51,7 +54,10 @@ 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)]
-                DeprecatedRenderSelect {SELECT} at (2,2) size 62x18
+                RenderMenuList {SELECT} at (2,2) size 62x18
+                  RenderBlock (anonymous) at (8,2) size 31x13
+                    RenderText at (0,0) size 31x13
+                      text run at (0,0) width 31: "menu"
             RenderTableCell {TD} at (132,4) size 18x19 [r=0 c=2 rs=1 cs=1]
               RenderBlock {DIV} at (1,1) size 16x17 [border: (2px solid #0000FF)]
                 RenderBlock {INPUT} at (2,2) size 12x13
@@ -71,7 +77,10 @@ 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
-                  DeprecatedRenderSelect {SELECT} at (2,2) size 62x18
+                  RenderMenuList {SELECT} at (2,2) size 62x18
+                    RenderBlock (anonymous) at (8,2) size 31x13
+                      RenderText at (0,0) size 31x13
+                        text run at (0,0) width 31: "menu"
             RenderTableCell {TD} at (132,4) size 18x19 [r=0 c=2 rs=1 cs=1]
               RenderBlock {DIV} at (1,1) size 16x17 [border: (2px solid #0000FF)]
                 RenderInline {FONT} at (0,0) size 12x12
@@ -108,7 +117,10 @@ 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: " "
-          DeprecatedRenderSelect {SELECT} at (107,9) size 62x18
+          RenderMenuList {SELECT} at (107,9) size 62x18
+            RenderBlock (anonymous) at (8,2) size 31x13
+              RenderText at (0,0) size 31x13
+                text run at (0,0) width 31: "menu"
           RenderText {#text} at (171,0) size 6x28
             text run at (171,0) width 6: " "
           RenderBlock {INPUT} at (180,11) size 12x13
@@ -125,7 +137,10 @@ 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: " "
-        DeprecatedRenderSelect {SELECT} at (89,2) size 62x18
+        RenderMenuList {SELECT} at (89,2) size 62x18
+          RenderBlock (anonymous) at (8,2) size 31x13
+            RenderText at (0,0) size 31x13
+              text run at (0,0) width 31: "menu"
         RenderText {#text} at (153,1) size 4x18
           text run at (153,1) width 4: " "
         RenderBlock {INPUT} at (160,4) size 12x13
@@ -143,7 +158,10 @@ 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: " "
-          DeprecatedRenderSelect {SELECT} at (79,2) size 62x18
+          RenderMenuList {SELECT} at (79,2) size 62x18
+            RenderBlock (anonymous) at (8,2) size 31x13
+              RenderText at (0,0) size 31x13
+                text run at (0,0) width 31: "menu"
           RenderText {#text} at (143,5) size 3x13
             text run at (143,5) width 3: " "
           RenderBlock {INPUT} at (149,4) size 12x13
@@ -168,33 +186,51 @@ 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
-          DeprecatedRenderSelect {SELECT} at (2,9) size 36x18
+          RenderMenuList {SELECT} at (2,9) size 36x18
           RenderText {#text} at (40,0) size 6x28
             text run at (40,0) width 6: " "
-          DeprecatedRenderSelect {SELECT} at (48,9) size 36x18
+          RenderMenuList {SELECT} at (48,9) size 36x18
+            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: " "
-          DeprecatedRenderSelect {SELECT} at (94,9) size 85x18
+          RenderMenuList {SELECT} at (94,9) size 85x18
+            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
-        DeprecatedRenderSelect {SELECT} at (2,2) size 36x18
+        RenderMenuList {SELECT} at (2,2) size 36x18
         RenderText {#text} at (40,1) size 4x18
           text run at (40,1) width 4: " "
-        DeprecatedRenderSelect {SELECT} at (46,2) size 36x18
+        RenderMenuList {SELECT} at (46,2) size 36x18
+          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: " "
-        DeprecatedRenderSelect {SELECT} at (90,2) size 85x18
+        RenderMenuList {SELECT} at (90,2) size 85x18
+          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,589) size 769x22
         RenderInline {FONT} at (0,0) size 175x13
           RenderText {#text} at (0,0) size 0x0
-          DeprecatedRenderSelect {SELECT} at (2,2) size 36x18
+          RenderMenuList {SELECT} at (2,2) size 36x18
           RenderText {#text} at (40,5) size 3x13
             text run at (40,5) width 3: " "
-          DeprecatedRenderSelect {SELECT} at (45,2) size 36x18
+          RenderMenuList {SELECT} at (45,2) size 36x18
+            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: " "
-          DeprecatedRenderSelect {SELECT} at (88,2) size 85x18
+          RenderMenuList {SELECT} at (88,2) size 85x18
+            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
 layer at (16,242) size 72x13
   RenderBlock {DIV} at (3,3) size 72x13
index 1e54c86..af32516 100644 (file)
@@ -11,6 +11,9 @@ 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
-      DeprecatedRenderSelect {SELECT} at (2,38) size 55x18
+      RenderMenuList {SELECT} at (2,38) size 55x18
+        RenderBlock (anonymous) at (8,2) size 24x13
+          RenderText at (0,0) size 24x13
+            text run at (0,0) width 24: "Text"
       RenderText {#text} at (0,0) size 0x0
       RenderText {#text} at (0,0) size 0x0
index d1d6139..2649654 100644 (file)
@@ -19,17 +19,26 @@ layer at (0,0) size 800x600
         RenderBR {BR} at (0,142) size 0x18
         RenderText {#text} at (0,161) size 298x18
           text run at (0,161) width 298: "Five Spaces (with leading/trailing whitespace): "
-        DeprecatedRenderSelect {SELECT} at (300,162) size 92x18
+        RenderMenuList {SELECT} at (300,162) size 92x18
+          RenderBlock (anonymous) at (8,2) size 61x13
+            RenderText at (0,0) size 61x13
+              text run at (0,0) width 61: "Five Spaces"
         RenderBR {BR} at (394,175) size 0x0
         RenderBR {BR} at (0,182) size 0x18
         RenderText {#text} at (0,201) size 285x18
           text run at (0,201) width 285: "Five Tabs (with leading/trailing whitespace): "
-        DeprecatedRenderSelect {SELECT} at (287,202) size 81x18
+        RenderMenuList {SELECT} at (287,202) size 81x18
+          RenderBlock (anonymous) at (8,2) size 50x13
+            RenderText at (0,0) size 50x13
+              text run at (0,0) width 50: "Five Tabs"
         RenderBR {BR} at (370,215) size 0x0
         RenderBR {BR} at (0,222) size 0x18
         RenderText {#text} at (0,241) size 126x18
           text run at (0,241) width 126: "Mixed Whitespace: "
-        DeprecatedRenderSelect {SELECT} at (128,242) size 81x18
+        RenderMenuList {SELECT} at (128,242) size 81x18
+          RenderBlock (anonymous) at (8,2) size 50x13
+            RenderText at (0,0) size 50x13
+              text run at (0,0) width 50: "Five Tabs"
         RenderText {#text} at (0,0) size 0x0
         RenderText {#text} at (0,0) size 0x0
         RenderText {#text} at (0,0) size 0x0
index 373a081..b34ccfc 100644 (file)
@@ -1,6 +1,5 @@
 This tests replacing an option using JavaScript. If successful, the options should be "Replacement Option 0", "Option 1", and "Option 2", and selected index should be 0.
 
-
 options[0] is Option 0
 options[1] is Replacement Option 1
 options[2] is Option 2
index 9f7f1b5..0871aa0 100644 (file)
@@ -1,6 +1,5 @@
 This tests reseting of a select box with no selected options using JavaScript. If successful, both times the selected index should be 0.
 
-
 selected index is 0 before and 0 after reset().
 
 
index 1b1b49b..e56a572 100644 (file)
@@ -9,13 +9,19 @@ 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
-        DeprecatedRenderSelect {SELECT} at (2,2) size 39x18
+        RenderMenuList {SELECT} at (2,2) size 39x18
+          RenderBlock (anonymous) at (8,2) size 8x13
+            RenderText at (0,0) size 8x13
+              text run at (0,0) width 8: "A"
         RenderText {#text} at (0,0) size 0x0
       RenderBlock {P} at (0,56) size 784x0
 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
-      DeprecatedRenderSelect {SELECT} at (2,2) size 39x18
+      RenderMenuList {SELECT} at (2,2) size 39x18
+        RenderBlock (anonymous) at (8,2) size 8x13
+          RenderText at (0,0) size 8x13
+            text run at (0,0) width 8: "A"
       RenderText {#text} at (0,0) size 0x0
 layer at (470,42) size 4x4
   RenderBlock (positioned) {P} at (470,42) size 4x4 [border: (2px solid #008000)]
index 61251bd..1f7c611 100644 (file)
@@ -3,5 +3,8 @@ 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
-      DeprecatedRenderSelect {SELECT} at (2,2) size 324x18
+      RenderMenuList {SELECT} at (2,2) size 324x18
+        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."
       RenderText {#text} at (0,0) size 0x0
index e2c4a78..e08e51c 100644 (file)
@@ -167,12 +167,21 @@ 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]
-              DeprecatedRenderSelect {SELECT} at (1,3) size 51x18
-            RenderTableCell {TD} at (55,1) size 2x24 [r=0 c=1 rs=1 cs=1]
-              DeprecatedRenderSelect {SELECT} at (1,3) size 51x18
-            RenderTableCell {TD} at (58,1) size 2x24 [r=0 c=2 rs=1 cs=1]
-              DeprecatedRenderSelect {SELECT} at (1,3) size 59x18
-            RenderTableCell {TD} at (61,3) size 707x20 [r=0 c=3 rs=1 cs=1]
+              RenderMenuList {SELECT} at (1,3) size 51x18
+                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
+                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
+                RenderBlock (anonymous) at (8,2) size 0x13
+                  RenderText at (0,0) size 28x13
+                    text run at (0,0) width 28: "three"
+            RenderTableCell {TD} at (123,3) size 645x20 [r=0 c=3 rs=1 cs=1]
               RenderText {#text} at (1,1) size 4x18
                 text run at (1,1) width 4: " "
       RenderBlock (anonymous) at (0,906) size 769x36
index 881f7c7..d7bb128 100644 (file)
@@ -19,7 +19,10 @@ 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: " "
-                DeprecatedRenderSelect {SELECT} at (182,4) size 80x18
+                RenderMenuList {SELECT} at (182,4) size 80x18
+                  RenderBlock (anonymous) at (8,2) size 49x13
+                    RenderText at (0,0) size 49x13
+                      text run at (0,0) width 49: "Netscape"
                 RenderTextField {INPUT} at (266,3) size 217x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
                 RenderText {#text} at (485,3) size 4x18
                   text run at (485,3) width 4: " "
index 12d8c1a..16ebe84 100644 (file)
@@ -28,7 +28,10 @@ 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]
-                DeprecatedRenderSelect {SELECT} at (3,3) size 262x18
+                RenderMenuList {SELECT} at (3,3) size 262x18
+                  RenderBlock (anonymous) at (8,2) size 231x13
+                    RenderText at (0,0) size 73x13
+                      text run at (0,0) width 73: "a_abortinstall"
                 RenderText {#text} at (0,0) size 0x0
               RenderTableCell {TD} at (580,29) size 88x24 [r=1 c=2 rs=1 cs=1]
                 RenderButton {INPUT} at (3,3) size 82x18 [bgcolor=#C0C0C0]
index 5467837..318dfb0 100644 (file)
@@ -66,7 +66,10 @@ 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? "
-          DeprecatedRenderSelect {SELECT} at (265,3) size 246x18
+          RenderMenuList {SELECT} at (265,3) size 246x18
+            RenderBlock (anonymous) at (8,2) size 215x13
+              RenderText at (0,0) size 140x13
+                text run at (0,0) width 140: "The test renders correctly."
           RenderText {#text} at (513,2) size 4x18
             text run at (513,2) width 4: " "
           RenderInline {LABEL} at (0,0) size 222x18
index cdf8c27..cce81ce 100644 (file)
@@ -184,7 +184,10 @@ 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? "
-          DeprecatedRenderSelect {SELECT} at (265,2) size 473x18
+          RenderMenuList {SELECT} at (265,2) size 473x18
+            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."
           RenderText {#text} at (0,0) size 0x0
           RenderInline {LABEL} at (0,0) size 222x18
             RenderText {#text} at (0,24) size 70x18
index 4917e05..14802eb 100644 (file)
@@ -8,5 +8,8 @@ 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
-                DeprecatedRenderSelect {SELECT} at (2,2) size 54x18
+                RenderMenuList {SELECT} at (2,2) size 54x18
+                  RenderBlock (anonymous) at (8,2) size 23x13
+                    RenderText at (0,0) size 23x13
+                      text run at (0,0) width 23: "Test"
                 RenderText {#text} at (0,0) size 0x0
index 0f434ed..79528a2 100644 (file)
@@ -31,7 +31,10 @@ 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]
-                DeprecatedRenderSelect {SELECT} at (3,3) size 110x18
+                RenderMenuList {SELECT} at (3,3) size 110x18
+                  RenderBlock (anonymous) at (8,2) size 79x13
+                    RenderText at (0,0) size 78x13
+                      text run at (0,0) width 78: "Choose folder "
                 RenderText {#text} at (0,0) size 0x0
                 RenderText {#text} at (0,0) size 0x0
                 RenderText {#text} at (0,0) size 0x0
index 1dbbfce..b82d229 100644 (file)
@@ -16,7 +16,10 @@ 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: " "
-        DeprecatedRenderSelect {SELECT} at (195,3) size 77x18
+        RenderMenuList {SELECT} at (195,3) size 77x18
+          RenderBlock (anonymous) at (8,2) size 46x13
+            RenderText at (0,0) size 32x13
+              text run at (0,0) width 32: "Excite"
         RenderText {#text} at (0,0) size 0x0
       RenderBlock (anonymous) at (0,57) size 784x36
         RenderBR {BR} at (0,0) size 0x18
@@ -24,6 +27,9 @@ 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
-        DeprecatedRenderSelect {SELECT} at (2,2) size 230x18
+        RenderMenuList {SELECT} at (2,2) size 230x18
+          RenderBlock (anonymous) at (8,2) size 199x13
+            RenderText at (0,0) size 57x13
+              text run at (0,0) width 57: "Quick Link"
 layer at (64,31) size 128x13
   RenderBlock {DIV} at (3,3) size 128x13
index 4b5b18e..6674aa3 100644 (file)
@@ -31,7 +31,10 @@ 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]
-                              DeprecatedRenderSelect {SELECT} at (4,4) size 175x18
+                              RenderMenuList {SELECT} at (4,4) size 175x18
+                                RenderBlock (anonymous) at (8,2) size 144x13
+                                  RenderText at (0,0) size 144x13
+                                    text run at (0,0) width 144: "USE THIS JAVASCRIPT HERE"
                               RenderText {#text} at (0,0) size 0x0
             RenderTableCell {TD} at (211,2) size 774x40 [border: (1px solid #C0C0C0)] [r=0 c=1 rs=1 cs=1]
               RenderText {#text} at (2,2) size 770x36
index 133fc65..24f5a56 100644 (file)
@@ -11,7 +11,10 @@ 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
-                DeprecatedRenderSelect {SELECT} at (2,2) size 54x18
+                RenderMenuList {SELECT} at (2,2) size 54x18
+                  RenderBlock (anonymous) at (8,2) size 23x13
+                    RenderText at (0,0) size 23x13
+                      text run at (0,0) width 23: "Test"
                 RenderText {#text} at (0,0) size 0x0
       RenderBlock (anonymous) at (0,66) size 784x18
         RenderText {#text} at (0,0) size 296x18
index ae8ee9d..8eccae1 100644 (file)
@@ -4,7 +4,10 @@ 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
-        DeprecatedRenderSelect {SELECT} at (2,3) size 95x18
+        RenderMenuList {SELECT} at (2,3) size 95x18
+          RenderBlock (anonymous) at (8,2) size 64x13
+            RenderText at (0,0) size 62x13
+              text run at (0,0) width 62: "append cell"
         RenderText {#text} at (99,2) size 52x18
           text run at (99,2) width 52: "   tbody "
         RenderTextField {INPUT} at (153,2) size 43x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
index 3054f67..2815bfa 100644 (file)
@@ -1,3 +1,35 @@
+2006-07-09  Adele Peterson  <adele@apple.com>
+
+        Reviewed by Maciej.
+
+        Fix for <rdar://problem/4463835> Switch to use new popup menu implementation for <select>
+
+        * css/html4.css: Added style for new selects, and for list boxes.
+        * html/HTMLSelectElement.h: (WebCore::HTMLSelectElement::shouldUseMenuList): Removed check for appearance so new popups can be styled.
+   
+        * rendering/RenderMenuList.cpp:
+        (WebCore::RenderMenuList::setStyle): Removed padding.  This is now set by the theme.
+        (WebCore::RenderMenuList::calcMinMaxWidth): Now takes minimum text size into account.
+        * rendering/RenderMenuList.h: Removed baselinePosition since we're letting the theme calculate that.
+
+        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::isControlContainer): Added menuList as a ControlContainer, 
+        so RenderThemeMac will compute its baseline.
+        * rendering/RenderTheme.h: (WebCore::RenderTheme::minimumTextSize): Added.
+        * rendering/RenderThemeMac.h: Added minimumTextSize, setPopupPaddingFromControlSize, popupButtonSizes, popupButtonMargins, popupButtonPadding.
+        Removed sizeOfArrowControl. 
+        * rendering/RenderThemeMac.mm:
+        (WebCore::): Added enum for padding.
+        (WebCore::RenderThemeMac::adjustRepaintRect): Now inflates rect to account for control shadow.
+        (WebCore::RenderThemeMac::baselinePosition): Now calculates baseline for menulist.
+        (WebCore::RenderThemeMac::popupButtonMargins): Tweaked values.
+        (WebCore::RenderThemeMac::popupButtonSizes): Added.
+        (WebCore::RenderThemeMac::popupButtonPadding): Added, so different padding can be set for different control sizes.
+        (WebCore::RenderThemeMac::setPopupPaddingFromControlSize): Added.
+        (WebCore::RenderThemeMac::paintMenuList): Now inflates rect to account for control shadow.
+        (WebCore::RenderThemeMac::adjustMenuListStyle): Resets border, sets padding, sets control size.
+        (WebCore::RenderThemeMac::setPopupButtonCellState): Removed unnecessary class name.
+        (WebCore::RenderThemeMac::minimumTextSize): Added.
+
 2006-07-09  Darin Adler  <darin@apple.com>
 
         - add back "unused code" for plain text fields, still used by <isindex>!
index 321626c..8518bc4 100644 (file)
@@ -399,9 +399,24 @@ input[type="radio"] {
 }
 
 select {
-    // FIXME: Uncomment this when flipping the switch to use the new popup menu implementation
-    // -webkit-appearance: menulist;
+    -webkit-appearance: menulist;
     box-sizing: border-box;
+    -webkit-box-align: center;
+}
+
+select[size],
+select[multiple],
+select[size][multiple] {
+    -webkit-appearance: none;
+    -webkit-box-align: initial;
+    box-sizing: initial;
+}
+select[size="0"],
+select[size="1"] {
+    -webkit-appearance: menulist;
+    box-sizing: border-box;
+    -webkit-box-align: center;
 }
 
 optgroup {
index 94bc09e..e91f434 100644 (file)
@@ -125,7 +125,7 @@ public:
 
 private:
     void recalcListItems();
-    bool shouldUseMenuList(RenderStyle* style) const { return !m_multiple && m_size <= 1 && style->appearance() == MenulistAppearance; }
+    bool shouldUseMenuList(RenderStyle* style) const { return !m_multiple && m_size <= 1; }
 
     mutable Vector<HTMLElement*> m_listItems;
     int m_minwidth;
index 7b6f74f..5f3dd22 100644 (file)
@@ -75,8 +75,6 @@ void RenderMenuList::removeChild(RenderObject* oldChild)
 
 void RenderMenuList::setStyle(RenderStyle* style)
 {
-    style->setPaddingLeft(Length(10, Fixed));
-    style->setPaddingRight(Length(8, Fixed));
     RenderBlock::setStyle(style);
     if (m_buttonText)
         m_buttonText->setStyle(style);
@@ -160,12 +158,6 @@ void RenderMenuList::paintObject(PaintInfo& i, int _tx, int _ty)
         i.p->restore();
 }
 
-
-short RenderMenuList::baselinePosition(bool f, bool b) const
-{
-    return RenderFlexibleBox::baselinePosition(f, b);
-}
-
 void RenderMenuList::calcMinMaxWidth()
 {
     if (m_optionsChanged)
@@ -177,7 +169,7 @@ void RenderMenuList::calcMinMaxWidth()
     if (style()->width().isFixed() && style()->width().value() > 0)
         m_minWidth = m_maxWidth = calcContentBoxWidth(style()->width().value());
     else
-        m_maxWidth = (int)ceilf(m_longestWidth);
+        m_maxWidth = max((int)ceilf(m_longestWidth), theme()->minimumTextSize(style()));
     
     if (style()->minWidth().isFixed() && style()->minWidth().value() > 0) {
         m_maxWidth = max(m_maxWidth, calcContentBoxWidth(style()->minWidth().value()));
@@ -192,7 +184,7 @@ void RenderMenuList::calcMinMaxWidth()
         m_minWidth = min(m_minWidth, calcContentBoxWidth(style()->maxWidth().value()));
     }
 
-    int toAdd = paddingLeft() + paddingRight() + borderLeft() + borderRight() + theme()->sizeOfArrowControl(style());
+    int toAdd = paddingLeft() + paddingRight() + borderLeft() + borderRight();
     m_minWidth += toAdd;
     m_maxWidth += toAdd;
 
index 5fb3262..df41f18 100644 (file)
@@ -48,7 +48,7 @@ public:
 
     virtual const char* renderName() const { return "RenderMenuList"; }
     
-    short baselinePosition(bool f, bool b) const;
+    RenderStyle* createInnerStyle(RenderStyle*);
     virtual void calcMinMaxWidth();
     virtual void layout();
 
index 472fc45..0a049ee 100644 (file)
@@ -173,7 +173,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;
+    return appearance != CheckboxAppearance && appearance != RadioAppearance && appearance != MenulistAppearance;
 }
 
 bool RenderTheme::isControlStyled(const RenderStyle* style, const BorderData& border, const BackgroundLayer& background,
index d689a53..47da0a0 100644 (file)
@@ -100,7 +100,7 @@ public:
     virtual Color platformActiveSelectionForegroundColor() const;
     virtual Color platformInactiveSelectionForegroundColor() const;
 
-    virtual int sizeOfArrowControl(RenderStyle*) const { return 0; }
+    virtual int minimumTextSize(RenderStyle*) const { return 0; }
     virtual RenderPopupMenu* createPopupMenu(RenderArena*, Document*) = 0;
 
 protected:
index 93e83cf..b04850e 100644 (file)
@@ -56,7 +56,7 @@ public:
     virtual Color platformActiveSelectionBackgroundColor() const;
     virtual Color platformInactiveSelectionBackgroundColor() const;
     
-    virtual int sizeOfArrowControl(RenderStyle*) const;
+    virtual int minimumTextSize(RenderStyle*) const;
     virtual RenderPopupMenu* createPopupMenu(RenderArena*, Document*);
 
 protected:
@@ -111,7 +111,11 @@ private:
     const int* buttonMargins() const;
     void setButtonCellState(const RenderObject*, const IntRect&);
     
+    void setPopupPaddingFromControlSize(RenderStyle*, NSControlSize) const;
     void setPopupButtonCellState(const RenderObject*, const IntRect&);
+    const IntSize* popupButtonSizes() const;
+    const int* popupButtonMargins() const;
+    const int* popupButtonPadding(NSControlSize) const;
 
 private:
     NSButtonCell* checkbox;
index 62560f3..931c9f8 100644 (file)
@@ -42,6 +42,13 @@ enum {
     bottomMargin,
     leftMargin
 };
+
+enum {
+    topPadding,
+    rightPadding,
+    bottomPadding,
+    leftPadding
+};
     
 RenderTheme* theme()
 {
@@ -120,6 +127,7 @@ void RenderThemeMac::adjustRepaintRect(const RenderObject* o, IntRect& r)
         }
         case MenulistAppearance: {
             setPopupButtonCellState(o, r); 
+            r = inflateRect(r, popupButtonSizes()[[popupButton controlSize]], popupButtonMargins());
             break;
         }
         default:
@@ -191,6 +199,8 @@ 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);
 }
 
@@ -328,7 +338,7 @@ void RenderThemeMac::setCheckboxCellState(const RenderObject* o, const IntRect&
     }
     
     // Set the control size based off the rectangle we're painting into.
-    setControlSize(checkbox, checkboxSizes(), IntSize(r.width(), r.height()));
+    setControlSize(checkbox, checkboxSizes(), r.size());
     
     // Update the various states we respond to.
     updateCheckedState(checkbox, o);
@@ -387,7 +397,7 @@ void RenderThemeMac::setRadioCellState(const RenderObject* o, const IntRect& r)
     }
     
     // Set the control size based off the rectangle we're painting into.
-    setControlSize(radio, radioSizes(), IntSize(r.width(), r.height()));
+    setControlSize(radio, radioSizes(), r.size());
     
     // Update the various states we respond to.
     updateCheckedState(radio, o);
@@ -512,7 +522,7 @@ void RenderThemeMac::setButtonCellState(const RenderObject* o, const IntRect& r)
     } else if ([button bezelStyle] != NSRoundedBezelStyle)
         [button setBezelStyle:NSRoundedBezelStyle];
             
-    setControlSize(button, buttonSizes(), IntSize(r.width(), r.height()));
+    setControlSize(button, buttonSizes(), r.size());
     
     // Update the various states we respond to.
     updateCheckedState(button, o);
@@ -581,11 +591,54 @@ void RenderThemeMac::adjustTextAreaStyle(CSSStyleSelector* selector, RenderStyle
         addIntrinsicMargins(style, NSRegularControlSize);
 }
 
+const int* RenderThemeMac::popupButtonMargins() const
+{
+    static const int margins[3][4] = 
+    {
+        { 0, 3, 1, 3 },
+        { 0, 3, 2, 3 },
+        { 0, 1, 0, 1 }
+    };
+    return margins[[popupButton controlSize]];
+}
+
+const IntSize* RenderThemeMac::popupButtonSizes() const
+{
+    static const IntSize sizes[3] = { IntSize(0, 21), IntSize(0, 18), IntSize(0, 15) };
+    return sizes;
+}
+
+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 }
+    };
+    return padding[size];
+}
+
+void RenderThemeMac::setPopupPaddingFromControlSize(RenderStyle* style, NSControlSize size) const
+{
+    style->setPaddingLeft(Length(popupButtonPadding(size)[leftPadding], Fixed));
+    style->setPaddingRight(Length(popupButtonPadding(size)[rightPadding], Fixed));
+    style->setPaddingTop(Length(popupButtonPadding(size)[topPadding], Fixed));
+    style->setPaddingBottom(Length(popupButtonPadding(size)[bottomPadding], Fixed));
+}
+
 bool RenderThemeMac::paintMenuList(RenderObject* o, const RenderObject::PaintInfo&, const IntRect& r)
 {
     setPopupButtonCellState(o, r);
     
-    [popupButton drawWithFrame:r inView:o->view()->frameView()->getDocumentView()];
+    IntRect inflatedRect = r;
+    IntSize size = popupButtonSizes()[[popupButton controlSize]];
+    size.setWidth(r.width());
+
+    // Now inflate it to account for the shadow.
+    inflatedRect = inflateRect(inflatedRect, size, popupButtonMargins());
+        
+    [popupButton drawWithFrame:inflatedRect inView:o->view()->frameView()->getDocumentView()];
     [popupButton setControlView:nil];
     return false;
 }
@@ -593,20 +646,23 @@ bool RenderThemeMac::paintMenuList(RenderObject* o, const RenderObject::PaintInf
 void RenderThemeMac::adjustMenuListStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
 {
     NSControlSize controlSize = controlSizeForFont(style);
-    
+
     // Add in intrinsic margins
     addIntrinsicMargins(style, controlSize);
 
+    style->resetBorder();
+    
     // Height is locked to auto.
     style->setHeight(Length(Auto));
     
     // White-space is locked to pre
     style->setWhiteSpace(PRE);
 
-    if (controlSize != NSMiniControlSize) {
-        style->setPaddingTop(Length(2, Fixed));
-        style->setPaddingBottom(Length(5, Fixed));
-    }
+    // Set the button's vertical size.
+    setButtonSize(style);
+
+    // Add in the padding that we'd like to use.
+    setPopupPaddingFromControlSize(style, controlSize);
 
     // Our font is locked to the appropriate system font size for the control.  To clarify, we first use the CSS-specified font to figure out
     // a reasonable control size, but once that control size is determined, we throw that font away and use the appropriate
@@ -622,7 +678,7 @@ void RenderThemeMac::setPopupButtonCellState(const RenderObject* o, const IntRec
     }
 
     // Set the control size based off the rectangle we're painting into.
-    RenderThemeMac::setControlSize(popupButton, buttonSizes(), IntSize(r.width(), r.height()));
+    setControlSize(popupButton, popupButtonSizes(), r.size());
 
     // Update the various states we respond to.
     updateCheckedState(popupButton, o);
@@ -636,18 +692,13 @@ RenderPopupMenu* RenderThemeMac::createPopupMenu(RenderArena* arena, Document* d
     return new (arena) RenderPopupMenuMac(doc);
 }
 
-int RenderThemeMac::sizeOfArrowControl(RenderStyle* style) const
+int RenderThemeMac::minimumTextSize(RenderStyle* style) const
 {
-    NSControlSize controlSize = controlSizeForFont(style);
-    
-    switch (controlSize) {
-    case NSRegularControlSize:
-        return 26;
-    case NSSmallControlSize:
-        return 20;
-    case NSMiniControlSize:
-        return 16;
-    }
+    int fontSize = style->fontSize();
+    if (fontSize >= 13)
+        return 9;
+    if (fontSize >= 11)
+        return 5;
     return 0;
 }