#pragma once
#include "ColorTypes.h"
namespace WebCore {
float linearToRGBColorComponent(float);
float rgbToLinearColorComponent(float);
WEBCORE_EXPORT XYZA<float> toXYZA(const SRGBA<float>&);
WEBCORE_EXPORT SRGBA<float> toSRGBA(const XYZA<float>&);
WEBCORE_EXPORT LinearSRGBA<float> toLinearSRGBA(const SRGBA<float>&);
WEBCORE_EXPORT HSLA<float> toHSLA(const SRGBA<float>&);
WEBCORE_EXPORT CMYKA<float> toCMYKA(const SRGBA<float>&);
WEBCORE_EXPORT XYZA<float> toXYZA(const LinearSRGBA<float>&);
WEBCORE_EXPORT LinearSRGBA<float> toLinearSRGBA(const XYZA<float>&);
WEBCORE_EXPORT SRGBA<float> toSRGBA(const LinearSRGBA<float>&);
WEBCORE_EXPORT XYZA<float> toXYZA(const DisplayP3<float>&);
WEBCORE_EXPORT DisplayP3<float> toDisplayP3(const XYZA<float>&);
WEBCORE_EXPORT LinearDisplayP3<float> toLinearDisplayP3(const DisplayP3<float>&);
WEBCORE_EXPORT XYZA<float> toXYZA(const LinearDisplayP3<float>&);
WEBCORE_EXPORT LinearDisplayP3<float> toLinearDisplayP3(const XYZA<float>&);
WEBCORE_EXPORT DisplayP3<float> toDisplayP3(const LinearDisplayP3<float>&);
WEBCORE_EXPORT XYZA<float> toXYZA(const HSLA<float>&);
WEBCORE_EXPORT HSLA<float> toHSLA(const XYZA<float>&);
WEBCORE_EXPORT SRGBA<float> toSRGBA(const HSLA<float>&);
WEBCORE_EXPORT XYZA<float> toXYZA(const CMYKA<float>&);
WEBCORE_EXPORT CMYKA<float> toCMYKA(const XYZA<float>&);
WEBCORE_EXPORT SRGBA<float> toSRGBA(const CMYKA<float>&);
constexpr SRGBA<float> toSRGBA(const SRGBA<float>& color) { return color; }
constexpr LinearSRGBA<float> toLinearSRGBA(const LinearSRGBA<float>& color) { return color; }
constexpr DisplayP3<float> toDisplayP3(const DisplayP3<float>& color) { return color; }
constexpr LinearDisplayP3<float> toLinearDisplayP3(const LinearDisplayP3<float>& color) { return color; }
constexpr HSLA<float> toHSLA(const HSLA<float>& color) { return color; }
constexpr CMYKA<float> toCMYKA(const CMYKA<float>& color) { return color; }
constexpr XYZA<float> toXYZA(const XYZA<float>& color) { return color; }
template<typename T> SRGBA<float> toSRGBA(const T& color)
{
return toSRGBA(toXYZA(color));
}
template<typename T> LinearSRGBA<float> toLinearSRGBA(const T& color)
{
return toLinearSRGBA(toXYZA(color));
}
template<typename T> DisplayP3<float> toDisplayP3(const T& color)
{
return toDisplayP3(toXYZA(color));
}
template<typename T> LinearDisplayP3<float> toLinearDisplayP3(const T& color)
{
return toLinearDisplayP3(toXYZA(color));
}
template<typename T> HSLA<float> toHSLA(const T& color)
{
return toHSLA(toXYZA(color));
}
template<typename T> CMYKA<float> toCMYKA(const T& color)
{
return toCMYKA(toXYZA(color));
}
}