1 /*
2  * DQt - D bindings for the Qt Toolkit
3  *
4  * GNU Lesser General Public License Usage
5  * This file may be used under the terms of the GNU Lesser
6  * General Public License version 3 as published by the Free Software
7  * Foundation and appearing in the file LICENSE.LGPL3 included in the
8  * packaging of this file. Please review the following information to
9  * ensure the GNU Lesser General Public License version 3 requirements
10  * will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
11  */
12 module qt.gui.colorspace;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.bytearray;
17 import qt.core.list;
18 import qt.core.metamacros;
19 import qt.core.point;
20 import qt.core.shareddata;
21 import qt.core.string;
22 import qt.core.typeinfo;
23 import qt.core.variant;
24 import qt.gui.colortransform;
25 import qt.helpers;
26 
27 
28 /+ QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QColorSpacePrivate, Q_GUI_EXPORT) +/
29 /// Binding for C++ class [QColorSpace](https://doc.qt.io/qt-6/qcolorspace.html).
30 @Q_RELOCATABLE_TYPE extern(C++, class) struct /+ Q_GUI_EXPORT +/ QColorSpace
31 {
32     mixin(Q_GADGET);
33 public:
34     enum NamedColorSpace {
35         SRgb = 1,
36         SRgbLinear,
37         AdobeRgb,
38         DisplayP3,
39         ProPhotoRgb
40     }
41     /+ Q_ENUM(NamedColorSpace) +/
42     enum /+ class +/ Primaries {
43         Custom = 0,
44         SRgb,
45         AdobeRgb,
46         DciP3D65,
47         ProPhotoRgb
48     }
49     /+ Q_ENUM(Primaries) +/
50     enum /+ class +/ TransferFunction {
51         Custom = 0,
52         Linear,
53         Gamma,
54         SRgb,
55         ProPhotoRgb
56     }
57     /+ Q_ENUM(TransferFunction) +/
58 
59     /+ QColorSpace() noexcept = default; +/
60     this(NamedColorSpace namedColorSpace);
61     this(Primaries primaries, TransferFunction transferFunction, float gamma = 0.0f);
62     this(Primaries primaries, float gamma);
63     this(Primaries primaries, ref const(QList!(ushort)) transferFunctionTable);
64     this(ref const(QPointF) whitePoint, ref const(QPointF) redPoint,
65                     ref const(QPointF) greenPoint, ref const(QPointF) bluePoint,
66                     TransferFunction transferFunction, float gamma = 0.0f);
67     this(ref const(QPointF) whitePoint, ref const(QPointF) redPoint,
68                     ref const(QPointF) greenPoint, ref const(QPointF) bluePoint,
69                     ref const(QList!(ushort)) transferFunctionTable);
70     this(ref const(QPointF) whitePoint, ref const(QPointF) redPoint,
71                     ref const(QPointF) greenPoint, ref const(QPointF) bluePoint,
72                     ref const(QList!(ushort)) redTransferFunctionTable,
73                     ref const(QList!(ushort)) greenTransferFunctionTable,
74                     ref const(QList!(ushort)) blueTransferFunctionTable);
75     ~this();
76 
77     @disable this(this);
78     this(ref const(QColorSpace) colorSpace)/+ noexcept+/;
79     /+ref QColorSpace operator =(ref const(QColorSpace) colorSpace)/+ noexcept+/
80     {
81         auto copy = QColorSpace(colorSpace);
82         swap(copy);
83         return this;
84     }+/
85 
86     /+ QColorSpace(QColorSpace &&colorSpace) noexcept = default; +/
87     /+ QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QColorSpace) +/
88 
89     /+ void swap(QColorSpace &colorSpace) noexcept
90     { qSwap(d_ptr, colorSpace.d_ptr); } +/
91 
92     Primaries primaries() const/+ noexcept+/;
93     TransferFunction transferFunction() const/+ noexcept+/;
94     float gamma() const/+ noexcept+/;
95 
96     QString description() const/+ noexcept+/;
97     void setDescription(ref const(QString) description);
98 
99     void setTransferFunction(TransferFunction transferFunction, float gamma = 0.0f);
100     void setTransferFunction(ref const(QList!(ushort)) transferFunctionTable);
101     void setTransferFunctions(ref const(QList!(ushort)) redTransferFunctionTable,
102                                   ref const(QList!(ushort)) greenTransferFunctionTable,
103                                   ref const(QList!(ushort)) blueTransferFunctionTable);
104     QColorSpace withTransferFunction(TransferFunction transferFunction, float gamma = 0.0f) const;
105     QColorSpace withTransferFunction(ref const(QList!(ushort)) transferFunctionTable) const;
106     QColorSpace withTransferFunctions(ref const(QList!(ushort)) redTransferFunctionTable,
107                                           ref const(QList!(ushort)) greenTransferFunctionTable,
108                                           ref const(QList!(ushort)) blueTransferFunctionTable) const;
109 
110     void setPrimaries(Primaries primariesId);
111     void setPrimaries(ref const(QPointF) whitePoint, ref const(QPointF) redPoint,
112                           ref const(QPointF) greenPoint, ref const(QPointF) bluePoint);
113 
114     void detach();
115     bool isValid() const/+ noexcept+/;
116 
117     /+ friend inline bool operator==(const QColorSpace &colorSpace1, const QColorSpace &colorSpace2)
118     { return colorSpace1.equals(colorSpace2); } +/
119     /+ friend inline bool operator!=(const QColorSpace &colorSpace1, const QColorSpace &colorSpace2)
120     { return !(colorSpace1 == colorSpace2); } +/
121 
122     static QColorSpace fromIccProfile(ref const(QByteArray) iccProfile);
123     QByteArray iccProfile() const;
124 
125     QColorTransform transformationToColorSpace(ref const(QColorSpace) colorspace) const;
126 
127     /+auto opCast(T : QVariant)() const;+/
128 
129 private:
130     /+ friend class QColorSpacePrivate; +/
131     bool equals(ref const(QColorSpace) other) const;
132 
133     QExplicitlySharedDataPointer!(QColorSpacePrivate) d_ptr;
134 
135 /+ #ifndef QT_NO_DEBUG_STREAM
136     friend Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QColorSpace &colorSpace);
137 #endif +/
138     mixin(CREATE_CONVENIENCE_WRAPPERS);
139 }
140 
141 /+ Q_DECLARE_SHARED(QColorSpace)
142 
143 // QColorSpace stream functions
144 #if !defined(QT_NO_DATASTREAM)
145 Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QColorSpace &);
146 Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QColorSpace &);
147 #endif
148 
149 #ifndef QT_NO_DEBUG_STREAM
150 Q_GUI_EXPORT QDebug operator<<(QDebug, const QColorSpace &);
151 #endif +/
152