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.painter;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.flags;
17 import qt.core.global;
18 import qt.core.line;
19 import qt.core.list;
20 import qt.core.metamacros;
21 import qt.core.namespace;
22 import qt.core.point;
23 import qt.core.rect;
24 import qt.core.scopedpointer;
25 import qt.core.string;
26 import qt.gui.brush;
27 import qt.gui.color;
28 import qt.gui.font;
29 import qt.gui.fontinfo;
30 import qt.gui.fontmetrics;
31 import qt.gui.image;
32 import qt.gui.paintdevice;
33 import qt.gui.paintengine;
34 import qt.gui.painterpath;
35 import qt.gui.pen;
36 import qt.gui.pixmap;
37 import qt.gui.polygon;
38 import qt.gui.region;
39 import qt.gui.statictext;
40 import qt.gui.textoption;
41 import qt.gui.transform;
42 import qt.helpers;
43 version(QT_NO_PICTURE){}else
44     import qt.gui.picture;
45 version(QT_NO_RAWFONT){}else
46     import qt.gui.glyphrun;
47 
48 /+ #ifndef QT_INCLUDE_COMPAT
49 #endif +/
50 
51 
52 
53 extern(C++, class) struct QPainterPrivate;
54 
55 extern(C++, class) struct QPainterPrivateDeleter;
56 
57 /// Binding for C++ class [QPainter](https://doc.qt.io/qt-6/qpainter.html).
58 extern(C++, class) struct /+ Q_GUI_EXPORT +/ QPainter
59 {
60 private:
61     /+ Q_DECLARE_PRIVATE(QPainter) +/
62     mixin(Q_GADGET);
63 
64 public:
65     enum RenderHint {
66         Antialiasing = 0x01,
67         TextAntialiasing = 0x02,
68         SmoothPixmapTransform = 0x04,
69         VerticalSubpixelPositioning = 0x08,
70         LosslessImageRendering = 0x40,
71     }
72     /+ Q_FLAG(RenderHint) +/
73 
74     /+ Q_DECLARE_FLAGS(RenderHints, RenderHint) +/
75 alias RenderHints = QFlags!(RenderHint);    /+ Q_FLAG(RenderHints) +/
76 
77     extern(C++, class) struct PixmapFragment {
78     public:
79         qreal x;
80         qreal y;
81         qreal sourceLeft;
82         qreal sourceTop;
83         qreal width;
84         qreal height;
85         qreal scaleX;
86         qreal scaleY;
87         qreal rotation;
88         qreal opacity;
89         /+ static PixmapFragment Q_GUI_EXPORT create(const QPointF &pos, const QRectF &sourceRect,
90                                             qreal scaleX = 1, qreal scaleY = 1,
91                                             qreal rotation = 0, qreal opacity = 1); +/
92     }
93 
94     enum PixmapFragmentHint {
95         OpaqueHint = 0x01
96     }
97 
98     /+ Q_DECLARE_FLAGS(PixmapFragmentHints, PixmapFragmentHint) +/
99 alias PixmapFragmentHints = QFlags!(PixmapFragmentHint);
100     @disable this();
101     pragma(mangle, defaultConstructorMangling(__traits(identifier, typeof(this))))
102     ref typeof(this) rawConstructor();
103     static typeof(this) create()
104     {
105         typeof(this) r = typeof(this).init;
106         r.rawConstructor();
107         return r;
108     }
109 
110     /+ explicit +/this(QPaintDevice );
111     /+ explicit +/this(QPaintDeviceInterface dev)
112     {
113         this(cast(QPaintDevice)cast(void*)dev);
114     }
115     ~this();
116 
117     QPaintDevice device() const;
118 
119     bool begin(QPaintDevice );
120     bool end();
121     bool isActive() const;
122 
123     enum CompositionMode {
124         CompositionMode_SourceOver,
125         CompositionMode_DestinationOver,
126         CompositionMode_Clear,
127         CompositionMode_Source,
128         CompositionMode_Destination,
129         CompositionMode_SourceIn,
130         CompositionMode_DestinationIn,
131         CompositionMode_SourceOut,
132         CompositionMode_DestinationOut,
133         CompositionMode_SourceAtop,
134         CompositionMode_DestinationAtop,
135         CompositionMode_Xor,
136 
137         //svg 1.2 blend modes
138         CompositionMode_Plus,
139         CompositionMode_Multiply,
140         CompositionMode_Screen,
141         CompositionMode_Overlay,
142         CompositionMode_Darken,
143         CompositionMode_Lighten,
144         CompositionMode_ColorDodge,
145         CompositionMode_ColorBurn,
146         CompositionMode_HardLight,
147         CompositionMode_SoftLight,
148         CompositionMode_Difference,
149         CompositionMode_Exclusion,
150 
151         // ROPs
152         RasterOp_SourceOrDestination,
153         RasterOp_SourceAndDestination,
154         RasterOp_SourceXorDestination,
155         RasterOp_NotSourceAndNotDestination,
156         RasterOp_NotSourceOrNotDestination,
157         RasterOp_NotSourceXorDestination,
158         RasterOp_NotSource,
159         RasterOp_NotSourceAndDestination,
160         RasterOp_SourceAndNotDestination,
161         RasterOp_NotSourceOrDestination,
162         RasterOp_SourceOrNotDestination,
163         RasterOp_ClearDestination,
164         RasterOp_SetDestination,
165         RasterOp_NotDestination
166     }
167     void setCompositionMode(CompositionMode mode);
168     CompositionMode compositionMode() const;
169 
170     ref const(QFont) font() const;
171     void setFont(ref const(QFont) f);
172 
173     QFontMetrics fontMetrics() const;
174     QFontInfo fontInfo() const;
175 
176     void setPen(ref const(QColor) color);
177     void setPen(ref const(QPen) pen);
178     void setPen(/+ Qt:: +/qt.core.namespace.PenStyle style);
179     ref const(QPen) pen() const;
180 
181     void setBrush(ref const(QBrush) brush);
182     void setBrush(/+ Qt:: +/qt.core.namespace.BrushStyle style);
183     ref const(QBrush) brush() const;
184 
185     // attributes/modes
186     void setBackgroundMode(/+ Qt:: +/qt.core.namespace.BGMode mode);
187     /+ Qt:: +/qt.core.namespace.BGMode backgroundMode() const;
188 
189     QPoint brushOrigin() const;
190     pragma(inline, true) void setBrushOrigin(int x, int y)
191     {
192         auto tmp = QPoint(x, y); setBrushOrigin(tmp);
193     }
194     pragma(inline, true) void setBrushOrigin(ref const(QPoint) p)
195     {
196         auto tmp = QPointF(p); setBrushOrigin(tmp);
197     }
198     void setBrushOrigin(ref const(QPointF) );
199 
200     void setBackground(ref const(QBrush) bg);
201     ref const(QBrush) background() const;
202 
203     qreal opacity() const;
204     void setOpacity(qreal opacity);
205 
206     // Clip functions
207     QRegion clipRegion() const;
208     QPainterPath clipPath() const;
209 
210     void setClipRect(ref const(QRectF) , /+ Qt:: +/qt.core.namespace.ClipOperation op = /+ Qt:: +/qt.core.namespace.ClipOperation.ReplaceClip);
211     void setClipRect(ref const(QRect) , /+ Qt:: +/qt.core.namespace.ClipOperation op = /+ Qt:: +/qt.core.namespace.ClipOperation.ReplaceClip);
212     pragma(inline, true) void setClipRect(int x, int y, int w, int h, /+ Qt:: +/qt.core.namespace.ClipOperation op = /+ Qt:: +/qt.core.namespace.ClipOperation.ReplaceClip)
213     {
214         auto tmp = QRect(x, y, w, h); setClipRect(tmp, op);
215     }
216 
217     void setClipRegion(ref const(QRegion) , /+ Qt:: +/qt.core.namespace.ClipOperation op = /+ Qt:: +/qt.core.namespace.ClipOperation.ReplaceClip);
218 
219     void setClipPath(ref const(QPainterPath) path, /+ Qt:: +/qt.core.namespace.ClipOperation op = /+ Qt:: +/qt.core.namespace.ClipOperation.ReplaceClip);
220 
221     void setClipping(bool enable);
222     bool hasClipping() const;
223 
224     QRectF clipBoundingRect() const;
225 
226     void save();
227     void restore();
228 
229     // XForm functions
230     void setTransform(ref const(QTransform) transform, bool combine = false);
231     ref const(QTransform) transform() const;
232     ref const(QTransform) deviceTransform() const;
233     void resetTransform();
234 
235     void setWorldTransform(ref const(QTransform) matrix, bool combine = false);
236     ref const(QTransform) worldTransform() const;
237 
238     QTransform combinedTransform() const;
239 
240     void setWorldMatrixEnabled(bool enabled);
241     bool worldMatrixEnabled() const;
242 
243     void scale(qreal sx, qreal sy);
244     void shear(qreal sh, qreal sv);
245     void rotate(qreal a);
246 
247     void translate(ref const(QPointF) offset);
248     pragma(inline, true) void translate(ref const(QPoint) offset)
249     {
250         translate(offset.x(), offset.y());
251     }
252     pragma(inline, true) void translate(qreal dx, qreal dy)
253     {
254         auto tmp = QPointF(dx, dy); translate(tmp);
255     }
256 
257     QRect window() const;
258     void setWindow(ref const(QRect) window);
259     pragma(inline, true) void setWindow(int x, int y, int w, int h)
260     {
261         auto tmp = QRect(x, y, w, h); setWindow(tmp);
262     }
263 
264     QRect viewport() const;
265     void setViewport(ref const(QRect) viewport);
266     pragma(inline, true) void setViewport(int x, int y, int w, int h)
267     {
268         auto tmp = QRect(x, y, w, h); setViewport(tmp);
269     }
270 
271     void setViewTransformEnabled(bool enable);
272     bool viewTransformEnabled() const;
273 
274     // drawing functions
275     void strokePath(ref const(QPainterPath) path, ref const(QPen) pen);
276     void fillPath(ref const(QPainterPath) path, ref const(QBrush) brush);
277     void drawPath(ref const(QPainterPath) path);
278 
279     pragma(inline, true) void drawPoint(ref const(QPointF) p)
280     {
281         drawPoints(&p, 1);
282     }
283     pragma(inline, true) void drawPoint(ref const(QPoint) p)
284     {
285         drawPoints(&p, 1);
286     }
287     pragma(inline, true) void drawPoint(int x, int y)
288     {
289         auto p = QPoint(x, y);
290         drawPoints(&p, 1);
291     }
292 
293     void drawPoints(const(QPointF)* points, int pointCount);
294     pragma(inline, true) void drawPoints(ref const(QPolygonF) points)
295     {
296         drawPoints(points.constData(), cast(int)(points.size()));
297     }
298     void drawPoints(const(QPoint)* points, int pointCount);
299     pragma(inline, true) void drawPoints(ref const(QPolygon) points)
300     {
301         drawPoints(points.constData(), cast(int)(points.size()));
302     }
303 
304     //
305     // functions
306     //
307     pragma(inline, true) void drawLine(ref const(QLineF) l)
308     {
309         drawLines(&l, 1);
310     }
311     pragma(inline, true) void drawLine(ref const(QLine) line)
312     {
313         drawLines(&line, 1);
314     }
315     pragma(inline, true) void drawLine(int x1, int y1, int x2, int y2)
316     {
317         auto l = QLine(x1, y1, x2, y2);
318         drawLines(&l, 1);
319     }
320     pragma(inline, true) void drawLine(ref const(QPoint) p1, ref const(QPoint) p2)
321     {
322         auto l = QLine(p1, p2);
323         drawLines(&l, 1);
324     }
325     pragma(inline, true) void drawLine(ref const(QPointF) p1, ref const(QPointF) p2)
326     {
327         auto tmp = QLineF(p1, p2); drawLine(tmp);
328     }
329 
330     void drawLines(const(QLineF)* lines, int lineCount);
331     pragma(inline, true) void drawLines(ref const(QList!(QLineF)) lines)
332     {
333         drawLines(lines.constData(), cast(int)(lines.size()));
334     }
335     void drawLines(const(QPointF)* pointPairs, int lineCount);
336     pragma(inline, true) void drawLines(ref const(QList!(QPointF)) pointPairs)
337     {
338         drawLines(pointPairs.constData(), cast(int)(pointPairs.size() / 2));
339     }
340     void drawLines(const(QLine)* lines, int lineCount);
341     pragma(inline, true) void drawLines(ref const(QList!(QLine)) lines)
342     {
343         drawLines(lines.constData(), cast(int)(lines.size()));
344     }
345     void drawLines(const(QPoint)* pointPairs, int lineCount);
346     pragma(inline, true) void drawLines(ref const(QList!(QPoint)) pointPairs)
347     {
348         drawLines(pointPairs.constData(), cast(int)(pointPairs.size() / 2));
349     }
350 
351     pragma(inline, true) void drawRect(ref const(QRectF) rect)
352     {
353         drawRects(&rect, 1);
354     }
355     pragma(inline, true) void drawRect(int x, int y, int w, int h)
356     {
357         auto r = QRect(x, y, w, h);
358         drawRects(&r, 1);
359     }
360     pragma(inline, true) void drawRect(ref const(QRect) r)
361     {
362         drawRects(&r, 1);
363     }
364 
365     void drawRects(const(QRectF)* rects, int rectCount);
366     pragma(inline, true) void drawRects(ref const(QList!(QRectF)) rects)
367     {
368         drawRects(rects.constData(), cast(int)(rects.size()));
369     }
370     void drawRects(const(QRect)* rects, int rectCount);
371     pragma(inline, true) void drawRects(ref const(QList!(QRect)) rects)
372     {
373         drawRects(rects.constData(), cast(int)(rects.size()));
374     }
375 
376     void drawEllipse(ref const(QRectF) r);
377     void drawEllipse(ref const(QRect) r);
378     pragma(inline, true) void drawEllipse(int x, int y, int w, int h)
379     {
380         auto tmp = QRect(x, y, w, h); drawEllipse(tmp);
381     }
382 
383     pragma(inline, true) void drawEllipse(ref const(QPointF) center, qreal rx, qreal ry)
384     {
385         auto tmp = QRectF(center.x() - rx, center.y() - ry, 2 * rx, 2 * ry); drawEllipse(tmp);
386     }
387     pragma(inline, true) void drawEllipse(ref const(QPoint) center, int rx, int ry)
388     {
389         auto tmp = QRect(center.x() - rx, center.y() - ry, 2 * rx, 2 * ry); drawEllipse(tmp);
390     }
391 
392     void drawPolyline(const(QPointF)* points, int pointCount);
393     pragma(inline, true) void drawPolyline(ref const(QPolygonF) polyline)
394     {
395         drawPolyline(polyline.constData(), cast(int)(polyline.size()));
396     }
397     void drawPolyline(const(QPoint)* points, int pointCount);
398     pragma(inline, true) void drawPolyline(ref const(QPolygon) polyline)
399     {
400         drawPolyline(polyline.constData(), cast(int)(polyline.size()));
401     }
402 
403     void drawPolygon(const(QPointF)* points, int pointCount, /+ Qt:: +/qt.core.namespace.FillRule fillRule = /+ Qt:: +/qt.core.namespace.FillRule.OddEvenFill);
404     pragma(inline, true) void drawPolygon(ref const(QPolygonF) polygon, /+ Qt:: +/qt.core.namespace.FillRule fillRule = /+ Qt:: +/qt.core.namespace.FillRule.OddEvenFill)
405     {
406         drawPolygon(polygon.constData(), cast(int)(polygon.size()), fillRule);
407     }
408     void drawPolygon(const(QPoint)* points, int pointCount, /+ Qt:: +/qt.core.namespace.FillRule fillRule = /+ Qt:: +/qt.core.namespace.FillRule.OddEvenFill);
409     pragma(inline, true) void drawPolygon(ref const(QPolygon) polygon, /+ Qt:: +/qt.core.namespace.FillRule fillRule = /+ Qt:: +/qt.core.namespace.FillRule.OddEvenFill)
410     {
411         drawPolygon(polygon.constData(), cast(int)(polygon.size()), fillRule);
412     }
413 
414     void drawConvexPolygon(const(QPointF)* points, int pointCount);
415     pragma(inline, true) void drawConvexPolygon(ref const(QPolygonF) poly)
416     {
417         drawConvexPolygon(poly.constData(), cast(int)(poly.size()));
418     }
419     void drawConvexPolygon(const(QPoint)* points, int pointCount);
420     pragma(inline, true) void drawConvexPolygon(ref const(QPolygon) poly)
421     {
422         drawConvexPolygon(poly.constData(), cast(int)(poly.size()));
423     }
424 
425     void drawArc(ref const(QRectF) rect, int a, int alen);
426     pragma(inline, true) void drawArc(ref const(QRect) r, int a, int alen)
427     {
428         auto tmp = QRectF(r); drawArc(tmp, a, alen);
429     }
430     pragma(inline, true) void drawArc(int x, int y, int w, int h, int a, int alen)
431     {
432         auto tmp = QRectF(x, y, w, h); drawArc(tmp, a, alen);
433     }
434 
435     void drawPie(ref const(QRectF) rect, int a, int alen);
436     pragma(inline, true) void drawPie(int x, int y, int w, int h, int a, int alen)
437     {
438         auto tmp = QRectF(x, y, w, h); drawPie(tmp, a, alen);
439     }
440     pragma(inline, true) void drawPie(ref const(QRect) rect, int a, int alen)
441     {
442         auto tmp = QRectF(rect); drawPie(tmp, a, alen);
443     }
444 
445     void drawChord(ref const(QRectF) rect, int a, int alen);
446     pragma(inline, true) void drawChord(int x, int y, int w, int h, int a, int alen)
447     {
448         auto tmp = QRectF(x, y, w, h); drawChord(tmp, a, alen);
449     }
450     pragma(inline, true) void drawChord(ref const(QRect) rect, int a, int alen)
451     {
452         auto tmp = QRectF(rect); drawChord(tmp, a, alen);
453     }
454 
455     void drawRoundedRect(ref const(QRectF) rect, qreal xRadius, qreal yRadius,
456                              /+ Qt:: +/qt.core.namespace.SizeMode mode = /+ Qt:: +/qt.core.namespace.SizeMode.AbsoluteSize);
457     pragma(inline, true) void drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius,
458                                     /+ Qt:: +/qt.core.namespace.SizeMode mode = /+ Qt:: +/qt.core.namespace.SizeMode.AbsoluteSize)
459     {
460         auto tmp = QRectF(x, y, w, h); drawRoundedRect(tmp, xRadius, yRadius, mode);
461     }
462     pragma(inline, true) void drawRoundedRect(ref const(QRect) rect, qreal xRadius, qreal yRadius,
463                                     /+ Qt:: +/qt.core.namespace.SizeMode mode = /+ Qt:: +/qt.core.namespace.SizeMode.AbsoluteSize)
464     {
465         auto tmp = QRectF(rect); drawRoundedRect(tmp, xRadius, yRadius, mode);
466     }
467 
468     void drawTiledPixmap(ref const(QRectF) rect, ref const(QPixmap) pm, ref const(QPointF) offset = globalInitVar!QPointF);
469     pragma(inline, true) void drawTiledPixmap(int x, int y, int w, int h, ref const(QPixmap) pm, int sx=0, int sy=0)
470     {
471         auto tmp = QRectF(x, y, w, h); auto tmp__1 = QPointF(sx, sy); drawTiledPixmap(tmp, pm, tmp__1);
472     }
473     pragma(inline, true) void drawTiledPixmap(ref const(QRect) rect, ref const(QPixmap) pm, ref const(QPoint) offset /+ = QPoint() +/)
474     {
475         auto tmp = QRectF(rect); auto tmp__1 = QPointF(offset); drawTiledPixmap(tmp, pm, tmp__1);
476     }
477     version(QT_NO_PICTURE){}else
478     {
479         void drawPicture(ref const(QPointF) p, ref const(QPicture) picture);
480         pragma(inline, true) void drawPicture(int x, int y, ref const(QPicture) p)
481         {
482             auto tmp = QPoint(x, y); drawPicture(tmp, p);
483         }
484         pragma(inline, true) void drawPicture(ref const(QPoint) pt, ref const(QPicture) p)
485         {
486             auto tmp = QPointF(pt); drawPicture(tmp, p);
487         }
488     }
489 
490     void drawPixmap(ref const(QRectF) targetRect, ref const(QPixmap) pixmap, ref const(QRectF) sourceRect);
491     pragma(inline, true) void drawPixmap(ref const(QRect) targetRect, ref const(QPixmap) pixmap, ref const(QRect) sourceRect)
492     {
493         auto tmp = QRectF(targetRect); auto tmp__1 = QRectF(sourceRect); drawPixmap(tmp, pixmap, tmp__1);
494     }
495     pragma(inline, true) void drawPixmap(int x, int y, int w, int h, ref const(QPixmap) pm,
496                                int sx, int sy, int sw, int sh)
497     {
498         auto tmp = QRectF(x, y, w, h); auto tmp__1 = QRectF(sx, sy, sw, sh); drawPixmap(tmp, pm, tmp__1);
499     }
500     pragma(inline, true) void drawPixmap(int x, int y, ref const(QPixmap) pm,
501                                int sx, int sy, int sw, int sh)
502     {
503         auto tmp = QRectF(x, y, -1, -1); auto tmp__1 = QRectF(sx, sy, sw, sh); drawPixmap(tmp, pm, tmp__1);
504     }
505     pragma(inline, true) void drawPixmap(ref const(QPointF) p, ref const(QPixmap) pm, ref const(QRectF) sr)
506     {
507         auto tmp = QRectF(p.x(), p.y(), -1, -1); drawPixmap(tmp, pm, sr);
508     }
509     pragma(inline, true) void drawPixmap(ref const(QPoint) p, ref const(QPixmap) pm, ref const(QRect) sr)
510     {
511         auto tmp = QRectF(p.x(), p.y(), -1, -1); auto tmp2 = QRectF(sr); drawPixmap(tmp, pm, tmp2);
512     }
513     void drawPixmap(ref const(QPointF) p, ref const(QPixmap) pm);
514     pragma(inline, true) void drawPixmap(ref const(QPoint) p, ref const(QPixmap) pm)
515     {
516         auto tmp = QPointF(p); drawPixmap(tmp, pm);
517     }
518     pragma(inline, true) void drawPixmap(int x, int y, ref const(QPixmap) pm)
519     {
520         auto tmp = QPointF(x, y); drawPixmap(tmp, pm);
521     }
522     pragma(inline, true) void drawPixmap(ref const(QRect) r, ref const(QPixmap) pm)
523     {
524         auto tmp = QRectF(r); auto tmp__1 = QRectF(); drawPixmap(tmp, pm, tmp__1);
525     }
526     pragma(inline, true) void drawPixmap(int x, int y, int w, int h, ref const(QPixmap) pm)
527     {
528         auto tmp = QRectF(x, y, w, h); auto tmp__1 = QRectF(); drawPixmap(tmp, pm, tmp__1);
529     }
530 
531     void drawPixmapFragments(const(PixmapFragment)* fragments, int fragmentCount,
532                                  ref const(QPixmap) pixmap, PixmapFragmentHints hints = PixmapFragmentHints());
533 
534     void drawImage(ref const(QRectF) targetRect, ref const(QImage) image, ref const(QRectF) sourceRect,
535                        /+ Qt:: +/qt.core.namespace.ImageConversionFlags flags = /+ Qt:: +/qt.core.namespace.ImageConversionFlag.AutoColor);
536     pragma(inline, true) void drawImage(ref const(QRect) targetRect, ref const(QImage) image, ref const(QRect) sourceRect,
537                               /+ Qt:: +/qt.core.namespace.ImageConversionFlags flags = /+ Qt:: +/qt.core.namespace.ImageConversionFlag.AutoColor)
538     {
539         auto tmp = QRectF(targetRect); auto tmp__1 = QRectF(sourceRect); drawImage(tmp, image, tmp__1, flags);
540     }
541     pragma(inline, true) void drawImage(ref const(QPointF) p, ref const(QImage) image, ref const(QRectF) sr,
542                               /+ Qt:: +/qt.core.namespace.ImageConversionFlags flags = /+ Qt:: +/qt.core.namespace.ImageConversionFlag.AutoColor)
543     {
544         auto tmp = QRectF(p.x(), p.y(), -1, -1); drawImage(tmp, image, sr, flags);
545     }
546     pragma(inline, true) void drawImage(ref const(QPoint) p, ref const(QImage) image, ref const(QRect) sr,
547                               /+ Qt:: +/qt.core.namespace.ImageConversionFlags flags = /+ Qt:: +/qt.core.namespace.ImageConversionFlag.AutoColor)
548     {
549         auto tmp = QRect(p.x(), p.y(), -1, -1); drawImage(tmp, image, sr, flags);
550     }
551     pragma(inline, true) void drawImage(ref const(QRectF) r, ref const(QImage) image)
552     {
553         auto tmp = QRectF(0, 0, image.width(), image.height()); drawImage(r, image, tmp);
554     }
555     pragma(inline, true) void drawImage(ref const(QRect) r, ref const(QImage) image)
556     {
557         auto tmp0 = QRectF(r); auto tmp = QRectF(0, 0, image.width(), image.height()); drawImage(tmp0, image, tmp);
558     }
559     void drawImage(ref const(QPointF) p, ref const(QImage) image);
560     pragma(inline, true) void drawImage(ref const(QPoint) p, ref const(QImage) image)
561     {
562         auto tmp = QPointF(p); drawImage(tmp, image);
563     }
564     pragma(inline, true) void drawImage(int x, int y, ref const(QImage) image, int sx = 0, int sy = 0,
565                               int sw = -1, int sh = -1, /+ Qt:: +/qt.core.namespace.ImageConversionFlags flags = /+ Qt:: +/qt.core.namespace.ImageConversionFlag.AutoColor)
566     {
567         if (sx == 0 && sy == 0 && sw == -1 && sh == -1 && flags == /+ Qt:: +/qt.core.namespace.ImageConversionFlags.AutoColor)
568             { auto tmp = QPointF(x, y); drawImage(tmp, image);}
569         else
570             { auto tmp__1 = QRectF(x, y, -1, -1); auto tmp__2 = QRectF(sx, sy, sw, sh); drawImage(tmp__1, image, tmp__2, flags);}
571     }
572 
573     void setLayoutDirection(/+ Qt:: +/qt.core.namespace.LayoutDirection direction);
574     /+ Qt:: +/qt.core.namespace.LayoutDirection layoutDirection() const;
575 
576     version(QT_NO_RAWFONT){}else
577     {
578         void drawGlyphRun(ref const(QPointF) position, ref const(QGlyphRun) glyphRun);
579     }
580 
581     void drawStaticText(ref const(QPointF) topLeftPosition, ref const(QStaticText) staticText);
582     pragma(inline, true) void drawStaticText(ref const(QPoint) p, ref const(QStaticText) staticText)
583     {
584         auto tmp = QPointF(p); drawStaticText(tmp, staticText);
585     }
586     pragma(inline, true) void drawStaticText(int x, int y, ref const(QStaticText) staticText)
587     {
588         auto tmp = QPointF(x, y); drawStaticText(tmp, staticText);
589     }
590 
591     void drawText(ref const(QPointF) p, ref const(QString) s);
592     pragma(inline, true) void drawText(ref const(QPoint) p, ref const(QString) s)
593     {
594         auto tmp = QPointF(p); drawText(tmp, s);
595     }
596     pragma(inline, true) void drawText(int x, int y, ref const(QString) s)
597     {
598         auto tmp = QPointF(x, y); drawText(tmp, s);
599     }
600 
601     void drawText(ref const(QPointF) p, ref const(QString) str, int tf, int justificationPadding);
602 
603     void drawText(ref const(QRectF) r, int flags, ref const(QString) text, QRectF* br = null);
604     void drawText(ref const(QRect) r, int flags, ref const(QString) text, QRect* br = null);
605     pragma(inline, true) void drawText(int x, int y, int w, int h, int flags, ref const(QString) str, QRect* br = null)
606     {
607         auto tmp = QRect(x, y, w, h); drawText(tmp, flags, str, br);
608     }
609 
610     void drawText(ref const(QRectF) r, ref const(QString) text, ref const(QTextOption) o = globalInitVar!QTextOption);
611 
612     QRectF boundingRect(ref const(QRectF) rect, int flags, ref const(QString) text);
613     QRect boundingRect(ref const(QRect) rect, int flags, ref const(QString) text);
614     pragma(inline, true) QRect boundingRect(int x, int y, int w, int h, int flags, ref const(QString) text)
615     {
616         auto tmp = QRect(x, y, w, h); return boundingRect(tmp, flags, text);
617     }
618 
619     QRectF boundingRect(ref const(QRectF) rect, ref const(QString) text, ref const(QTextOption) o = globalInitVar!QTextOption);
620 
621     void drawTextItem(ref const(QPointF) p, ref const(QTextItem) ti);
622     pragma(inline, true) void drawTextItem(int x, int y, ref const(QTextItem) ti)
623     {
624         auto tmp = QPointF(x, y); drawTextItem(tmp, ti);
625     }
626     pragma(inline, true) void drawTextItem(ref const(QPoint) p, ref const(QTextItem) ti)
627     {
628         auto tmp = QPointF(p); drawTextItem(tmp, ti);
629     }
630 
631     void fillRect(ref const(QRectF) , ref const(QBrush) );
632     pragma(inline, true) void fillRect(int x, int y, int w, int h, ref const(QBrush) b)
633     {
634         auto tmp = QRect(x, y, w, h); fillRect(tmp, b);
635     }
636     void fillRect(ref const(QRect) , ref const(QBrush) );
637 
638     void fillRect(ref const(QRectF) , ref const(QColor) color);
639     pragma(inline, true) void fillRect(int x, int y, int w, int h, ref const(QColor) b)
640     {
641         auto tmp = QRect(x, y, w, h); fillRect(tmp, b);
642     }
643     void fillRect(ref const(QRect) , ref const(QColor) color);
644 
645     pragma(inline, true) void fillRect(int x, int y, int w, int h, /+ Qt:: +/qt.core.namespace.GlobalColor c)
646     {
647         auto tmp = QRect(x, y, w, h); auto tmp__1 = QColor(c); fillRect(tmp, tmp__1);
648     }
649     pragma(inline, true) void fillRect(ref const(QRect) r, /+ Qt:: +/qt.core.namespace.GlobalColor c)
650     {
651         auto tmp = QColor(c); fillRect(r, tmp);
652     }
653     pragma(inline, true) void fillRect(ref const(QRectF) r, /+ Qt:: +/qt.core.namespace.GlobalColor c)
654     {
655         auto tmp = QColor(c); fillRect(r, tmp);
656     }
657 
658     pragma(inline, true) void fillRect(int x, int y, int w, int h, /+ Qt:: +/qt.core.namespace.BrushStyle style)
659     {
660         auto tmp = QRectF(x, y, w, h); auto tmp__1 = QBrush(style); fillRect(tmp, tmp__1);
661     }
662     pragma(inline, true) void fillRect(ref const(QRect) r, /+ Qt:: +/qt.core.namespace.BrushStyle style)
663     {
664         auto tmp = QRectF(r); auto tmp__1 = QBrush(style); fillRect(tmp, tmp__1);
665     }
666     pragma(inline, true) void fillRect(ref const(QRectF) r, /+ Qt:: +/qt.core.namespace.BrushStyle style)
667     {
668         auto tmp = QBrush(style); fillRect(r, tmp);
669     }
670 
671 /+    pragma(inline, true) void fillRect(int x, int y, int w, int h, QGradient.Preset p)
672     {
673         auto tmp = QRect(x, y, w, h); auto tmp2 = QGradient(p); fillRect(tmp, tmp2);
674     }
675     pragma(inline, true) void fillRect(ref const(QRect) r, QGradient.Preset p)
676     {
677         auto tmp = QGradient(p); fillRect(r, tmp);
678     }
679     pragma(inline, true) void fillRect(ref const(QRectF) r, QGradient.Preset p)
680     {
681         auto tmp = QGradient(p); fillRect(r, tmp);
682     }+/
683 
684     void eraseRect(ref const(QRectF) );
685     pragma(inline, true) void eraseRect(int x, int y, int w, int h)
686     {
687         auto tmp = QRectF(x, y, w, h); eraseRect(tmp);
688     }
689     pragma(inline, true) void eraseRect(ref const(QRect) rect)
690     {
691         auto tmp = QRectF(rect); eraseRect(tmp);
692     }
693 
694     void setRenderHint(RenderHint hint, bool on = true);
695     void setRenderHints(RenderHints hints, bool on = true);
696     RenderHints renderHints() const;
697     pragma(inline, true) bool testRenderHint(RenderHint hint) const { return cast(bool)(renderHints() & hint); }
698 
699     QPaintEngine paintEngine() const;
700 
701     void beginNativePainting();
702     void endNativePainting();
703 
704 private:
705     /+ Q_DISABLE_COPY(QPainter) +/
706 @disable this(this);
707 /+this(ref const(QPainter));+//+ref QPainter operator =(ref const(QPainter));+/
708     QScopedPointer!(QPainterPrivate) d_ptr;
709 
710     /+ friend class QWidget; +/
711     /+ friend class QFontEngine; +/
712     /+ friend class QFontEngineBox; +/
713     /+ friend class QFontEngineFT; +/
714     /+ friend class QFontEngineMac; +/
715     /+ friend class QFontEngineWin; +/
716     /+ friend class QPaintEngine; +/
717     /+ friend class QPaintEngineExPrivate; +/
718     /+ friend class QOpenGLPaintEngine; +/
719     /+ friend class QWin32PaintEngine; +/
720     /+ friend class QWin32PaintEnginePrivate; +/
721     /+ friend class QRasterPaintEngine; +/
722     /+ friend class QAlphaPaintEngine; +/
723     /+ friend class QPreviewPaintEngine; +/
724     /+ friend class QTextEngine; +/
725     mixin(CREATE_CONVENIENCE_WRAPPERS);
726 }
727 /+pragma(inline, true) QFlags!(QPainter.RenderHints.enum_type) operator |(QPainter.RenderHints.enum_type f1, QPainter.RenderHints.enum_type f2)/+noexcept+/{return QFlags!(QPainter.RenderHints.enum_type)(f1)|f2;}+/
728 /+pragma(inline, true) QFlags!(QPainter.RenderHints.enum_type) operator |(QPainter.RenderHints.enum_type f1, QFlags!(QPainter.RenderHints.enum_type) f2)/+noexcept+/{return f2|f1;}+/
729 /+pragma(inline, true) QFlags!(QPainter.RenderHints.enum_type) operator &(QPainter.RenderHints.enum_type f1, QPainter.RenderHints.enum_type f2)/+noexcept+/{return QFlags!(QPainter.RenderHints.enum_type)(f1)&f2;}+/
730 /+pragma(inline, true) QFlags!(QPainter.RenderHints.enum_type) operator &(QPainter.RenderHints.enum_type f1, QFlags!(QPainter.RenderHints.enum_type) f2)/+noexcept+/{return f2&f1;}+/
731 /+pragma(inline, true) void operator +(QPainter.RenderHints.enum_type f1, QPainter.RenderHints.enum_type f2)/+noexcept+/;+/
732 /+pragma(inline, true) void operator +(QPainter.RenderHints.enum_type f1, QFlags!(QPainter.RenderHints.enum_type) f2)/+noexcept+/;+/
733 /+pragma(inline, true) void operator +(int f1, QFlags!(QPainter.RenderHints.enum_type) f2)/+noexcept+/;+/
734 /+pragma(inline, true) void operator -(QPainter.RenderHints.enum_type f1, QPainter.RenderHints.enum_type f2)/+noexcept+/;+/
735 /+pragma(inline, true) void operator -(QPainter.RenderHints.enum_type f1, QFlags!(QPainter.RenderHints.enum_type) f2)/+noexcept+/;+/
736 /+pragma(inline, true) void operator -(int f1, QFlags!(QPainter.RenderHints.enum_type) f2)/+noexcept+/;+/
737 /+pragma(inline, true) QIncompatibleFlag operator |(QPainter.RenderHints.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
738 /+pragma(inline, true) void operator +(int f1, QPainter.RenderHints.enum_type f2)/+noexcept+/;+/
739 /+pragma(inline, true) void operator +(QPainter.RenderHints.enum_type f1, int f2)/+noexcept+/;+/
740 /+pragma(inline, true) void operator -(int f1, QPainter.RenderHints.enum_type f2)/+noexcept+/;+/
741 /+pragma(inline, true) void operator -(QPainter.RenderHints.enum_type f1, int f2)/+noexcept+/;+/
742 /+ Q_DECLARE_TYPEINFO(QPainter::PixmapFragment, Q_RELOCATABLE_TYPE);
743 
744 Q_DECLARE_OPERATORS_FOR_FLAGS(QPainter::RenderHints)
745 
746 #ifndef QT_NO_PICTURE
747 #endif +/
748