Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-15 09:08:00

0001 // Copyright (C) 2018 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 
0004 #ifndef QCOLORSPACE_H
0005 #define QCOLORSPACE_H
0006 
0007 #include <QtGui/qtguiglobal.h>
0008 #include <QtGui/qcolortransform.h>
0009 #include <QtCore/qobjectdefs.h>
0010 #include <QtCore/qpoint.h>
0011 #include <QtCore/qshareddata.h>
0012 #include <QtCore/qvariant.h>
0013 
0014 QT_BEGIN_NAMESPACE
0015 
0016 class QColorSpacePrivate;
0017 
0018 QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QColorSpacePrivate, Q_GUI_EXPORT)
0019 
0020 class Q_GUI_EXPORT QColorSpace
0021 {
0022     Q_GADGET
0023 public:
0024     enum NamedColorSpace {
0025         SRgb = 1,
0026         SRgbLinear,
0027         AdobeRgb,
0028         DisplayP3,
0029         ProPhotoRgb,
0030         Bt2020,
0031         Bt2100Pq,
0032         Bt2100Hlg,
0033     };
0034     Q_ENUM(NamedColorSpace)
0035     enum class Primaries {
0036         Custom = 0,
0037         SRgb,
0038         AdobeRgb,
0039         DciP3D65,
0040         ProPhotoRgb,
0041         Bt2020,
0042     };
0043     Q_ENUM(Primaries)
0044     enum class TransferFunction {
0045         Custom = 0,
0046         Linear,
0047         Gamma,
0048         SRgb,
0049         ProPhotoRgb,
0050         Bt2020,
0051         St2084,
0052         Hlg,
0053     };
0054     Q_ENUM(TransferFunction)
0055     enum class TransformModel : uint8_t {
0056         ThreeComponentMatrix = 0,
0057         ElementListProcessing,
0058     };
0059     Q_ENUM(TransformModel)
0060     enum class ColorModel : uint8_t {
0061         Undefined = 0,
0062         Rgb = 1,
0063         Gray = 2,
0064         Cmyk = 3,
0065     };
0066     Q_ENUM(ColorModel)
0067 
0068     struct PrimaryPoints
0069     {
0070         Q_GUI_EXPORT static PrimaryPoints fromPrimaries(Primaries primaries);
0071         Q_GUI_EXPORT bool isValid() const noexcept;
0072         QPointF whitePoint;
0073         QPointF redPoint;
0074         QPointF greenPoint;
0075         QPointF bluePoint;
0076     };
0077 
0078     QColorSpace() noexcept = default;
0079     QColorSpace(NamedColorSpace namedColorSpace);
0080     explicit QColorSpace(QPointF whitePoint, TransferFunction transferFunction, float gamma = 0.0f);
0081     explicit QColorSpace(QPointF whitePoint, const QList<uint16_t> &transferFunctionTable);
0082     QColorSpace(Primaries primaries, TransferFunction transferFunction, float gamma = 0.0f);
0083     QColorSpace(Primaries primaries, float gamma);
0084     QColorSpace(Primaries primaries, const QList<uint16_t> &transferFunctionTable);
0085     QColorSpace(const QPointF &whitePoint, const QPointF &redPoint,
0086                 const QPointF &greenPoint, const QPointF &bluePoint,
0087                 TransferFunction transferFunction, float gamma = 0.0f);
0088     QColorSpace(const PrimaryPoints &primaryPoints,
0089                 TransferFunction transferFunction, float gamma = 0.0f);
0090     QColorSpace(const QPointF &whitePoint, const QPointF &redPoint,
0091                 const QPointF &greenPoint, const QPointF &bluePoint,
0092                 const QList<uint16_t> &transferFunctionTable);
0093     QColorSpace(const QPointF &whitePoint, const QPointF &redPoint,
0094                 const QPointF &greenPoint, const QPointF &bluePoint,
0095                 const QList<uint16_t> &redTransferFunctionTable,
0096                 const QList<uint16_t> &greenTransferFunctionTable,
0097                 const QList<uint16_t> &blueTransferFunctionTable);
0098     ~QColorSpace();
0099 
0100     QColorSpace(const QColorSpace &colorSpace) noexcept;
0101     QColorSpace &operator=(const QColorSpace &colorSpace) noexcept
0102     {
0103         QColorSpace copy(colorSpace);
0104         swap(copy);
0105         return *this;
0106     }
0107 
0108     QColorSpace(QColorSpace &&colorSpace) noexcept = default;
0109     QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QColorSpace)
0110 
0111     void swap(QColorSpace &colorSpace) noexcept
0112     { d_ptr.swap(colorSpace.d_ptr); }
0113 
0114     Primaries primaries() const noexcept;
0115     TransferFunction transferFunction() const noexcept;
0116     float gamma() const noexcept;
0117 
0118     QString description() const noexcept;
0119     void setDescription(const QString &description);
0120 
0121     void setTransferFunction(TransferFunction transferFunction, float gamma = 0.0f);
0122     void setTransferFunction(const QList<uint16_t> &transferFunctionTable);
0123     void setTransferFunctions(const QList<uint16_t> &redTransferFunctionTable,
0124                               const QList<uint16_t> &greenTransferFunctionTable,
0125                               const QList<uint16_t> &blueTransferFunctionTable);
0126     QColorSpace withTransferFunction(TransferFunction transferFunction, float gamma = 0.0f) const;
0127     QColorSpace withTransferFunction(const QList<uint16_t> &transferFunctionTable) const;
0128     QColorSpace withTransferFunctions(const QList<uint16_t> &redTransferFunctionTable,
0129                                       const QList<uint16_t> &greenTransferFunctionTable,
0130                                       const QList<uint16_t> &blueTransferFunctionTable) const;
0131 
0132     void setPrimaries(Primaries primariesId);
0133     void setPrimaries(const QPointF &whitePoint, const QPointF &redPoint,
0134                       const QPointF &greenPoint, const QPointF &bluePoint);
0135     void setWhitePoint(QPointF whitePoint);
0136     QPointF whitePoint() const;
0137     void setPrimaryPoints(const PrimaryPoints &primaryPoints);
0138     PrimaryPoints primaryPoints() const;
0139 
0140     TransformModel transformModel() const noexcept;
0141     ColorModel colorModel() const noexcept;
0142     void detach();
0143     bool isValid() const noexcept;
0144     bool isValidTarget() const noexcept;
0145 
0146     friend inline bool operator==(const QColorSpace &colorSpace1, const QColorSpace &colorSpace2)
0147     { return colorSpace1.equals(colorSpace2); }
0148     friend inline bool operator!=(const QColorSpace &colorSpace1, const QColorSpace &colorSpace2)
0149     { return !(colorSpace1 == colorSpace2); }
0150 
0151     static QColorSpace fromIccProfile(const QByteArray &iccProfile);
0152     QByteArray iccProfile() const;
0153 
0154     QColorTransform transformationToColorSpace(const QColorSpace &colorspace) const;
0155 
0156     operator QVariant() const;
0157 
0158 private:
0159     friend class QColorSpacePrivate;
0160     bool equals(const QColorSpace &other) const;
0161 
0162     QExplicitlySharedDataPointer<QColorSpacePrivate> d_ptr;
0163 
0164 #ifndef QT_NO_DEBUG_STREAM
0165     friend Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QColorSpace &colorSpace);
0166 #endif
0167 };
0168 
0169 Q_DECLARE_SHARED(QColorSpace)
0170 
0171 // QColorSpace stream functions
0172 #if !defined(QT_NO_DATASTREAM)
0173 Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QColorSpace &);
0174 Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QColorSpace &);
0175 #endif
0176 
0177 #ifndef QT_NO_DEBUG_STREAM
0178 Q_GUI_EXPORT QDebug operator<<(QDebug, const QColorSpace &);
0179 #endif
0180 
0181 QT_END_NAMESPACE
0182 
0183 #endif // QCOLORSPACE_P_H