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.imageiohandler;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.bytearray;
17 import qt.core.flags;
18 import qt.core.iodevice;
19 import qt.core.rect;
20 import qt.core.scopedpointer;
21 import qt.core.size;
22 import qt.core.variant;
23 import qt.gui.image;
24 import qt.helpers;
25 static if(!defined!"QT_NO_IMAGEFORMATPLUGIN")
26     import qt.core.object;
27 
28 
29 extern(C++, class) struct QImageIOHandlerPrivate;
30 /// Binding for C++ class [QImageIOHandler](https://doc.qt.io/qt-6/qimageiohandler.html).
31 abstract class /+ Q_GUI_EXPORT +/ QImageIOHandler
32 {
33 private:
34     /+ Q_DECLARE_PRIVATE(QImageIOHandler) +/
35 public:
36     mixin(changeItaniumMangling(q{mangleConstructorBaseObject}, q{
37     this();
38     }));
39     /+ virtual +/~this();
40 
41     final void setDevice(QIODevice device);
42     final QIODevice device() const;
43 
44     final void setFormat(ref const(QByteArray) format);
45     final void setFormat(ref const(QByteArray) format) const;
46     final QByteArray format() const;
47 
48     /+ virtual +/ abstract bool canRead() const;
49     /+ virtual +/ abstract bool read(QImage* image);
50     /+ virtual +/ bool write(ref const(QImage) image);
51 
52     enum ImageOption {
53         Size,
54         ClipRect,
55         Description,
56         ScaledClipRect,
57         ScaledSize,
58         CompressionRatio,
59         Gamma,
60         Quality,
61         Name,
62         SubType,
63         IncrementalReading,
64         Endianness,
65         Animation,
66         BackgroundColor,
67         ImageFormat,
68         SupportedSubTypes,
69         OptimizedWrite,
70         ProgressiveScanWrite,
71         ImageTransformation
72     }
73 
74     enum Transformation {
75         TransformationNone = 0,
76         TransformationMirror = 1,
77         TransformationFlip = 2,
78         TransformationRotate180 = Transformation.TransformationMirror | Transformation.TransformationFlip,
79         TransformationRotate90 = 4,
80         TransformationMirrorAndRotate90 = Transformation.TransformationMirror | Transformation.TransformationRotate90,
81         TransformationFlipAndRotate90 = Transformation.TransformationFlip | Transformation.TransformationRotate90,
82         TransformationRotate270 = Transformation.TransformationRotate180 | Transformation.TransformationRotate90
83     }
84     /+ Q_DECLARE_FLAGS(Transformations, Transformation) +/
85 alias Transformations = QFlags!(Transformation);
86     /+ virtual +/ QVariant option(ImageOption option) const;
87     /+ virtual +/ void setOption(ImageOption option, ref const(QVariant) value);
88     /+ virtual +/ bool supportsOption(ImageOption option) const;
89 
90     // incremental loading
91     /+ virtual +/ bool jumpToNextImage();
92     /+ virtual +/ bool jumpToImage(int imageNumber);
93     /+ virtual +/ int loopCount() const;
94     /+ virtual +/ int imageCount() const;
95     /+ virtual +/ int nextImageDelay() const;
96     /+ virtual +/ int currentImageNumber() const;
97     /+ virtual +/ QRect currentImageRect() const;
98 
99     static bool allocateImage(QSize size, QImage.Format format, QImage* image);
100 
101 protected:
102     mixin(changeItaniumMangling(q{mangleConstructorBaseObject}, q{
103     this(ref QImageIOHandlerPrivate dd);
104     }));
105     QScopedPointer!(QImageIOHandlerPrivate) d_ptr;
106 private:
107     /+ Q_DISABLE_COPY(QImageIOHandler) +/
108     mixin(CREATE_CONVENIENCE_WRAPPERS);
109 }
110 
111 static if(!defined!"QT_NO_IMAGEFORMATPLUGIN")
112 {
113 
114 /+ #define QImageIOHandlerFactoryInterface_iid "org.qt-project.Qt.QImageIOHandlerFactoryInterface" +/
115 
116 /// Binding for C++ class [QImageIOPlugin](https://doc.qt.io/qt-6/qimageioplugin.html).
117 abstract class /+ Q_GUI_EXPORT +/ QImageIOPlugin : QObject
118 {
119     mixin(Q_OBJECT);
120 public:
121     mixin(changeItaniumMangling(q{mangleConstructorBaseObject}, q{
122     /+ explicit +/this(QObject parent = null);
123     }));
124     ~this();
125 
126     enum Capability {
127         CanRead = 0x1,
128         CanWrite = 0x2,
129         CanReadIncremental = 0x4
130     }
131     /+ Q_DECLARE_FLAGS(Capabilities, Capability) +/
132 alias Capabilities = QFlags!(Capability);
133     /+ virtual +/ abstract Capabilities capabilities(QIODevice device, ref const(QByteArray) format) const;
134     /+ virtual +/ abstract QImageIOHandler create(QIODevice device, ref const(QByteArray) format = globalInitVar!QByteArray) const;
135     mixin(CREATE_CONVENIENCE_WRAPPERS);
136 }
137 /+pragma(inline, true) QFlags!(QImageIOPlugin.Capabilities.enum_type) operator |(QImageIOPlugin.Capabilities.enum_type f1, QImageIOPlugin.Capabilities.enum_type f2)/+noexcept+/{return QFlags!(QImageIOPlugin.Capabilities.enum_type)(f1)|f2;}+/
138 /+pragma(inline, true) QFlags!(QImageIOPlugin.Capabilities.enum_type) operator |(QImageIOPlugin.Capabilities.enum_type f1, QFlags!(QImageIOPlugin.Capabilities.enum_type) f2)/+noexcept+/{return f2|f1;}+/
139 /+pragma(inline, true) QFlags!(QImageIOPlugin.Capabilities.enum_type) operator &(QImageIOPlugin.Capabilities.enum_type f1, QImageIOPlugin.Capabilities.enum_type f2)/+noexcept+/{return QFlags!(QImageIOPlugin.Capabilities.enum_type)(f1)&f2;}+/
140 /+pragma(inline, true) QFlags!(QImageIOPlugin.Capabilities.enum_type) operator &(QImageIOPlugin.Capabilities.enum_type f1, QFlags!(QImageIOPlugin.Capabilities.enum_type) f2)/+noexcept+/{return f2&f1;}+/
141 /+pragma(inline, true) void operator +(QImageIOPlugin.Capabilities.enum_type f1, QImageIOPlugin.Capabilities.enum_type f2)/+noexcept+/;+/
142 /+pragma(inline, true) void operator +(QImageIOPlugin.Capabilities.enum_type f1, QFlags!(QImageIOPlugin.Capabilities.enum_type) f2)/+noexcept+/;+/
143 /+pragma(inline, true) void operator +(int f1, QFlags!(QImageIOPlugin.Capabilities.enum_type) f2)/+noexcept+/;+/
144 /+pragma(inline, true) void operator -(QImageIOPlugin.Capabilities.enum_type f1, QImageIOPlugin.Capabilities.enum_type f2)/+noexcept+/;+/
145 /+pragma(inline, true) void operator -(QImageIOPlugin.Capabilities.enum_type f1, QFlags!(QImageIOPlugin.Capabilities.enum_type) f2)/+noexcept+/;+/
146 /+pragma(inline, true) void operator -(int f1, QFlags!(QImageIOPlugin.Capabilities.enum_type) f2)/+noexcept+/;+/
147 /+pragma(inline, true) QIncompatibleFlag operator |(QImageIOPlugin.Capabilities.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
148 /+pragma(inline, true) void operator +(int f1, QImageIOPlugin.Capabilities.enum_type f2)/+noexcept+/;+/
149 /+pragma(inline, true) void operator +(QImageIOPlugin.Capabilities.enum_type f1, int f2)/+noexcept+/;+/
150 /+pragma(inline, true) void operator -(int f1, QImageIOPlugin.Capabilities.enum_type f2)/+noexcept+/;+/
151 /+pragma(inline, true) void operator -(QImageIOPlugin.Capabilities.enum_type f1, int f2)/+noexcept+/;+/
152 
153 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QImageIOPlugin::Capabilities) +/
154 }
155