File indexing completed on 2024-05-12 04:44:33

0001 // SPDX-FileCopyrightText: Lukas Sommer <sommerluk@gmail.com>
0002 // SPDX-License-Identifier: BSD-2-Clause OR MIT
0003 
0004 #ifndef HELPERQTTYPES_H
0005 #define HELPERQTTYPES_H
0006 
0007 #include <qcolor.h>
0008 #include <qlist.h>
0009 
0010 /** @internal
0011  *
0012  * @file
0013  *
0014  * Type declarations for types that Qt uses in its API and that have
0015  * changed between Qt5 and Qt6. */
0016 
0017 namespace PerceptualColor
0018 {
0019 
0020 /** @internal
0021  *
0022  * The type that <tt>QColor</tt> uses for floating point values.
0023  *
0024  * This type might vary: On Qt6, it’s <tt>float</tt> while on Qt5 it
0025  * is <tt>qreal</tt> which might be either <tt>float</tt> or <tt>double</tt>
0026  * depending on the options with which Qt was compiled. */
0027 using QColorFloatType = decltype(std::declval<QColor>().redF());
0028 static_assert(std::is_floating_point<QColorFloatType>());
0029 static_assert( //
0030     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().redF())>);
0031 static_assert( //
0032     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().greenF())>);
0033 static_assert( //
0034     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().blueF())>);
0035 static_assert( //
0036     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().alphaF())>);
0037 static_assert( //
0038     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().valueF())>);
0039 static_assert( //
0040     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().lightnessF())>);
0041 static_assert( //
0042     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().saturationF())>);
0043 static_assert( //
0044     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().hsvSaturationF())>);
0045 static_assert( //
0046     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().hslSaturationF())>);
0047 static_assert( //
0048     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().hsvHueF())>);
0049 static_assert( //
0050     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().hslHueF())>);
0051 static_assert( //
0052     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().hueF())>);
0053 static_assert( //
0054     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().magentaF())>);
0055 static_assert( //
0056     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().cyanF())>);
0057 static_assert( //
0058     std::is_same_v<QColorFloatType, decltype(std::declval<QColor>().yellowF())>);
0059 
0060 /** @internal
0061  *
0062  * The type that <tt>QList</tt> uses for index.
0063  *
0064  * This type might vary between Qt5 and Qt6. */
0065 using QListSizeType = decltype(std::declval<QList<int>>().count());
0066 static_assert( //
0067     std::is_same_v<QListSizeType, decltype(std::declval<QList<int>>().count())>);
0068 static_assert( //
0069     std::is_same_v<QListSizeType, decltype(std::declval<QList<int>>().size())>);
0070 static_assert( //
0071     std::is_same_v<QListSizeType, decltype(std::declval<QList<int>>().indexOf(0))>);
0072 static_assert( //
0073     std::is_same_v<QListSizeType, decltype(std::declval<QList<int>>().lastIndexOf(0))>);
0074 
0075 /** @internal
0076  *
0077  * The type that <tt>QString</tt> uses for length.
0078  *
0079  * This type might vary between Qt5 and Qt6.
0080  *
0081  * @sa @ref QStringSize */
0082 using QStringLength = decltype(std::declval<QString>().length());
0083 static_assert( //
0084     std::is_same_v<QStringLength, decltype(std::declval<QString>().length())>);
0085 static_assert( //
0086     std::is_same_v<QStringLength, decltype(std::declval<QString>().size())>);
0087 
0088 /** @internal
0089  *
0090  * The type that <tt>QString</tt> uses for size.
0091  *
0092  * This type might vary between Qt5 and Qt6.
0093  *
0094  * @sa @ref QStringLength */
0095 using QStringSize = decltype(std::declval<QString>().size());
0096 static_assert( //
0097     std::is_same_v<QStringLength, decltype(std::declval<QString>().length())>);
0098 static_assert( //
0099     std::is_same_v<QStringLength, decltype(std::declval<QString>().size())>);
0100 
0101 } // namespace PerceptualColor
0102 
0103 #endif // HELPERQTTYPES_H