diff options
Diffstat (limited to 'src/gui/painting/qcolorspace_p.h')
-rw-r--r-- | src/gui/painting/qcolorspace_p.h | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/src/gui/painting/qcolorspace_p.h b/src/gui/painting/qcolorspace_p.h index 91107a9a89..a49c46f195 100644 --- a/src/gui/painting/qcolorspace_p.h +++ b/src/gui/painting/qcolorspace_p.h @@ -56,18 +56,44 @@ #include "qcolortrc_p.h" #include "qcolortrclut_p.h" +#include <QtCore/qmutex.h> +#include <QtCore/qpoint.h> #include <QtCore/qshareddata.h> QT_BEGIN_NAMESPACE +class Q_GUI_EXPORT QColorSpacePrimaries +{ +public: + QColorSpacePrimaries() = default; + QColorSpacePrimaries(QColorSpace::Gamut gamut); + QColorSpacePrimaries(QPointF whitePoint, + QPointF redPoint, + QPointF greenPoint, + QPointF bluePoint) + : whitePoint(whitePoint) + , redPoint(redPoint) + , greenPoint(greenPoint) + , bluePoint(bluePoint) + { } + + QColorMatrix toXyzMatrix() const; + bool areValid() const; + + QPointF whitePoint; + QPointF redPoint; + QPointF greenPoint; + QPointF bluePoint; +}; + class QColorSpacePrivate : public QSharedData { public: QColorSpacePrivate(); QColorSpacePrivate(QColorSpace::ColorSpaceId colorSpaceId); QColorSpacePrivate(QColorSpace::Gamut gamut, QColorSpace::TransferFunction fun, float gamma); + QColorSpacePrivate(const QColorSpacePrimaries &primaries, QColorSpace::TransferFunction fun, float gamma); QColorSpacePrivate(const QColorSpacePrivate &other) = default; - QColorSpacePrivate &operator=(const QColorSpacePrivate &other) = default; void initialize(); void setToXyzMatrix(); @@ -87,8 +113,24 @@ public: QString description; QByteArray iccProfile; - mutable QSharedPointer<QColorTrcLut> lut[3]; - mutable QAtomicInt lutsGenerated; + static QBasicMutex s_lutWriteLock; + struct LUT { + LUT() = default; + ~LUT() = default; + LUT(const LUT &other) + { + if (other.generated.loadAcquire()) { + table[0] = other.table[0]; + table[1] = other.table[1]; + table[2] = other.table[2]; + generated.store(1); + } + } + QSharedPointer<QColorTrcLut> &operator[](int i) { return table[i]; } + const QSharedPointer<QColorTrcLut> &operator[](int i) const { return table[i]; } + QSharedPointer<QColorTrcLut> table[3]; + QAtomicInt generated; + } mutable lut; }; QT_END_NAMESPACE |