Title: [271093] trunk/Source/WebCore
Revision
271093
Author
wei...@apple.com
Date
2020-12-27 10:00:07 -0800 (Sun, 27 Dec 2020)

Log Message

Remove one more place needed when adding new color types
https://bugs.webkit.org/show_bug.cgi?id=220156

Reviewed by Simon Fraser.

* platform/graphics/Color.h:
(WebCore::Color::Color):
Missed this in the last pass. Replace specific overloads with a conditional template function contructor.

* platform/graphics/ColorTypes.h:
Adds a few traits to help identify color types.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (271092 => 271093)


--- trunk/Source/WebCore/ChangeLog	2020-12-26 20:40:28 UTC (rev 271092)
+++ trunk/Source/WebCore/ChangeLog	2020-12-27 18:00:07 UTC (rev 271093)
@@ -1,3 +1,17 @@
+2020-12-27  Sam Weinig  <wei...@apple.com>
+
+        Remove one more place needed when adding new color types
+        https://bugs.webkit.org/show_bug.cgi?id=220156
+
+        Reviewed by Simon Fraser.
+
+        * platform/graphics/Color.h:
+        (WebCore::Color::Color):
+        Missed this in the last pass. Replace specific overloads with a conditional template function contructor.
+
+        * platform/graphics/ColorTypes.h:
+        Adds a few traits to help identify color types.
+
 2020-12-26  Alexey Shvayka  <shvaikal...@gmail.com>
 
         [WebIDL] Remove [CustomToStringName] and Location-specific extended attributes

Modified: trunk/Source/WebCore/platform/graphics/Color.h (271092 => 271093)


--- trunk/Source/WebCore/platform/graphics/Color.h	2020-12-26 20:40:28 UTC (rev 271092)
+++ trunk/Source/WebCore/platform/graphics/Color.h	2020-12-27 18:00:07 UTC (rev 271093)
@@ -77,10 +77,10 @@
     Color(Optional<SRGBA<uint8_t>>, SemanticTag);
 
     Color(ColorComponents<float>, ColorSpace);
-    Color(const SRGBA<float>&);
-    Color(const LinearSRGBA<float>&);
-    Color(const DisplayP3<float>&);
 
+    template<typename ColorType, typename std::enable_if_t<IsColorTypeWithComponentType<ColorType, float>>* = nullptr>
+    Color(const ColorType&);
+
     explicit Color(WTF::HashTableEmptyValueType);
     explicit Color(WTF::HashTableDeletedValueType);
     bool isHashTableDeletedValue() const { return m_colorData.inlineColorAndFlags == deletedHashValue; }
@@ -275,21 +275,12 @@
     setExtendedColor(ExtendedColor::create(components, colorSpace));
 }
 
-inline Color::Color(const SRGBA<float>& color)
+template<typename ColorType, typename std::enable_if_t<IsColorTypeWithComponentType<ColorType, float>>*>
+inline Color::Color(const ColorType& color)
 {
     setExtendedColor(ExtendedColor::create(color));
 }
 
-inline Color::Color(const LinearSRGBA<float>& color)
-{
-    setExtendedColor(ExtendedColor::create(color));
-}
-
-inline Color::Color(const DisplayP3<float>& color)
-{
-    setExtendedColor(ExtendedColor::create(color));
-}
-
 inline Color::Color(Ref<ExtendedColor>&& extendedColor)
 {
     setExtendedColor(WTFMove(extendedColor));

Modified: trunk/Source/WebCore/platform/graphics/ColorTypes.h (271092 => 271093)


--- trunk/Source/WebCore/platform/graphics/ColorTypes.h	2020-12-26 20:40:28 UTC (rev 271092)
+++ trunk/Source/WebCore/platform/graphics/ColorTypes.h	2020-12-27 18:00:07 UTC (rev 271093)
@@ -43,6 +43,22 @@
     static constexpr float maxValue = 1.0f;
 };
 
+template<typename, typename = void> inline constexpr bool HasColorSpaceMember = false;
+template<typename T> inline constexpr bool HasColorSpaceMember<T, std::void_t<decltype(std::declval<T>().colorSpace)>> = true;
+
+template<typename, typename = void> inline constexpr bool IsConvertibleToColorComponents = false;
+template<typename T> inline constexpr bool IsConvertibleToColorComponents<T, std::void_t<decltype(asColorComponents(std::declval<T>()))>> = true;
+
+template<typename, typename = void> inline constexpr bool HasComponentTypeMember = false;
+template<typename T> inline constexpr bool HasComponentTypeMember<T, std::void_t<typename T::ComponentType>> = true;
+
+template<typename T, typename U, bool enabled> inline constexpr bool HasComponentTypeValue = false;
+template<typename T, typename U> inline constexpr bool HasComponentTypeValue<T, U, true> = std::is_same_v<typename T::ComponentType, U>;
+template<typename T, typename U> inline constexpr bool HasComponentType = HasComponentTypeValue<T, U, HasComponentTypeMember<T>>;
+
+template<typename T> inline constexpr bool IsColorType = HasColorSpaceMember<T> && IsConvertibleToColorComponents<T> && HasComponentTypeMember<T>;
+template<typename T, typename U> inline constexpr bool IsColorTypeWithComponentType = HasColorSpaceMember<T> && IsConvertibleToColorComponents<T> && HasComponentType<T, U>;
+
 template<typename Parent> struct ColorWithAlphaHelper {
     // Helper to allow convenient syntax for working with color types.
     // e.g. auto yellowWith50PercentAlpha = Color::yellow.colorWithAlphaByte(128);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to