1/****************************************************************************
2**
3** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4** Contact: http://www.qt-project.org/legal
5**
6** This file is part of the QtGui module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and Digia. For licensing terms and
14** conditions see http://qt.digia.com/licensing. For further information
15** use the contact form at http://qt.digia.com/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 2.1 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 2.1 requirements
23** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24**
25** In addition, as a special exception, Digia gives you certain additional
26** rights. These rights are described in the Digia Qt LGPL Exception
27** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28**
29** GNU General Public License Usage
30** Alternatively, this file may be used under the terms of the GNU
31** General Public License version 3.0 as published by the Free Software
32** Foundation and appearing in the file LICENSE.GPL included in the
33** packaging of this file. Please review the following information to
34** ensure the GNU General Public License version 3.0 requirements will be
35** met: http://www.gnu.org/copyleft/gpl.html.
36**
37**
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef QPAINTER_H
43#define QPAINTER_H
44
45#include <QtCore/qnamespace.h>
46#include <QtCore/qrect.h>
47#include <QtCore/qpoint.h>
48#include <QtCore/qscopedpointer.h>
49#include <QtGui/qpixmap.h>
50#include <QtGui/qimage.h>
51#include <QtGui/qtextoption.h>
52#include <QtGui/qdrawutil.h>
53
54#ifndef QT_INCLUDE_COMPAT
55#include <QtGui/qpolygon.h>
56#include <QtGui/qpen.h>
57#include <QtGui/qbrush.h>
58#include <QtGui/qmatrix.h>
59#include <QtGui/qtransform.h>
60#include <QtGui/qfontinfo.h>
61#include <QtGui/qfontmetrics.h>
62#endif
63
64QT_BEGIN_HEADER
65
66QT_BEGIN_NAMESPACE
67
68QT_MODULE(Gui)
69
70class QBrush;
71class QFontInfo;
72class QFontMetrics;
73class QPaintDevice;
74class QPainterPath;
75class QPainterPrivate;
76class QPen;
77class QPolygon;
78class QTextItem;
79class QMatrix;
80class QTransform;
81class QStaticText;
82class QGlyphRun;
83
84class QPainterPrivateDeleter;
85
86class Q_GUI_EXPORT QPainter
87{
88 Q_DECLARE_PRIVATE(QPainter)
89 Q_GADGET
90 Q_FLAGS(RenderHint RenderHints)
91
92public:
93 enum RenderHint {
94 Antialiasing = 0x01,
95 TextAntialiasing = 0x02,
96 SmoothPixmapTransform = 0x04,
97 HighQualityAntialiasing = 0x08,
98 NonCosmeticDefaultPen = 0x10
99 };
100
101 Q_DECLARE_FLAGS(RenderHints, RenderHint)
102
103 class PixmapFragment {
104 public:
105 qreal x;
106 qreal y;
107 qreal sourceLeft;
108 qreal sourceTop;
109 qreal width;
110 qreal height;
111 qreal scaleX;
112 qreal scaleY;
113 qreal rotation;
114 qreal opacity;
115 static PixmapFragment Q_GUI_EXPORT create(const QPointF &pos, const QRectF &sourceRect,
116 qreal scaleX = 1, qreal scaleY = 1,
117 qreal rotation = 0, qreal opacity = 1);
118 };
119
120 enum PixmapFragmentHint {
121 OpaqueHint = 0x01
122 };
123
124 Q_DECLARE_FLAGS(PixmapFragmentHints, PixmapFragmentHint)
125
126 QPainter();
127 explicit QPainter(QPaintDevice *);
128 ~QPainter();
129
130 QPaintDevice *device() const;
131
132 bool begin(QPaintDevice *);
133 bool end();
134 bool isActive() const;
135
136 void initFrom(const QWidget *widget);
137
138 enum CompositionMode {
139 CompositionMode_SourceOver,
140 CompositionMode_DestinationOver,
141 CompositionMode_Clear,
142 CompositionMode_Source,
143 CompositionMode_Destination,
144 CompositionMode_SourceIn,
145 CompositionMode_DestinationIn,
146 CompositionMode_SourceOut,
147 CompositionMode_DestinationOut,
148 CompositionMode_SourceAtop,
149 CompositionMode_DestinationAtop,
150 CompositionMode_Xor,
151
152 //svg 1.2 blend modes
153 CompositionMode_Plus,
154 CompositionMode_Multiply,
155 CompositionMode_Screen,
156 CompositionMode_Overlay,
157 CompositionMode_Darken,
158 CompositionMode_Lighten,
159 CompositionMode_ColorDodge,
160 CompositionMode_ColorBurn,
161 CompositionMode_HardLight,
162 CompositionMode_SoftLight,
163 CompositionMode_Difference,
164 CompositionMode_Exclusion,
165
166 // ROPs
167 RasterOp_SourceOrDestination,
168 RasterOp_SourceAndDestination,
169 RasterOp_SourceXorDestination,
170 RasterOp_NotSourceAndNotDestination,
171 RasterOp_NotSourceOrNotDestination,
172 RasterOp_NotSourceXorDestination,
173 RasterOp_NotSource,
174 RasterOp_NotSourceAndDestination,
175 RasterOp_SourceAndNotDestination
176 };
177 void setCompositionMode(CompositionMode mode);
178 CompositionMode compositionMode() const;
179
180 const QFont &font() const;
181 void setFont(const QFont &f);
182
183 QFontMetrics fontMetrics() const;
184 QFontInfo fontInfo() const;
185
186 void setPen(const QColor &color);
187 void setPen(const QPen &pen);
188 void setPen(Qt::PenStyle style);
189 const QPen &pen() const;
190
191 void setBrush(const QBrush &brush);
192 void setBrush(Qt::BrushStyle style);
193 const QBrush &brush() const;
194
195 // attributes/modes
196 void setBackgroundMode(Qt::BGMode mode);
197 Qt::BGMode backgroundMode() const;
198
199 QPoint brushOrigin() const;
200 inline void setBrushOrigin(int x, int y);
201 inline void setBrushOrigin(const QPoint &);
202 void setBrushOrigin(const QPointF &);
203
204 void setBackground(const QBrush &bg);
205 const QBrush &background() const;
206
207 qreal opacity() const;
208 void setOpacity(qreal opacity);
209
210 // Clip functions
211 QRegion clipRegion() const;
212 QPainterPath clipPath() const;
213
214 void setClipRect(const QRectF &, Qt::ClipOperation op = Qt::ReplaceClip);
215 void setClipRect(const QRect &, Qt::ClipOperation op = Qt::ReplaceClip);
216 inline void setClipRect(int x, int y, int w, int h, Qt::ClipOperation op = Qt::ReplaceClip);
217
218 void setClipRegion(const QRegion &, Qt::ClipOperation op = Qt::ReplaceClip);
219
220 void setClipPath(const QPainterPath &path, Qt::ClipOperation op = Qt::ReplaceClip);
221
222 void setClipping(bool enable);
223 bool hasClipping() const;
224
225 QRectF clipBoundingRect() const;
226
227 void save();
228 void restore();
229
230 // XForm functions
231 void setMatrix(const QMatrix &matrix, bool combine = false);
232 const QMatrix &matrix() const;
233 const QMatrix &deviceMatrix() const;
234 void resetMatrix();
235
236 void setTransform(const QTransform &transform, bool combine = false);
237 const QTransform &transform() const;
238 const QTransform &deviceTransform() const;
239 void resetTransform();
240
241 void setWorldMatrix(const QMatrix &matrix, bool combine = false);
242 const QMatrix &worldMatrix() const;
243
244 void setWorldTransform(const QTransform &matrix, bool combine = false);
245 const QTransform &worldTransform() const;
246
247 QMatrix combinedMatrix() const;
248 QTransform combinedTransform() const;
249
250 void setMatrixEnabled(bool enabled);
251 bool matrixEnabled() const;
252
253 void setWorldMatrixEnabled(bool enabled);
254 bool worldMatrixEnabled() const;
255
256 void scale(qreal sx, qreal sy);
257 void shear(qreal sh, qreal sv);
258 void rotate(qreal a);
259
260 void translate(const QPointF &offset);
261 inline void translate(const QPoint &offset);
262 inline void translate(qreal dx, qreal dy);
263
264 QRect window() const;
265 void setWindow(const QRect &window);
266 inline void setWindow(int x, int y, int w, int h);
267
268 QRect viewport() const;
269 void setViewport(const QRect &viewport);
270 inline void setViewport(int x, int y, int w, int h);
271
272 void setViewTransformEnabled(bool enable);
273 bool viewTransformEnabled() const;
274
275 // drawing functions
276 void strokePath(const QPainterPath &path, const QPen &pen);
277 void fillPath(const QPainterPath &path, const QBrush &brush);
278 void drawPath(const QPainterPath &path);
279
280 inline void drawPoint(const QPointF &pt);
281 inline void drawPoint(const QPoint &p);
282 inline void drawPoint(int x, int y);
283
284 void drawPoints(const QPointF *points, int pointCount);
285 inline void drawPoints(const QPolygonF &points);
286 void drawPoints(const QPoint *points, int pointCount);
287 inline void drawPoints(const QPolygon &points);
288
289 inline void drawLine(const QLineF &line);
290 inline void drawLine(const QLine &line);
291 inline void drawLine(int x1, int y1, int x2, int y2);
292 inline void drawLine(const QPoint &p1, const QPoint &p2);
293 inline void drawLine(const QPointF &p1, const QPointF &p2);
294
295 void drawLines(const QLineF *lines, int lineCount);
296 inline void drawLines(const QVector<QLineF> &lines);
297 void drawLines(const QPointF *pointPairs, int lineCount);
298 inline void drawLines(const QVector<QPointF> &pointPairs);
299 void drawLines(const QLine *lines, int lineCount);
300 inline void drawLines(const QVector<QLine> &lines);
301 void drawLines(const QPoint *pointPairs, int lineCount);
302 inline void drawLines(const QVector<QPoint> &pointPairs);
303
304 inline void drawRect(const QRectF &rect);
305 inline void drawRect(int x1, int y1, int w, int h);
306 inline void drawRect(const QRect &rect);
307
308 void drawRects(const QRectF *rects, int rectCount);
309 inline void drawRects(const QVector<QRectF> &rectangles);
310 void drawRects(const QRect *rects, int rectCount);
311 inline void drawRects(const QVector<QRect> &rectangles);
312
313 void drawEllipse(const QRectF &r);
314 void drawEllipse(const QRect &r);
315 inline void drawEllipse(int x, int y, int w, int h);
316
317 inline void drawEllipse(const QPointF &center, qreal rx, qreal ry);
318 inline void drawEllipse(const QPoint &center, int rx, int ry);
319
320 void drawPolyline(const QPointF *points, int pointCount);
321 inline void drawPolyline(const QPolygonF &polyline);
322 void drawPolyline(const QPoint *points, int pointCount);
323 inline void drawPolyline(const QPolygon &polygon);
324
325 void drawPolygon(const QPointF *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill);
326 inline void drawPolygon(const QPolygonF &polygon, Qt::FillRule fillRule = Qt::OddEvenFill);
327 void drawPolygon(const QPoint *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill);
328 inline void drawPolygon(const QPolygon &polygon, Qt::FillRule fillRule = Qt::OddEvenFill);
329
330 void drawConvexPolygon(const QPointF *points, int pointCount);
331 inline void drawConvexPolygon(const QPolygonF &polygon);
332 void drawConvexPolygon(const QPoint *points, int pointCount);
333 inline void drawConvexPolygon(const QPolygon &polygon);
334
335 void drawArc(const QRectF &rect, int a, int alen);
336 inline void drawArc(const QRect &, int a, int alen);
337 inline void drawArc(int x, int y, int w, int h, int a, int alen);
338
339 void drawPie(const QRectF &rect, int a, int alen);
340 inline void drawPie(int x, int y, int w, int h, int a, int alen);
341 inline void drawPie(const QRect &, int a, int alen);
342
343 void drawChord(const QRectF &rect, int a, int alen);
344 inline void drawChord(int x, int y, int w, int h, int a, int alen);
345 inline void drawChord(const QRect &, int a, int alen);
346
347 void drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius,
348 Qt::SizeMode mode = Qt::AbsoluteSize);
349 inline void drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius,
350 Qt::SizeMode mode = Qt::AbsoluteSize);
351 inline void drawRoundedRect(const QRect &rect, qreal xRadius, qreal yRadius,
352 Qt::SizeMode mode = Qt::AbsoluteSize);
353
354 void drawRoundRect(const QRectF &r, int xround = 25, int yround = 25);
355 inline void drawRoundRect(int x, int y, int w, int h, int = 25, int = 25);
356 inline void drawRoundRect(const QRect &r, int xround = 25, int yround = 25);
357
358 void drawTiledPixmap(const QRectF &rect, const QPixmap &pm, const QPointF &offset = QPointF());
359 inline void drawTiledPixmap(int x, int y, int w, int h, const QPixmap &, int sx=0, int sy=0);
360 inline void drawTiledPixmap(const QRect &, const QPixmap &, const QPoint & = QPoint());
361#ifndef QT_NO_PICTURE
362 void drawPicture(const QPointF &p, const QPicture &picture);
363 inline void drawPicture(int x, int y, const QPicture &picture);
364 inline void drawPicture(const QPoint &p, const QPicture &picture);
365#endif
366
367 void drawPixmap(const QRectF &targetRect, const QPixmap &pixmap, const QRectF &sourceRect);
368 inline void drawPixmap(const QRect &targetRect, const QPixmap &pixmap, const QRect &sourceRect);
369 inline void drawPixmap(int x, int y, int w, int h, const QPixmap &pm,
370 int sx, int sy, int sw, int sh);
371 inline void drawPixmap(int x, int y, const QPixmap &pm,
372 int sx, int sy, int sw, int sh);
373 inline void drawPixmap(const QPointF &p, const QPixmap &pm, const QRectF &sr);
374 inline void drawPixmap(const QPoint &p, const QPixmap &pm, const QRect &sr);
375 void drawPixmap(const QPointF &p, const QPixmap &pm);
376 inline void drawPixmap(const QPoint &p, const QPixmap &pm);
377 inline void drawPixmap(int x, int y, const QPixmap &pm);
378 inline void drawPixmap(const QRect &r, const QPixmap &pm);
379 inline void drawPixmap(int x, int y, int w, int h, const QPixmap &pm);
380
381 void drawPixmapFragments(const PixmapFragment *fragments, int fragmentCount,
382 const QPixmap &pixmap, PixmapFragmentHints hints = 0);
383 void drawPixmapFragments(const QRectF *targetRects, const QRectF *sourceRects, int fragmentCount,
384 const QPixmap &pixmap, PixmapFragmentHints hints = 0);
385
386 void drawImage(const QRectF &targetRect, const QImage &image, const QRectF &sourceRect,
387 Qt::ImageConversionFlags flags = Qt::AutoColor);
388 inline void drawImage(const QRect &targetRect, const QImage &image, const QRect &sourceRect,
389 Qt::ImageConversionFlags flags = Qt::AutoColor);
390 inline void drawImage(const QPointF &p, const QImage &image, const QRectF &sr,
391 Qt::ImageConversionFlags flags = Qt::AutoColor);
392 inline void drawImage(const QPoint &p, const QImage &image, const QRect &sr,
393 Qt::ImageConversionFlags flags = Qt::AutoColor);
394 inline void drawImage(const QRectF &r, const QImage &image);
395 inline void drawImage(const QRect &r, const QImage &image);
396 void drawImage(const QPointF &p, const QImage &image);
397 inline void drawImage(const QPoint &p, const QImage &image);
398 inline void drawImage(int x, int y, const QImage &image, int sx = 0, int sy = 0,
399 int sw = -1, int sh = -1, Qt::ImageConversionFlags flags = Qt::AutoColor);
400
401 void setLayoutDirection(Qt::LayoutDirection direction);
402 Qt::LayoutDirection layoutDirection() const;
403
404#if !defined(QT_NO_RAWFONT)
405 void drawGlyphRun(const QPointF &position, const QGlyphRun &glyphRun);
406#endif
407
408 void drawStaticText(const QPointF &topLeftPosition, const QStaticText &staticText);
409 inline void drawStaticText(const QPoint &topLeftPosition, const QStaticText &staticText);
410 inline void drawStaticText(int left, int top, const QStaticText &staticText);
411
412 void drawText(const QPointF &p, const QString &s);
413 inline void drawText(const QPoint &p, const QString &s);
414 inline void drawText(int x, int y, const QString &s);
415
416 void drawText(const QPointF &p, const QString &str, int tf, int justificationPadding);
417
418 void drawText(const QRectF &r, int flags, const QString &text, QRectF *br=0);
419 void drawText(const QRect &r, int flags, const QString &text, QRect *br=0);
420 inline void drawText(int x, int y, int w, int h, int flags, const QString &text, QRect *br=0);
421
422 void drawText(const QRectF &r, const QString &text, const QTextOption &o = QTextOption());
423
424 QRectF boundingRect(const QRectF &rect, int flags, const QString &text);
425 QRect boundingRect(const QRect &rect, int flags, const QString &text);
426 inline QRect boundingRect(int x, int y, int w, int h, int flags, const QString &text);
427
428 QRectF boundingRect(const QRectF &rect, const QString &text, const QTextOption &o = QTextOption());
429
430 void drawTextItem(const QPointF &p, const QTextItem &ti);
431 inline void drawTextItem(int x, int y, const QTextItem &ti);
432 inline void drawTextItem(const QPoint &p, const QTextItem &ti);
433
434 void fillRect(const QRectF &, const QBrush &);
435 inline void fillRect(int x, int y, int w, int h, const QBrush &);
436 void fillRect(const QRect &, const QBrush &);
437
438 void fillRect(const QRectF &, const QColor &color);
439 inline void fillRect(int x, int y, int w, int h, const QColor &color);
440 void fillRect(const QRect &, const QColor &color);
441
442 inline void fillRect(int x, int y, int w, int h, Qt::GlobalColor c);
443 inline void fillRect(const QRect &r, Qt::GlobalColor c);
444 inline void fillRect(const QRectF &r, Qt::GlobalColor c);
445
446 inline void fillRect(int x, int y, int w, int h, Qt::BrushStyle style);
447 inline void fillRect(const QRect &r, Qt::BrushStyle style);
448 inline void fillRect(const QRectF &r, Qt::BrushStyle style);
449
450 void eraseRect(const QRectF &);
451 inline void eraseRect(int x, int y, int w, int h);
452 inline void eraseRect(const QRect &);
453
454 void setRenderHint(RenderHint hint, bool on = true);
455 void setRenderHints(RenderHints hints, bool on = true);
456 RenderHints renderHints() const;
457 inline bool testRenderHint(RenderHint hint) const { return renderHints() & hint; }
458
459 QPaintEngine *paintEngine() const;
460
461 static void setRedirected(const QPaintDevice *device, QPaintDevice *replacement,
462 const QPoint& offset = QPoint());
463 static QPaintDevice *redirected(const QPaintDevice *device, QPoint *offset = 0);
464 static void restoreRedirected(const QPaintDevice *device);
465
466 void beginNativePainting();
467 void endNativePainting();
468
469#ifdef QT3_SUPPORT
470
471 inline QT3_SUPPORT void setBackgroundColor(const QColor &color) { setBackground(color); }
472 inline QT3_SUPPORT const QColor &backgroundColor() const { return background().color(); }
473
474 inline QT3_SUPPORT void drawText(int x, int y, const QString &s, int pos, int len)
475 { drawText(x, y, s.mid(pos, len)); }
476 inline QT3_SUPPORT void drawText(const QPoint &p, const QString &s, int pos, int len)
477 { drawText(p, s.mid(pos, len)); }
478 inline QT3_SUPPORT void drawText(int x, int y, const QString &s, int len)
479 { drawText(x, y, s.left(len)); }
480 inline QT3_SUPPORT void drawText(const QPoint &p, const QString &s, int len)
481 { drawText(p, s.left(len)); }
482 inline QT3_SUPPORT void drawText(const QRect &r, int flags, const QString &str, int len, QRect *br=0)
483 { drawText(r, flags, str.left(len), br); }
484 inline QT3_SUPPORT void drawText(int x, int y, int w, int h, int flags, const QString &text, int len, QRect *br=0)
485 { drawText(QRect(x, y, w, h), flags, text.left(len), br); }
486 inline QT3_SUPPORT QRect boundingRect(const QRect &rect, int flags, const QString &text, int len)
487 { return boundingRect(rect, flags, text.left(len)); }
488 inline QT3_SUPPORT QRect boundingRect(int x, int y, int w, int h, int flags, const QString &text, int len)
489 { return boundingRect(QRect(x, y, w, h), flags, text.left(len)); }
490
491 inline QT3_SUPPORT bool begin(QPaintDevice *pdev, const QWidget *init)
492 { bool ret = begin(pdev); initFrom(init); return ret; }
493 QT3_SUPPORT void drawPoints(const QPolygon &pa, int index, int npoints = -1)
494 { drawPoints(pa.constData() + index, npoints == -1 ? pa.size() - index : npoints); }
495
496 QT3_SUPPORT void drawCubicBezier(const QPolygon &pa, int index = 0);
497
498 QT3_SUPPORT void drawLineSegments(const QPolygon &points, int index = 0, int nlines = -1);
499
500 inline QT3_SUPPORT void drawPolyline(const QPolygon &pa, int index, int npoints = -1)
501 { drawPolyline(pa.constData() + index, npoints == -1 ? pa.size() - index : npoints); }
502
503 inline QT3_SUPPORT void drawPolygon(const QPolygon &pa, bool winding, int index = 0, int npoints = -1)
504 { drawPolygon(pa.constData() + index, npoints == -1 ? pa.size() - index : npoints,
505 winding ? Qt::WindingFill : Qt::OddEvenFill); }
506
507 inline QT3_SUPPORT void drawPolygon(const QPolygonF &polygon, bool winding, int index = 0,
508 int npoints = -1)
509 { drawPolygon(polygon.constData() + index, npoints == -1 ? polygon.size() - index : npoints,
510 winding ? Qt::WindingFill : Qt::OddEvenFill); }
511
512 inline QT3_SUPPORT void drawConvexPolygon(const QPolygonF &polygon, int index, int npoints = -1)
513 { drawConvexPolygon(polygon.constData() + index, npoints == -1 ? polygon.size() - index : npoints); }
514 inline QT3_SUPPORT void drawConvexPolygon(const QPolygon &pa, int index, int npoints = -1)
515 { drawConvexPolygon(pa.constData() + index, npoints == -1 ? pa.size() - index : npoints); }
516
517 static inline QT3_SUPPORT void redirect(QPaintDevice *pdev, QPaintDevice *replacement)
518 { setRedirected(pdev, replacement); }
519 static inline QT3_SUPPORT QPaintDevice *redirect(QPaintDevice *pdev)
520 { return const_cast<QPaintDevice*>(redirected(pdev)); }
521
522 inline QT3_SUPPORT void setWorldXForm(bool enabled) { setMatrixEnabled(enabled); }
523 inline QT3_SUPPORT bool hasWorldXForm() const { return matrixEnabled(); }
524 inline QT3_SUPPORT void resetXForm() { resetTransform(); }
525
526 inline QT3_SUPPORT void setViewXForm(bool enabled) { setViewTransformEnabled(enabled); }
527 inline QT3_SUPPORT bool hasViewXForm() const { return viewTransformEnabled(); }
528
529 QT3_SUPPORT void map(int x, int y, int *rx, int *ry) const;
530 QT3_SUPPORT QPoint xForm(const QPoint &) const; // map virtual -> deviceb
531 QT3_SUPPORT QRect xForm(const QRect &) const;
532 QT3_SUPPORT QPolygon xForm(const QPolygon &) const;
533 QT3_SUPPORT QPolygon xForm(const QPolygon &, int index, int npoints) const;
534 QT3_SUPPORT QPoint xFormDev(const QPoint &) const; // map device -> virtual
535 QT3_SUPPORT QRect xFormDev(const QRect &) const;
536 QT3_SUPPORT QPolygon xFormDev(const QPolygon &) const;
537 QT3_SUPPORT QPolygon xFormDev(const QPolygon &, int index, int npoints) const;
538 QT3_SUPPORT qreal translationX() const;
539 QT3_SUPPORT qreal translationY() const;
540#endif
541
542private:
543 Q_DISABLE_COPY(QPainter)
544 friend class Q3Painter;
545
546 QScopedPointer<QPainterPrivate> d_ptr;
547
548 friend class QFontEngine;
549 friend class QFontEngineBox;
550 friend class QFontEngineFT;
551 friend class QFontEngineMac;
552 friend class QFontEngineWin;
553 friend class QFontEngineXLFD;
554 friend class QWSManager;
555 friend class QPaintEngine;
556 friend class QPaintEngineExPrivate;
557 friend class QOpenGLPaintEngine;
558 friend class QVGPaintEngine;
559 friend class QX11PaintEngine;
560 friend class QX11PaintEnginePrivate;
561 friend class QWin32PaintEngine;
562 friend class QWin32PaintEnginePrivate;
563 friend class QRasterPaintEngine;
564 friend class QAlphaPaintEngine;
565 friend class QPreviewPaintEngine;
566};
567
568Q_DECLARE_OPERATORS_FOR_FLAGS(QPainter::RenderHints)
569
570//
571// functions
572//
573inline void QPainter::drawLine(const QLineF &l)
574{
575 drawLines(&l, 1);
576}
577
578inline void QPainter::drawLine(const QLine &line)
579{
580 drawLines(&line, 1);
581}
582
583inline void QPainter::drawLine(int x1, int y1, int x2, int y2)
584{
585 QLine l(x1, y1, x2, y2);
586 drawLines(&l, 1);
587}
588
589inline void QPainter::drawLine(const QPoint &p1, const QPoint &p2)
590{
591 QLine l(p1, p2);
592 drawLines(&l, 1);
593}
594
595inline void QPainter::drawLine(const QPointF &p1, const QPointF &p2)
596{
597 drawLine(QLineF(p1, p2));
598}
599
600inline void QPainter::drawLines(const QVector<QLineF> &lines)
601{
602 drawLines(lines.constData(), lines.size());
603}
604
605inline void QPainter::drawLines(const QVector<QLine> &lines)
606{
607 drawLines(lines.constData(), lines.size());
608}
609
610inline void QPainter::drawLines(const QVector<QPointF> &pointPairs)
611{
612 drawLines(pointPairs.constData(), pointPairs.size() / 2);
613}
614
615inline void QPainter::drawLines(const QVector<QPoint> &pointPairs)
616{
617 drawLines(pointPairs.constData(), pointPairs.size() / 2);
618}
619
620inline void QPainter::drawPolyline(const QPolygonF &polyline)
621{
622 drawPolyline(polyline.constData(), polyline.size());
623}
624
625inline void QPainter::drawPolyline(const QPolygon &polyline)
626{
627 drawPolyline(polyline.constData(), polyline.size());
628}
629
630inline void QPainter::drawPolygon(const QPolygonF &polygon, Qt::FillRule fillRule)
631{
632 drawPolygon(polygon.constData(), polygon.size(), fillRule);
633}
634
635inline void QPainter::drawPolygon(const QPolygon &polygon, Qt::FillRule fillRule)
636{
637 drawPolygon(polygon.constData(), polygon.size(), fillRule);
638}
639
640inline void QPainter::drawConvexPolygon(const QPolygonF &poly)
641{
642 drawConvexPolygon(poly.constData(), poly.size());
643}
644
645inline void QPainter::drawConvexPolygon(const QPolygon &poly)
646{
647 drawConvexPolygon(poly.constData(), poly.size());
648}
649
650inline void QPainter::drawRect(const QRectF &rect)
651{
652 drawRects(&rect, 1);
653}
654
655inline void QPainter::drawRect(int x, int y, int w, int h)
656{
657 QRect r(x, y, w, h);
658 drawRects(&r, 1);
659}
660
661inline void QPainter::drawRect(const QRect &r)
662{
663 drawRects(&r, 1);
664}
665
666inline void QPainter::drawRects(const QVector<QRectF> &rects)
667{
668 drawRects(rects.constData(), rects.size());
669}
670
671inline void QPainter::drawRects(const QVector<QRect> &rects)
672{
673 drawRects(rects.constData(), rects.size());
674}
675
676inline void QPainter::drawPoint(const QPointF &p)
677{
678 drawPoints(&p, 1);
679}
680
681inline void QPainter::drawPoint(int x, int y)
682{
683 QPoint p(x, y);
684 drawPoints(&p, 1);
685}
686
687inline void QPainter::drawPoint(const QPoint &p)
688{
689 drawPoints(&p, 1);
690}
691
692inline void QPainter::drawPoints(const QPolygonF &points)
693{
694 drawPoints(points.constData(), points.size());
695}
696
697inline void QPainter::drawPoints(const QPolygon &points)
698{
699 drawPoints(points.constData(), points.size());
700}
701
702inline void QPainter::drawRoundRect(int x, int y, int w, int h, int xRnd, int yRnd)
703{
704 drawRoundRect(QRectF(x, y, w, h), xRnd, yRnd);
705}
706
707inline void QPainter::drawRoundRect(const QRect &rect, int xRnd, int yRnd)
708{
709 drawRoundRect(QRectF(rect), xRnd, yRnd);
710}
711
712inline void QPainter::drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius,
713 Qt::SizeMode mode)
714{
715 drawRoundedRect(QRectF(x, y, w, h), xRadius, yRadius, mode);
716}
717
718inline void QPainter::drawRoundedRect(const QRect &rect, qreal xRadius, qreal yRadius,
719 Qt::SizeMode mode)
720{
721 drawRoundedRect(QRectF(rect), xRadius, yRadius, mode);
722}
723
724inline void QPainter::drawEllipse(int x, int y, int w, int h)
725{
726 drawEllipse(QRect(x, y, w, h));
727}
728
729inline void QPainter::drawEllipse(const QPointF &center, qreal rx, qreal ry)
730{
731 drawEllipse(QRectF(center.x() - rx, center.y() - ry, 2 * rx, 2 * ry));
732}
733
734inline void QPainter::drawEllipse(const QPoint &center, int rx, int ry)
735{
736 drawEllipse(QRect(center.x() - rx, center.y() - ry, 2 * rx, 2 * ry));
737}
738
739inline void QPainter::drawArc(const QRect &r, int a, int alen)
740{
741 drawArc(QRectF(r), a, alen);
742}
743
744inline void QPainter::drawArc(int x, int y, int w, int h, int a, int alen)
745{
746 drawArc(QRectF(x, y, w, h), a, alen);
747}
748
749inline void QPainter::drawPie(const QRect &rect, int a, int alen)
750{
751 drawPie(QRectF(rect), a, alen);
752}
753
754inline void QPainter::drawPie(int x, int y, int w, int h, int a, int alen)
755{
756 drawPie(QRectF(x, y, w, h), a, alen);
757}
758
759inline void QPainter::drawChord(const QRect &rect, int a, int alen)
760{
761 drawChord(QRectF(rect), a, alen);
762}
763
764inline void QPainter::drawChord(int x, int y, int w, int h, int a, int alen)
765{
766 drawChord(QRectF(x, y, w, h), a, alen);
767}
768
769inline void QPainter::setClipRect(int x, int y, int w, int h, Qt::ClipOperation op)
770{
771 setClipRect(QRect(x, y, w, h), op);
772}
773
774inline void QPainter::eraseRect(const QRect &rect)
775{
776 eraseRect(QRectF(rect));
777}
778
779inline void QPainter::eraseRect(int x, int y, int w, int h)
780{
781 eraseRect(QRectF(x, y, w, h));
782}
783
784inline void QPainter::fillRect(int x, int y, int w, int h, const QBrush &b)
785{
786 fillRect(QRect(x, y, w, h), b);
787}
788
789inline void QPainter::fillRect(int x, int y, int w, int h, const QColor &b)
790{
791 fillRect(QRect(x, y, w, h), b);
792}
793
794inline void QPainter::fillRect(int x, int y, int w, int h, Qt::GlobalColor c)
795{
796 fillRect(QRect(x, y, w, h), QColor(c));
797}
798
799inline void QPainter::fillRect(const QRect &r, Qt::GlobalColor c)
800{
801 fillRect(r, QColor(c));
802}
803
804inline void QPainter::fillRect(const QRectF &r, Qt::GlobalColor c)
805{
806 fillRect(r, QColor(c));
807}
808
809inline void QPainter::fillRect(int x, int y, int w, int h, Qt::BrushStyle style)
810{
811 fillRect(QRectF(x, y, w, h), QBrush(style));
812}
813
814inline void QPainter::fillRect(const QRect &r, Qt::BrushStyle style)
815{
816 fillRect(QRectF(r), QBrush(style));
817}
818
819inline void QPainter::fillRect(const QRectF &r, Qt::BrushStyle style)
820{
821 fillRect(r, QBrush(style));
822}
823
824
825inline void QPainter::setBrushOrigin(int x, int y)
826{
827 setBrushOrigin(QPoint(x, y));
828}
829
830inline void QPainter::setBrushOrigin(const QPoint &p)
831{
832 setBrushOrigin(QPointF(p));
833}
834
835inline void QPainter::drawTiledPixmap(const QRect &rect, const QPixmap &pm, const QPoint &offset)
836{
837 drawTiledPixmap(QRectF(rect), pm, QPointF(offset));
838}
839
840inline void QPainter::drawTiledPixmap(int x, int y, int w, int h, const QPixmap &pm, int sx, int sy)
841{
842 drawTiledPixmap(QRectF(x, y, w, h), pm, QPointF(sx, sy));
843}
844
845inline void QPainter::drawPixmap(const QRect &targetRect, const QPixmap &pixmap, const QRect &sourceRect)
846{
847 drawPixmap(QRectF(targetRect), pixmap, QRectF(sourceRect));
848}
849
850inline void QPainter::drawPixmap(const QPoint &p, const QPixmap &pm)
851{
852 drawPixmap(QPointF(p), pm);
853}
854
855inline void QPainter::drawPixmap(const QRect &r, const QPixmap &pm)
856{
857 drawPixmap(QRectF(r), pm, QRectF());
858}
859
860inline void QPainter::drawPixmap(int x, int y, const QPixmap &pm)
861{
862 drawPixmap(QPointF(x, y), pm);
863}
864
865inline void QPainter::drawPixmap(int x, int y, int w, int h, const QPixmap &pm)
866{
867 drawPixmap(QRectF(x, y, w, h), pm, QRectF());
868}
869
870inline void QPainter::drawPixmap(int x, int y, int w, int h, const QPixmap &pm,
871 int sx, int sy, int sw, int sh)
872{
873 drawPixmap(QRectF(x, y, w, h), pm, QRectF(sx, sy, sw, sh));
874}
875
876inline void QPainter::drawPixmap(int x, int y, const QPixmap &pm,
877 int sx, int sy, int sw, int sh)
878{
879 drawPixmap(QRectF(x, y, -1, -1), pm, QRectF(sx, sy, sw, sh));
880}
881
882inline void QPainter::drawPixmap(const QPointF &p, const QPixmap &pm, const QRectF &sr)
883{
884 drawPixmap(QRectF(p.x(), p.y(), -1, -1), pm, sr);
885}
886
887inline void QPainter::drawPixmap(const QPoint &p, const QPixmap &pm, const QRect &sr)
888{
889 drawPixmap(QRectF(p.x(), p.y(), -1, -1), pm, sr);
890}
891
892inline void QPainter::drawTextItem(int x, int y, const QTextItem &ti)
893{
894 drawTextItem(QPointF(x, y), ti);
895}
896
897inline void QPainter::drawImage(const QRect &targetRect, const QImage &image, const QRect &sourceRect,
898 Qt::ImageConversionFlags flags)
899{
900 drawImage(QRectF(targetRect), image, QRectF(sourceRect), flags);
901}
902
903inline void QPainter::drawImage(const QPointF &p, const QImage &image, const QRectF &sr,
904 Qt::ImageConversionFlags flags)
905{
906 drawImage(QRectF(p.x(), p.y(), -1, -1), image, sr, flags);
907}
908
909inline void QPainter::drawImage(const QPoint &p, const QImage &image, const QRect &sr,
910 Qt::ImageConversionFlags flags)
911{
912 drawImage(QRect(p.x(), p.y(), -1, -1), image, sr, flags);
913}
914
915
916inline void QPainter::drawImage(const QRectF &r, const QImage &image)
917{
918 drawImage(r, image, QRect(0, 0, image.width(), image.height()));
919}
920
921inline void QPainter::drawImage(const QRect &r, const QImage &image)
922{
923 drawImage(r, image, QRectF(0, 0, image.width(), image.height()));
924}
925
926inline void QPainter::drawImage(const QPoint &p, const QImage &image)
927{
928 drawImage(QPointF(p), image);
929}
930
931inline void QPainter::drawImage(int x, int y, const QImage &image, int sx, int sy, int sw, int sh,
932 Qt::ImageConversionFlags flags)
933{
934 if (sx == 0 && sy == 0 && sw == -1 && sh == -1 && flags == Qt::AutoColor)
935 drawImage(QPointF(x, y), image);
936 else
937 drawImage(QRectF(x, y, -1, -1), image, QRectF(sx, sy, sw, sh), flags);
938}
939
940inline void QPainter::drawStaticText(const QPoint &p, const QStaticText &staticText)
941{
942 drawStaticText(QPointF(p), staticText);
943}
944
945inline void QPainter::drawStaticText(int x, int y, const QStaticText &staticText)
946{
947 drawStaticText(QPointF(x, y), staticText);
948}
949
950inline void QPainter::drawTextItem(const QPoint &p, const QTextItem &ti)
951{
952 drawTextItem(QPointF(p), ti);
953}
954
955inline void QPainter::drawText(const QPoint &p, const QString &s)
956{
957 drawText(QPointF(p), s);
958}
959
960inline void QPainter::drawText(int x, int y, int w, int h, int flags, const QString &str, QRect *br)
961{
962 drawText(QRect(x, y, w, h), flags, str, br);
963}
964
965inline void QPainter::drawText(int x, int y, const QString &s)
966{
967 drawText(QPointF(x, y), s);
968}
969
970inline QRect QPainter::boundingRect(int x, int y, int w, int h, int flags, const QString &text)
971{
972 return boundingRect(QRect(x, y, w, h), flags, text);
973}
974
975inline void QPainter::translate(qreal dx, qreal dy)
976{
977 translate(QPointF(dx, dy));
978}
979
980inline void QPainter::translate(const QPoint &offset)
981{
982 translate(offset.x(), offset.y());
983}
984
985inline void QPainter::setViewport(int x, int y, int w, int h)
986{
987 setViewport(QRect(x, y, w, h));
988}
989
990inline void QPainter::setWindow(int x, int y, int w, int h)
991{
992 setWindow(QRect(x, y, w, h));
993}
994
995#ifndef QT_NO_PICTURE
996inline void QPainter::drawPicture(int x, int y, const QPicture &p)
997{
998 drawPicture(QPoint(x, y), p);
999}
1000
1001inline void QPainter::drawPicture(const QPoint &pt, const QPicture &p)
1002{
1003 drawPicture(QPointF(pt), p);
1004}
1005#endif
1006
1007QT_END_NAMESPACE
1008
1009QT_END_HEADER
1010
1011#endif // QPAINTER_H
1012