source: trunk/src/gui/painting/qtransform.h@ 651

Last change on this file since 651 was 651, checked in by Dmitry A. Kuminov, 16 years ago

trunk: Merged in qt 4.6.2 sources.

File size: 11.1 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtGui module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41#ifndef QTRANSFORM_H
42#define QTRANSFORM_H
43
44#include <QtGui/qmatrix.h>
45#include <QtGui/qpainterpath.h>
46#include <QtGui/qpolygon.h>
47#include <QtGui/qregion.h>
48#include <QtGui/qwindowdefs.h>
49#include <QtCore/qline.h>
50#include <QtCore/qpoint.h>
51#include <QtCore/qrect.h>
52
53#if defined(Q_OS_VXWORKS) && defined(m_type)
54# undef m_type
55#endif
56
57QT_BEGIN_HEADER
58
59QT_BEGIN_NAMESPACE
60
61QT_MODULE(Gui)
62
63class QVariant;
64
65class Q_GUI_EXPORT QTransform
66{
67 Q_ENUMS(TransformationType)
68public:
69 enum TransformationType {
70 TxNone = 0x00,
71 TxTranslate = 0x01,
72 TxScale = 0x02,
73 TxRotate = 0x04,
74 TxShear = 0x08,
75 TxProject = 0x10
76 };
77
78 inline explicit QTransform(Qt::Initialization) : affine(Qt::Uninitialized) {}
79 QTransform();
80 QTransform(qreal h11, qreal h12, qreal h13,
81 qreal h21, qreal h22, qreal h23,
82 qreal h31, qreal h32, qreal h33 = 1.0);
83 QTransform(qreal h11, qreal h12, qreal h21,
84 qreal h22, qreal dx, qreal dy);
85 explicit QTransform(const QMatrix &mtx);
86
87 bool isAffine() const;
88 bool isIdentity() const;
89 bool isInvertible() const;
90 bool isScaling() const;
91 bool isRotating() const;
92 bool isTranslating() const;
93
94 TransformationType type() const;
95
96 inline qreal determinant() const;
97 qreal det() const;
98
99 qreal m11() const;
100 qreal m12() const;
101 qreal m13() const;
102 qreal m21() const;
103 qreal m22() const;
104 qreal m23() const;
105 qreal m31() const;
106 qreal m32() const;
107 qreal m33() const;
108 qreal dx() const;
109 qreal dy() const;
110
111 void setMatrix(qreal m11, qreal m12, qreal m13,
112 qreal m21, qreal m22, qreal m23,
113 qreal m31, qreal m32, qreal m33);
114
115 QTransform inverted(bool *invertible = 0) const;
116 QTransform adjoint() const;
117 QTransform transposed() const;
118
119 QTransform &translate(qreal dx, qreal dy);
120 QTransform &scale(qreal sx, qreal sy);
121 QTransform &shear(qreal sh, qreal sv);
122 QTransform &rotate(qreal a, Qt::Axis axis = Qt::ZAxis);
123 QTransform &rotateRadians(qreal a, Qt::Axis axis = Qt::ZAxis);
124
125 static bool squareToQuad(const QPolygonF &square, QTransform &result);
126 static bool quadToSquare(const QPolygonF &quad, QTransform &result);
127 static bool quadToQuad(const QPolygonF &one,
128 const QPolygonF &two,
129 QTransform &result);
130
131 bool operator==(const QTransform &) const;
132 bool operator!=(const QTransform &) const;
133
134 QTransform &operator*=(const QTransform &);
135 QTransform operator*(const QTransform &o) const;
136
137 QTransform &operator=(const QTransform &);
138
139 operator QVariant() const;
140
141 void reset();
142 QPoint map(const QPoint &p) const;
143 QPointF map(const QPointF &p) const;
144 QLine map(const QLine &l) const;
145 QLineF map(const QLineF &l) const;
146 QPolygonF map(const QPolygonF &a) const;
147 QPolygon map(const QPolygon &a) const;
148 QRegion map(const QRegion &r) const;
149 QPainterPath map(const QPainterPath &p) const;
150 QPolygon mapToPolygon(const QRect &r) const;
151 QRect mapRect(const QRect &) const;
152 QRectF mapRect(const QRectF &) const;
153 void map(int x, int y, int *tx, int *ty) const;
154 void map(qreal x, qreal y, qreal *tx, qreal *ty) const;
155
156 const QMatrix &toAffine() const;
157
158 QTransform &operator*=(qreal div);
159 QTransform &operator/=(qreal div);
160 QTransform &operator+=(qreal div);
161 QTransform &operator-=(qreal div);
162
163 static QTransform fromTranslate(qreal dx, qreal dy);
164 static QTransform fromScale(qreal dx, qreal dy);
165
166private:
167 inline QTransform(qreal h11, qreal h12, qreal h13,
168 qreal h21, qreal h22, qreal h23,
169 qreal h31, qreal h32, qreal h33, bool)
170 : affine(h11, h12, h21, h22, h31, h32, true)
171 , m_13(h13), m_23(h23), m_33(h33)
172 , m_type(TxNone)
173 , m_dirty(TxProject) {}
174 inline QTransform(bool)
175 : affine(true)
176 , m_13(0), m_23(0), m_33(1)