Diff
Modified: trunk/LayoutTests/ChangeLog (234897 => 234898)
--- trunk/LayoutTests/ChangeLog 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/LayoutTests/ChangeLog 2018-08-15 20:42:26 UTC (rev 234898)
@@ -1,3 +1,20 @@
+2018-08-15 Aditya Keerthi <[email protected]>
+
+ [Datalist] Add button to TextFieldInputs with a datalist
+ https://bugs.webkit.org/show_bug.cgi?id=187741
+
+ Reviewed by Tim Horton.
+
+ Added tests to verify appearance of TextFieldInputs with a datalist.
+
+ * fast/forms/datalist/datalist-searchinput-appearance.html: Added.
+ * fast/forms/datalist/datalist-textinput-appearance.html: Added.
+ * platform/ios/TestExpectations:
+ * platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.png: Added.
+ * platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.txt: Added.
+ * platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.png: Added.
+ * platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.txt: Added.
+
2018-08-15 Ryan Haddad <[email protected]>
Unreviewed, rolling out r234870.
Added: trunk/LayoutTests/fast/forms/datalist/datalist-searchinput-appearance.html (0 => 234898)
--- trunk/LayoutTests/fast/forms/datalist/datalist-searchinput-appearance.html (rev 0)
+++ trunk/LayoutTests/fast/forms/datalist/datalist-searchinput-appearance.html 2018-08-15 20:42:26 UTC (rev 234898)
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<body>
+
+<input id="fruit" list="fruits" type="search"/>
+<datalist id="fruits">
+ <option>Apple</option>
+ <option>Orange</option>
+ <option>Pear</option>
+</datalist>
+
+</body>
+</html>
Added: trunk/LayoutTests/fast/forms/datalist/datalist-textinput-appearance.html (0 => 234898)
--- trunk/LayoutTests/fast/forms/datalist/datalist-textinput-appearance.html (rev 0)
+++ trunk/LayoutTests/fast/forms/datalist/datalist-textinput-appearance.html 2018-08-15 20:42:26 UTC (rev 234898)
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<body>
+
+<input id="fruit" list="fruits" type="text"/>
+<datalist id="fruits">
+ <option>Apple</option>
+ <option>Orange</option>
+ <option>Pear</option>
+</datalist>
+
+</body>
+</html>
Modified: trunk/LayoutTests/platform/ios/TestExpectations (234897 => 234898)
--- trunk/LayoutTests/platform/ios/TestExpectations 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/LayoutTests/platform/ios/TestExpectations 2018-08-15 20:42:26 UTC (rev 234898)
@@ -3199,6 +3199,8 @@
# Datalist
webkit.org/b/186714 fast/forms/datalist/datalist-show-hide.html [ Skip ]
webkit.org/b/186714 fast/forms/datalist/datalist-textinput-keydown.html [ Skip ]
+fast/forms/datalist/datalist-searchinput-appearance.html [ Skip ]
+fast/forms/datalist/datalist-textinput-appearance.html [ Skip ]
# We are only accepting GLSL3 for macOS.
webkit.org/b/187982 webgl/2.0.0/conformance2/glsl3 [ Skip ]
Added: trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.png
(Binary files differ)
Index: trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.png
===================================================================
--- trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.png 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.png 2018-08-15 20:42:26 UTC (rev 234898)
Property changes on: trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Added: trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.txt (0 => 234898)
--- trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.txt 2018-08-15 20:42:26 UTC (rev 234898)
@@ -0,0 +1,14 @@
+layer at (0,0) size 800x600
+ RenderView at (0,0) size 800x600
+layer at (0,0) size 800x39
+ RenderBlock {HTML} at (0,0) size 800x39
+ RenderBody {BODY} at (8,8) size 784x23
+ RenderTextControl {INPUT} at (2,2) size 173x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+ RenderFlexibleBox {DIV} at (3,0) size 167x19
+ RenderBlock {DIV} at (0,0) size 8x19
+ RenderBlock {DIV} at (8,3) size 128x13
+ RenderBlock {DIV} at (135,0) size 20x19
+ RenderText {#text} at (0,0) size 0x0
+ RenderText {#text} at (0,0) size 0x0
+layer at (21,13) size 128x13
+ RenderBlock {DIV} at (0,0) size 128x13
Added: trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.png
(Binary files differ)
Index: trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.png
===================================================================
--- trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.png 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.png 2018-08-15 20:42:26 UTC (rev 234898)
Property changes on: trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Added: trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.txt (0 => 234898)
--- trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.txt 2018-08-15 20:42:26 UTC (rev 234898)
@@ -0,0 +1,12 @@
+layer at (0,0) size 800x600
+ RenderView at (0,0) size 800x600
+layer at (0,0) size 800x39
+ RenderBlock {HTML} at (0,0) size 800x39
+ RenderBody {BODY} at (8,8) size 784x23
+ RenderTextControl {INPUT} at (2,2) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+ RenderFlexibleBox {DIV} at (3,3) size 140x13
+ RenderBlock {DIV} at (0,0) size 128x13
+ RenderText {#text} at (0,0) size 0x0
+ RenderText {#text} at (0,0) size 0x0
+layer at (13,13) size 128x13
+ RenderBlock {DIV} at (0,0) size 128x13
Modified: trunk/Source/WebCore/ChangeLog (234897 => 234898)
--- trunk/Source/WebCore/ChangeLog 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/ChangeLog 2018-08-15 20:42:26 UTC (rev 234898)
@@ -1,3 +1,66 @@
+2018-08-15 Aditya Keerthi <[email protected]>
+
+ [Datalist] Add button to TextFieldInputs with a datalist
+ https://bugs.webkit.org/show_bug.cgi?id=187741
+
+ Reviewed by Tim Horton.
+
+ TextFieldInputs that have an associated datalist element should be drawn as
+ combo boxes. However, we cannot use NSComboBox for this control, as NSComboBox
+ is not height-resizable. Furthermore, the input should also be able to contain
+ additional elements, such as the stepper for type=number and the cancel button
+ for type=search. For these reasons, we draw a button at the end of the input,
+ mimicking appearance of a combo box.
+
+ The list-button -webkit-appearance value was added to display the new button.
+
+ Tests: fast/forms/datalist/datalist-searchinput-appearance.html
+ fast/forms/datalist/datalist-textinput-appearance.html
+
+ * Resources/ListButtonArrow.png: Added.
+ * Resources/[email protected]: Added.
+ * WebCore.xcodeproj/project.pbxproj:
+ * css/CSSPrimitiveValueMappings.h:
+ (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
+ * css/CSSProperties.json:
+ * css/CSSValueKeywords.in:
+ * css/html.css:
+ (input::-webkit-list-button):
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::dataListButtonElement const):
+ * html/HTMLInputElement.h:
+ * html/InputType.h:
+ (WebCore::InputType::dataListButtonElement const):
+ * html/TextFieldInputType.cpp:
+ (WebCore::TextFieldInputType::needsContainer const):
+ (WebCore::TextFieldInputType::createShadowSubtree):
+ (WebCore::TextFieldInputType::destroyShadowSubtree):
+ (WebCore::TextFieldInputType::listAttributeTargetChanged):
+ (WebCore::TextFieldInputType::dataListButtonElement const):
+ (WebCore::TextFieldInputType::dataListButtonElementWasClicked):
+ (WebCore::TextFieldInputType::didCloseSuggestions):
+ * html/TextFieldInputType.h:
+ * html/shadow/DataListButtonElement.cpp: Added.
+ (WebCore::DataListButtonElement::create):
+ (WebCore::DataListButtonElement::DataListButtonElement):
+ (WebCore::DataListButtonElement::~DataListButtonElement):
+ (WebCore::DataListButtonElement::defaultEventHandler):
+ * html/shadow/DataListButtonElement.h: Added.
+ * platform/ThemeTypes.h:
+ * rendering/RenderTheme.cpp:
+ (WebCore::RenderTheme::adjustStyle):
+ (WebCore::RenderTheme::adjustListButtonStyle const):
+ * rendering/RenderTheme.h:
+ * rendering/RenderThemeMac.h:
+ * rendering/RenderThemeMac.mm:
+ (-[WebListButtonCell drawWithFrame:inView:]):
+ (WebCore::RenderThemeMac::paintListButtonForInput):
+ (WebCore::RenderThemeMac::adjustListButtonStyle const):
+ (WebCore::RenderThemeMac::paintTextField):
+ (WebCore::RenderThemeMac::paintSearchField):
+ (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
+ (WebCore::RenderThemeMac::listButton const):
+
2018-08-15 Ryan Haddad <[email protected]>
Unreviewed, rolling out r234870.
Modified: trunk/Source/WebCore/PAL/ChangeLog (234897 => 234898)
--- trunk/Source/WebCore/PAL/ChangeLog 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/PAL/ChangeLog 2018-08-15 20:42:26 UTC (rev 234898)
@@ -1,3 +1,12 @@
+2018-08-15 Aditya Keerthi <[email protected]>
+
+ [Datalist] Add button to TextFieldInputs with a datalist
+ https://bugs.webkit.org/show_bug.cgi?id=187741
+
+ Reviewed by Tim Horton.
+
+ * pal/spi/cocoa/NSColorSPI.h: Added NSColorGetUserAccentColor().
+
2018-08-15 Ryan Haddad <[email protected]>
Unreviewed, rolling out r234870.
Modified: trunk/Source/WebCore/PAL/pal/spi/cocoa/NSColorSPI.h (234897 => 234898)
--- trunk/Source/WebCore/PAL/pal/spi/cocoa/NSColorSPI.h 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/PAL/pal/spi/cocoa/NSColorSPI.h 2018-08-15 20:42:26 UTC (rev 234898)
@@ -29,6 +29,10 @@
#import <AppKit/NSColor_Private.h>
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
+#import <AppKit/NSColor_UserAccent.h>
+#endif
+
#else
@interface NSColor ()
@@ -46,4 +50,20 @@
+ (NSColor *)placeholderTextColor;
@end
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
+typedef NS_ENUM(NSInteger, NSUserAccentColor) {
+ NSUserAccentColorRed = 0,
+ NSUserAccentColorOrange,
+ NSUserAccentColorYellow,
+ NSUserAccentColorGreen,
+ NSUserAccentColorBlue,
+ NSUserAccentColorPurple,
+ NSUserAccentColorPink,
+
+ NSUserAccentColorNoColor = -1,
+};
+
+extern "C" NSUserAccentColor NSColorGetUserAccentColor(void);
#endif
+
+#endif
Added: trunk/Source/WebCore/Resources/ListButtonArrow.png
(Binary files differ)
Index: trunk/Source/WebCore/Resources/ListButtonArrow.png
===================================================================
--- trunk/Source/WebCore/Resources/ListButtonArrow.png 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/Resources/ListButtonArrow.png 2018-08-15 20:42:26 UTC (rev 234898)
Property changes on: trunk/Source/WebCore/Resources/ListButtonArrow.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Index: trunk/Source/WebCore/Resources/[email protected]
===================================================================
--- trunk/Source/WebCore/Resources/[email protected] 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/Resources/[email protected] 2018-08-15 20:42:26 UTC (rev 234898)
Property changes on: trunk/Source/WebCore/Resources/[email protected]
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (234897 => 234898)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2018-08-15 20:42:26 UTC (rev 234898)
@@ -4785,9 +4785,13 @@
E4E9B1191810916F003ACCDF /* SimpleLineLayoutResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = E4E9B1181810916F003ACCDF /* SimpleLineLayoutResolver.h */; };
E4E9B11D1814569C003ACCDF /* SimpleLineLayoutFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = E4E9B11C1814569C003ACCDF /* SimpleLineLayoutFunctions.h */; };
E4F9EEF3156DA00700D23E7E /* StyleSheetContents.h in Headers */ = {isa = PBXBuildFile; fileRef = E4F9EEF1156D84C400D23E7E /* StyleSheetContents.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ E59DD4B821098287003C8B47 /* ListButtonArrow.png in Resources */ = {isa = PBXBuildFile; fileRef = E59DD4B721098285003C8B47 /* ListButtonArrow.png */; };
+ E516699120FF9918009D2C27 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = E516698F20FF9916009D2C27 /* [email protected] */; };
E517670320B88C1400D41167 /* DataListSuggestionInformation.h in Headers */ = {isa = PBXBuildFile; fileRef = E517670220B88C1400D41167 /* DataListSuggestionInformation.h */; settings = {ATTRIBUTES = (Private, ); }; };
E52CF54D20A268AC00DADA27 /* DataListSuggestionsClient.h in Headers */ = {isa = PBXBuildFile; fileRef = E52CF54C20A268AC00DADA27 /* DataListSuggestionsClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
E52CF54F20A35A2800DADA27 /* DataListSuggestionPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = E52CF54E20A35A2800DADA27 /* DataListSuggestionPicker.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ E58B45BA20AD07DD00991025 /* DataListButtonElement.h in Headers */ = {isa = PBXBuildFile; fileRef = E58B45B820AD07DD00991025 /* DataListButtonElement.h */; };
+ E58B45BB20AD07DD00991025 /* DataListButtonElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E58B45B920AD07DD00991025 /* DataListButtonElement.cpp */; };
E5BA7D63151437CA00FE1E3F /* LengthFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = E5BA7D62151437CA00FE1E3F /* LengthFunctions.h */; settings = {ATTRIBUTES = (Private, ); }; };
EBF5121C1696496C0056BD25 /* JSTypeConversions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBF5121A1696496C0056BD25 /* JSTypeConversions.cpp */; };
EBF5121D1696496C0056BD25 /* JSTypeConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF5121B1696496C0056BD25 /* JSTypeConversions.h */; };
@@ -14512,6 +14516,8 @@
E4E9B11C1814569C003ACCDF /* SimpleLineLayoutFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleLineLayoutFunctions.h; sourceTree = "<group>"; };
E4F9EEF0156D84C400D23E7E /* StyleSheetContents.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StyleSheetContents.cpp; sourceTree = "<group>"; };
E4F9EEF1156D84C400D23E7E /* StyleSheetContents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleSheetContents.h; sourceTree = "<group>"; };
+ E59DD4B721098285003C8B47 /* ListButtonArrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ListButtonArrow.png; sourceTree = "<group>"; };
+ E516698F20FF9916009D2C27 /* [email protected] */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "[email protected]"; sourceTree = "<group>"; };
E517670220B88C1400D41167 /* DataListSuggestionInformation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataListSuggestionInformation.h; sourceTree = "<group>"; };
E51A81DE17298D7700BFCA61 /* JSPerformance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPerformance.cpp; sourceTree = "<group>"; };
E526AF3E1727F8F200E41781 /* Performance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Performance.cpp; sourceTree = "<group>"; };
@@ -14518,6 +14524,8 @@
E52CF54C20A268AC00DADA27 /* DataListSuggestionsClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataListSuggestionsClient.h; sourceTree = "<group>"; };
E52CF54E20A35A2800DADA27 /* DataListSuggestionPicker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataListSuggestionPicker.h; sourceTree = "<group>"; };
E55F4979151B888000BB67DB /* LengthFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LengthFunctions.cpp; sourceTree = "<group>"; };
+ E58B45B820AD07DD00991025 /* DataListButtonElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataListButtonElement.h; sourceTree = "<group>"; };
+ E58B45B920AD07DD00991025 /* DataListButtonElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DataListButtonElement.cpp; sourceTree = "<group>"; };
E5BA7D62151437CA00FE1E3F /* LengthFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LengthFunctions.h; sourceTree = "<group>"; };
EB081CD81696084400553730 /* TypeConversions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TypeConversions.h; sourceTree = "<group>"; };
EB081CD91696084400553730 /* TypeConversions.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = TypeConversions.idl; sourceTree = "<group>"; };
@@ -16869,6 +16877,8 @@
51C4AA5118B28357007BFE9B /* mac */,
7C1E97251A9F9834007BF0FB /* AutoFillButtonElement.cpp */,
7C1E97261A9F9834007BF0FB /* AutoFillButtonElement.h */,
+ E58B45B920AD07DD00991025 /* DataListButtonElement.cpp */,
+ E58B45B820AD07DD00991025 /* DataListButtonElement.h */,
A7C9ABF61357A3BF00F5503F /* DetailsMarkerControl.cpp */,
A7C9ABF71357A3BF00F5503F /* DetailsMarkerControl.h */,
510192D318B6B9B7007FC7A1 /* ImageControlsRootElement.cpp */,
@@ -19248,6 +19258,8 @@
2D50A4B61CE10E0000198049 /* [email protected] */,
D02B64B014089E56006EFA21 /* DictationPhraseWithAlternativesDot.png */,
D02B64B114089E56006EFA21 /* [email protected] */,
+ E59DD4B721098285003C8B47 /* ListButtonArrow.png */,
+ E516698F20FF9916009D2C27 /* [email protected] */,
BE8C753010681324001E93F5 /* SpellingDot.png */,
01E6C2E31194B2820050821C /* [email protected] */,
1C2417B91992C04100EF9938 /* [email protected] */,
@@ -27717,6 +27729,7 @@
BE23480D18A9871400E4B6E8 /* DataCue.h in Headers */,
C5227DF11C3C6DF100F5ED54 /* DataDetection.h in Headers */,
7C7941E51C56C29300A4C58E /* DataDetectorsCoreSoftLink.h in Headers */,
+ E58B45BA20AD07DD00991025 /* DataListButtonElement.h in Headers */,
E517670320B88C1400D41167 /* DataListSuggestionInformation.h in Headers */,
E52CF54F20A35A2800DADA27 /* DataListSuggestionPicker.h in Headers */,
E52CF54D20A268AC00DADA27 /* DataListSuggestionsClient.h in Headers */,
@@ -31282,6 +31295,8 @@
D02B64B314089E56006EFA21 /* [email protected] in Resources */,
7CC7E3D717208C0F003C5277 /* IDNScriptWhiteList.txt in Resources */,
2D9F0E1314FF1CBF00BA0FF7 /* linearSRGB.icc in Resources */,
+ E59DD4B821098287003C8B47 /* ListButtonArrow.png in Resources */,
+ E516699120FF9918009D2C27 /* [email protected] in Resources */,
BCAD180A131C7A0D00990406 /* Localizable.strings in Resources */,
837A80131E1E127300026B9F /* Localizable.stringsdict in Resources */,
311C08BD18EB7CAF00B65615 /* mediaControlsApple.css in Resources */,
@@ -31524,6 +31539,7 @@
46C696CC1E7205FC00597937 /* CPUMonitor.cpp in Sources */,
1ABA76CA11D20E50004C201C /* CSSPropertyNames.cpp in Sources */,
BE23480C18A9870B00E4B6E8 /* DataCue.cpp in Sources */,
+ E58B45BB20AD07DD00991025 /* DataListButtonElement.cpp in Sources */,
515BE18F1D54F5FB00DD7C68 /* EmptyGamepadProvider.cpp in Sources */,
724ED32C1A3A7E5400F5F13C /* EXTBlendMinMax.cpp in Sources */,
72F1ADA21A3904DC00014E18 /* EXTFragDepth.cpp in Sources */,
Modified: trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h (234897 => 234898)
--- trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h 2018-08-15 20:42:26 UTC (rev 234898)
@@ -626,6 +626,11 @@
m_value.valueID = CSSValueColorWell;
break;
#endif
+#if ENABLE(DATALIST_ELEMENT)
+ case ListButtonPart:
+ m_value.valueID = CSSValueListButton;
+ break;
+#endif
}
}
Modified: trunk/Source/WebCore/css/CSSProperties.json (234897 => 234898)
--- trunk/Source/WebCore/css/CSSProperties.json 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/css/CSSProperties.json 2018-08-15 20:42:26 UTC (rev 234898)
@@ -4218,6 +4218,7 @@
"attachment",
"caps-lock-indicator",
"color-well",
+ "list-button",
"none"
],
"status": {
Modified: trunk/Source/WebCore/css/CSSValueKeywords.in (234897 => 234898)
--- trunk/Source/WebCore/css/CSSValueKeywords.in 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/css/CSSValueKeywords.in 2018-08-15 20:42:26 UTC (rev 234898)
@@ -839,6 +839,9 @@
#if defined(ENABLE_INPUT_TYPE_COLOR) && ENABLE_INPUT_TYPE_COLOR
color-well
#endif
+#if defined(ENABLE_DATALIST_ELEMENT) && ENABLE_DATALIST_ELEMENT
+list-button
+#endif
textarea
#if defined(ENABLE_ATTACHMENT_ELEMENT) && ENABLE_ATTACHMENT_ELEMENT
attachment
Modified: trunk/Source/WebCore/css/html.css (234897 => 234898)
--- trunk/Source/WebCore/css/html.css 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/css/html.css 2018-08-15 20:42:26 UTC (rev 234898)
@@ -616,6 +616,20 @@
-webkit-user-select: none;
}
+#if defined(ENABLE_DATALIST_ELEMENT) && ENABLE_DATALIST_ELEMENT
+input::-webkit-list-button {
+ -webkit-appearance: list-button;
+ display: block;
+ position: relative;
+ cursor: default;
+ align-self: stretch;
+ flex: none;
+ -webkit-user-select: none;
+ width: 16px;
+ height: 100%;
+}
+#endif
+
keygen, select {
border-radius: 5px;
}
Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (234897 => 234898)
--- trunk/Source/WebCore/html/HTMLInputElement.cpp 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp 2018-08-15 20:42:26 UTC (rev 234898)
@@ -241,6 +241,13 @@
return m_inputType->placeholderElement();
}
+#if ENABLE(DATALIST_ELEMENT)
+HTMLElement* HTMLInputElement::dataListButtonElement() const
+{
+ return m_inputType->dataListButtonElement();
+}
+#endif
+
bool HTMLInputElement::shouldAutocomplete() const
{
if (m_autocomplete != Uninitialized)
Modified: trunk/Source/WebCore/html/HTMLInputElement.h (234897 => 234898)
--- trunk/Source/WebCore/html/HTMLInputElement.h 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/html/HTMLInputElement.h 2018-08-15 20:42:26 UTC (rev 234898)
@@ -150,6 +150,9 @@
HTMLElement* sliderTrackElement() const;
HTMLElement* placeholderElement() const final;
WEBCORE_EXPORT HTMLElement* autoFillButtonElement() const;
+#if ENABLE(DATALIST_ELEMENT)
+ HTMLElement* dataListButtonElement() const;
+#endif
bool checked() const { return m_isChecked; }
WEBCORE_EXPORT void setChecked(bool, TextFieldEventBehavior = DispatchNoEvent);
Modified: trunk/Source/WebCore/html/InputType.h (234897 => 234898)
--- trunk/Source/WebCore/html/InputType.h 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/html/InputType.h 2018-08-15 20:42:26 UTC (rev 234898)
@@ -228,6 +228,9 @@
virtual HTMLElement* sliderThumbElement() const { return nullptr; }
virtual HTMLElement* sliderTrackElement() const { return nullptr; }
virtual HTMLElement* placeholderElement() const;
+#if ENABLE(DATALIST_ELEMENT)
+ virtual HTMLElement* dataListButtonElement() const { return nullptr; }
+#endif
// Miscellaneous functions.
Modified: trunk/Source/WebCore/html/TextFieldInputType.cpp (234897 => 234898)
--- trunk/Source/WebCore/html/TextFieldInputType.cpp 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/html/TextFieldInputType.cpp 2018-08-15 20:42:26 UTC (rev 234898)
@@ -285,6 +285,9 @@
bool TextFieldInputType::needsContainer() const
{
+#if ENABLE(DATALIST_ELEMENT)
+ return element()->hasAttributeWithoutSynchronization(listAttr);
+#endif
return false;
}
@@ -343,6 +346,12 @@
}
updateAutoFillButton();
+
+#if ENABLE(DATALIST_ELEMENT)
+ m_dataListDropdownIndicator = DataListButtonElement::create(element()->document(), *this);
+ m_dataListDropdownIndicator->setInlineStyleProperty(CSSPropertyDisplay, CSSValueNone, true);
+ m_container->appendChild(*m_dataListDropdownIndicator);
+#endif
}
HTMLElement* TextFieldInputType::containerElement() const
@@ -392,6 +401,9 @@
m_innerSpinButton = nullptr;
m_capsLockIndicator = nullptr;
m_autoFillButton = nullptr;
+#if ENABLE(DATALIST)
+ m_dataListDropdownIndicator = nullptr;
+#endif
m_container = nullptr;
}
@@ -785,6 +797,25 @@
#if ENABLE(DATALIST_ELEMENT)
+void TextFieldInputType::listAttributeTargetChanged()
+{
+ if (!m_dataListDropdownIndicator)
+ return;
+
+ m_dataListDropdownIndicator->setInlineStyleProperty(CSSPropertyDisplay, element()->list() ? CSSValueBlock : CSSValueNone, true);
+}
+
+HTMLElement* TextFieldInputType::dataListButtonElement() const
+{
+ return m_dataListDropdownIndicator.get();
+}
+
+void TextFieldInputType::dataListButtonElementWasClicked()
+{
+ if (element()->list())
+ displaySuggestions(DataListSuggestionActivationType::IndicatorClicked);
+}
+
IntRect TextFieldInputType::elementRectInRootViewCoordinates() const
{
if (!element()->renderer())
@@ -819,6 +850,8 @@
void TextFieldInputType::didCloseSuggestions()
{
m_suggestionPicker = nullptr;
+ if (element()->renderer())
+ element()->renderer()->repaint();
}
void TextFieldInputType::displaySuggestions(DataListSuggestionActivationType type)
@@ -844,6 +877,11 @@
m_suggestionPicker->close();
}
+bool TextFieldInputType::isPresentingAttachedView() const
+{
+ return !!m_suggestionPicker;
+}
+
#endif
} // namespace WebCore
Modified: trunk/Source/WebCore/html/TextFieldInputType.h (234897 => 234898)
--- trunk/Source/WebCore/html/TextFieldInputType.h 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/html/TextFieldInputType.h 2018-08-15 20:42:26 UTC (rev 234898)
@@ -32,6 +32,7 @@
#pragma once
#include "AutoFillButtonElement.h"
+#include "DataListButtonElement.h"
#include "DataListSuggestionPicker.h"
#include "DataListSuggestionsClient.h"
#include "InputType.h"
@@ -46,7 +47,7 @@
// It supports not only the types for BaseTextInputType but also type=number.
class TextFieldInputType : public InputType, protected SpinButtonElement::SpinButtonOwner, protected AutoFillButtonElement::AutoFillButtonOwner
#if ENABLE(DATALIST_ELEMENT)
- , private DataListSuggestionsClient
+ , private DataListSuggestionsClient, protected DataListButtonElement::DataListButtonOwner
#endif
{
protected:
@@ -64,6 +65,9 @@
HTMLElement* innerSpinButtonElement() const final;
HTMLElement* capsLockIndicatorElement() const final;
HTMLElement* autoFillButtonElement() const final;
+#if ENABLE(DATALIST_ELEMENT)
+ HTMLElement* dataListButtonElement() const final;
+#endif
virtual bool needsContainer() const;
void createShadowSubtree() override;
@@ -120,6 +124,8 @@
void createAutoFillButton(AutoFillButtonType);
#if ENABLE(DATALIST_ELEMENT)
+ bool isPresentingAttachedView() const final;
+ void listAttributeTargetChanged() final;
void displaySuggestions(DataListSuggestionActivationType);
void closeSuggestions();
@@ -129,6 +135,9 @@
void didSelectDataListOption(const String&) final;
void didCloseSuggestions() final;
+ void dataListButtonElementWasClicked() final;
+ RefPtr<DataListButtonElement> m_dataListDropdownIndicator;
+
std::unique_ptr<DataListSuggestionPicker> m_suggestionPicker;
#endif
Added: trunk/Source/WebCore/html/shadow/DataListButtonElement.cpp (0 => 234898)
--- trunk/Source/WebCore/html/shadow/DataListButtonElement.cpp (rev 0)
+++ trunk/Source/WebCore/html/shadow/DataListButtonElement.cpp 2018-08-15 20:42:26 UTC (rev 234898)
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2018 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "DataListButtonElement.h"
+
+#if ENABLE(DATALIST_ELEMENT)
+
+#include "Event.h"
+#include "EventNames.h"
+#include "HTMLNames.h"
+#include "MouseEvent.h"
+#include <wtf/IsoMallocInlines.h>
+
+namespace WebCore {
+
+WTF_MAKE_ISO_ALLOCATED_IMPL(DataListButtonElement);
+
+using namespace HTMLNames;
+
+Ref<DataListButtonElement> DataListButtonElement::create(Document& document, DataListButtonOwner& owner)
+{
+ return adoptRef(*new DataListButtonElement(document, owner));
+}
+
+DataListButtonElement::DataListButtonElement(Document& document, DataListButtonOwner& owner)
+ : HTMLDivElement(divTag, document)
+ , m_owner(owner)
+{
+ setPseudo(AtomicString("-webkit-list-button", AtomicString::ConstructFromLiteral));
+}
+
+DataListButtonElement::~DataListButtonElement() { }
+
+void DataListButtonElement::defaultEventHandler(Event& event)
+{
+ if (!is<MouseEvent>(event)) {
+ if (!event.defaultHandled())
+ HTMLDivElement::defaultEventHandler(event);
+ return;
+ }
+
+ MouseEvent& mouseEvent = downcast<MouseEvent>(event);
+
+ if (mouseEvent.type() == eventNames().clickEvent) {
+ m_owner.dataListButtonElementWasClicked();
+ event.setDefaultHandled();
+ }
+
+ if (!event.defaultHandled())
+ HTMLDivElement::defaultEventHandler(event);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(DATALIST_ELEMENT)
Copied: trunk/Source/WebCore/html/shadow/DataListButtonElement.h (from rev 234897, trunk/Source/WebCore/PAL/pal/spi/cocoa/NSColorSPI.h) (0 => 234898)
--- trunk/Source/WebCore/html/shadow/DataListButtonElement.h (rev 0)
+++ trunk/Source/WebCore/html/shadow/DataListButtonElement.h 2018-08-15 20:42:26 UTC (rev 234898)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2018 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(DATALIST_ELEMENT)
+
+#include "HTMLDivElement.h"
+
+namespace WebCore {
+
+class TextFieldInputType;
+
+class DataListButtonElement final : public HTMLDivElement {
+ WTF_MAKE_ISO_ALLOCATED(DataListButtonElement);
+public:
+ class DataListButtonOwner {
+ public:
+ virtual ~DataListButtonOwner() = default;
+ virtual void dataListButtonElementWasClicked() = 0;
+ };
+
+ ~DataListButtonElement();
+
+ static Ref<DataListButtonElement> create(Document&, DataListButtonOwner&);
+
+private:
+ explicit DataListButtonElement(Document&, DataListButtonOwner&);
+
+ void defaultEventHandler(Event&) override;
+
+ DataListButtonOwner& m_owner;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(DATALIST_ELEMENT)
Modified: trunk/Source/WebCore/platform/ThemeTypes.h (234897 => 234898)
--- trunk/Source/WebCore/platform/ThemeTypes.h 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/platform/ThemeTypes.h 2018-08-15 20:42:26 UTC (rev 234898)
@@ -54,6 +54,9 @@
#if ENABLE(INPUT_TYPE_COLOR)
ColorWellPart,
#endif
+#if ENABLE(DATALIST_ELEMENT)
+ ListButtonPart,
+#endif
TextAreaPart,
#if ENABLE(ATTACHMENT_ELEMENT)
AttachmentPart, BorderlessAttachmentPart,
Modified: trunk/Source/WebCore/rendering/RenderTheme.cpp (234897 => 234898)
--- trunk/Source/WebCore/rendering/RenderTheme.cpp 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/rendering/RenderTheme.cpp 2018-08-15 20:42:26 UTC (rev 234898)
@@ -272,6 +272,10 @@
case BorderlessAttachmentPart:
return adjustAttachmentStyle(styleResolver, style, element);
#endif
+#if ENABLE(DATALIST_ELEMENT)
+ case ListButtonPart:
+ return adjustListButtonStyle(styleResolver, style, element);
+#endif
default:
break;
}
@@ -1031,6 +1035,10 @@
#if ENABLE(DATALIST_ELEMENT)
+void RenderTheme::adjustListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const
+{
+}
+
LayoutUnit RenderTheme::sliderTickSnappingThreshold() const
{
return 0;
Modified: trunk/Source/WebCore/rendering/RenderTheme.h (234897 => 234898)
--- trunk/Source/WebCore/rendering/RenderTheme.h 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/rendering/RenderTheme.h 2018-08-15 20:42:26 UTC (rev 234898)
@@ -339,6 +339,10 @@
virtual bool paintAttachment(const RenderObject&, const PaintInfo&, const IntRect&);
#endif
+#if ENABLE(DATALIST_ELEMENT)
+ virtual void adjustListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
+#endif
+
virtual void adjustProgressBarStyle(StyleResolver&, RenderStyle&, const Element*) const;
virtual bool paintProgressBar(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
Modified: trunk/Source/WebCore/rendering/RenderThemeMac.h (234897 => 234898)
--- trunk/Source/WebCore/rendering/RenderThemeMac.h 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/rendering/RenderThemeMac.h 2018-08-15 20:42:26 UTC (rev 234898)
@@ -155,6 +155,11 @@
void adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle&, const Element*) const final;
bool paintSearchFieldResultsButton(const RenderBox&, const PaintInfo&, const IntRect&) final;
+#if ENABLE(DATALIST_ELEMENT)
+ void paintListButtonForInput(const RenderObject&, GraphicsContext&, const FloatRect&);
+ void adjustListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
+#endif
+
#if ENABLE(VIDEO)
bool supportsClosedCaptioning() const final { return true; }
#endif
@@ -219,6 +224,9 @@
NSSliderCell *sliderThumbHorizontal() const;
NSSliderCell *sliderThumbVertical() const;
NSTextFieldCell *textField() const;
+#if ENABLE(DATALIST_ELEMENT)
+ NSCell *listButton() const;
+#endif
#if ENABLE(METER_ELEMENT)
NSLevelIndicatorStyle levelIndicatorStyleFor(ControlPart) const;
@@ -247,6 +255,9 @@
#if ENABLE(SERVICE_CONTROLS)
mutable RetainPtr<NSServicesRolloverButtonCell> m_servicesRolloverButton;
#endif
+#if ENABLE(DATALIST_ELEMENT)
+ mutable RetainPtr<NSCell> m_listButton;
+#endif
bool m_isSliderThumbHorizontalPressed { false };
bool m_isSliderThumbVerticalPressed { false };
Modified: trunk/Source/WebCore/rendering/RenderThemeMac.mm (234897 => 234898)
--- trunk/Source/WebCore/rendering/RenderThemeMac.mm 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebCore/rendering/RenderThemeMac.mm 2018-08-15 20:42:26 UTC (rev 234898)
@@ -197,6 +197,76 @@
@implementation WebCoreRenderThemeBundle
@end
+#if ENABLE(DATALIST_ELEMENT)
+
+static const CGFloat listButtonWidth = 16.0f;
+static const CGFloat listButtonCornerRadius = 5.0f;
+
+@interface WebListButtonCell : NSCell
+@end
+
+@implementation WebListButtonCell
+- (void)drawWithFrame:(NSRect)cellFrame inView:(__unused NSView *)controlView
+{
+ CGFloat listButtonCornerRadius = 5.0f;
+ NSPoint topLeft = NSMakePoint(NSMinX(cellFrame), NSMinY(cellFrame));
+ NSPoint topRight = NSMakePoint(NSMaxX(cellFrame), NSMinY(cellFrame));
+ NSPoint bottomRight = NSMakePoint(NSMaxX(cellFrame), NSMaxY(cellFrame));
+ NSPoint bottomLeft = NSMakePoint(NSMinX(cellFrame), NSMaxY(cellFrame));
+
+ NSBezierPath *path = [NSBezierPath bezierPath];
+ [path moveToPoint:topLeft];
+
+ [path lineToPoint:NSMakePoint(topRight.x - listButtonCornerRadius, topRight.y)];
+ [path curveToPoint:NSMakePoint(topRight.x, topRight.y + listButtonCornerRadius) controlPoint1:topRight controlPoint2:topRight];
+
+ [path lineToPoint:NSMakePoint(bottomRight.x, bottomRight.y - listButtonCornerRadius)];
+ [path curveToPoint:NSMakePoint(bottomRight.x - listButtonCornerRadius, bottomRight.y) controlPoint1:bottomRight controlPoint2:bottomRight];
+
+ [path lineToPoint:bottomLeft];
+ [path lineToPoint:topLeft];
+
+ if ([self userInterfaceLayoutDirection] == NSUserInterfaceLayoutDirectionRightToLeft) {
+ NSAffineTransform *transform = [NSAffineTransform transform];
+ [transform translateXBy:NSMidX(cellFrame) yBy:NSMidY(cellFrame)];
+ [transform rotateByDegrees:180];
+ [transform translateXBy:-1 * NSMidX(cellFrame) yBy:-1 * NSMidY(cellFrame)];
+ [path transformUsingAffineTransform:transform];
+ }
+
+ // FIXME: Obtain the gradient colors from CoreUI or AppKit
+ RetainPtr<NSGradient> gradient;
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
+ NSUserAccentColor accentColor = NSColorGetUserAccentColor();
+ if (accentColor == NSUserAccentColorRed)
+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(212.0 / 255) green:(122.0 / 255) blue:(117.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(189.0 / 255) green:(34.0 / 255) blue:(23.0 / 255) alpha:1.0]]);
+ else if (accentColor == NSUserAccentColorOrange)
+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(242.0 / 255) green:(185.0 / 255) blue:(113.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(242.0 / 255) green:(145.0 / 255) blue:(17.0 / 255) alpha:1.0]]);
+ else if (accentColor == NSUserAccentColorYellow)
+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(241.0 / 255) green:(212.0 / 255) blue:(119.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(239.0 / 255) green:(193.0 / 255) blue:(27.0 / 255) alpha:1.0]]);
+ else if (accentColor == NSUserAccentColorGreen)
+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(132.0 / 255) green:(186.0 / 255) blue:(120.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(46.0 / 255) green:(145.0 / 255) blue:(30.0 / 255) alpha:1.0]]);
+ else if (accentColor == NSUserAccentColorPurple)
+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(178.0 / 255) green:(128.0 / 255) blue:(175.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(130.0 / 255) green:(43.0 / 255) blue:(123.0 / 255) alpha:1.0]]);
+ else if (accentColor == NSUserAccentColorPink)
+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(225.0 / 255) green:(126.0 / 255) blue:(165.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(211.0 / 255) green:(42.0 / 255) blue:(105.0 / 255) alpha:1.0]]);
+ else if (accentColor == NSUserAccentColorNoColor)
+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(177.0 / 255) green:(177.0 / 255) blue:(182.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(145.0 / 255) green:(145.0 / 255) blue:(150.0 / 255) alpha:1.0]]);
+ else
+#endif
+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(114.0 / 255) green:(164.0 / 255) blue:(243.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(45.0 / 255) green:(117.0 / 255) blue:(246.0 / 255) alpha:1.0]]);
+
+ [gradient drawInBezierPath:path angle:90];
+ if ([self isHighlighted]) {
+ NSColor *overlay = [NSColor colorWithWhite:0 alpha:0.1];
+ [overlay setFill];
+ [path fill];
+ }
+}
+@end
+
+#endif // ENABLE(DATALIST_ELEMENT)
+
namespace WebCore {
using namespace HTMLNames;
@@ -1048,6 +1118,54 @@
return NSControlSizeMini;
}
+#if ENABLE(DATALIST_ELEMENT)
+
+void RenderThemeMac::paintListButtonForInput(const RenderObject& o, GraphicsContext& context, const FloatRect& r)
+{
+ // We can't paint an NSComboBoxCell since they are not height-resizable.
+ const auto& input = downcast<HTMLInputElement>(*(o.generatingNode()));
+ NSCell *listButton = this->listButton();
+
+ NSRect listButtonFrame = NSMakeRect(r.maxX() - listButtonWidth, r.y(), listButtonWidth, r.height());
+ if (!o.style().isLeftToRightDirection()) {
+ listButtonFrame.origin.x = r.x();
+ [listButton setUserInterfaceLayoutDirection:NSUserInterfaceLayoutDirectionRightToLeft];
+ } else
+ [listButton setUserInterfaceLayoutDirection:NSUserInterfaceLayoutDirectionLeftToRight];
+
+ [listButton setHighlighted:input.isPresentingAttachedView()];
+ if (!input.isPresentingAttachedView())
+ updatePressedState(listButton, *(input.dataListButtonElement()->renderer()));
+
+ [listButton drawWithFrame:listButtonFrame inView:documentViewFor(o)];
+ [listButton setControlView:nil];
+
+ RefPtr<Image> image;
+ float imageScale = 1;
+ if (o.document().deviceScaleFactor() >= 2) {
+ image = Image::loadPlatformResource("ListButtonArrow@2x");
+ imageScale = 2;
+ } else
+ image = Image::loadPlatformResource("ListButtonArrow");
+
+ FloatRect imageRect(0, 0, image->width() / imageScale, image->height() / imageScale);
+ imageRect.setX(NSMidX(listButtonFrame) - imageRect.width() / 2);
+ imageRect.setY(NSMidY(listButtonFrame) - imageRect.height() / 2);
+
+ context.drawImage(*image, imageRect);
+}
+
+void RenderThemeMac::adjustListButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+{
+ // Add a margin to place the button at end of the input field.
+ if (style.isLeftToRightDirection())
+ style.setMarginRight(Length(-4, Fixed));
+ else
+ style.setMarginLeft(Length(-4, Fixed));
+}
+
+#endif
+
bool RenderThemeMac::paintTextField(const RenderObject& o, const PaintInfo& paintInfo, const FloatRect& r)
{
LocalCurrentGraphicsContext localContext(paintInfo.context());
@@ -1074,6 +1192,15 @@
[textField setControlView:nil];
+#if ENABLE(DATALIST_ELEMENT)
+ if (!is<HTMLInputElement>(o.generatingNode()))
+ return false;
+
+ const auto& input = downcast<HTMLInputElement>(*(o.generatingNode()));
+ if (input.list())
+ paintListButtonForInput(o, paintInfo.context(), adjustedPaintRect);
+#endif
+
return false;
}
@@ -1831,6 +1958,15 @@
[search setControlView:nil];
[search resetSearchButtonCell];
+#if ENABLE(DATALIST_ELEMENT)
+ if (!is<HTMLInputElement>(o.generatingNode()))
+ return false;
+
+ const auto& input = downcast<HTMLInputElement>(*(o.generatingNode()));
+ if (input.list())
+ paintListButtonForInput(o, paintInfo.context(), FloatRect(unzoomedRect.x(), unzoomedRect.y() + 1, unzoomedRect.width(), unzoomedRect.height() - 2));
+#endif
+
return false;
}
@@ -1933,9 +2069,15 @@
float zoomLevel = box.style().effectiveZoom();
FloatRect localBounds = adjustedCancelButtonRect([search cancelButtonRectForBounds:NSRect(snappedIntRect(inputBox.contentBoxRect()))]);
+
// Adjust position based on the content direction.
float adjustedXPosition;
- if (box.style().direction() == TextDirection::RTL)
+
+ if (is<HTMLInputElement>(*input)) {
+ RenderBox* cancelButtonBox = downcast<RenderBox>(downcast<HTMLInputElement>(*input).cancelButtonElement()->renderer());
+ // The cancel button won't always be the rightmost element.
+ adjustedXPosition = inputBox.contentBoxRect().x() + (cancelButtonBox->absoluteContentBox().x() - inputBox.absoluteContentBox().x());
+ } else if (box.style().direction() == TextDirection::RTL)
adjustedXPosition = inputBox.contentBoxRect().x();
else
adjustedXPosition = inputBox.contentBoxRect().maxX() - localBounds.size().width();
@@ -2270,6 +2412,16 @@
return m_textField.get();
}
+#if ENABLE(DATALIST_ELEMENT)
+NSCell *RenderThemeMac::listButton() const
+{
+ if (!m_listButton)
+ m_listButton = adoptNS([[WebListButtonCell alloc] init]);
+
+ return m_listButton.get();
+}
+#endif
+
String RenderThemeMac::fileListNameForWidth(const FileList* fileList, const FontCascade& font, int width, bool multipleFilesAllowed) const
{
if (width <= 0)
Modified: trunk/Source/WebInspectorUI/ChangeLog (234897 => 234898)
--- trunk/Source/WebInspectorUI/ChangeLog 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebInspectorUI/ChangeLog 2018-08-15 20:42:26 UTC (rev 234898)
@@ -1,3 +1,15 @@
+2018-08-15 Aditya Keerthi <[email protected]>
+
+ [Datalist] Add button to TextFieldInputs with a datalist
+ https://bugs.webkit.org/show_bug.cgi?id=187741
+
+ Reviewed by Tim Horton.
+
+ Add keyword completion for 'list-button'.
+
+ * UserInterface/External/CodeMirror/css.js:
+ * UserInterface/Models/CSSKeywordCompletions.js:
+
2018-08-15 Devin Rousso <[email protected]>
Web Inspector: REGRESSION(r?): the probe sidebar doesn't show up when adding probes
Modified: trunk/Source/WebInspectorUI/UserInterface/External/CodeMirror/css.js (234897 => 234898)
--- trunk/Source/WebInspectorUI/UserInterface/External/CodeMirror/css.js 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebInspectorUI/UserInterface/External/CodeMirror/css.js 2018-08-15 20:42:26 UTC (rev 234898)
@@ -626,7 +626,7 @@
"katakana", "katakana-iroha", "keep-all", "khmer",
"korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal",
"landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten",
- "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem",
+ "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "list-button", "listitem",
"local", "logical", "loud", "lower", "lower-alpha", "lower-armenian",
"lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian",
"lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "match", "matrix", "matrix3d",
Modified: trunk/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js (234897 => 234898)
--- trunk/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js 2018-08-15 20:22:12 UTC (rev 234897)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js 2018-08-15 20:42:26 UTC (rev 234898)
@@ -1040,7 +1040,7 @@
],
/*
"-webkit-appearance": [
- "none", "checkbox", "radio", "push-button", "square-button", "button", "button-bevel", "default-button", "inner-spin-button", "listbox", "listitem", "media-enter-fullscreen-button", "media-exit-fullscreen-button", "media-fullscreen-volume-slider", "media-fullscreen-volume-slider-thumb", "media-mute-button", "media-play-button", "media-overlay-play-button", "media-seek-back-button", "media-seek-forward-button", "media-rewind-button", "media-return-to-realtime-button", "media-toggle-closed-captions-button", "media-slider", "media-sliderthumb", "media-volume-slider-container", "media-volume-slider", "media-volume-sliderthumb", "media-volume-slider-mute-button", "media-controls
-background", "media-controls-fullscreen-background", "media-current-time-display", "media-time-remaining-display", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "meter", "progress-bar", "progress-bar-value", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "caret", "searchfield", "searchfield-decoration", "searchfield-results-decoration", "searchfield-results-button", "searchfield-cancel-button", "snapshotted-plugin-overlay", "textfield", "relevancy-level-indicator", "continuous-capacity-level-indicator", "discrete-capacity-level-indicator", "rating-level-indicator", "textarea", "attachment", "caps-lock-indicator", "color-w
ell"
+ "none", "checkbox", "radio", "push-button", "square-button", "button", "button-bevel", "default-button", "inner-spin-button", "listbox", "listitem", "media-enter-fullscreen-button", "media-exit-fullscreen-button", "media-fullscreen-volume-slider", "media-fullscreen-volume-slider-thumb", "media-mute-button", "media-play-button", "media-overlay-play-button", "media-seek-back-button", "media-seek-forward-button", "media-rewind-button", "media-return-to-realtime-button", "media-toggle-closed-captions-button", "media-slider", "media-sliderthumb", "media-volume-slider-container", "media-volume-slider", "media-volume-sliderthumb", "media-volume-slider-mute-button", "media-controls-
background", "media-controls-fullscreen-background", "media-current-time-display", "media-time-remaining-display", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "meter", "progress-bar", "progress-bar-value", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "caret", "searchfield", "searchfield-decoration", "searchfield-results-decoration", "searchfield-results-button", "searchfield-cancel-button", "snapshotted-plugin-overlay", "textfield", "relevancy-level-indicator", "continuous-capacity-level-indicator", "discrete-capacity-level-indicator", "rating-level-indicator", "textarea", "attachment", "caps-lock-indicator", "color-we
ll", "list-button"
],
*/
"-webkit-animation-trigger": [