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