Extended Color Cleanup: Use the name SimpleColor consistently
authorweinig@apple.com <weinig@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 25 May 2020 18:30:16 +0000 (18:30 +0000)
committerweinig@apple.com <weinig@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 25 May 2020 18:30:16 +0000 (18:30 +0000)
https://bugs.webkit.org/show_bug.cgi?id=212337

Reviewed by Anders Carlsson.
Source/WebCore:

- Removes RGBA32 type alias, updating all remaining users of it.
- Renames functions that take/return SimpleColor to use the name
  SimpleColor rather than RGB (e.g. makeRGBA -> makeSimpleColor)
- Moves hex color parsing from Color to SimpleColor, as that is
  the type it returns. Also took the opportunity to make it return
  an Optional<SimpleColor> instead of using a bool/out parameter.
- Move Color::compositionFill to editing/CompositionHighlight.h
  It makes no real sense to keep it in Color.h
- Replaces rgb() function in Color with asSimpleColor() for
  symmetry with asExtended().
- Replaced std::max(a, std::min(value, b)) with std::clamp(value, a, b)
  for clarity.

* css/parser/CSSParserFastPaths.cpp:
(WebCore::fastParseColorInternal):
(WebCore::CSSParserFastPaths::parseColor):
* css/parser/CSSPropertyParserHelpers.cpp:
(WebCore::CSSPropertyParserHelpers::parseRGBParameters):
(WebCore::CSSPropertyParserHelpers::parseHSLParameters):
(WebCore::CSSPropertyParserHelpers::parseHexColor):
* editing/CompositionHighlight.h:
* editing/cocoa/DataDetection.mm:
(WebCore::DataDetection::detectContentInRange):
* html/ColorInputType.cpp:
(WebCore::parseSimpleColorValue):
* html/HTMLElement.cpp:
(WebCore::parseColorStringWithCrazyLegacyRules):
* platform/adwaita/ScrollbarThemeAdwaita.cpp:
* platform/adwaita/ThemeAdwaita.cpp:
(WebCore::ThemeAdwaita::activeSelectionForegroundColor const):
(WebCore::ThemeAdwaita::activeSelectionBackgroundColor const):
(WebCore::ThemeAdwaita::inactiveSelectionForegroundColor const):
* platform/graphics/Color.cpp:
(WebCore::differenceSquared):
(WebCore::Color::Color):
(WebCore::Color::operator=):
(WebCore::Color::serialized const):
(WebCore::Color::cssText const):
(WebCore::Color::nameForRenderTreeAsText const):
(WebCore::Color::light const):
(WebCore::Color::dark const):
(WebCore::Color::blend const):
(WebCore::Color::blendWithWhite const):
(WebCore::Color::colorWithAlpha const):
(WebCore::Color::colorWithAlphaUsingAlternativeRounding const):
(WebCore::Color::invertedColorWithAlpha const):
(WebCore::Color::colorSpaceAndComponents const):
(WebCore::Color::toSRGBASimpleColorLossy const):
(WebCore::blend):
(WebCore::Color::tagAsValid):
(WebCore::parseHexColorInternal): Deleted.
(WebCore::Color::parseHexColor): Deleted.
(WebCore::Color::asExtended const): Deleted.
* platform/graphics/Color.h:
(WebCore::Color::Color):
(WebCore::Color::isHashTableDeletedValue const):
(WebCore::Color::isValid const):
(WebCore::Color::isOpaque const):
(WebCore::Color::isVisible const):
(WebCore::Color::alpha const):
(WebCore::Color::alphaAsFloat const):
(WebCore::Color::isSemantic const):
(WebCore::Color::isExtended const):
(WebCore::Color::setIsSemantic):
(WebCore::operator==):
(WebCore::equalIgnoringSemanticColor):
(WebCore::Color::hash const):
(WebCore::Color::asExtended const):
(WebCore::Color::asSimpleColor const):
(WebCore::Color::setSimpleColor):
(WebCore::Color::isBlackColor):
(WebCore::Color::isWhiteColor):
(WebCore::Color::encode const):
(WebCore::Color::decode):
(WebCore::Color::setRGB): Deleted.
(WebCore::Color::rgb const): Deleted.
* platform/graphics/ColorUtilities.h:
(WebCore::clampedColorComponent):
* platform/graphics/ImageBackingStore.h:
(WebCore::ImageBackingStore::blendPixel):
(WebCore::ImageBackingStore::pixelValue const):
* platform/graphics/SimpleColor.cpp:
(WebCore::makePremultipliedSimpleColor):
(WebCore::makeUnpremultipliedSimpleColor):
(WebCore::makeSimpleColorFromFloats):
(WebCore::makeSimpleColorFromHSLA):
(WebCore::makeSimpleColorFromCMYKA):
(WebCore::parseHexColorInternal):
(WebCore::SimpleColor::parseHexColor):
(WebCore::makePremultipliedRGBA): Deleted.
(WebCore::makeUnPremultipliedRGBA): Deleted.
(WebCore::makeRGBA32FromFloats): Deleted.
(WebCore::makeRGBAFromHSLA): Deleted.
(WebCore::makeRGBAFromCMYKA): Deleted.
* platform/graphics/SimpleColor.h:
(WebCore::roundAndClampColorChannel):
(WebCore::colorFloatToSimpleColorByte):
(WebCore::makeSimpleColor):
(WebCore::colorFloatToRGBAByte): Deleted.
(WebCore::makeRGB): Deleted.
(WebCore::makeRGBA): Deleted.
* platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
(WebCore::makeSimpleColorFromARGBCFArray):
(WebCore::InbandTextTrackPrivateAVF::processCueAttributes):
(WebCore::makeRGBA32FromARGBCFArray): Deleted.
* platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp:
(WebCore::ImageBufferCairoImageSurfaceBackend::platformTransformColorSpace):
* platform/graphics/cairo/NativeImageCairo.cpp:
(WebCore::nativeImageSinglePixelSolidColor):
* platform/graphics/cg/ColorCG.cpp:
(WebCore::makeSimpleColorFromCGColor):
(WebCore::Color::Color):
(WebCore::cachedCGColor):
(WebCore::makeRGBAFromCGColor): Deleted.
* platform/graphics/gtk/ColorGtk.cpp:
(WebCore::Color::Color):
* platform/graphics/mac/ColorMac.mm:
(WebCore::makeSimpleColorFromNSColor):
(WebCore::colorFromNSColor):
(WebCore::semanticColorFromNSColor):
(WebCore::makeRGBAFromNSColor): Deleted.
* platform/graphics/win/ColorDirect2D.cpp:
(WebCore::Color::Color):
* platform/graphics/win/GraphicsContextCGWin.cpp:
(WebCore::GraphicsContext::drawDotsForDocumentMarker):
* platform/graphics/win/PlatformContextDirect2D.cpp:
(WebCore::PlatformContextDirect2D::brushWithColor):
* platform/ios/ColorIOS.mm:
(WebCore::colorFromUIColor):
* rendering/InlineTextBox.cpp:
(WebCore::InlineTextBox::paintCompositionBackground):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::paintResizer):
* rendering/RenderLayerBacking.cpp:
(WebCore::patternForTouchAction):
(WebCore::patternForEventListenerRegionType):
* rendering/RenderThemeAdwaita.cpp:
* rendering/RenderThemeMac.mm:
(WebCore::menuBackgroundColor):

Source/WebKit:

* UIProcess/ios/WKContentViewInteraction.mm:
(compositionHighlights):
Update for new name of CompositionHighlight::defaultCompositionFillColor.

Tools:

* TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
(TestWebKitAPI::TEST):
Update test for rename of makeRGBAFromHSLA to makeSimpleColorFromHSLA.

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

34 files changed:
Source/WebCore/ChangeLog
Source/WebCore/css/parser/CSSParserFastPaths.cpp
Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp
Source/WebCore/editing/CompositionHighlight.h
Source/WebCore/editing/cocoa/DataDetection.mm
Source/WebCore/html/ColorInputType.cpp
Source/WebCore/html/HTMLElement.cpp
Source/WebCore/platform/adwaita/ScrollbarThemeAdwaita.cpp
Source/WebCore/platform/adwaita/ThemeAdwaita.cpp
Source/WebCore/platform/graphics/Color.cpp
Source/WebCore/platform/graphics/Color.h
Source/WebCore/platform/graphics/ColorUtilities.h
Source/WebCore/platform/graphics/ImageBackingStore.h
Source/WebCore/platform/graphics/SimpleColor.cpp
Source/WebCore/platform/graphics/SimpleColor.h
Source/WebCore/platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp
Source/WebCore/platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp
Source/WebCore/platform/graphics/cairo/NativeImageCairo.cpp
Source/WebCore/platform/graphics/cg/ColorCG.cpp
Source/WebCore/platform/graphics/gtk/ColorGtk.cpp
Source/WebCore/platform/graphics/mac/ColorMac.mm
Source/WebCore/platform/graphics/win/ColorDirect2D.cpp
Source/WebCore/platform/graphics/win/GraphicsContextCGWin.cpp
Source/WebCore/platform/graphics/win/PlatformContextDirect2D.cpp
Source/WebCore/platform/ios/ColorIOS.mm
Source/WebCore/rendering/InlineTextBox.cpp
Source/WebCore/rendering/RenderLayer.cpp
Source/WebCore/rendering/RenderLayerBacking.cpp
Source/WebCore/rendering/RenderThemeAdwaita.cpp
Source/WebCore/rendering/RenderThemeMac.mm
Source/WebKit/ChangeLog
Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
Tools/ChangeLog
Tools/TestWebKitAPI/Tests/WebCore/ColorTests.cpp

index 921edfb..55a9499 100644 (file)
@@ -1,3 +1,150 @@
+2020-05-24  Sam Weinig  <weinig@apple.com>
+
+        Extended Color Cleanup: Use the name SimpleColor consistently
+        https://bugs.webkit.org/show_bug.cgi?id=212337
+
+        Reviewed by Anders Carlsson.
+        
+        - Removes RGBA32 type alias, updating all remaining users of it.
+        - Renames functions that take/return SimpleColor to use the name
+          SimpleColor rather than RGB (e.g. makeRGBA -> makeSimpleColor)
+        - Moves hex color parsing from Color to SimpleColor, as that is
+          the type it returns. Also took the opportunity to make it return
+          an Optional<SimpleColor> instead of using a bool/out parameter.
+        - Move Color::compositionFill to editing/CompositionHighlight.h
+          It makes no real sense to keep it in Color.h
+        - Replaces rgb() function in Color with asSimpleColor() for 
+          symmetry with asExtended().
+        - Replaced std::max(a, std::min(value, b)) with std::clamp(value, a, b)
+          for clarity.
+
+        * css/parser/CSSParserFastPaths.cpp:
+        (WebCore::fastParseColorInternal):
+        (WebCore::CSSParserFastPaths::parseColor):
+        * css/parser/CSSPropertyParserHelpers.cpp:
+        (WebCore::CSSPropertyParserHelpers::parseRGBParameters):
+        (WebCore::CSSPropertyParserHelpers::parseHSLParameters):
+        (WebCore::CSSPropertyParserHelpers::parseHexColor):
+        * editing/CompositionHighlight.h:
+        * editing/cocoa/DataDetection.mm:
+        (WebCore::DataDetection::detectContentInRange):
+        * html/ColorInputType.cpp:
+        (WebCore::parseSimpleColorValue):
+        * html/HTMLElement.cpp:
+        (WebCore::parseColorStringWithCrazyLegacyRules):
+        * platform/adwaita/ScrollbarThemeAdwaita.cpp:
+        * platform/adwaita/ThemeAdwaita.cpp:
+        (WebCore::ThemeAdwaita::activeSelectionForegroundColor const):
+        (WebCore::ThemeAdwaita::activeSelectionBackgroundColor const):
+        (WebCore::ThemeAdwaita::inactiveSelectionForegroundColor const):
+        * platform/graphics/Color.cpp:
+        (WebCore::differenceSquared):
+        (WebCore::Color::Color):
+        (WebCore::Color::operator=):
+        (WebCore::Color::serialized const):
+        (WebCore::Color::cssText const):
+        (WebCore::Color::nameForRenderTreeAsText const):
+        (WebCore::Color::light const):
+        (WebCore::Color::dark const):
+        (WebCore::Color::blend const):
+        (WebCore::Color::blendWithWhite const):
+        (WebCore::Color::colorWithAlpha const):
+        (WebCore::Color::colorWithAlphaUsingAlternativeRounding const):
+        (WebCore::Color::invertedColorWithAlpha const):
+        (WebCore::Color::colorSpaceAndComponents const):
+        (WebCore::Color::toSRGBASimpleColorLossy const):
+        (WebCore::blend):
+        (WebCore::Color::tagAsValid):
+        (WebCore::parseHexColorInternal): Deleted.
+        (WebCore::Color::parseHexColor): Deleted.
+        (WebCore::Color::asExtended const): Deleted.
+        * platform/graphics/Color.h:
+        (WebCore::Color::Color):
+        (WebCore::Color::isHashTableDeletedValue const):
+        (WebCore::Color::isValid const):
+        (WebCore::Color::isOpaque const):
+        (WebCore::Color::isVisible const):
+        (WebCore::Color::alpha const):
+        (WebCore::Color::alphaAsFloat const):
+        (WebCore::Color::isSemantic const):
+        (WebCore::Color::isExtended const):
+        (WebCore::Color::setIsSemantic):
+        (WebCore::operator==):
+        (WebCore::equalIgnoringSemanticColor):
+        (WebCore::Color::hash const):
+        (WebCore::Color::asExtended const):
+        (WebCore::Color::asSimpleColor const):
+        (WebCore::Color::setSimpleColor):
+        (WebCore::Color::isBlackColor):
+        (WebCore::Color::isWhiteColor):
+        (WebCore::Color::encode const):
+        (WebCore::Color::decode):
+        (WebCore::Color::setRGB): Deleted.
+        (WebCore::Color::rgb const): Deleted.
+        * platform/graphics/ColorUtilities.h:
+        (WebCore::clampedColorComponent):
+        * platform/graphics/ImageBackingStore.h:
+        (WebCore::ImageBackingStore::blendPixel):
+        (WebCore::ImageBackingStore::pixelValue const):
+        * platform/graphics/SimpleColor.cpp:
+        (WebCore::makePremultipliedSimpleColor):
+        (WebCore::makeUnpremultipliedSimpleColor):
+        (WebCore::makeSimpleColorFromFloats):
+        (WebCore::makeSimpleColorFromHSLA):
+        (WebCore::makeSimpleColorFromCMYKA):
+        (WebCore::parseHexColorInternal):
+        (WebCore::SimpleColor::parseHexColor):
+        (WebCore::makePremultipliedRGBA): Deleted.
+        (WebCore::makeUnPremultipliedRGBA): Deleted.
+        (WebCore::makeRGBA32FromFloats): Deleted.
+        (WebCore::makeRGBAFromHSLA): Deleted.
+        (WebCore::makeRGBAFromCMYKA): Deleted.
+        * platform/graphics/SimpleColor.h:
+        (WebCore::roundAndClampColorChannel):
+        (WebCore::colorFloatToSimpleColorByte):
+        (WebCore::makeSimpleColor):
+        (WebCore::colorFloatToRGBAByte): Deleted.
+        (WebCore::makeRGB): Deleted.
+        (WebCore::makeRGBA): Deleted.
+        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
+        (WebCore::makeSimpleColorFromARGBCFArray):
+        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes):
+        (WebCore::makeRGBA32FromARGBCFArray): Deleted.
+        * platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp:
+        (WebCore::ImageBufferCairoImageSurfaceBackend::platformTransformColorSpace):
+        * platform/graphics/cairo/NativeImageCairo.cpp:
+        (WebCore::nativeImageSinglePixelSolidColor):
+        * platform/graphics/cg/ColorCG.cpp:
+        (WebCore::makeSimpleColorFromCGColor):
+        (WebCore::Color::Color):
+        (WebCore::cachedCGColor):
+        (WebCore::makeRGBAFromCGColor): Deleted.
+        * platform/graphics/gtk/ColorGtk.cpp:
+        (WebCore::Color::Color):
+        * platform/graphics/mac/ColorMac.mm:
+        (WebCore::makeSimpleColorFromNSColor):
+        (WebCore::colorFromNSColor):
+        (WebCore::semanticColorFromNSColor):
+        (WebCore::makeRGBAFromNSColor): Deleted.
+        * platform/graphics/win/ColorDirect2D.cpp:
+        (WebCore::Color::Color):
+        * platform/graphics/win/GraphicsContextCGWin.cpp:
+        (WebCore::GraphicsContext::drawDotsForDocumentMarker):
+        * platform/graphics/win/PlatformContextDirect2D.cpp:
+        (WebCore::PlatformContextDirect2D::brushWithColor):
+        * platform/ios/ColorIOS.mm:
+        (WebCore::colorFromUIColor):
+        * rendering/InlineTextBox.cpp:
+        (WebCore::InlineTextBox::paintCompositionBackground):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::paintResizer):
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::patternForTouchAction):
+        (WebCore::patternForEventListenerRegionType):
+        * rendering/RenderThemeAdwaita.cpp:
+        * rendering/RenderThemeMac.mm:
+        (WebCore::menuBackgroundColor):
+
 2020-05-25  Zalan Bujtas  <zalan@apple.com>
 
         [Subpixel layout] Bad scrolling on mercurynews.com article
index 1756f92..8cf5f52 100644 (file)
@@ -409,20 +409,18 @@ static inline bool mightBeRGB(const CharacterType* characters, unsigned length)
 }
 
 template <typename CharacterType>
-static Color fastParseColorInternal(const CharacterType* characters, unsigned length, bool quirksMode)
+static Optional<SimpleColor> fastParseColorInternal(const CharacterType* characters, unsigned length, bool quirksMode)
 {
     CSSUnitType expect = CSSUnitType::CSS_UNKNOWN;
 
     if (length >= 4 && characters[0] == '#') {
-        RGBA32 rgb;
-        if (Color::parseHexColor(characters + 1, length - 1, rgb))
-            return Color(rgb);
+        if (auto color = SimpleColor::parseHexColor(characters + 1, length - 1))
+            return color;
     }
 
     if (quirksMode && (length == 3 || length == 6)) {
-        RGBA32 rgb;
-        if (Color::parseHexColor(characters, length, rgb))
-            return Color(rgb);
+        if (auto color = SimpleColor::parseHexColor(characters, length))
+            return color;
     }
 
     // Try rgba() syntax.
@@ -435,16 +433,16 @@ static Color fastParseColorInternal(const CharacterType* characters, unsigned le
         int alpha;
 
         if (!parseColorIntOrPercentage(current, end, ',', expect, red))
-            return Color();
+            return WTF::nullopt;
         if (!parseColorIntOrPercentage(current, end, ',', expect, green))
-            return Color();
+            return WTF::nullopt;
         if (!parseColorIntOrPercentage(current, end, ',', expect, blue))
-            return Color();
+            return WTF::nullopt;
         if (!parseAlphaValue(current, end, ')', alpha))
-            return Color();
+            return WTF::nullopt;
         if (current != end)
-            return Color();
-        return Color(makeRGBA(red, green, blue, alpha));
+            return WTF::nullopt;
+        return makeSimpleColor(red, green, blue, alpha);
     }
 
     // Try rgb() syntax.
@@ -455,17 +453,17 @@ static Color fastParseColorInternal(const CharacterType* characters, unsigned le
         int green;
         int blue;
         if (!parseColorIntOrPercentage(current, end, ',', expect, red))
-            return Color();
+            return WTF::nullopt;
         if (!parseColorIntOrPercentage(current, end, ',', expect, green))
-            return Color();
+            return WTF::nullopt;
         if (!parseColorIntOrPercentage(current, end, ')', expect, blue))
-            return Color();
+            return WTF::nullopt;
         if (current != end)
-            return Color();
-        return Color(makeRGB(red, green, blue));
+            return WTF::nullopt;
+        return makeSimpleColor(red, green, blue);
     }
 
-    return Color();
+    return WTF::nullopt;
 }
 
 RefPtr<CSSValue> CSSParserFastPaths::parseColor(const String& string, CSSParserMode parserMode, CSSValuePool& valuePool)
@@ -481,14 +479,14 @@ RefPtr<CSSValue> CSSParserFastPaths::parseColor(const String& string, CSSParserM
     bool quirksMode = isQuirksModeBehavior(parserMode);
 
     // Fast path for hex colors and rgb()/rgba() colors
-    Color color;
+    Optional<SimpleColor> color;
     if (string.is8Bit())
         color = fastParseColorInternal(string.characters8(), string.length(), quirksMode);
     else
         color = fastParseColorInternal(string.characters16(), string.length(), quirksMode);
-    if (!color.isValid())
+    if (!color)
         return nullptr;
-    return valuePool.createColorValue(color);
+    return valuePool.createColorValue(*color);
 }
 
 bool CSSParserFastPaths::isValidKeywordPropertyAndValue(CSSPropertyID propertyId, CSSValueID valueID, const CSSParserContext& context)
index 387e598..cf50160 100644 (file)
@@ -529,7 +529,6 @@ static int clampRGBComponent(const CSSPrimitiveValue& value)
 static Color parseRGBParameters(CSSParserTokenRange& range)
 {
     ASSERT(range.peek().functionId() == CSSValueRgb || range.peek().functionId() == CSSValueRgba);
-    Color result;
     CSSParserTokenRange args = consumeFunction(range);
     RefPtr<CSSPrimitiveValue> colorParameter = consumeNumber(args, ValueRangeAll);
     if (!colorParameter)
@@ -588,12 +587,10 @@ static Color parseRGBParameters(CSSParserTokenRange& range)
         alphaComponent = static_cast<int>(lroundf(clampTo<double>(alpha, 0.0, 1.0) * 255.0f));
     };
 
-    result = Color(makeRGBA(colorArray[0], colorArray[1], colorArray[2], alphaComponent));
-
     if (!args.atEnd())
         return Color();
 
-    return result;
+    return makeSimpleColor(colorArray[0], colorArray[1], colorArray[2], alphaComponent);
 }
 
 static Color parseHSLParameters(CSSParserTokenRange& range, CSSParserMode cssParserMode)
@@ -645,7 +642,7 @@ static Color parseHSLParameters(CSSParserTokenRange& range, CSSParserMode cssPar
     if (!args.atEnd())
         return Color();
 
-    return Color(makeRGBAFromHSLA(static_cast<float>(colorArray[0]), static_cast<float>(colorArray[1]), static_cast<float>(colorArray[2]), static_cast<float>(alpha)));
+    return makeSimpleColorFromHSLA(static_cast<float>(colorArray[0]), static_cast<float>(colorArray[1]), static_cast<float>(colorArray[2]), static_cast<float>(alpha));
 }
 
 static Color parseColorFunctionParameters(CSSParserTokenRange& range)
@@ -695,11 +692,13 @@ static Color parseColorFunctionParameters(CSSParserTokenRange& range)
 
 static Color parseHexColor(CSSParserTokenRange& range, bool acceptQuirkyColors)
 {
-    RGBA32 result;
+    SimpleColor result;
     const CSSParserToken& token = range.peek();
     if (token.type() == HashToken) {
-        if (!Color::parseHexColor(token.value(), result))
+        auto simpleColor = SimpleColor::parseHexColor(token.value());
+        if (!simpleColor)
             return Color();
+        result = *simpleColor;
     } else if (acceptQuirkyColors) {
         String color;
         if (token.type() == NumberToken || token.type() == DimensionToken) {
@@ -718,13 +717,15 @@ static Color parseHexColor(CSSParserTokenRange& range, bool acceptQuirkyColors)
         unsigned length = color.length();
         if (length != 3 && length != 6)
             return Color();
-        if (!Color::parseHexColor(color, result))
+        auto simpleColor = SimpleColor::parseHexColor(color);
+        if (!simpleColor)
             return Color();
+        result = *simpleColor;
     } else {
         return Color();
     }
     range.consumeIncludingWhitespace();
-    return Color(result);
+    return result;
 }
 
 static Color parseColorFunction(CSSParserTokenRange& range, CSSParserMode cssParserMode)
index 709bee4..96000b0 100644 (file)
@@ -39,9 +39,15 @@ struct CompositionHighlight {
     {
     }
 
+#if PLATFORM(IOS_FAMILY)
+    static constexpr SimpleColor defaultCompositionFillColor { 0x3CAFC0E3 };
+#else
+    static constexpr SimpleColor defaultCompositionFillColor { 0xFFE1DD55 };
+#endif
+
     unsigned startOffset { 0 };
     unsigned endOffset { 0 };
-    Color color { Color::compositionFill };
+    Color color { defaultCompositionFillColor };
 
     template<class Encoder> void encode(Encoder&) const;
     template<class Decoder> static Optional<CompositionHighlight> decode(Decoder&);
index 34db958..14d3ebd 100644 (file)
@@ -625,10 +625,10 @@ NSArray *DataDetection::detectContentInRange(const SimpleRange& contextRange, Da
                         // so the color will appear on light and dark backgrounds, since only one color can be specified.
                         double overrideLightness = 0.5;
                         double overrideAlphaMultiplier = 0.38;
-                        auto underlineColor = Color(makeRGBAFromHSLA(hue, saturation, overrideLightness, overrideAlphaMultiplier * alpha));
+                        auto underlineColor = makeSimpleColorFromHSLA(hue, saturation, overrideLightness, overrideAlphaMultiplier * alpha);
 
                         anchorElement->setInlineStyleProperty(CSSPropertyColor, CSSValueCurrentcolor);
-                        anchorElement->setInlineStyleProperty(CSSPropertyTextDecorationColor, underlineColor.cssText());
+                        anchorElement->setInlineStyleProperty(CSSPropertyTextDecorationColor, underlineColor.serializationForCSS());
                     }
                 }
             }
index d4c858a..e2430e7 100644 (file)
@@ -68,11 +68,11 @@ static bool isValidSimpleColor(StringView string)
 }
 
 // https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#rules-for-parsing-simple-colour-values
-static Optional<RGBA32> parseSimpleColorValue(StringView string)
+static Optional<SimpleColor> parseSimpleColorValue(StringView string)
 {
     if (!isValidSimpleColor(string))
         return WTF::nullopt;
-    return makeRGB(toASCIIHexValue(string[1], string[2]), toASCIIHexValue(string[3], string[4]), toASCIIHexValue(string[5], string[6]));
+    return makeSimpleColor(toASCIIHexValue(string[1], string[2]), toASCIIHexValue(string[3], string[4]), toASCIIHexValue(string[5], string[6]));
 }
 
 ColorInputType::~ColorInputType()
index d652e09..a970e6a 100644 (file)
@@ -973,7 +973,7 @@ void HTMLElement::addHTMLLengthToStyle(MutableStyleProperties& style, CSSPropert
     addPropertyToPresentationAttributeStyle(style, propertyID, value);
 }
 
-static RGBA32 parseColorStringWithCrazyLegacyRules(const String& colorString)
+static SimpleColor parseColorStringWithCrazyLegacyRules(const String& colorString)
 {
     // Per spec, only look at the first 128 digits of the string.
     const size_t maxColorLength = 128;
@@ -1002,7 +1002,7 @@ static RGBA32 parseColorStringWithCrazyLegacyRules(const String& colorString)
     digitBuffer.append('0');
 
     if (digitBuffer.size() < 6)
-        return makeRGB(toASCIIHexValue(digitBuffer[0]), toASCIIHexValue(digitBuffer[1]), toASCIIHexValue(digitBuffer[2]));
+        return makeSimpleColor(toASCIIHexValue(digitBuffer[0]), toASCIIHexValue(digitBuffer[1]), toASCIIHexValue(digitBuffer[2]));
 
     // Split the digits into three components, then search the last 8 digits of each component.
     ASSERT(digitBuffer.size() >= 6);
@@ -1026,7 +1026,7 @@ static RGBA32 parseColorStringWithCrazyLegacyRules(const String& colorString)
     int redValue = toASCIIHexValue(digitBuffer[redIndex], digitBuffer[redIndex + 1]);
     int greenValue = toASCIIHexValue(digitBuffer[greenIndex], digitBuffer[greenIndex + 1]);
     int blueValue = toASCIIHexValue(digitBuffer[blueIndex], digitBuffer[blueIndex + 1]);
-    return makeRGB(redValue, greenValue, blueValue);
+    return makeSimpleColor(redValue, greenValue, blueValue);
 }
 
 // Color parsing that matches HTML's "rules for parsing a legacy color value"
index 0210831..6857859 100644 (file)
@@ -43,13 +43,13 @@ static const unsigned overlayThumbSize = 5;
 static const unsigned minimumThumbSize = 40;
 static const unsigned thumbSize = 6;
 static const double scrollbarOpacity = 0.8;
-static const Color scrollbarBackgroundColor = makeRGB(252, 252, 252);
-static const Color scrollbarBorderColor = makeRGB(220, 223, 227);
-static const Color overlayThumbBorderColor = makeRGBA(255, 255, 255, 100);
-static const Color overlayThumbColor = makeRGBA(46, 52, 54, 100);
-static const Color thumbHoveredColor = makeRGB(86, 91, 92);
-static const Color thumbPressedColor = makeRGB(27, 106, 203);
-static const Color thumbColor = makeRGB(126, 129, 130);
+static const Color scrollbarBackgroundColor = makeSimpleColor(252, 252, 252);
+static const Color scrollbarBorderColor = makeSimpleColor(220, 223, 227);
+static const Color overlayThumbBorderColor = makeSimpleColor(255, 255, 255, 100);
+static const Color overlayThumbColor = makeSimpleColor(46, 52, 54, 100);
+static const Color thumbHoveredColor = makeSimpleColor(86, 91, 92);
+static const Color thumbPressedColor = makeSimpleColor(27, 106, 203);
+static const Color thumbColor = makeSimpleColor(126, 129, 130);
 
 bool ScrollbarThemeAdwaita::usesOverlayScrollbars() const
 {
index ea25d32..1e293cc 100644 (file)
 namespace WebCore {
 
 static const unsigned focusLineWidth = 1;
-static const Color focusRingColor = makeRGBA(46, 52, 54, 150);
+static const Color focusRingColor = makeSimpleColor(46, 52, 54, 150);
 static const unsigned arrowSize = 16;
-static const Color arrowColor = makeRGB(46, 52, 54);
+static const Color arrowColor = makeSimpleColor(46, 52, 54);
 static const int buttonFocusOffset = -3;
 static const unsigned buttonPadding = 5;
 static const int buttonBorderSize = 1; // Keep in sync with menuListButtonBorderSize in RenderThemeAdwaita.
-static const Color buttonBorderColor = makeRGB(205, 199, 194);
-static const Color buttonBackgroundColor = makeRGB(244, 242, 241);
-static const Color buttonBackgroundPressedColor = makeRGB(214, 209, 205);
-static const Color buttonBackgroundHoveredColor = makeRGB(248, 248, 247);
-static const Color buttonBackgroundDisabledColor = makeRGB(246, 246, 244);
-static const Color toggleBackgroundColor = makeRGB(255, 255, 255);
-static const Color toggleBackgroundHoveredColor = makeRGB(242, 242, 242);
-static const Color toggleBackgroundDisabledColor = makeRGB(252, 252, 252);
+static const Color buttonBorderColor = makeSimpleColor(205, 199, 194);
+static const Color buttonBackgroundColor = makeSimpleColor(244, 242, 241);
+static const Color buttonBackgroundPressedColor = makeSimpleColor(214, 209, 205);
+static const Color buttonBackgroundHoveredColor = makeSimpleColor(248, 248, 247);
+static const Color buttonBackgroundDisabledColor = makeSimpleColor(246, 246, 244);
+static const Color toggleBackgroundColor = makeSimpleColor(255, 255, 255);
+static const Color toggleBackgroundHoveredColor = makeSimpleColor(242, 242, 242);
+static const Color toggleBackgroundDisabledColor = makeSimpleColor(252, 252, 252);
 static const double toggleSize = 14.;
 static const int toggleFocusOffset = 2;
-static const Color toggleColor = makeRGB(46, 52, 54);
-static const Color toggleDisabledColor = makeRGB(160, 160, 160);
-static const Color spinButtonBorderColor = makeRGB(220, 223, 227);
-static const Color spinButtonBackgroundColor = makeRGB(252, 252, 252);
-static const Color spinButtonBackgroundHoveredColor = makeRGBA(46, 52, 54, 50);
-static const Color spinButtonBackgroundPressedColor = makeRGBA(46, 52, 54, 70);
+static const Color toggleColor = makeSimpleColor(46, 52, 54);
+static const Color toggleDisabledColor = makeSimpleColor(160, 160, 160);
+static const Color spinButtonBorderColor = makeSimpleColor(220, 223, 227);
+static const Color spinButtonBackgroundColor = makeSimpleColor(252, 252, 252);
+static const Color spinButtonBackgroundHoveredColor = makeSimpleColor(46, 52, 54, 50);
+static const Color spinButtonBackgroundPressedColor = makeSimpleColor(46, 52, 54, 70);
 
 #if !PLATFORM(GTK) || USE(GTK4)
 Theme& Theme::singleton()
@@ -69,17 +69,17 @@ Theme& Theme::singleton()
 
 Color ThemeAdwaita::activeSelectionForegroundColor() const
 {
-    return makeRGB(255, 255, 255);
+    return makeSimpleColor(255, 255, 255);
 }
 
 Color ThemeAdwaita::activeSelectionBackgroundColor() const
 {
-    return makeRGB(52, 132, 228);
+    return makeSimpleColor(52, 132, 228);
 }
 
 Color ThemeAdwaita::inactiveSelectionForegroundColor() const
 {
-    return makeRGB(252, 252, 252);
+    return makeSimpleColor(252, 252, 252);
 }
 
 Color ThemeAdwaita::inactiveSelectionBackgroundColor() const
index e38bfc2..efee94a 100644 (file)
@@ -30,7 +30,6 @@
 #include "ColorUtilities.h"
 #include "HashTools.h"
 #include <wtf/Assertions.h>
-#include <wtf/HexNumber.h>
 #include <wtf/MathExtras.h>
 #include <wtf/text/StringBuilder.h>
 #include <wtf/text/TextStream.h>
@@ -40,87 +39,18 @@ namespace WebCore {
 static constexpr SimpleColor lightenedBlack { 0xFF545454 };
 static constexpr SimpleColor darkenedWhite { 0xFFABABAB };
 
-// originally moved here from the CSS parser
-template <typename CharacterType>
-static inline bool parseHexColorInternal(const CharacterType* name, unsigned length, RGBA32& rgb)
-{
-    if (length != 3 && length != 4 && length != 6 && length != 8)
-        return false;
-    unsigned value = 0;
-    for (unsigned i = 0; i < length; ++i) {
-        if (!isASCIIHexDigit(name[i]))
-            return false;
-        value <<= 4;
-        value |= toASCIIHexValue(name[i]);
-    }
-    if (length == 6) {
-        rgb = { 0xFF000000 | value };
-        return true;
-    }
-    if (length == 8) {
-        // We parsed the values into RGBA order, but the RGBA32 type
-        // expects them to be in ARGB order, so we right rotate eight bits.
-        rgb = { value << 24 | value >> 8 };
-        return true;
-    }
-    if (length == 4) {
-        // #abcd converts to ddaabbcc in RGBA32.
-        rgb = { (value & 0xF) << 28 | (value & 0xF) << 24
-            | (value & 0xF000) << 8 | (value & 0xF000) << 4
-            | (value & 0xF00) << 4 | (value & 0xF00)
-            | (value & 0xF0) | (value & 0xF0) >> 4 };
-        return true;
-    }
-    // #abc converts to #aabbcc
-    rgb = { 0xFF000000
-        | (value & 0xF00) << 12 | (value & 0xF00) << 8
-        | (value & 0xF0) << 8 | (value & 0xF0) << 4
-        | (value & 0xF) << 4 | (value & 0xF) };
-    return true;
-}
-
-bool Color::parseHexColor(const LChar* name, unsigned length, RGBA32& rgb)
-{
-    return parseHexColorInternal(name, length, rgb);
-}
-
-bool Color::parseHexColor(const UChar* name, unsigned length, RGBA32& rgb)
-{
-    return parseHexColorInternal(name, length, rgb);
-}
-
-bool Color::parseHexColor(const String& name, RGBA32& rgb)
-{
-    unsigned length = name.length();
-    if (!length)
-        return false;
-    if (name.is8Bit())
-        return parseHexColor(name.characters8(), name.length(), rgb);
-    return parseHexColor(name.characters16(), name.length(), rgb);
-}
-
-bool Color::parseHexColor(const StringView& name, RGBA32& rgb)
-{
-    unsigned length = name.length();
-    if (!length)
-        return false;
-    if (name.is8Bit())
-        return parseHexColor(name.characters8(), name.length(), rgb);
-    return parseHexColor(name.characters16(), name.length(), rgb);
-}
-
 int differenceSquared(const Color& c1, const Color& c2)
 {
     // FIXME: This is assuming that the colors are in the same colorspace.
     // FIXME: This should probably return a floating point number, but many of the call
     // sites have picked comparison values based on feel. We'd need to break out
     // our logarithm tables to change them :)
-    int c1Red = c1.isExtended() ? c1.asExtended().red() * 255 : c1.rgb().redComponent();
-    int c1Green = c1.isExtended() ? c1.asExtended().green() * 255 : c1.rgb().greenComponent();
-    int c1Blue = c1.isExtended() ? c1.asExtended().blue() * 255 : c1.rgb().blueComponent();
-    int c2Red = c2.isExtended() ? c2.asExtended().red() * 255 : c2.rgb().redComponent();
-    int c2Green = c2.isExtended() ? c2.asExtended().green() * 255 : c2.rgb().greenComponent();
-    int c2Blue = c2.isExtended() ? c2.asExtended().blue() * 255 : c2.rgb().blueComponent();
+    int c1Red = c1.isExtended() ? c1.asExtended().red() * 255 : c1.asSimpleColor().redComponent();
+    int c1Green = c1.isExtended() ? c1.asExtended().green() * 255 : c1.asSimpleColor().greenComponent();
+    int c1Blue = c1.isExtended() ? c1.asExtended().blue() * 255 : c1.asSimpleColor().blueComponent();
+    int c2Red = c2.isExtended() ? c2.asExtended().red() * 255 : c2.asSimpleColor().redComponent();
+    int c2Green = c2.isExtended() ? c2.asExtended().green() * 255 : c2.asSimpleColor().greenComponent();
+    int c2Blue = c2.isExtended() ? c2.asExtended().blue() * 255 : c2.asSimpleColor().blueComponent();
     int dR = c1Red - c2Red;
     int dG = c1Green - c2Green;
     int dB = c1Blue - c2Blue;
@@ -146,30 +76,28 @@ static inline const NamedColor* findNamedColor(const String& name)
 Color::Color(const String& name)
 {
     if (name[0] == '#') {
-        RGBA32 color;
-        bool valid;
-
+        Optional<SimpleColor> color;
         if (name.is8Bit())
-            valid = parseHexColor(name.characters8() + 1, name.length() - 1, color);
+            color = SimpleColor::parseHexColor(name.characters8() + 1, name.length() - 1);
         else
-            valid = parseHexColor(name.characters16() + 1, name.length() - 1, color);
+            color = SimpleColor::parseHexColor(name.characters16() + 1, name.length() - 1);
 
-        if (valid)
-            setRGB(color);
+        if (color)
+            setSimpleColor(*color);
     } else {
         if (auto* foundColor = findNamedColor(name))
-            setRGB({ foundColor->ARGBValue });
+            setSimpleColor({ foundColor->ARGBValue });
     }
 }
 
 Color::Color(const char* name)
 {
     if (name[0] == '#') {
-        SimpleColor color;
-        if (parseHexColor(reinterpret_cast<const LChar*>(&name[1]), std::strlen(&name[1]), color))
-            setRGB(color);
+        auto color = SimpleColor::parseHexColor(reinterpret_cast<const LChar*>(&name[1]), std::strlen(&name[1]));
+        if (color)
+            setSimpleColor(*color);
     } else if (auto* foundColor = findColor(name, strlen(name)))
-        setRGB({ foundColor->ARGBValue });
+        setSimpleColor({ foundColor->ARGBValue });
 }
 
 Color::Color(const Color& other)
@@ -192,8 +120,8 @@ Color::Color(float c1, float c2, float c3, float alpha, ColorSpace colorSpace)
 Color::Color(Ref<ExtendedColor>&& extendedColor)
 {
     // Zero the union, just in case a 32-bit system only assigns the
-    // top 32 bits when copying the extendedColor pointer below.
-    m_colorData.rgbaAndFlags = 0;
+    // top 32 bits when copying the ExtendedColor pointer below.
+    m_colorData.simpleColorAndFlags = 0;
     m_colorData.extendedColor = &extendedColor.leakRef();
     ASSERT(isExtended());
 }
@@ -222,7 +150,7 @@ Color& Color::operator=(Color&& other)
         m_colorData.extendedColor->deref();
 
     m_colorData = other.m_colorData;
-    other.m_colorData.rgbaAndFlags = invalidRGBAColor;
+    other.m_colorData.simpleColorAndFlags = invalidSimpleColor;
 
     return *this;
 }
@@ -231,26 +159,25 @@ String Color::serialized() const
 {
     if (isExtended())
         return asExtended().cssText();
-    return rgb().serializationForHTML();
+    return asSimpleColor().serializationForHTML();
 }
 
 String Color::cssText() const
 {
     if (isExtended())
         return asExtended().cssText();
-    return rgb().serializationForCSS();
+    return asSimpleColor().serializationForCSS();
 }
 
 String Color::nameForRenderTreeAsText() const
 {
-    // FIXME: Handle extended colors.
-    return rgb().serializationForRenderTreeAsText();
+    return asSimpleColor().serializationForRenderTreeAsText();
 }
 
 Color Color::light() const
 {
     // Hardcode this common case for speed.
-    if (rgb() == black)
+    if (asSimpleColor() == black)
         return lightenedBlack;
     
     const float scaleFactor = nextafterf(256.0f, 0.0f);
@@ -275,7 +202,7 @@ Color Color::light() const
 Color Color::dark() const
 {
     // Hardcode this common case for speed.
-    if (rgb() == white)
+    if (asSimpleColor() == white)
         return darkenedWhite;
     
     const float scaleFactor = nextafterf(256.0f, 0.0f);
@@ -324,7 +251,7 @@ Color Color::blend(const Color& source) const
     int g = (selfG * selfA * (0xFF - sourceA) + 0xFF * sourceA * sourceG) / d;
     int b = (selfB * selfA * (0xFF - sourceA) + 0xFF * sourceA * sourceB) / d;
 
-    return makeRGBA(r, g, b, a);
+    return makeSimpleColor(r, g, b, a);
 }
 
 Color Color::blendWithWhite() const
@@ -354,7 +281,7 @@ Color Color::blendWithWhite() const
         int g = blendComponent(existingG, alpha);
         int b = blendComponent(existingB, alpha);
         
-        result = makeRGBA(r, g, b, alpha);
+        result = makeSimpleColor(r, g, b, alpha);
 
         if (r >= 0 && g >= 0 && b >= 0)
             break;
@@ -388,7 +315,7 @@ Color Color::colorWithAlpha(float alpha) const
     // FIXME: This is where this function differs from colorWithAlphaUsingAlternativeRounding.
     uint8_t newAlpha = alpha * 0xFF;
 
-    Color result = rgb().colorWithAlpha(newAlpha);
+    Color result = asSimpleColor().colorWithAlpha(newAlpha);
     if (isSemantic())
         result.setIsSemantic();
     return result;
@@ -402,9 +329,9 @@ Color Color::colorWithAlphaUsingAlternativeRounding(float alpha) const
     }
 
     // FIXME: This is where this function differs from colorWithAlphaUsing.
-    uint8_t newAlpha = colorFloatToRGBAByte(alpha);
+    uint8_t newAlpha = colorFloatToSimpleColorByte(alpha);
 
-    Color result = rgb().colorWithAlpha(newAlpha);
+    Color result = asSimpleColor().colorWithAlpha(newAlpha);
     if (isSemantic())
         result.setIsSemantic();
     return result;
@@ -415,8 +342,8 @@ Color Color::invertedColorWithAlpha(float alpha) const
     if (isExtended())
         return Color { asExtended().invertedColorWithAlpha(alpha) };
 
-    auto [r, g, b, existingAlpha] = rgb();
-    return { 0xFF - r, 0xFF - g, 0xFF - b, colorFloatToRGBAByte(alpha) };
+    auto [r, g, b, existingAlpha] = asSimpleColor();
+    return { 0xFF - r, 0xFF - g, 0xFF - b, colorFloatToSimpleColorByte(alpha) };
 }
 
 Color Color::semanticColor() const
@@ -434,17 +361,18 @@ std::pair<ColorSpace, FloatComponents> Color::colorSpaceAndComponents() const
         return { extendedColor.colorSpace(), extendedColor.channels() };
     }
 
-    auto [r, g, b, a] = rgb();
+    auto [r, g, b, a] = asSimpleColor();
     return { ColorSpace::SRGB, FloatComponents { r / 255.0f, g / 255.0f, b / 255.0f,  a / 255.0f } };
 }
 
 SimpleColor Color::toSRGBASimpleColorLossy() const
 {
-    if (!isExtended())
-        return rgb();
+    if (isExtended()) {
+        auto [r, g, b, a] = toSRGBAComponentsLossy();
+        return makeSimpleColorFromFloats(r, g, b, a);
+    }
 
-    auto [r, g, b, a] = toSRGBAComponentsLossy();
-    return makeRGBA32FromFloats(r, g, b, a);
+    return asSimpleColor();
 }
 
 FloatComponents Color::toSRGBAComponentsLossy() const
@@ -476,20 +404,20 @@ Color blend(const Color& from, const Color& to, double progress)
     // FIXME: ExtendedColor - needs to handle color spaces.
     // We need to preserve the state of the valid flag at the end of the animation
     if (progress == 1 && !to.isValid())
-        return Color();
+        return { };
 
-    // Since makePremultipliedRGBA() bails on zero alpha, special-case that.
-    auto premultFrom = from.alpha() ? makePremultipliedRGBA(from.toSRGBASimpleColorLossy()) : Color::transparent;
-    auto premultTo = to.alpha() ? makePremultipliedRGBA(to.toSRGBASimpleColorLossy()) : Color::transparent;
+    // Since makePremultipliedSimpleColor() bails on zero alpha, special-case that.
+    auto premultFrom = from.alpha() ? makePremultipliedSimpleColor(from.toSRGBASimpleColorLossy()) : Color::transparent;
+    auto premultTo = to.alpha() ? makePremultipliedSimpleColor(to.toSRGBASimpleColorLossy()) : Color::transparent;
 
-    RGBA32 premultBlended = makeRGBA(
+    SimpleColor premultBlended = makeSimpleColor(
         WebCore::blend(premultFrom.redComponent(), premultTo.redComponent(), progress),
         WebCore::blend(premultFrom.greenComponent(), premultTo.greenComponent(), progress),
         WebCore::blend(premultFrom.blueComponent(), premultTo.blueComponent(), progress),
         WebCore::blend(premultFrom.alphaComponent(), premultTo.alphaComponent(), progress)
     );
 
-    return makeUnPremultipliedRGBA(premultBlended);
+    return makeUnpremultipliedSimpleColor(premultBlended);
 }
 
 Color blendWithoutPremultiply(const Color& from, const Color& to, double progress)
@@ -512,13 +440,7 @@ Color blendWithoutPremultiply(const Color& from, const Color& to, double progres
 
 void Color::tagAsValid()
 {
-    m_colorData.rgbaAndFlags |= validRGBAColor;
-}
-
-const ExtendedColor& Color::asExtended() const
-{
-    ASSERT(isExtended());
-    return *m_colorData.extendedColor;
+    m_colorData.simpleColorAndFlags |= validSimpleColor;
 }
 
 TextStream& operator<<(TextStream& ts, const Color& color)
index bc1b49c..dadbeaa 100644 (file)
 #include "ColorSpace.h"
 #include "ExtendedColor.h"
 #include "SimpleColor.h"
-#include <algorithm>
-#include <cmath>
-#include <unicode/uchar.h>
 #include <wtf/Forward.h>
 #include <wtf/HashFunctions.h>
 #include <wtf/Optional.h>
-#include <wtf/text/LChar.h>
 
 #if USE(CG)
 typedef struct CGColor* CGColorRef;
@@ -64,38 +60,38 @@ public:
 
     // FIXME: Remove all these constructors and creation functions and replace the ones that are still needed with free functions.
 
-    Color(RGBA32 color, bool valid = true)
+    Color(SimpleColor color, bool valid = true)
     {
         if (valid)
-            setRGB(color);
+            setSimpleColor(color);
     }
 
     enum SemanticTag { Semantic };
-    Color(RGBA32 color, SemanticTag)
+    Color(SimpleColor color, SemanticTag)
     {
-        setRGB(color);
+        setSimpleColor(color);
         setIsSemantic();
     }
 
     Color(int r, int g, int b)
     {
-        setRGB(r, g, b);
+        setSimpleColor(makeSimpleColor(r, g, b));
     }
 
     Color(int r, int g, int b, int a)
     {
-        setRGB(makeRGBA(r, g, b, a));
+        setSimpleColor(makeSimpleColor(r, g, b, a));
     }
 
     Color(float r, float g, float b, float a)
     {
-        setRGB(makeRGBA32FromFloats(r, g, b, a));
+        setSimpleColor(makeSimpleColorFromFloats(r, g, b, a));
     }
 
     // Creates a new color from the specific CMYK and alpha values.
     Color(float c, float m, float y, float k, float a)
     {
-        setRGB(makeRGBAFromCMYKA(c, m, y, k, a));
+        setSimpleColor(makeSimpleColorFromCMYKA(c, m, y, k, a));
     }
 
     WEBCORE_EXPORT explicit Color(const String&);
@@ -103,23 +99,23 @@ public:
 
     explicit Color(WTF::HashTableDeletedValueType)
     {
-        static_assert(deletedHashValue & invalidRGBAColor, "Color's deleted hash value must not look like an ExtendedColor");
-        static_assert(!(deletedHashValue & validRGBAColorBit), "Color's deleted hash value must not look like a valid RGBA32 Color");
-        static_assert(deletedHashValue & (1 << 4), "Color's deleted hash value must have some bits set that an RGBA32 Color wouldn't have");
-        m_colorData.rgbaAndFlags = deletedHashValue;
+        static_assert(deletedHashValue & invalidSimpleColor, "Color's deleted hash value must not look like an ExtendedColor");
+        static_assert(!(deletedHashValue & validSimpleColorBit), "Color's deleted hash value must not look like a valid SimpleColor");
+        static_assert(deletedHashValue & (1 << 4), "Color's deleted hash value must have some bits set that an SimpleColor wouldn't have");
+        m_colorData.simpleColorAndFlags = deletedHashValue;
         ASSERT(!isExtended());
     }
 
     bool isHashTableDeletedValue() const
     {
-        return m_colorData.rgbaAndFlags == deletedHashValue;
+        return m_colorData.simpleColorAndFlags == deletedHashValue;
     }
 
     explicit Color(WTF::HashTableEmptyValueType)
     {
-        static_assert(emptyHashValue & invalidRGBAColor, "Color's empty hash value must not look like an ExtendedColor");
-        static_assert(emptyHashValue & (1 << 4), "Color's deleted hash value must have some bits set that an RGBA32 Color wouldn't have");
-        m_colorData.rgbaAndFlags = emptyHashValue;
+        static_assert(emptyHashValue & invalidSimpleColor, "Color's empty hash value must not look like an ExtendedColor");
+        static_assert(emptyHashValue & (1 << 4), "Color's deleted hash value must have some bits set that an SimpleColor wouldn't have");
+        m_colorData.simpleColorAndFlags = emptyHashValue;
         ASSERT(!isExtended());
     }
 
@@ -147,13 +143,13 @@ public:
     // Returns the color serialized as either #RRGGBB or #RRGGBBAA
     String nameForRenderTreeAsText() const;
 
-    bool isValid() const { return isExtended() || (m_colorData.rgbaAndFlags & validRGBAColorBit); }
+    bool isValid() const { return isExtended() || (m_colorData.simpleColorAndFlags & validSimpleColorBit); }
 
-    bool isOpaque() const { return isExtended() ? asExtended().alpha() == 1.0 : rgb().isOpaque(); }
-    bool isVisible() const { return isExtended() ? asExtended().alpha() > 0.0 : rgb().isVisible(); }
+    bool isOpaque() const { return isExtended() ? asExtended().alpha() == 1.0 : asSimpleColor().isOpaque(); }
+    bool isVisible() const { return isExtended() ? asExtended().alpha() > 0.0 : asSimpleColor().isVisible(); }
 
-    int alpha() const { return isExtended() ? asExtended().alpha() * 255 : rgb().alphaComponent(); }
-    float alphaAsFloat() const { return isExtended() ? asExtended().alpha() : rgb().alphaComponentAsFloat(); }
+    int alpha() const { return isExtended() ? asExtended().alpha() * 255 : asSimpleColor().alphaComponent(); }
+    float alphaAsFloat() const { return isExtended() ? asExtended().alpha() : asSimpleColor().alphaComponentAsFloat(); }
 
     unsigned hash() const;
 
@@ -191,7 +187,7 @@ public:
     Color semanticColor() const;
 
     // True if the color originated from a CSS semantic color name.
-    bool isSemantic() const { return !isExtended() && (m_colorData.rgbaAndFlags & isSemanticRBGAColorBit); }
+    bool isSemantic() const { return !isExtended() && (m_colorData.simpleColorAndFlags & isSemanticSimpleColorBit); }
 
 #if PLATFORM(GTK)
     Color(const GdkRGBA&);
@@ -210,11 +206,6 @@ public:
     WEBCORE_EXPORT operator D2D1_VECTOR_4F() const;
 #endif
 
-    static bool parseHexColor(const String&, RGBA32&);
-    static bool parseHexColor(const StringView&, RGBA32&);
-    static bool parseHexColor(const LChar*, unsigned, RGBA32&);
-    static bool parseHexColor(const UChar*, unsigned, RGBA32&);
-
     static constexpr SimpleColor black { 0xFF000000 };
     static constexpr SimpleColor white { 0xFFFFFFFF };
     static constexpr SimpleColor darkGray { 0xFF808080 };
@@ -224,17 +215,11 @@ public:
     static constexpr SimpleColor cyan { 0xFF00FFFF };
     static constexpr SimpleColor yellow { 0xFFFFFF00 };
 
-#if PLATFORM(IOS_FAMILY)
-    static constexpr SimpleColor compositionFill { 0x3CAFC0E3 };
-#else
-    static constexpr SimpleColor compositionFill { 0xFFE1DD55 };
-#endif
-
     bool isExtended() const
     {
-        return !(m_colorData.rgbaAndFlags & invalidRGBAColor);
+        return !(m_colorData.simpleColorAndFlags & invalidSimpleColor);
     }
-    WEBCORE_EXPORT const ExtendedColor& asExtended() const;
+    const ExtendedColor& asExtended() const;
 
     WEBCORE_EXPORT Color& operator=(const Color&);
     WEBCORE_EXPORT Color& operator=(Color&&);
@@ -252,19 +237,19 @@ public:
     template<class Decoder> static Optional<Color> decode(Decoder&);
 
 private:
-    RGBA32 rgb() const;
-    void setRGB(int r, int g, int b) { setRGB(makeRGB(r, g, b)); }
-    void setRGB(RGBA32);
-    void setIsSemantic() { m_colorData.rgbaAndFlags |= isSemanticRBGAColorBit; }
+    const SimpleColor asSimpleColor() const;
+
+    void setSimpleColor(SimpleColor);
+    void setIsSemantic() { m_colorData.simpleColorAndFlags |= isSemanticSimpleColorBit; }
 
     // 0x_______00 is an ExtendedColor pointer.
-    // 0x_______01 is an invalid RGBA32.
-    // 0x_______11 is a valid RGBA32.
+    // 0x_______01 is an invalid SimpleColor.
+    // 0x_______11 is a valid SimpleColor.
     static const uint64_t extendedColor = 0x0;
-    static const uint64_t invalidRGBAColor = 0x1;
-    static const uint64_t validRGBAColorBit = 0x2;
-    static const uint64_t validRGBAColor = 0x3;
-    static const uint64_t isSemanticRBGAColorBit = 0x4;
+    static const uint64_t invalidSimpleColor = 0x1;
+    static const uint64_t validSimpleColorBit = 0x2;
+    static const uint64_t validSimpleColor = 0x3;
+    static const uint64_t isSemanticSimpleColorBit = 0x4;
 
     static const uint64_t deletedHashValue = 0xFFFFFFFFFFFFFFFD;
     static const uint64_t emptyHashValue = 0xFFFFFFFFFFFFFFFB;
@@ -272,7 +257,7 @@ private:
     WEBCORE_EXPORT void tagAsValid();
 
     union {
-        uint64_t rgbaAndFlags { invalidRGBAColor };
+        uint64_t simpleColorAndFlags { invalidSimpleColor };
         ExtendedColor* extendedColor;
     } m_colorData;
 };
@@ -300,7 +285,7 @@ inline bool operator==(const Color& a, const Color& b)
     if (a.isExtended() || b.isExtended())
         return extendedColorsEqual(a, b);
 
-    return a.m_colorData.rgbaAndFlags == b.m_colorData.rgbaAndFlags;
+    return a.m_colorData.simpleColorAndFlags == b.m_colorData.simpleColorAndFlags;
 }
 
 inline bool operator!=(const Color& a, const Color& b)
@@ -312,15 +297,14 @@ inline bool equalIgnoringSemanticColor(const Color& a, const Color& b)
 {
     if (a.isExtended() || b.isExtended())
         return extendedColorsEqual(a, b);
-    return (a.m_colorData.rgbaAndFlags & ~Color::isSemanticRBGAColorBit) == (b.m_colorData.rgbaAndFlags & ~Color::isSemanticRBGAColorBit);
+    return (a.m_colorData.simpleColorAndFlags & ~Color::isSemanticSimpleColorBit) == (b.m_colorData.simpleColorAndFlags & ~Color::isSemanticSimpleColorBit);
 }
 
 inline unsigned Color::hash() const
 {
     if (isExtended())
         return asExtended().hash();
-
-    return WTF::intHash(m_colorData.rgbaAndFlags);
+    return WTF::intHash(m_colorData.simpleColorAndFlags);
 }
 
 inline Color Color::colorWithAlphaMultipliedByUsingAlternativeRounding(Optional<float> alpha) const
@@ -333,17 +317,22 @@ inline Color Color::colorWithAlphaUsingAlternativeRounding(Optional<float> alpha
     return alpha ? colorWithAlphaUsingAlternativeRounding(alpha.value()) : *this;
 }
 
-inline RGBA32 Color::rgb() const
+inline const ExtendedColor& Color::asExtended() const
 {
-    // FIXME: We should ASSERT(!isExtended()) here, or produce
-    // an RGBA32 equivalent for an ExtendedColor. Ideally the former,
-    // so we can audit all the rgb() call sites to handle extended.
-    return { static_cast<uint32_t>(m_colorData.rgbaAndFlags >> 32) };
+    ASSERT(isExtended());
+    return *m_colorData.extendedColor;
 }
 
-inline void Color::setRGB(RGBA32 rgb)
+inline const SimpleColor Color::asSimpleColor() const
 {
-    m_colorData.rgbaAndFlags = static_cast<uint64_t>(rgb.value()) << 32;
+    // FIXME: We should ASSERT(!isExtended()) here once we have verified all
+    // call sites are checking isExtended().
+    return { static_cast<uint32_t>(m_colorData.simpleColorAndFlags >> 32) };
+}
+
+inline void Color::setSimpleColor(SimpleColor simpleColor)
+{
+    m_colorData.simpleColorAndFlags = static_cast<uint64_t>(simpleColor.value()) << 32;
     tagAsValid();
 }
 
@@ -354,7 +343,7 @@ inline bool Color::isBlackColor(const Color& color)
         return !extendedColor.red() && !extendedColor.green() && !extendedColor.blue() && extendedColor.alpha() == 1;
     }
 
-    return color.rgb() == Color::black;
+    return color.asSimpleColor() == Color::black;
 }
 
 inline bool Color::isWhiteColor(const Color& color)
@@ -364,7 +353,7 @@ inline bool Color::isWhiteColor(const Color& color)
         return extendedColor.red() == 1 && extendedColor.green() == 1 && extendedColor.blue() == 1 && extendedColor.alpha() == 1;
     }
     
-    return color.rgb() == Color::white;
+    return color.asSimpleColor() == Color::white;
 }
 
 template<class Encoder>
@@ -389,10 +378,8 @@ void Color::encode(Encoder& encoder) const
 
     // FIXME: This should encode whether the color is semantic.
 
-    uint32_t value = rgb().value();
-
     encoder << true;
-    encoder << value;
+    encoder << asSimpleColor().value();
 }
 
 template<class Decoder>
@@ -418,7 +405,7 @@ Optional<Color> Color::decode(Decoder& decoder)
             return WTF::nullopt;
         if (!decoder.decode(colorSpace))
             return WTF::nullopt;
-        return Color(red, green, blue, alpha, colorSpace);
+        return Color { red, green, blue, alpha, colorSpace };
     }
 
     bool isValid;
@@ -426,7 +413,7 @@ Optional<Color> Color::decode(Decoder& decoder)
         return WTF::nullopt;
 
     if (!isValid)
-        return Color();
+        return Color { };
 
     uint32_t value;
     if (!decoder.decode(value))
index b9a1f06..ee11573 100644 (file)
@@ -165,7 +165,7 @@ inline bool operator!=(const ColorComponents& a, const ColorComponents& b)
 inline uint8_t clampedColorComponent(float f)
 {
     // See also colorFloatToRGBAByte().
-    return std::max(0, std::min(static_cast<int>(lroundf(255.0f * f)), 255));
+    return std::clamp(static_cast<int>(lroundf(255.0f * f)), 0, 255);
 }
 
 inline unsigned byteOffsetOfPixel(unsigned x, unsigned y, unsigned rowBytes)
index f7cce41..61c6030 100644 (file)
@@ -160,7 +160,7 @@ public:
         }
 
         if (!m_premultiplyAlpha)
-            pixel = makePremultipliedRGBA(pixel.redComponent(), pixel.greenComponent(), pixel.blueComponent(), pixel.alphaComponent(), false);
+            pixel = makePremultipliedSimpleColor(pixel.redComponent(), pixel.greenComponent(), pixel.blueComponent(), pixel.alphaComponent(), false);
 
         unsigned d = 255 - a;
 
@@ -170,9 +170,9 @@ public:
         a += fastDivideBy255(d * pixel.alphaComponent());
 
         if (m_premultiplyAlpha)
-            *dest = makeRGBA(r, g, b, a).value();
+            *dest = makeSimpleColor(r, g, b, a).value();
         else
-            *dest = makeUnPremultipliedRGBA(r, g, b, a).value();
+            *dest = makeUnpremultipliedSimpleColor(r, g, b, a).value();
     }
 
     static bool isOverSize(const IntSize& size)
@@ -225,9 +225,9 @@ private:
             return 0;
 
         if (m_premultiplyAlpha && a < 255)
-            return makePremultipliedRGBA(r, g, b, a, false).value();
+            return makePremultipliedSimpleColor(r, g, b, a, false).value();
 
-        return makeRGBA(r, g, b, a).value();
+        return makeSimpleColor(r, g, b, a).value();
     }
 
     RefPtr<SharedBuffer::DataSegment> m_pixels;
index 5ded331..4016c7f 100644 (file)
@@ -43,53 +43,53 @@ static inline unsigned unpremultipliedChannel(unsigned c, unsigned a)
     return (fastMultiplyBy255(c) + a - 1) / a;
 }
 
-RGBA32 makePremultipliedRGBA(int r, int g, int b, int a, bool ceiling)
+SimpleColor makePremultipliedSimpleColor(int r, int g, int b, int a, bool ceiling)
 {
-    return makeRGBA(premultipliedChannel(r, a, ceiling), premultipliedChannel(g, a, ceiling), premultipliedChannel(b, a, ceiling), a);
+    return makeSimpleColor(premultipliedChannel(r, a, ceiling), premultipliedChannel(g, a, ceiling), premultipliedChannel(b, a, ceiling), a);
 }
 
-RGBA32 makePremultipliedRGBA(RGBA32 pixelColor)
+SimpleColor makePremultipliedSimpleColor(SimpleColor pixelColor)
 {
     if (pixelColor.isOpaque())
         return pixelColor;
-    return makePremultipliedRGBA(pixelColor.redComponent(), pixelColor.greenComponent(), pixelColor.blueComponent(), pixelColor.alphaComponent());
+    return makePremultipliedSimpleColor(pixelColor.redComponent(), pixelColor.greenComponent(), pixelColor.blueComponent(), pixelColor.alphaComponent());
 }
 
-RGBA32 makeUnPremultipliedRGBA(int r, int g, int b, int a)
+SimpleColor makeUnpremultipliedSimpleColor(int r, int g, int b, int a)
 {
-    return makeRGBA(unpremultipliedChannel(r, a), unpremultipliedChannel(g, a), unpremultipliedChannel(b, a), a);
+    return makeSimpleColor(unpremultipliedChannel(r, a), unpremultipliedChannel(g, a), unpremultipliedChannel(b, a), a);
 }
 
-RGBA32 makeUnPremultipliedRGBA(RGBA32 pixelColor)
+SimpleColor makeUnpremultipliedSimpleColor(SimpleColor pixelColor)
 {
     if (pixelColor.isVisible() && !pixelColor.isOpaque())
-        return makeUnPremultipliedRGBA(pixelColor.redComponent(), pixelColor.greenComponent(), pixelColor.blueComponent(), pixelColor.alphaComponent());
+        return makeUnpremultipliedSimpleColor(pixelColor.redComponent(), pixelColor.greenComponent(), pixelColor.blueComponent(), pixelColor.alphaComponent());
     return pixelColor;
 }
 
-RGBA32 makeRGBA32FromFloats(float r, float g, float b, float a)
+SimpleColor makeSimpleColorFromFloats(float r, float g, float b, float a)
 {
-    return makeRGBA(colorFloatToRGBAByte(r), colorFloatToRGBAByte(g), colorFloatToRGBAByte(b), colorFloatToRGBAByte(a));
+    return makeSimpleColor(colorFloatToSimpleColorByte(r), colorFloatToSimpleColorByte(g), colorFloatToSimpleColorByte(b), colorFloatToSimpleColorByte(a));
 }
 
-RGBA32 makeRGBAFromHSLA(float hue, float saturation, float lightness, float alpha)
+SimpleColor makeSimpleColorFromHSLA(float hue, float saturation, float lightness, float alpha)
 {
     const float scaleFactor = 255.0;
     FloatComponents floatResult = hslToSRGB({ hue, saturation, lightness, alpha });
-    return makeRGBA(
+    return makeSimpleColor(
         round(floatResult.components[0] * scaleFactor),
         round(floatResult.components[1] * scaleFactor),
         round(floatResult.components[2] * scaleFactor),
         round(floatResult.components[3] * scaleFactor));
 }
 
-RGBA32 makeRGBAFromCMYKA(float c, float m, float y, float k, float a)
+SimpleColor makeSimpleColorFromCMYKA(float c, float m, float y, float k, float a)
 {
     double colors = 1 - k;
     int r = static_cast<int>(nextafter(256, 0) * (colors * (1 - c)));
     int g = static_cast<int>(nextafter(256, 0) * (colors * (1 - m)));
     int b = static_cast<int>(nextafter(256, 0) * (colors * (1 - y)));
-    return makeRGBA(r, g, b, static_cast<float>(nextafter(256, 0) * a));
+    return makeSimpleColor(r, g, b, static_cast<float>(nextafter(256, 0) * a));
 }
 
 String SimpleColor::serializationForHTML() const
@@ -135,4 +135,73 @@ String SimpleColor::serializationForRenderTreeAsText() const
     return makeString('#', hex(redComponent(), 2), hex(greenComponent(), 2), hex(blueComponent(), 2));
 }
 
+// originally moved here from the CSS parser
+template <typename CharacterType>
+static inline Optional<SimpleColor> parseHexColorInternal(const CharacterType* name, unsigned length)
+{
+    if (length != 3 && length != 4 && length != 6 && length != 8)
+        return WTF::nullopt;
+    unsigned value = 0;
+    for (unsigned i = 0; i < length; ++i) {
+        if (!isASCIIHexDigit(name[i]))
+            return WTF::nullopt;
+        value <<= 4;
+        value |= toASCIIHexValue(name[i]);
+    }
+    if (length == 6)
+        return SimpleColor { 0xFF000000 | value };
+    if (length == 8) {
+        // We parsed the values into RGBA order, but the SimpleColor type
+        // expects them to be in ARGB order, so we right rotate eight bits.
+        return SimpleColor { value << 24 | value >> 8 };
+    }
+    if (length == 4) {
+        // #abcd converts to ddaabbcc in SimpleColor.
+        return SimpleColor {
+              (value & 0xF) << 28 | (value & 0xF) << 24
+            | (value & 0xF000) << 8 | (value & 0xF000) << 4
+            | (value & 0xF00) << 4 | (value & 0xF00)
+            | (value & 0xF0) | (value & 0xF0) >> 4
+        };
+    }
+    // #abc converts to #aabbcc
+    return SimpleColor {
+          (0xFF000000)
+        | (value & 0xF00) << 12 | (value & 0xF00) << 8
+        | (value & 0xF0) << 8 | (value & 0xF0) << 4
+        | (value & 0xF) << 4 | (value & 0xF)
+    };
+}
+
+Optional<SimpleColor> SimpleColor::parseHexColor(const LChar* name, unsigned length)
+{
+    return parseHexColorInternal(name, length);
+}
+
+Optional<SimpleColor> SimpleColor::parseHexColor(const UChar* name, unsigned length)
+{
+    return parseHexColorInternal(name, length);
+}
+
+Optional<SimpleColor> SimpleColor::parseHexColor(const String& name)
+{
+    unsigned length = name.length();
+    if (!length)
+        return WTF::nullopt;
+    if (name.is8Bit())
+        return parseHexColor(name.characters8(), name.length());
+    return parseHexColor(name.characters16(), name.length());
+}
+
+Optional<SimpleColor> SimpleColor::parseHexColor(const StringView& name)
+{
+    unsigned length = name.length();
+    if (!length)
+        return WTF::nullopt;
+    if (name.is8Bit())
+        return parseHexColor(name.characters8(), name.length());
+    return parseHexColor(name.characters16(), name.length());
+}
+
+
 } // namespace WebCore
index 6b06e63..aa2a21c 100644 (file)
 #include "ColorUtilities.h"
 #include <algorithm>
 #include <cmath>
+#include <unicode/uchar.h>
 #include <wtf/Forward.h>
+#include <wtf/Optional.h>
+#include <wtf/text/LChar.h>
 
 namespace WebCore {
 
 // Color value with 8-bit components for red, green, blue, and alpha.
 // For historical reasons, stored as a 32-bit integer, with alpha in the high bits: ARGB.
+// FIXME: This class should be consolidated with ColorComponents.
 class SimpleColor {
 public:
     constexpr SimpleColor(uint32_t value = 0) : m_value { value } { }
@@ -70,6 +74,11 @@ public:
             return alphaComponent();
     }
 
+    static Optional<SimpleColor> parseHexColor(const String&);
+    static Optional<SimpleColor> parseHexColor(const StringView&);
+    static Optional<SimpleColor> parseHexColor(const LChar*, unsigned);
+    static Optional<SimpleColor> parseHexColor(const UChar*, unsigned);
+
 private:
     uint32_t m_value { 0 };
 };
@@ -77,20 +86,17 @@ private:
 bool operator==(SimpleColor, SimpleColor);
 bool operator!=(SimpleColor, SimpleColor);
 
-// FIXME: Remove this after migrating to the new name.
-using RGBA32 = SimpleColor;
-
-constexpr RGBA32 makeRGB(int r, int g, int b);
-constexpr RGBA32 makeRGBA(int r, int g, int b, int a);
+constexpr SimpleColor makeSimpleColor(int r, int g, int b);
+constexpr SimpleColor makeSimpleColor(int r, int g, int b, int a);
 
-RGBA32 makePremultipliedRGBA(int r, int g, int b, int a, bool ceiling = true);
-RGBA32 makePremultipliedRGBA(RGBA32);
-RGBA32 makeUnPremultipliedRGBA(int r, int g, int b, int a);
-RGBA32 makeUnPremultipliedRGBA(RGBA32);
+SimpleColor makePremultipliedSimpleColor(int r, int g, int b, int a, bool ceiling = true);
+SimpleColor makePremultipliedSimpleColor(SimpleColor);
+SimpleColor makeUnpremultipliedSimpleColor(int r, int g, int b, int a);
+SimpleColor makeUnpremultipliedSimpleColor(SimpleColor);
 
-WEBCORE_EXPORT RGBA32 makeRGBA32FromFloats(float r, float g, float b, float a);
-WEBCORE_EXPORT RGBA32 makeRGBAFromHSLA(float h, float s, float l, float a);
-RGBA32 makeRGBAFromCMYKA(float c, float m, float y, float k, float a);
+WEBCORE_EXPORT SimpleColor makeSimpleColorFromFloats(float r, float g, float b, float a);
+WEBCORE_EXPORT SimpleColor makeSimpleColorFromHSLA(float h, float s, float l, float a);
+SimpleColor makeSimpleColorFromCMYKA(float c, float m, float y, float k, float a);
 
 uint8_t roundAndClampColorChannel(int);
 uint8_t roundAndClampColorChannel(float);
@@ -98,7 +104,7 @@ uint8_t roundAndClampColorChannel(float);
 uint16_t fastMultiplyBy255(uint16_t value);
 uint16_t fastDivideBy255(uint16_t);
 
-uint8_t colorFloatToRGBAByte(float);
+uint8_t colorFloatToSimpleColorByte(float);
 
 inline bool operator==(SimpleColor a, SimpleColor b)
 {
@@ -112,12 +118,12 @@ inline bool operator!=(SimpleColor a, SimpleColor b)
 
 inline uint8_t roundAndClampColorChannel(int value)
 {
-    return std::max(0, std::min(255, value));
+    return std::clamp(value, 0, 255);
 }
 
 inline uint8_t roundAndClampColorChannel(float value)
 {
-    return std::max(0.f, std::min(255.f, std::round(value)));
+    return std::clamp(std::round(value), 0.f, 255.f);
 }
 
 inline uint16_t fastMultiplyBy255(uint16_t value)
@@ -134,21 +140,21 @@ inline uint16_t fastDivideBy255(uint16_t value)
     return approximation + (remainder >> 8);
 }
 
-inline uint8_t colorFloatToRGBAByte(float f)
+inline uint8_t colorFloatToSimpleColorByte(float f)
 {
     // FIXME: Consolidate with clampedColorComponent().
     // We use lroundf and 255 instead of nextafterf(256, 0) to match CG's rounding
-    return std::max(0, std::min(static_cast<int>(lroundf(255.0f * f)), 255));
+    return std::clamp(static_cast<int>(lroundf(255.0f * f)), 0, 255);
 }
 
-constexpr RGBA32 makeRGB(int r, int g, int b)
+constexpr SimpleColor makeSimpleColor(int r, int g, int b)
 {
-    return makeRGBA(r, g, b, 0xFF);
+    return makeSimpleColor(r, g, b, 0xFF);
 }
 
-constexpr RGBA32 makeRGBA(int r, int g, int b, int a)
+constexpr SimpleColor makeSimpleColor(int r, int g, int b, int a)
 {
-    return { static_cast<unsigned>(std::max(0, std::min(a, 0xFF)) << 24 | std::max(0, std::min(r, 0xFF)) << 16 | std::max(0, std::min(g, 0xFF)) << 8 | std::max(0, std::min(b, 0xFF))) };
+    return { static_cast<unsigned>(std::clamp(a, 0, 0xFF) << 24 | std::clamp(r, 0, 0xFF) << 16 | std::clamp(g, 0, 0xFF) << 8 | std::clamp(b, 0, 0xFF)) };
 }
 
 } // namespace WebCore
index 85dcf9c..692c639 100644 (file)
@@ -64,7 +64,7 @@ InbandTextTrackPrivateAVF::~InbandTextTrackPrivateAVF()
     disconnect();
 }
 
-static Optional<SimpleColor> makeRGBA32FromARGBCFArray(CFArrayRef colorArray)
+static Optional<SimpleColor> makeSimpleColorFromARGBCFArray(CFArrayRef colorArray)
 {
     if (CFArrayGetCount(colorArray) < 4)
         return WTF::nullopt;
@@ -80,7 +80,7 @@ static Optional<SimpleColor> makeRGBA32FromARGBCFArray(CFArrayRef colorArray)
         componentArray[i] = component;
     }
 
-    return makeRGBA32FromFloats(componentArray[1], componentArray[2], componentArray[3], componentArray[0]);
+    return makeSimpleColorFromFloats(componentArray[1], componentArray[2], componentArray[3], componentArray[0]);
 }
 
 Ref<InbandGenericCue> InbandTextTrackPrivateAVF::processCueAttributes(CFAttributedStringRef attributedString)
@@ -267,7 +267,7 @@ Ref<InbandGenericCue> InbandTextTrackPrivateAVF::processCueAttributes(CFAttribut
                 if (CFGetTypeID(arrayValue) != CFArrayGetTypeID())
                     continue;
                 
-                auto color = makeRGBA32FromARGBCFArray(arrayValue);
+                auto color = makeSimpleColorFromARGBCFArray(arrayValue);
                 if (!color)
                     continue;
                 cueData->setForegroundColor(*color);
@@ -279,7 +279,7 @@ Ref<InbandGenericCue> InbandTextTrackPrivateAVF::processCueAttributes(CFAttribut
                 if (CFGetTypeID(arrayValue) != CFArrayGetTypeID())
                     continue;
                 
-                auto color = makeRGBA32FromARGBCFArray(arrayValue);
+                auto color = makeSimpleColorFromARGBCFArray(arrayValue);
                 if (!color)
                     continue;
                 cueData->setBackgroundColor(*color);
@@ -291,7 +291,7 @@ Ref<InbandGenericCue> InbandTextTrackPrivateAVF::processCueAttributes(CFAttribut
                 if (CFGetTypeID(arrayValue) != CFArrayGetTypeID())
                     continue;
                 
-                auto color = makeRGBA32FromARGBCFArray(arrayValue);
+                auto color = makeSimpleColorFromARGBCFArray(arrayValue);
                 if (!color)
                     continue;
                 cueData->setHighlightColor(*color);
index 3e68849..8ee4af9 100644 (file)
@@ -80,9 +80,9 @@ void ImageBufferCairoImageSurfaceBackend::platformTransformColorSpace(const std:
         unsigned* row = reinterpret_cast_ptr<unsigned*>(dataSrc + stride * y);
         for (int x = 0; x < m_logicalSize.width(); x++) {
             unsigned* pixel = row + x;
-            auto pixelColor = makeUnPremultipliedRGBA(*pixel);
-            pixelColor = makeRGBA(lookUpTable[pixelColor.redComponent()], lookUpTable[pixelColor.greenComponent()], lookUpTable[pixelColor.blueComponent()], pixelColor.alphaComponent());
-            *pixel = makePremultipliedRGBA(pixelColor).value();
+            auto pixelColor = makeUnpremultipliedSimpleColor(*pixel);
+            pixelColor = makeSimpleColor(lookUpTable[pixelColor.redComponent()], lookUpTable[pixelColor.greenComponent()], lookUpTable[pixelColor.blueComponent()], pixelColor.alphaComponent());
+            *pixel = makePremultipliedSimpleColor(pixelColor).value();
         }
     }
     cairo_surface_mark_dirty_rectangle(m_surface.get(), 0, 0, m_logicalSize.width(), m_logicalSize.height());
index d89810a..81dc89e 100644 (file)
@@ -53,8 +53,8 @@ Color nativeImageSinglePixelSolidColor(const NativeImagePtr& image)
     if (cairo_surface_get_type(image.get()) != CAIRO_SURFACE_TYPE_IMAGE)
         return Color();
 
-    RGBA32* pixel = reinterpret_cast_ptr<RGBA32*>(cairo_image_surface_get_data(image.get()));
-    return makeUnPremultipliedRGBA(*pixel);
+    SimpleColor* pixel = reinterpret_cast_ptr<SimpleColor*>(cairo_image_surface_get_data(image.get()));
+    return makeUnpremultipliedSimpleColor(*pixel);
 }
 
 void drawNativeImage(const NativeImagePtr& image, GraphicsContext& context, const FloatRect& destRect, const FloatRect& srcRect, const IntSize& imageSize, const ImagePaintingOptions& options)
index ff38d4e..822c04c 100644 (file)
@@ -51,8 +51,10 @@ RetainPtr<CGColorRef> TinyLRUCachePolicy<WebCore::Color, RetainPtr<CGColorRef>>:
 
 namespace WebCore {
 
-static RGBA32 makeRGBAFromCGColor(CGColorRef color)
+static SimpleColor makeSimpleColorFromCGColor(CGColorRef color)
 {
+    // FIXME: ExtendedColor - needs to handle color spaces.
+
     size_t numComponents = CGColorGetNumberOfComponents(color);
     const CGFloat* components = CGColorGetComponents(color);
 
@@ -77,27 +79,31 @@ static RGBA32 makeRGBAFromCGColor(CGColorRef color)
     }
 
     static const double scaleFactor = nextafter(256.0, 0.0);
-    return makeRGBA(r * scaleFactor, g * scaleFactor, b * scaleFactor, a * scaleFactor);
+    return makeSimpleColor(r * scaleFactor, g * scaleFactor, b * scaleFactor, a * scaleFactor);
 }
 
 Color::Color(CGColorRef color)
 {
+    // FIXME: ExtendedColor - needs to handle color spaces.
+
     if (!color) {
-        m_colorData.rgbaAndFlags = invalidRGBAColor;
+        m_colorData.simpleColorAndFlags = invalidSimpleColor;
         return;
     }
 
-    setRGB(makeRGBAFromCGColor(color));
+    setSimpleColor(makeSimpleColorFromCGColor(color));
 }
 
 Color::Color(CGColorRef color, SemanticTag)
 {
+    // FIXME: ExtendedColor - needs to handle color spaces.
+
     if (!color) {
-        m_colorData.rgbaAndFlags = invalidRGBAColor;
+        m_colorData.simpleColorAndFlags = invalidSimpleColor;
         return;
     }
 
-    setRGB(makeRGBAFromCGColor(color));
+    setSimpleColor(makeSimpleColorFromCGColor(color));
     setIsSemantic();
 }
 
@@ -124,7 +130,7 @@ static CGColorRef leakCGColor(const Color& color)
 CGColorRef cachedCGColor(const Color& color)
 {
     if (!color.isExtended()) {
-        switch (color.rgb().value()) {
+        switch (color.asSimpleColor().value()) {
         case Color::transparent.value(): {
             static CGColorRef transparentCGColor = leakCGColor(color);
             return transparentCGColor;
@@ -140,7 +146,7 @@ CGColorRef cachedCGColor(const Color& color)
         }
     }
 
-    ASSERT(color.isExtended() || color.rgb().value());
+    ASSERT(color.isExtended() || color.asSimpleColor().value());
 
     static NeverDestroyed<TinyLRUCache<Color, RetainPtr<CGColorRef>, 32>> cache;
     return cache.get().get(color).get();
index 268e722..15b68a0 100644 (file)
@@ -28,10 +28,12 @@ namespace WebCore {
 
 Color::Color(const GdkRGBA& c)
 {
-    setRGB(makeRGBA(static_cast<int>(c.red * 255),
+    setSimpleColor(makeSimpleColor(
+        static_cast<int>(c.red * 255),
         static_cast<int>(c.green * 255),
         static_cast<int>(c.blue * 255),
-        static_cast<int>(c.alpha * 255)));
+        static_cast<int>(c.alpha * 255)
+    ));
 }
 
 Color::operator GdkRGBA() const
index 1874952..8abc467 100644 (file)
@@ -53,8 +53,10 @@ bool usesTestModeFocusRingColor()
     return useOldAquaFocusRingColor;
 }
 
-static RGBA32 makeRGBAFromNSColor(NSColor *color)
+static SimpleColor makeSimpleColorFromNSColor(NSColor *color)
 {
+    // FIXME: ExtendedColor - needs to handle color spaces.
+
     ASSERT_ARG(color, color);
 
     CGFloat redComponent;
@@ -80,24 +82,28 @@ static RGBA32 makeRGBAFromNSColor(NSColor *color)
         NSUInteger pixel[4];
         [offscreenRep getPixel:pixel atX:0 y:0];
 
-        return makeRGBA(pixel[0], pixel[1], pixel[2], pixel[3]);
+        return makeSimpleColor(pixel[0], pixel[1], pixel[2], pixel[3]);
     }
 
     [rgbColor getRed:&redComponent green:&greenComponent blue:&blueComponent alpha:&alpha];
     END_BLOCK_OBJC_EXCEPTIONS;
 
     static const double scaleFactor = nextafter(256.0, 0.0);
-    return makeRGBA(scaleFactor * redComponent, scaleFactor * greenComponent, scaleFactor * blueComponent, scaleFactor * alpha);
+    return makeSimpleColor(scaleFactor * redComponent, scaleFactor * greenComponent, scaleFactor * blueComponent, scaleFactor * alpha);
 }
 
 Color colorFromNSColor(NSColor *color)
 {
-    return Color(makeRGBAFromNSColor(color));
+    // FIXME: ExtendedColor - needs to handle color spaces.
+
+    return Color(makeSimpleColorFromNSColor(color));
 }
 
 Color semanticColorFromNSColor(NSColor *color)
 {
-    return Color(makeRGBAFromNSColor(color), Color::Semantic);
+    // FIXME: ExtendedColor - needs to handle color spaces.
+
+    return Color(makeSimpleColorFromNSColor(color), Color::Semantic);
 }
 
 NSColor *nsColor(const Color& color)
index e328b17..05833dd 100644 (file)
@@ -36,7 +36,7 @@ namespace WebCore {
 
 Color::Color(D2D1_COLOR_F color)
 {
-    setRGB(makeRGBA(color.r * 255, color.g * 255, color.b * 255, color.a * 255));
+    setSimpleColor(makeSimpleColor(color.r * 255, color.g * 255, color.b * 255, color.a * 255));
 }
 
 Color::operator D2D1_COLOR_F() const
index 86bdf74..baeb11a 100644 (file)
@@ -198,8 +198,8 @@ void GraphicsContext::drawDotsForDocumentMarker(const FloatRect& rect, DocumentM
     CGContextRef context = platformContext();
     CGContextSaveGState(context);
 
-    static constexpr SimpleColor spellingPatternColor { makeRGB(255, 0, 0) };
-    static constexpr SimpleColor grammarPatternColor { makeRGB(0, 128, 0) };
+    static constexpr SimpleColor spellingPatternColor { makeSimpleColor(255, 0, 0) };
+    static constexpr SimpleColor grammarPatternColor { makeSimpleColor(0, 128, 0) };
 
     const SimpleColor& patternColor = style.mode == DocumentMarkerLineStyle::Mode::Grammar ? grammarPatternColor : spellingPatternColor;
     CGContextSetRGBStrokeColor(context, patternColor.redComponent(), patternColor.greenComponent(), patternColor.blueComponent(), patternColor.alphaComponent());
index 0ae3949..4d8c31d 100644 (file)
@@ -132,7 +132,7 @@ void PlatformContextDirect2D::setActiveLayer(COMPtr<ID2D1Layer>&& layer)
 
 COMPtr<ID2D1SolidColorBrush> PlatformContextDirect2D::brushWithColor(const D2D1_COLOR_F& color)
 {
-    RGBA32 colorKey = makeRGBA32FromFloats(color.r, color.g, color.b, color.a);
+    SimpleColor colorKey = makeSimpleColorFromFloats(color.r, color.g, color.b, color.a);
 
     if (!colorKey) {
         if (!m_zeroBrush)
index 2f89a46..4a8ccc7 100644 (file)
@@ -34,6 +34,8 @@ namespace WebCore {
 
 Color colorFromUIColor(UIColor *color)
 {
+    // FIXME: ExtendedColor - needs to handle color spaces.
+
     // FIXME: Make this work for a UIColor that was created from a pattern or a DispayP3 color.
     CGFloat redComponent;
     CGFloat greenComponent;
@@ -43,7 +45,7 @@ Color colorFromUIColor(UIColor *color)
     [color getRed:&redComponent green:&greenComponent blue:&blueComponent alpha:&alpha];
 
     static const double scaleFactor = nextafter(256.0, 0.0);
-    return makeRGBA(scaleFactor * redComponent, scaleFactor * greenComponent, scaleFactor * blueComponent, scaleFactor * alpha);
+    return makeSimpleColor(scaleFactor * redComponent, scaleFactor * greenComponent, scaleFactor * blueComponent, scaleFactor * alpha);
 }
 
 } // namespace WebCore
index f4517a7..34d8d1c 100644 (file)
@@ -1248,7 +1248,7 @@ void InlineTextBox::paintMarkedTextDecoration(PaintInfo& paintInfo, const FloatR
 void InlineTextBox::paintCompositionBackground(PaintInfo& paintInfo, const FloatPoint& boxOrigin)
 {
     if (!renderer().frame().editor().compositionUsesCustomHighlights()) {
-        paintMarkedTextBackground(paintInfo, boxOrigin, Color::compositionFill, clampedOffset(renderer().frame().editor().compositionStart()), clampedOffset(renderer().frame().editor().compositionEnd()));
+        paintMarkedTextBackground(paintInfo, boxOrigin, CompositionHighlight::defaultCompositionFillColor, clampedOffset(renderer().frame().editor().compositionStart()), clampedOffset(renderer().frame().editor().compositionEnd()));
         return;
     }
 
index ed733e7..8131017 100644 (file)
@@ -4079,7 +4079,7 @@ void RenderLayer::paintResizer(GraphicsContext& context, const LayoutPoint& pain
         context.clip(resizerAbsRect);
         LayoutRect largerCorner = resizerAbsRect;
         largerCorner.setSize(LayoutSize(largerCorner.width() + 1_lu, largerCorner.height() + 1_lu));
-        context.setStrokeColor(Color(makeRGB(217, 217, 217)));
+        context.setStrokeColor(makeSimpleColor(217, 217, 217));
         context.setStrokeThickness(1.0f);
         context.setFillColor(Color::transparent);
         context.drawRect(snappedIntRect(largerCorner));
index 5ef3822..6dc11b1 100644 (file)
@@ -3085,7 +3085,7 @@ OptionSet<RenderLayer::PaintLayerFlag> RenderLayerBacking::paintFlagsForLayer(co
 struct PatternDescription {
     ASCIILiteral name;
     FloatSize phase;
-    RGBA32 fillColor;
+    SimpleColor fillColor;
 };
 
 static RefPtr<Pattern> patternForDescription(PatternDescription description, FloatSize contentOffset, GraphicsContext& destContext)
@@ -3145,7 +3145,7 @@ static RefPtr<Pattern> patternForTouchAction(TouchAction touchAction, FloatSize
         return 0;
     };
 
-    constexpr auto fillColor = makeRGBA(0, 0, 0, 128);
+    constexpr auto fillColor = makeSimpleColor(0, 0, 0, 128);
 
     static const PatternDescription patternDescriptions[] = {
         { "auto"_s, { }, fillColor },
@@ -3165,7 +3165,7 @@ static RefPtr<Pattern> patternForTouchAction(TouchAction touchAction, FloatSize
 
 static RefPtr<Pattern> patternForEventListenerRegionType(EventListenerRegionType type, FloatSize contentOffset, GraphicsContext& destContext)
 {
-    constexpr auto fillColor = makeRGBA(0, 128, 0, 128);
+    constexpr auto fillColor = makeSimpleColor(0, 128, 0, 128);
 
     auto patternAndPhase = [&]() -> PatternDescription {
         switch (type) {
index 31066a4..ae22e8c 100644 (file)
 namespace WebCore {
 
 static const int textFieldBorderSize = 1;
-static const Color textFieldBorderColor = makeRGB(205, 199, 194);
-static const Color textFieldBorderDisabledColor = makeRGB(213, 208, 204);
-static const Color textFieldBackgroundColor = makeRGB(255, 255, 255);
-static const Color textFieldBackgroundDisabledColor = makeRGB(252, 252, 252);
+static const Color textFieldBorderColor = makeSimpleColor(205, 199, 194);
+static const Color textFieldBorderDisabledColor = makeSimpleColor(213, 208, 204);
+static const Color textFieldBackgroundColor = makeSimpleColor(255, 255, 255);
+static const Color textFieldBackgroundDisabledColor = makeSimpleColor(252, 252, 252);
 static const unsigned menuListButtonArrowSize = 16;
 static const int menuListButtonFocusOffset = -3;
 static const unsigned menuListButtonPadding = 5;
@@ -57,23 +57,23 @@ static const unsigned progressActivityBlocks = 5;
 static const unsigned progressAnimationFrameCount = 75;
 static const Seconds progressAnimationFrameRate = 33_ms; // 30fps.
 static const unsigned progressBarSize = 6;
-static const Color progressBarBorderColor = makeRGB(205, 199, 194);
-static const Color progressBarBackgroundColor = makeRGB(225, 222, 219);
+static const Color progressBarBorderColor = makeSimpleColor(205, 199, 194);
+static const Color progressBarBackgroundColor = makeSimpleColor(225, 222, 219);
 static const unsigned sliderTrackSize = 6;
 static const int sliderTrackBorderSize = 1;
-static const Color sliderTrackBorderColor = makeRGB(205, 199, 194);
-static const Color sliderTrackBackgroundColor = makeRGB(225, 222, 219);
+static const Color sliderTrackBorderColor = makeSimpleColor(205, 199, 194);
+static const Color sliderTrackBackgroundColor = makeSimpleColor(225, 222, 219);
 static const int sliderTrackFocusOffset = 2;
 static const int sliderThumbSize = 20;
 static const int sliderThumbBorderSize = 1;
-static const Color sliderThumbBorderColor = makeRGB(205, 199, 194);
-static const Color sliderThumbBackgroundColor = makeRGB(244, 242, 241);
-static const Color sliderThumbBackgroundHoveredColor = makeRGB(248, 248, 247);
-static const Color sliderThumbBackgroundDisabledColor = makeRGB(244, 242, 241);
+static const Color sliderThumbBorderColor = makeSimpleColor(205, 199, 194);
+static const Color sliderThumbBackgroundColor = makeSimpleColor(244, 242, 241);
+static const Color sliderThumbBackgroundHoveredColor = makeSimpleColor(248, 248, 247);
+static const Color sliderThumbBackgroundDisabledColor = makeSimpleColor(244, 242, 241);
 #if ENABLE(VIDEO)
-static const Color mediaSliderTrackBackgroundcolor = makeRGB(77, 77, 77);
-static const Color mediaSliderTrackBufferedColor = makeRGB(173, 173, 173);
-static const Color mediaSliderTrackActiveColor = makeRGB(252, 252, 252);
+static const Color mediaSliderTrackBackgroundcolor = makeSimpleColor(77, 77, 77);
+static const Color mediaSliderTrackBufferedColor = makeSimpleColor(173, 173, 173);
+static const Color mediaSliderTrackActiveColor = makeSimpleColor(252, 252, 252);
 #endif
 
 #if !PLATFORM(GTK)
index a808dd3..2b05b0a 100644 (file)
@@ -551,7 +551,7 @@ void RenderThemeMac::updateCachedSystemFontDescription(CSSValueID cssValueId, Fo
     fontDescription.setIsItalic([fontManager traitsOfFont:font] & NSItalicFontMask);
 }
 
-static RGBA32 menuBackgroundColor()
+static SimpleColor menuBackgroundColor()
 {
     RetainPtr<NSBitmapImageRep> offscreenRep = adoptNS([[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil pixelsWide:1 pixelsHigh:1
         bitsPerSample:8 samplesPerPixel:4 hasAlpha:YES isPlanar:NO colorSpaceName:NSDeviceRGBColorSpace bytesPerRow:4 bitsPerPixel:32]);
@@ -568,7 +568,7 @@ static RGBA32 menuBackgroundColor()
     NSUInteger pixel[4];
     [offscreenRep getPixel:pixel atX:0 y:0];
 
-    return makeRGBA(pixel[0], pixel[1], pixel[2], pixel[3]);
+    return makeSimpleColor(pixel[0], pixel[1], pixel[2], pixel[3]);
 }
 
 Color RenderThemeMac::systemColor(CSSValueID cssValueID, OptionSet<StyleColor::Options> options) const
index 9560928..02b8f6a 100644 (file)
@@ -1,3 +1,14 @@
+2020-05-24  Sam Weinig  <weinig@apple.com>
+
+        Extended Color Cleanup: Use the name SimpleColor consistently
+        https://bugs.webkit.org/show_bug.cgi?id=212337
+
+        Reviewed by Anders Carlsson.
+
+        * UIProcess/ios/WKContentViewInteraction.mm:
+        (compositionHighlights):
+        Update for new name of CompositionHighlight::defaultCompositionFillColor.
+
 2020-05-24  Rob Buis  <rbuis@igalia.com>
 
         Remove NetworkProcess/FileAPI
index dc192a9..dffe79a 100644 (file)
@@ -4624,7 +4624,7 @@ static Vector<WebCore::CompositionHighlight> compositionHighlights(NSAttributedS
         if (!attributes[NSMarkedClauseSegmentAttributeName])
             return;
 
-        WebCore::Color highlightColor { WebCore::Color::compositionFill };
+        WebCore::Color highlightColor { WebCore::CompositionHighlight::defaultCompositionFillColor };
         if (UIColor *uiColor = attributes[NSBackgroundColorAttributeName])
             highlightColor = WebCore::colorFromUIColor(uiColor);
         highlights.append({ static_cast<unsigned>(range.location), static_cast<unsigned>(NSMaxRange(range)), highlightColor });
index d41fdbd..8e0f111 100644 (file)
@@ -1,3 +1,14 @@
+2020-05-24  Sam Weinig  <weinig@apple.com>
+
+        Extended Color Cleanup: Use the name SimpleColor consistently
+        https://bugs.webkit.org/show_bug.cgi?id=212337
+
+        Reviewed by Anders Carlsson.
+
+        * TestWebKitAPI/Tests/WebCore/ColorTests.cpp:
+        (TestWebKitAPI::TEST):
+        Update test for rename of makeRGBAFromHSLA to makeSimpleColorFromHSLA.
+
 2020-05-25  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>
 
         [Flatpak][GStreamer] compilation fails when GST_BUILD_PATH is defined
index b832fa3..3dd1d73 100644 (file)
@@ -45,7 +45,7 @@ TEST(Color, RGBToHSL_White)
     
     EXPECT_FLOAT_EQ(color.lightness(), lightness);
     
-    auto roundTrippedColor = Color(makeRGBAFromHSLA(hue, saturation, lightness, alpha));
+    auto roundTrippedColor = Color(makeSimpleColorFromHSLA(hue, saturation, lightness, alpha));
     EXPECT_EQ(color, roundTrippedColor);
 }
 
@@ -61,7 +61,7 @@ TEST(Color, RGBToHSL_Black)
 
     EXPECT_FLOAT_EQ(color.lightness(), lightness);
 
-    auto roundTrippedColor = Color(makeRGBAFromHSLA(hue, saturation, lightness, alpha));
+    auto roundTrippedColor = Color(makeSimpleColorFromHSLA(hue, saturation, lightness, alpha));
     EXPECT_EQ(color, roundTrippedColor);
 }
 
@@ -77,7 +77,7 @@ TEST(Color, RGBToHSL_Red)
 
     EXPECT_FLOAT_EQ(color.lightness(), lightness);
 
-    auto roundTrippedColor = Color(makeRGBAFromHSLA(hue, saturation, lightness, alpha));
+    auto roundTrippedColor = Color(makeSimpleColorFromHSLA(hue, saturation, lightness, alpha));
     EXPECT_EQ(color, roundTrippedColor);
 }
 
@@ -93,7 +93,7 @@ TEST(Color, RGBToHSL_Green)
 
     EXPECT_FLOAT_EQ(color.lightness(), lightness);
 
-    auto roundTrippedColor = Color(makeRGBAFromHSLA(hue, saturation, lightness, alpha));
+    auto roundTrippedColor = Color(makeSimpleColorFromHSLA(hue, saturation, lightness, alpha));
     EXPECT_EQ(color, roundTrippedColor);
 }
 
@@ -109,7 +109,7 @@ TEST(Color, RGBToHSL_Blue)
 
     EXPECT_FLOAT_EQ(color.lightness(), lightness);
 
-    auto roundTrippedColor = Color(makeRGBAFromHSLA(hue, saturation, lightness, alpha));
+    auto roundTrippedColor = Color(makeSimpleColorFromHSLA(hue, saturation, lightness, alpha));
     EXPECT_EQ(color, roundTrippedColor);
 }
 
@@ -125,7 +125,7 @@ TEST(Color, RGBToHSL_DarkGray)
     
     EXPECT_FLOAT_EQ(color.lightness(), lightness);
 
-    auto roundTrippedColor = Color(makeRGBAFromHSLA(hue, saturation, lightness, alpha));
+    auto roundTrippedColor = Color(makeSimpleColorFromHSLA(hue, saturation, lightness, alpha));
     EXPECT_EQ(color, roundTrippedColor);
 }
 
@@ -141,7 +141,7 @@ TEST(Color, RGBToHSL_Gray)
 
     EXPECT_FLOAT_EQ(color.lightness(), lightness);
 
-    auto roundTrippedColor = Color(makeRGBAFromHSLA(hue, saturation, lightness, alpha));
+    auto roundTrippedColor = Color(makeSimpleColorFromHSLA(hue, saturation, lightness, alpha));
     EXPECT_EQ(color, roundTrippedColor);
 }
 
@@ -157,7 +157,7 @@ TEST(Color, RGBToHSL_LightGray)
 
     EXPECT_FLOAT_EQ(color.lightness(), lightness);
 
-    auto roundTrippedColor = Color(makeRGBAFromHSLA(hue, saturation, lightness, alpha));
+    auto roundTrippedColor = Color(makeSimpleColorFromHSLA(hue, saturation, lightness, alpha));
     EXPECT_EQ(color, roundTrippedColor);
 }