qtransform.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/gui/painting/qtransform.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5QTransform::QTransform()-
6 : affine(true)-
7 , m_13(0), m_23(0), m_33(1)-
8 , m_type(TxNone)-
9 , m_dirty(TxNone)-
10 , d(nullptr)-
11{-
12}
never executed: end of block
0
13QTransform::QTransform(qreal h11, qreal h12, qreal h13,-
14 qreal h21, qreal h22, qreal h23,-
15 qreal h31, qreal h32, qreal h33)-
16 : affine(h11, h12, h21, h22, h31, h32, true)-
17 , m_13(h13), m_23(h23), m_33(h33)-
18 , m_type(TxNone)-
19 , m_dirty(TxProject)-
20 , d(nullptr)-
21{-
22}
never executed: end of block
0
23QTransform::QTransform(qreal h11, qreal h12, qreal h21,-
24 qreal h22, qreal dx, qreal dy)-
25 : affine(h11, h12, h21, h22, dx, dy, true)-
26 , m_13(0), m_23(0), m_33(1)-
27 , m_type(TxNone)-
28 , m_dirty(TxShear)-
29 , d(nullptr)-
30{-
31}
never executed: end of block
0
32QTransform::QTransform(const QMatrix &mtx)-
33 : affine(mtx._m11, mtx._m12, mtx._m21, mtx._m22, mtx._dx, mtx._dy, true),-
34 m_13(0), m_23(0), m_33(1)-
35 , m_type(TxNone)-
36 , m_dirty(TxShear)-
37 , d(nullptr)-
38{-
39}
never executed: end of block
0
40-
41-
42-
43-
44QTransform QTransform::adjoint() const-
45{-
46 qreal h11, h12, h13,-
47 h21, h22, h23,-
48 h31, h32, h33;-
49 h11 = affine._m22*m_33 - m_23*affine._dy;-
50 h21 = m_23*affine._dx - affine._m21*m_33;-
51 h31 = affine._m21*affine._dy - affine._m22*affine._dx;-
52 h12 = m_13*affine._dy - affine._m12*m_33;-
53 h22 = affine._m11*m_33 - m_13*affine._dx;-
54 h32 = affine._m12*affine._dx - affine._m11*affine._dy;-
55 h13 = affine._m12*m_23 - m_13*affine._m22;-
56 h23 = m_13*affine._m21 - affine._m11*m_23;-
57 h33 = affine._m11*affine._m22 - affine._m12*affine._m21;-
58-
59 return
never executed: return QTransform(h11, h12, h13, h21, h22, h23, h31, h32, h33, true);
QTransform(h11, h12, h13,
never executed: return QTransform(h11, h12, h13, h21, h22, h23, h31, h32, h33, true);
0
60 h21, h22, h23,
never executed: return QTransform(h11, h12, h13, h21, h22, h23, h31, h32, h33, true);
0
61 h31, h32, h33, true);
never executed: return QTransform(h11, h12, h13, h21, h22, h23, h31, h32, h33, true);
0
62}-
63-
64-
65-
66-
67QTransform QTransform::transposed() const-
68{-
69 QTransform t(affine._m11, affine._m21, affine._dx,-
70 affine._m12, affine._m22, affine._dy,-
71 m_13, m_23, m_33, true);-
72 t.m_type = m_type;-
73 t.m_dirty = m_dirty;-
74 return
never executed: return t;
t;
never executed: return t;
0
75}-
76QTransform QTransform::inverted(bool *invertible) const-
77{-
78 QTransform invert(true);-
79 bool inv = true;-
80-
81 switch(inline_type()) {-
82 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
0
83 break;
never executed: break;
0
84 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
0
85 invert.affine._dx = -affine._dx;-
86 invert.affine._dy = -affine._dy;-
87 break;
never executed: break;
0
88 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
0
89 inv = !qFuzzyIsNull(affine._m11);-
90 inv &= !qFuzzyIsNull(affine._m22);-
91 if (inv
invDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
92 invert.affine._m11 = 1. / affine._m11;-
93 invert.affine._m22 = 1. / affine._m22;-
94 invert.affine._dx = -affine._dx * invert.affine._m11;-
95 invert.affine._dy = -affine._dy * invert.affine._m22;-
96 }
never executed: end of block
0
97 break;
never executed: break;
0
98 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
0
99 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
0
100 invert.affine = affine.inverted(&inv);-
101 break;
never executed: break;
0
102 default
never executed: default:
:
never executed: default:
0
103-
104 qreal det = determinant();-
105 inv = !qFuzzyIsNull(det);-
106 if (inv
invDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
107 invert = adjoint() / det;
never executed: invert = adjoint() / det;
0
108 break;
never executed: break;
0
109 }-
110-
111 if (invertible
invertibleDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
112 *
never executed: *invertible = inv;
invertible = inv;
never executed: *invertible = inv;
0
113-
114 if (inv
invDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
115-
116 invert.m_type = m_type;-
117 invert.m_dirty = m_dirty;-
118 }
never executed: end of block
0
119-
120 return
never executed: return invert;
invert;
never executed: return invert;
0
121}-
122-
123-
124-
125-
126-
127-
128-
129QTransform &QTransform::translate(qreal dx, qreal dy)-
130{-
131 if (dx == 0
dx == 0Description
TRUEnever evaluated
FALSEnever evaluated
&& dy == 0
dy == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
132 return
never executed: return *this;
*this;
never executed: return *this;
0
133-
134 if (qIsNaN(dx) | qIsNaN(dy)
qIsNaN(dx) | qIsNaN(dy)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
135 QMessageLogger(__FILE__, 415, __PRETTY_FUNCTION__).warning() << "QTransform::translate with NaN called";-
136 return
never executed: return *this;
*this;
never executed: return *this;
0
137 }-
138-
139-
140 switch(inline_type()) {-
141 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
0
142 affine._dx = dx;-
143 affine._dy = dy;-
144 break;
never executed: break;
0
145 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
0
146 affine._dx += dx;-
147 affine._dy += dy;-
148 break;
never executed: break;
0
149 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
0
150 affine._dx += dx*affine._m11;-
151 affine._dy += dy*affine._m22;-
152 break;
never executed: break;
0
153 case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
0
154 m_33 += dx*m_13 + dy*m_23;-
155-
156 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
code before this statement never executed: case TxShear:
0
157 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
0
158 affine._dx += dx*affine._m11 + dy*affine._m21;-
159 affine._dy += dy*affine._m22 + dx*affine._m12;-
160 break;
never executed: break;
0
161 }-
162 if (m_dirty < TxTranslate
m_dirty < TxTranslateDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
163 m_dirty = TxTranslate;
never executed: m_dirty = TxTranslate;
0
164 return
never executed: return *this;
*this;
never executed: return *this;
0
165}-
166QTransform QTransform::fromTranslate(qreal dx, qreal dy)-
167{-
168-
169 if (qIsNaN(dx) | qIsNaN(dy)
qIsNaN(dx) | qIsNaN(dy)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
170 QMessageLogger(__FILE__, 458, __PRETTY_FUNCTION__).warning() << "QTransform::fromTranslate with NaN called";-
171 return
never executed: return QTransform();
QTransform();
never executed: return QTransform();
0
172}-
173-
174 QTransform transform(1, 0, 0, 0, 1, 0, dx, dy, 1, true);-
175 if (dx == 0
dx == 0Description
TRUEnever evaluated
FALSEnever evaluated
&& dy == 0
dy == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
176 transform.m_type = TxNone;
never executed: transform.m_type = TxNone;
0
177 else-
178 transform.m_type = TxTranslate;
never executed: transform.m_type = TxTranslate;
0
179 transform.m_dirty = TxNone;-
180 return
never executed: return transform;
transform;
never executed: return transform;
0
181}-
182-
183-
184-
185-
186-
187-
188-
189QTransform & QTransform::scale(qreal sx, qreal sy)-
190{-
191 if (sx == 1
sx == 1Description
TRUEnever evaluated
FALSEnever evaluated
&& sy == 1
sy == 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
192 return
never executed: return *this;
*this;
never executed: return *this;
0
193-
194 if (qIsNaN(sx) | qIsNaN(sy)
qIsNaN(sx) | qIsNaN(sy)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
195 QMessageLogger(__FILE__, 483, __PRETTY_FUNCTION__).warning() << "QTransform::scale with NaN called";-
196 return
never executed: return *this;
*this;
never executed: return *this;
0
197 }-
198-
199-
200 switch(inline_type()) {-
201 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
0
202 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
0
203 affine._m11 = sx;-
204 affine._m22 = sy;-
205 break;
never executed: break;
0
206 case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
0
207 m_13 *= sx;-
208 m_23 *= sy;-
209-
210 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
code before this statement never executed: case TxRotate:
0
211 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
0
212 affine._m12 *= sx;-
213 affine._m21 *= sy;-
214-
215 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
code before this statement never executed: case TxScale:
0
216 affine._m11 *= sx;-
217 affine._m22 *= sy;-
218 break;
never executed: break;
0
219 }-
220 if (m_dirty < TxScale
m_dirty < TxScaleDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
221 m_dirty = TxScale;
never executed: m_dirty = TxScale;
0
222 return
never executed: return *this;
*this;
never executed: return *this;
0
223}-
224QTransform QTransform::fromScale(qreal sx, qreal sy)-
225{-
226-
227 if (qIsNaN(sx) | qIsNaN(sy)
qIsNaN(sx) | qIsNaN(sy)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
228 QMessageLogger(__FILE__, 524, __PRETTY_FUNCTION__).warning() << "QTransform::fromScale with NaN called";-
229 return
never executed: return QTransform();
QTransform();
never executed: return QTransform();
0
230}-
231-
232 QTransform transform(sx, 0, 0, 0, sy, 0, 0, 0, 1, true);-
233 if (sx == 1.
sx == 1.Description
TRUEnever evaluated
FALSEnever evaluated
&& sy == 1.
sy == 1.Description
TRUEnever evaluated
FALSEnever evaluated
)
0
234 transform.m_type = TxNone;
never executed: transform.m_type = TxNone;
0
235 else-
236 transform.m_type = TxScale;
never executed: transform.m_type = TxScale;
0
237 transform.m_dirty = TxNone;-
238 return
never executed: return transform;
transform;
never executed: return transform;
0
239}-
240-
241-
242-
243-
244-
245-
246-
247QTransform & QTransform::shear(qreal sh, qreal sv)-
248{-
249 if (sh == 0
sh == 0Description
TRUEnever evaluated
FALSEnever evaluated
&& sv == 0
sv == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
250 return
never executed: return *this;
*this;
never executed: return *this;
0
251-
252 if (qIsNaN(sh) | qIsNaN(sv)
qIsNaN(sh) | qIsNaN(sv)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
253 QMessageLogger(__FILE__, 549, __PRETTY_FUNCTION__).warning() << "QTransform::shear with NaN called";-
254 return
never executed: return *this;
*this;
never executed: return *this;
0
255 }-
256-
257-
258 switch(inline_type()) {-
259 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
0
260 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
0
261 affine._m12 = sv;-
262 affine._m21 = sh;-
263 break;
never executed: break;
0
264 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
0
265 affine._m12 = sv*affine._m22;-
266 affine._m21 = sh*affine._m11;-
267 break;
never executed: break;
0
268 case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
{
0
269 qreal tm13 = sv*m_23;-
270 qreal tm23 = sh*m_13;-
271 m_13 += tm13;-
272 m_23 += tm23;-
273 }-
274-
275 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
code before this statement never executed: case TxRotate:
0
276 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
{
0
277 qreal tm11 = sv*affine._m21;-
278 qreal tm22 = sh*affine._m12;-
279 qreal tm12 = sv*affine._m22;-
280 qreal tm21 = sh*affine._m11;-
281 affine._m11 += tm11; affine._m12 += tm12;-
282 affine._m21 += tm21; affine._m22 += tm22;-
283 break;
never executed: break;
0
284 }-
285 }-
286 if (m_dirty < TxShear
m_dirty < TxShearDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
287 m_dirty = TxShear;
never executed: m_dirty = TxShear;
0
288 return
never executed: return *this;
*this;
never executed: return *this;
0
289}-
290-
291const qreal deg2rad = qreal(0.017453292519943295769);-
292const qreal inv_dist_to_plane = 1. / 1024.;-
293QTransform & QTransform::rotate(qreal a, Qt::Axis axis)-
294{-
295 if (a == 0
a == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
296 return
never executed: return *this;
*this;
never executed: return *this;
0
297-
298 if (qIsNaN(a)
qIsNaN(a)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
299 QMessageLogger(__FILE__, 610, __PRETTY_FUNCTION__).warning() << "QTransform::rotate with NaN called";-
300 return
never executed: return *this;
*this;
never executed: return *this;
0
301 }-
302-
303-
304 qreal sina = 0;-
305 qreal cosa = 0;-
306 if (a == 90.
a == 90.Description
TRUEnever evaluated
FALSEnever evaluated
|| a == -270.
a == -270.Description
TRUEnever evaluated
FALSEnever evaluated
)
0
307 sina = 1.;
never executed: sina = 1.;
0
308 else if (a == 270.
a == 270.Description
TRUEnever evaluated
FALSEnever evaluated
|| a == -90.
a == -90.Description
TRUEnever evaluated
FALSEnever evaluated
)
0
309 sina = -1.;
never executed: sina = -1.;
0
310 else if (a == 180.
a == 180.Description
TRUEnever evaluated
FALSEnever evaluated
)
0
311 cosa = -1.;
never executed: cosa = -1.;
0
312 else{-
313 qreal b = deg2rad*a;-
314 sina = qSin(b);-
315 cosa = qCos(b);-
316 }
never executed: end of block
0
317-
318 if (axis == Qt::ZAxis
axis == Qt::ZAxisDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
319 switch(inline_type()) {-
320 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
0
321 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
0
322 affine._m11 = cosa;-
323 affine._m12 = sina;-
324 affine._m21 = -sina;-
325 affine._m22 = cosa;-
326 break;
never executed: break;
0
327 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
{
0
328 qreal tm11 = cosa*affine._m11;-
329 qreal tm12 = sina*affine._m22;-
330 qreal tm21 = -sina*affine._m11;-
331 qreal tm22 = cosa*affine._m22;-
332 affine._m11 = tm11; affine._m12 = tm12;-
333 affine._m21 = tm21; affine._m22 = tm22;-
334 break;
never executed: break;
0
335 }-
336 case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
{
0
337 qreal tm13 = cosa*m_13 + sina*m_23;-
338 qreal tm23 = -sina*m_13 + cosa*m_23;-
339 m_13 = tm13;-
340 m_23 = tm23;-
341-
342 }-
343 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
code before this statement never executed: case TxRotate:
0
344 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
{
0
345 qreal tm11 = cosa*affine._m11 + sina*affine._m21;-
346 qreal tm12 = cosa*affine._m12 + sina*affine._m22;-
347 qreal tm21 = -sina*affine._m11 + cosa*affine._m21;-
348 qreal tm22 = -sina*affine._m12 + cosa*affine._m22;-
349 affine._m11 = tm11; affine._m12 = tm12;-
350 affine._m21 = tm21; affine._m22 = tm22;-
351 break;
never executed: break;
0
352 }-
353 }-
354 if (m_dirty < TxRotate
m_dirty < TxRotateDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
355 m_dirty = TxRotate;
never executed: m_dirty = TxRotate;
0
356 }
never executed: end of block
else {
0
357 QTransform result;-
358 if (axis == Qt::YAxis
axis == Qt::YAxisDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
359 result.affine._m11 = cosa;-
360 result.m_13 = -sina * inv_dist_to_plane;-
361 }
never executed: end of block
else {
0
362 result.affine._m22 = cosa;-
363 result.m_23 = -sina * inv_dist_to_plane;-
364 }
never executed: end of block
0
365 result.m_type = TxProject;-
366 *this = result * *this;-
367 }
never executed: end of block
0
368-
369 return
never executed: return *this;
*this;
never executed: return *this;
0
370}-
371QTransform & QTransform::rotateRadians(qreal a, Qt::Axis axis)-
372{-
373-
374 if (qIsNaN(a)
qIsNaN(a)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
375 QMessageLogger(__FILE__, 701, __PRETTY_FUNCTION__).warning() << "QTransform::rotateRadians with NaN called";-
376 return
never executed: return *this;
*this;
never executed: return *this;
0
377 }-
378-
379 qreal sina = qSin(a);-
380 qreal cosa = qCos(a);-
381-
382 if (axis == Qt::ZAxis
axis == Qt::ZAxisDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
383 switch(inline_type()) {-
384 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
0
385 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
0
386 affine._m11 = cosa;-
387 affine._m12 = sina;-
388 affine._m21 = -sina;-
389 affine._m22 = cosa;-
390 break;
never executed: break;
0
391 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
{
0
392 qreal tm11 = cosa*affine._m11;-
393 qreal tm12 = sina*affine._m22;-
394 qreal tm21 = -sina*affine._m11;-
395 qreal tm22 = cosa*affine._m22;-
396 affine._m11 = tm11; affine._m12 = tm12;-
397 affine._m21 = tm21; affine._m22 = tm22;-
398 break;
never executed: break;
0
399 }-
400 case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
{
0
401 qreal tm13 = cosa*m_13 + sina*m_23;-
402 qreal tm23 = -sina*m_13 + cosa*m_23;-
403 m_13 = tm13;-
404 m_23 = tm23;-
405-
406 }-
407 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
code before this statement never executed: case TxRotate:
0
408 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
{
0
409 qreal tm11 = cosa*affine._m11 + sina*affine._m21;-
410 qreal tm12 = cosa*affine._m12 + sina*affine._m22;-
411 qreal tm21 = -sina*affine._m11 + cosa*affine._m21;-
412 qreal tm22 = -sina*affine._m12 + cosa*affine._m22;-
413 affine._m11 = tm11; affine._m12 = tm12;-
414 affine._m21 = tm21; affine._m22 = tm22;-
415 break;
never executed: break;
0
416 }-
417 }-
418 if (m_dirty < TxRotate
m_dirty < TxRotateDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
419 m_dirty = TxRotate;
never executed: m_dirty = TxRotate;
0
420 }
never executed: end of block
else {
0
421 QTransform result;-
422 if (axis == Qt::YAxis
axis == Qt::YAxisDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
423 result.affine._m11 = cosa;-
424 result.m_13 = -sina * inv_dist_to_plane;-
425 }
never executed: end of block
else {
0
426 result.affine._m22 = cosa;-
427 result.m_23 = -sina * inv_dist_to_plane;-
428 }
never executed: end of block
0
429 result.m_type = TxProject;-
430 *this = result * *this;-
431 }
never executed: end of block
0
432 return
never executed: return *this;
*this;
never executed: return *this;
0
433}-
434-
435-
436-
437-
438-
439-
440bool QTransform::operator==(const QTransform &o) const-
441{-
442 return
never executed: return affine._m11 == o.affine._m11 && affine._m12 == o.affine._m12 && affine._m21 == o.affine._m21 && affine._m22 == o.affine._m22 && affine._dx == o.affine._dx && affine._dy == o.affine._dy && m_13 == o.m_13 && m_23 == o.m_23 && m_33 == o.m_33;
affine._m11 == o.affine._m11
affine._m11 == o.affine._m11Description
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return affine._m11 == o.affine._m11 && affine._m12 == o.affine._m12 && affine._m21 == o.affine._m21 && affine._m22 == o.affine._m22 && affine._dx == o.affine._dx && affine._dy == o.affine._dy && m_13 == o.m_13 && m_23 == o.m_23 && m_33 == o.m_33;
0
443 affine._m12 == o.affine._m12
affine._m12 == o.affine._m12Description
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return affine._m11 == o.affine._m11 && affine._m12 == o.affine._m12 && affine._m21 == o.affine._m21 && affine._m22 == o.affine._m22 && affine._dx == o.affine._dx && affine._dy == o.affine._dy && m_13 == o.m_13 && m_23 == o.m_23 && m_33 == o.m_33;
0
444 affine._m21 == o.affine._m21
affine._m21 == o.affine._m21Description
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return affine._m11 == o.affine._m11 && affine._m12 == o.affine._m12 && affine._m21 == o.affine._m21 && affine._m22 == o.affine._m22 && affine._dx == o.affine._dx && affine._dy == o.affine._dy && m_13 == o.m_13 && m_23 == o.m_23 && m_33 == o.m_33;
0
445 affine._m22 == o.affine._m22
affine._m22 == o.affine._m22Description
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return affine._m11 == o.affine._m11 && affine._m12 == o.affine._m12 && affine._m21 == o.affine._m21 && affine._m22 == o.affine._m22 && affine._dx == o.affine._dx && affine._dy == o.affine._dy && m_13 == o.m_13 && m_23 == o.m_23 && m_33 == o.m_33;
0
446 affine._dx == o.affine._dx
affine._dx == o.affine._dxDescription
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return affine._m11 == o.affine._m11 && affine._m12 == o.affine._m12 && affine._m21 == o.affine._m21 && affine._m22 == o.affine._m22 && affine._dx == o.affine._dx && affine._dy == o.affine._dy && m_13 == o.m_13 && m_23 == o.m_23 && m_33 == o.m_33;
0
447 affine._dy == o.affine._dy
affine._dy == o.affine._dyDescription
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return affine._m11 == o.affine._m11 && affine._m12 == o.affine._m12 && affine._m21 == o.affine._m21 && affine._m22 == o.affine._m22 && affine._dx == o.affine._dx && affine._dy == o.affine._dy && m_13 == o.m_13 && m_23 == o.m_23 && m_33 == o.m_33;
0
448 m_13 == o.m_13
m_13 == o.m_13Description
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return affine._m11 == o.affine._m11 && affine._m12 == o.affine._m12 && affine._m21 == o.affine._m21 && affine._m22 == o.affine._m22 && affine._dx == o.affine._dx && affine._dy == o.affine._dy && m_13 == o.m_13 && m_23 == o.m_23 && m_33 == o.m_33;
0
449 m_23 == o.m_23
m_23 == o.m_23Description
TRUEnever evaluated
FALSEnever evaluated
&&
never executed: return affine._m11 == o.affine._m11 && affine._m12 == o.affine._m12 && affine._m21 == o.affine._m21 && affine._m22 == o.affine._m22 && affine._dx == o.affine._dx && affine._dy == o.affine._dy && m_13 == o.m_13 && m_23 == o.m_23 && m_33 == o.m_33;
0
450 m_33 == o.m_33
m_33 == o.m_33Description
TRUEnever evaluated
FALSEnever evaluated
;
never executed: return affine._m11 == o.affine._m11 && affine._m12 == o.affine._m12 && affine._m21 == o.affine._m21 && affine._m22 == o.affine._m22 && affine._dx == o.affine._dx && affine._dy == o.affine._dy && m_13 == o.m_13 && m_23 == o.m_23 && m_33 == o.m_33;
0
451}-
452uint qHash(const QTransform &key, uint seed) noexcept-
453{-
454 QtPrivate::QHashCombine hash;-
455 seed = hash(key.m11(), seed);-
456 seed = hash(key.m12(), seed);-
457 seed = hash(key.m21(), seed);-
458 seed = hash(key.m22(), seed);-
459 seed = hash(key.dx(), seed);-
460 seed = hash(key.dy(), seed);-
461 seed = hash(key.m13(), seed);-
462 seed = hash(key.m23(), seed);-
463 seed = hash(key.m33(), seed);-
464 return
never executed: return seed;
seed;
never executed: return seed;
0
465}-
466-
467-
468-
469-
470-
471-
472-
473bool QTransform::operator!=(const QTransform &o) const-
474{-
475 return
never executed: return !operator==(o);
!operator==(o);
never executed: return !operator==(o);
0
476}-
477QTransform & QTransform::operator*=(const QTransform &o)-
478{-
479 const TransformationType otherType = o.inline_type();-
480 if (otherType == TxNone
otherType == TxNoneDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
481 return
never executed: return *this;
*this;
never executed: return *this;
0
482-
483 const TransformationType thisType = inline_type();-
484 if (thisType == TxNone
thisType == TxNoneDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
485 return
never executed: return operator=(o);
operator=(o);
never executed: return operator=(o);
0
486-
487 TransformationType t = qMax(thisType, otherType);-
488 switch(t) {-
489 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
0
490 break;
never executed: break;
0
491 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
0
492 affine._dx += o.affine._dx;-
493 affine._dy += o.affine._dy;-
494 break;
never executed: break;
0
495 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
0
496 {-
497 qreal m11 = affine._m11*o.affine._m11;-
498 qreal m22 = affine._m22*o.affine._m22;-
499-
500 qreal m31 = affine._dx*o.affine._m11 + o.affine._dx;-
501 qreal m32 = affine._dy*o.affine._m22 + o.affine._dy;-
502-
503 affine._m11 = m11;-
504 affine._m22 = m22;-
505 affine._dx = m31; affine._dy = m32;-
506 break;
never executed: break;
0
507 }-
508 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
0
509 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
0
510 {-
511 qreal m11 = affine._m11*o.affine._m11 + affine._m12*o.affine._m21;-
512 qreal m12 = affine._m11*o.affine._m12 + affine._m12*o.affine._m22;-
513-
514 qreal m21 = affine._m21*o.affine._m11 + affine._m22*o.affine._m21;-
515 qreal m22 = affine._m21*o.affine._m12 + affine._m22*o.affine._m22;-
516-
517 qreal m31 = affine._dx*o.affine._m11 + affine._dy*o.affine._m21 + o.affine._dx;-
518 qreal m32 = affine._dx*o.affine._m12 + affine._dy*o.affine._m22 + o.affine._dy;-
519-
520 affine._m11 = m11; affine._m12 = m12;-
521 affine._m21 = m21; affine._m22 = m22;-
522 affine._dx = m31; affine._dy = m32;-
523 break;
never executed: break;
0
524 }-
525 case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
0
526 {-
527 qreal m11 = affine._m11*o.affine._m11 + affine._m12*o.affine._m21 + m_13*o.affine._dx;-
528 qreal m12 = affine._m11*o.affine._m12 + affine._m12*o.affine._m22 + m_13*o.affine._dy;-
529 qreal m13 = affine._m11*o.m_13 + affine._m12*o.m_23 + m_13*o.m_33;-
530-
531 qreal m21 = affine._m21*o.affine._m11 + affine._m22*o.affine._m21 + m_23*o.affine._dx;-
532 qreal m22 = affine._m21*o.affine._m12 + affine._m22*o.affine._m22 + m_23*o.affine._dy;-
533 qreal m23 = affine._m21*o.m_13 + affine._m22*o.m_23 + m_23*o.m_33;-
534-
535 qreal m31 = affine._dx*o.affine._m11 + affine._dy*o.affine._m21 + m_33*o.affine._dx;-
536 qreal m32 = affine._dx*o.affine._m12 + affine._dy*o.affine._m22 + m_33*o.affine._dy;-
537 qreal m33 = affine._dx*o.m_13 + affine._dy*o.m_23 + m_33*o.m_33;-
538-
539 affine._m11 = m11; affine._m12 = m12; m_13 = m13;-
540 affine._m21 = m21; affine._m22 = m22; m_23 = m23;-
541 affine._dx = m31; affine._dy = m32; m_33 = m33;-
542 }-
543 }
never executed: end of block
0
544-
545 m_dirty = t;-
546 m_type = t;-
547-
548 return
never executed: return *this;
*this;
never executed: return *this;
0
549}-
550QTransform QTransform::operator*(const QTransform &m) const-
551{-
552 const TransformationType otherType = m.inline_type();-
553 if (otherType == TxNone
otherType == TxNoneDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
554 return
never executed: return *this;
*this;
never executed: return *this;
0
555-
556 const TransformationType thisType = inline_type();-
557 if (thisType == TxNone
thisType == TxNoneDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
558 return
never executed: return m;
m;
never executed: return m;
0
559-
560 QTransform t(true);-
561 TransformationType type = qMax(thisType, otherType);-
562 switch(type) {-
563 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
0
564 break;
never executed: break;
0
565 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
0
566 t.affine._dx = affine._dx + m.affine._dx;-
567 t.affine._dy += affine._dy + m.affine._dy;-
568 break;
never executed: break;
0
569 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
0
570 {-
571 qreal m11 = affine._m11*m.affine._m11;-
572 qreal m22 = affine._m22*m.affine._m22;-
573-
574 qreal m31 = affine._dx*m.affine._m11 + m.affine._dx;-
575 qreal m32 = affine._dy*m.affine._m22 + m.affine._dy;-
576-
577 t.affine._m11 = m11;-
578 t.affine._m22 = m22;-
579 t.affine._dx = m31; t.affine._dy = m32;-
580 break;
never executed: break;
0
581 }-
582 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
0
583 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
0
584 {-
585 qreal m11 = affine._m11*m.affine._m11 + affine._m12*m.affine._m21;-
586 qreal m12 = affine._m11*m.affine._m12 + affine._m12*m.affine._m22;-
587-
588 qreal m21 = affine._m21*m.affine._m11 + affine._m22*m.affine._m21;-
589 qreal m22 = affine._m21*m.affine._m12 + affine._m22*m.affine._m22;-
590-
591 qreal m31 = affine._dx*m.affine._m11 + affine._dy*m.affine._m21 + m.affine._dx;-
592 qreal m32 = affine._dx*m.affine._m12 + affine._dy*m.affine._m22 + m.affine._dy;-
593-
594 t.affine._m11 = m11; t.affine._m12 = m12;-
595 t.affine._m21 = m21; t.affine._m22 = m22;-
596 t.affine._dx = m31; t.affine._dy = m32;-
597 break;
never executed: break;
0
598 }-
599 case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
0
600 {-
601 qreal m11 = affine._m11*m.affine._m11 + affine._m12*m.affine._m21 + m_13*m.affine._dx;-
602 qreal m12 = affine._m11*m.affine._m12 + affine._m12*m.affine._m22 + m_13*m.affine._dy;-
603 qreal m13 = affine._m11*m.m_13 + affine._m12*m.m_23 + m_13*m.m_33;-
604-
605 qreal m21 = affine._m21*m.affine._m11 + affine._m22*m.affine._m21 + m_23*m.affine._dx;-
606 qreal m22 = affine._m21*m.affine._m12 + affine._m22*m.affine._m22 + m_23*m.affine._dy;-
607 qreal m23 = affine._m21*m.m_13 + affine._m22*m.m_23 + m_23*m.m_33;-
608-
609 qreal m31 = affine._dx*m.affine._m11 + affine._dy*m.affine._m21 + m_33*m.affine._dx;-
610 qreal m32 = affine._dx*m.affine._m12 + affine._dy*m.affine._m22 + m_33*m.affine._dy;-
611 qreal m33 = affine._dx*m.m_13 + affine._dy*m.m_23 + m_33*m.m_33;-
612-
613 t.affine._m11 = m11; t.affine._m12 = m12; t.m_13 = m13;-
614 t.affine._m21 = m21; t.affine._m22 = m22; t.m_23 = m23;-
615 t.affine._dx = m31; t.affine._dy = m32; t.m_33 = m33;-
616 }-
617 }
never executed: end of block
0
618-
619 t.m_dirty = type;-
620 t.m_type = type;-
621-
622 return
never executed: return t;
t;
never executed: return t;
0
623}-
624QTransform & QTransform::operator=(const QTransform &matrix)-
625{-
626 affine._m11 = matrix.affine._m11;-
627 affine._m12 = matrix.affine._m12;-
628 affine._m21 = matrix.affine._m21;-
629 affine._m22 = matrix.affine._m22;-
630 affine._dx = matrix.affine._dx;-
631 affine._dy = matrix.affine._dy;-
632 m_13 = matrix.m_13;-
633 m_23 = matrix.m_23;-
634 m_33 = matrix.m_33;-
635 m_type = matrix.m_type;-
636 m_dirty = matrix.m_dirty;-
637-
638 return
never executed: return *this;
*this;
never executed: return *this;
0
639}-
640void QTransform::reset()-
641{-
642 affine._m11 = affine._m22 = m_33 = 1.0;-
643 affine._m12 = m_13 = affine._m21 = m_23 = affine._dx = affine._dy = 0;-
644 m_type = TxNone;-
645 m_dirty = TxNone;-
646}
never executed: end of block
0
647QDataStream & operator<<(QDataStream &s, const QTransform &m)-
648{-
649 s << double(m.m11())-
650 << double(m.m12())-
651 << double(m.m13())-
652 << double(m.m21())-
653 << double(m.m22())-
654 << double(m.m23())-
655 << double(m.m31())-
656 << double(m.m32())-
657 << double(m.m33());-
658 return
never executed: return s;
s;
never executed: return s;
0
659}-
660QDataStream & operator>>(QDataStream &s, QTransform &t)-
661{-
662 double m11, m12, m13,-
663 m21, m22, m23,-
664 m31, m32, m33;-
665-
666 s >> m11;-
667 s >> m12;-
668 s >> m13;-
669 s >> m21;-
670 s >> m22;-
671 s >> m23;-
672 s >> m31;-
673 s >> m32;-
674 s >> m33;-
675 t.setMatrix(m11, m12, m13,-
676 m21, m22, m23,-
677 m31, m32, m33);-
678 return
never executed: return s;
s;
never executed: return s;
0
679}-
680-
681-
682-
683-
684QDebug operator<<(QDebug dbg, const QTransform &m)-
685{-
686 static const char *const typeStr[] =-
687 {-
688 "TxNone",-
689 "TxTranslate",-
690 "TxScale",-
691 0,-
692 "TxRotate",-
693 0, 0, 0,-
694 "TxShear",-
695 0, 0, 0, 0, 0, 0, 0,-
696 "TxProject"-
697 };-
698-
699 QDebugStateSaver saver(dbg);-
700 dbg.nospace() << "QTransform(type=" << typeStr[m.type()] << ','-
701 << " 11=" << m.m11()-
702 << " 12=" << m.m12()-
703 << " 13=" << m.m13()-
704 << " 21=" << m.m21()-
705 << " 22=" << m.m22()-
706 << " 23=" << m.m23()-
707 << " 31=" << m.m31()-
708 << " 32=" << m.m32()-
709 << " 33=" << m.m33()-
710 << ')';-
711-
712 return
never executed: return dbg;
dbg;
never executed: return dbg;
0
713}-
714QPoint QTransform::map(const QPoint &p) const-
715{-
716 qreal fx = p.x();-
717 qreal fy = p.y();-
718-
719 qreal x = 0, y = 0;-
720-
721 TransformationType t = inline_type();-
722 switch(t) {-
723 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
0
724 x = fx;-
725 y = fy;-
726 break;
never executed: break;
0
727 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
0
728 x = fx + affine._dx;-
729 y = fy + affine._dy;-
730 break;
never executed: break;
0
731 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
0
732 x = affine._m11 * fx + affine._dx;-
733 y = affine._m22 * fy + affine._dy;-
734 break;
never executed: break;
0
735 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
0
736 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
0
737 case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
0
738 x = affine._m11 * fx + affine._m21 * fy + affine._dx;-
739 y = affine._m12 * fx + affine._m22 * fy + affine._dy;-
740 if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
741 qreal w = 1./(m_13 * fx + m_23 * fy + m_33);-
742 x *= w;-
743 y *= w;-
744 }
never executed: end of block
0
745 }
never executed: end of block
0
746 return
never executed: return QPoint(qRound(x), qRound(y));
QPoint(qRound(x), qRound(y));
never executed: return QPoint(qRound(x), qRound(y));
0
747}-
748QPointF QTransform::map(const QPointF &p) const-
749{-
750 qreal fx = p.x();-
751 qreal fy = p.y();-
752-
753 qreal x = 0, y = 0;-
754-
755 TransformationType t = inline_type();-
756 switch(t) {-
757 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
0
758 x = fx;-
759 y = fy;-
760 break;
never executed: break;
0
761 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
0
762 x = fx + affine._dx;-
763 y = fy + affine._dy;-
764 break;
never executed: break;
0
765 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
0
766 x = affine._m11 * fx + affine._dx;-
767 y = affine._m22 * fy + affine._dy;-
768 break;
never executed: break;
0
769 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
0
770 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
0
771 case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
0
772 x = affine._m11 * fx + affine._m21 * fy + affine._dx;-
773 y = affine._m12 * fx + affine._m22 * fy + affine._dy;-
774 if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
775 qreal w = 1./(m_13 * fx + m_23 * fy + m_33);-
776 x *= w;-
777 y *= w;-
778 }
never executed: end of block
0
779 }
never executed: end of block
0
780 return
never executed: return QPointF(x, y);
QPointF(x, y);
never executed: return QPointF(x, y);
0
781}-
782QLine QTransform::map(const QLine &l) const-
783{-
784 qreal fx1 = l.x1();-
785 qreal fy1 = l.y1();-
786 qreal fx2 = l.x2();-
787 qreal fy2 = l.y2();-
788-
789 qreal x1 = 0, y1 = 0, x2 = 0, y2 = 0;-
790-
791 TransformationType t = inline_type();-
792 switch(t) {-
793 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
0
794 x1 = fx1;-
795 y1 = fy1;-
796 x2 = fx2;-
797 y2 = fy2;-
798 break;
never executed: break;
0
799 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
0
800 x1 = fx1 + affine._dx;-
801 y1 = fy1 + affine._dy;-
802 x2 = fx2 + affine._dx;-
803 y2 = fy2 + affine._dy;-
804 break;
never executed: break;
0
805 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
0
806 x1 = affine._m11 * fx1 + affine._dx;-
807 y1 = affine._m22 * fy1 + affine._dy;-
808 x2 = affine._m11 * fx2 + affine._dx;-
809 y2 = affine._m22 * fy2 + affine._dy;-
810 break;
never executed: break;
0
811 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
0
812 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
0
813 case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
0
814 x1 = affine._m11 * fx1 + affine._m21 * fy1 + affine._dx;-
815 y1 = affine._m12 * fx1 + affine._m22 * fy1 + affine._dy;-
816 x2 = affine._m11 * fx2 + affine._m21 * fy2 + affine._dx;-
817 y2 = affine._m12 * fx2 + affine._m22 * fy2 + affine._dy;-
818 if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
819 qreal w = 1./(m_13 * fx1 + m_23 * fy1 + m_33);-
820 x1 *= w;-
821 y1 *= w;-
822 w = 1./(m_13 * fx2 + m_23 * fy2 + m_33);-
823 x2 *= w;-
824 y2 *= w;-
825 }
never executed: end of block
0
826 }
never executed: end of block
0
827 return
never executed: return QLine(qRound(x1), qRound(y1), qRound(x2), qRound(y2));
QLine(qRound(x1), qRound(y1), qRound(x2), qRound(y2));
never executed: return QLine(qRound(x1), qRound(y1), qRound(x2), qRound(y2));
0
828}-
829QLineF QTransform::map(const QLineF &l) const-
830{-
831 qreal fx1 = l.x1();-
832 qreal fy1 = l.y1();-
833 qreal fx2 = l.x2();-
834 qreal fy2 = l.y2();-
835-
836 qreal x1 = 0, y1 = 0, x2 = 0, y2 = 0;-
837-
838 TransformationType t = inline_type();-
839 switch(t) {-
840 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
0
841 x1 = fx1;-
842 y1 = fy1;-
843 x2 = fx2;-
844 y2 = fy2;-
845 break;
never executed: break;
0
846 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
0
847 x1 = fx1 + affine._dx;-
848 y1 = fy1 + affine._dy;-
849 x2 = fx2 + affine._dx;-
850 y2 = fy2 + affine._dy;-
851 break;
never executed: break;
0
852 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
0
853 x1 = affine._m11 * fx1 + affine._dx;-
854 y1 = affine._m22 * fy1 + affine._dy;-
855 x2 = affine._m11 * fx2 + affine._dx;-
856 y2 = affine._m22 * fy2 + affine._dy;-
857 break;
never executed: break;
0
858 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
0
859 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
0
860 case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
0
861 x1 = affine._m11 * fx1 + affine._m21 * fy1 + affine._dx;-
862 y1 = affine._m12 * fx1 + affine._m22 * fy1 + affine._dy;-
863 x2 = affine._m11 * fx2 + affine._m21 * fy2 + affine._dx;-
864 y2 = affine._m12 * fx2 + affine._m22 * fy2 + affine._dy;-
865 if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
866 qreal w = 1./(m_13 * fx1 + m_23 * fy1 + m_33);-
867 x1 *= w;-
868 y1 *= w;-
869 w = 1./(m_13 * fx2 + m_23 * fy2 + m_33);-
870 x2 *= w;-
871 y2 *= w;-
872 }
never executed: end of block
0
873 }
never executed: end of block
0
874 return
never executed: return QLineF(x1, y1, x2, y2);
QLineF(x1, y1, x2, y2);
never executed: return QLineF(x1, y1, x2, y2);
0
875}-
876-
877static QPolygonF mapProjective(const QTransform &transform, const QPolygonF &poly)-
878{-
879 if (poly.size() == 0
poly.size() == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
880 return
never executed: return poly;
poly;
never executed: return poly;
0
881-
882 if (poly.size() == 1
poly.size() == 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
883 return
never executed: return QPolygonF() << transform.map(poly.at(0));
QPolygonF() << transform.map(poly.at(0));
never executed: return QPolygonF() << transform.map(poly.at(0));
0
884-
885 QPainterPath path;-
886 path.addPolygon(poly);-
887-
888 path = transform.map(path);-
889-
890 QPolygonF result;-
891 const int elementCount = path.elementCount();-
892 result.reserve(elementCount);-
893 for (int i = 0; i < elementCount
i < elementCountDescription
TRUEnever evaluated
FALSEnever evaluated
; ++i)
0
894 result << path.elementAt(i);
never executed: result << path.elementAt(i);
0
895 return
never executed: return result;
result;
never executed: return result;
0
896}-
897QPolygonF QTransform::map(const QPolygonF &a) const-
898{-
899 TransformationType t = inline_type();-
900 if (t <= TxTranslate
t <= TxTranslateDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
901 return
never executed: return a.translated(affine._dx, affine._dy);
a.translated(affine._dx, affine._dy);
never executed: return a.translated(affine._dx, affine._dy);
0
902-
903 if (t >= QTransform::TxProject
t >= QTransform::TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
904 return
never executed: return mapProjective(*this, a);
mapProjective(*this, a);
never executed: return mapProjective(*this, a);
0
905-
906 int size = a.size();-
907 int i;-
908 QPolygonF p(size);-
909 const QPointF *da = a.constData();-
910 QPointF *dp = p.data();-
911-
912 for(i = 0; i < size
i < sizeDescription
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
913 do { qreal FX_ = da[i].xp; qreal FY_ = da[i].yp; switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
dp[i].xp = FX_; dp[i].yp = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
dp[i].xp = FX_ + affine._dx; dp[i].yp = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
dp[i].xp = affine._m11 * FX_ + affine._dx; dp[i].yp = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
dp[i].xp = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; dp[i].yp = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; dp[i].xp *= w; dp[i].yp *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
914 }
never executed: end of block
0
915 return
never executed: return p;
p;
never executed: return p;
0
916}-
917QPolygon QTransform::map(const QPolygon &a) const-
918{-
919 TransformationType t = inline_type();-
920 if (t <= TxTranslate
t <= TxTranslateDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
921 return
never executed: return a.translated(qRound(affine._dx), qRound(affine._dy));
a.translated(qRound(affine._dx), qRound(affine._dy));
never executed: return a.translated(qRound(affine._dx), qRound(affine._dy));
0
922-
923 if (t >= QTransform::TxProject
t >= QTransform::TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
924 return
never executed: return mapProjective(*this, QPolygonF(a)).toPolygon();
mapProjective(*this, QPolygonF(a)).toPolygon();
never executed: return mapProjective(*this, QPolygonF(a)).toPolygon();
0
925-
926 int size = a.size();-
927 int i;-
928 QPolygon p(size);-
929 const QPoint *da = a.constData();-
930 QPoint *dp = p.data();-
931-
932 for(i = 0; i < size
i < sizeDescription
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
933 qreal nx = 0, ny = 0;-
934 do { qreal FX_ = da[i].xp; qreal FY_ = da[i].yp; switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
nx = FX_; ny = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
nx = FX_ + affine._dx; ny = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
nx = affine._m11 * FX_ + affine._dx; ny = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
nx = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; ny = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; nx *= w; ny *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
935 dp[i].xp = qRound(nx);-
936 dp[i].yp = qRound(ny);-
937 }
never executed: end of block
0
938 return
never executed: return p;
p;
never executed: return p;
0
939}-
940extern QPainterPath qt_regionToPath(const QRegion &region);-
941QRegion QTransform::map(const QRegion &r) const-
942{-
943 TransformationType t = inline_type();-
944 if (t == TxNone
t == TxNoneDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
945 return
never executed: return r;
r;
never executed: return r;
0
946-
947 if (t == TxTranslate
t == TxTranslateDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
948 QRegion copy(r);-
949 copy.translate(qRound(affine._dx), qRound(affine._dy));-
950 return
never executed: return copy;
copy;
never executed: return copy;
0
951 }-
952-
953 if (t == TxScale
t == TxScaleDescription
TRUEnever evaluated
FALSEnever evaluated
&& r.rectCount() == 1
r.rectCount() == 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
954 return
never executed: return QRegion(mapRect(r.boundingRect()));
QRegion(mapRect(r.boundingRect()));
never executed: return QRegion(mapRect(r.boundingRect()));
0
955-
956 QPainterPath p = map(qt_regionToPath(r));-
957 return
never executed: return p.toFillPolygon(QTransform()).toPolygon();
p.toFillPolygon(QTransform()).toPolygon();
never executed: return p.toFillPolygon(QTransform()).toPolygon();
0
958}-
959-
960struct QHomogeneousCoordinate-
961{-
962 qreal x;-
963 qreal y;-
964 qreal w;-
965-
966 QHomogeneousCoordinate() {}-
967 QHomogeneousCoordinate(qreal x_, qreal y_, qreal w_) : x(x_), y(y_), w(w_) {}
never executed: end of block
0
968-
969 const QPointF toPoint() const {-
970 qreal iw = 1. / w;-
971 return
never executed: return QPointF(x * iw, y * iw);
QPointF(x * iw, y * iw);
never executed: return QPointF(x * iw, y * iw);
0
972 }-
973};-
974-
975static inline QHomogeneousCoordinate mapHomogeneous(const QTransform &transform, const QPointF &p)-
976{-
977 QHomogeneousCoordinate c;-
978 c.x = transform.m11() * p.x() + transform.m21() * p.y() + transform.m31();-
979 c.y = transform.m12() * p.x() + transform.m22() * p.y() + transform.m32();-
980 c.w = transform.m13() * p.x() + transform.m23() * p.y() + transform.m33();-
981 return
never executed: return c;
c;
never executed: return c;
0
982}-
983-
984static inline bool lineTo_clipped(QPainterPath &path, const QTransform &transform, const QPointF &a, const QPointF &b,-
985 bool needsMoveTo, bool needsLineTo = true)-
986{-
987 QHomogeneousCoordinate ha = mapHomogeneous(transform, a);-
988 QHomogeneousCoordinate hb = mapHomogeneous(transform, b);-
989-
990 if (ha.w < (sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001)
ha.w < (sizeof...0001 : 0.0001)Description
TRUEnever evaluated
FALSEnever evaluated
&& hb.w < (sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001)
hb.w < (sizeof...0001 : 0.0001)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
991 return
never executed: return false;
false;
never executed: return false;
0
992-
993 if (hb.w < (sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001)
hb.w < (sizeof...0001 : 0.0001)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
994 const qreal t = ((sizeof(qreal) == sizeof(double)
sizeof(qreal) ...sizeof(double)Description
TRUEnever evaluated
FALSEnever evaluated
? 0.000001 : 0.0001) - hb.w) / (ha.w - hb.w);
0
995-
996 hb.x += (ha.x - hb.x) * t;-
997 hb.y += (ha.y - hb.y) * t;-
998 hb.w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));-
999 }
never executed: end of block
else if (ha.w < (sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001)
ha.w < (sizeof...0001 : 0.0001)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1000 const qreal t = ((sizeof(qreal) == sizeof(double)
sizeof(qreal) ...sizeof(double)Description
TRUEnever evaluated
FALSEnever evaluated
? 0.000001 : 0.0001) - ha.w) / (hb.w - ha.w);
0
1001-
1002 ha.x += (hb.x - ha.x) * t;-
1003 ha.y += (hb.y - ha.y) * t;-
1004 ha.w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));-
1005-
1006 const QPointF p = ha.toPoint();-
1007 if (needsMoveTo
needsMoveToDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1008 path.moveTo(p);-
1009 needsMoveTo = false;-
1010 }
never executed: end of block
else {
0
1011 path.lineTo(p);-
1012 }
never executed: end of block
0
1013 }-
1014-
1015 if (needsMoveTo
needsMoveToDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1016 path.moveTo(ha.toPoint());
never executed: path.moveTo(ha.toPoint());
0
1017-
1018 if (needsLineTo
needsLineToDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1019 path.lineTo(hb.toPoint());
never executed: path.lineTo(hb.toPoint());
0
1020-
1021 return
never executed: return true;
true;
never executed: return true;
0
1022}-
1023__attribute__((visibility("default"))) bool qt_scaleForTransform(const QTransform &transform, qreal *scale);-
1024-
1025static inline bool cubicTo_clipped(QPainterPath &path, const QTransform &transform, const QPointF &a, const QPointF &b, const QPointF &c, const QPointF &d, bool needsMoveTo)-
1026{-
1027-
1028-
1029-
1030 qreal scale;-
1031 qt_scaleForTransform(transform, &scale);-
1032-
1033 qreal curveThreshold = scale == 0
scale == 0Description
TRUEnever evaluated
FALSEnever evaluated
? qreal(0.25) : (qreal(0.25) / scale);
0
1034-
1035 QPolygonF segment = QBezier::fromPoints(a, b, c, d).toPolygon(curveThreshold);-
1036-
1037 for (int i = 0; i < segment.size() - 1
i < segment.size() - 1Description
TRUEnever evaluated
FALSEnever evaluated
; ++i)
0
1038 if (lineTo_clipped(path, transform, segment.at(i), segment.at(i+1), needsMoveTo)
lineTo_clipped..., needsMoveTo)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1039 needsMoveTo = false;
never executed: needsMoveTo = false;
0
1040-
1041 return
never executed: return !needsMoveTo;
!needsMoveTo;
never executed: return !needsMoveTo;
0
1042}-
1043-
1044static QPainterPath mapProjective(const QTransform &transform, const QPainterPath &path)-
1045{-
1046 QPainterPath result;-
1047-
1048 QPointF last;-
1049 QPointF lastMoveTo;-
1050 bool needsMoveTo = true;-
1051 for (int i = 0; i < path.elementCount()
i < path.elementCount()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1052 switch (path.elementAt(i).type) {-
1053 case
never executed: case QPainterPath::MoveToElement:
QPainterPath::MoveToElement:
never executed: case QPainterPath::MoveToElement:
0
1054 if (i > 0
i > 0Description
TRUEnever evaluated
FALSEnever evaluated
&& lastMoveTo != last
lastMoveTo != lastDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1055 lineTo_clipped(result, transform, last, lastMoveTo, needsMoveTo);
never executed: lineTo_clipped(result, transform, last, lastMoveTo, needsMoveTo);
0
1056-
1057 lastMoveTo = path.elementAt(i);-
1058 last = path.elementAt(i);-
1059 needsMoveTo = true;-
1060 break;
never executed: break;
0
1061 case
never executed: case QPainterPath::LineToElement:
QPainterPath::LineToElement:
never executed: case QPainterPath::LineToElement:
0
1062 if (lineTo_clipped(result, transform, last, path.elementAt(i), needsMoveTo)
lineTo_clipped..., needsMoveTo)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1063 needsMoveTo = false;
never executed: needsMoveTo = false;
0
1064 last = path.elementAt(i);-
1065 break;
never executed: break;
0
1066 case
never executed: case QPainterPath::CurveToElement:
QPainterPath::CurveToElement:
never executed: case QPainterPath::CurveToElement:
0
1067 if (cubicTo_clipped(result, transform, last, path.elementAt(i), path.elementAt(i+1), path.elementAt(i+2), needsMoveTo)
cubicTo_clippe..., needsMoveTo)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1068 needsMoveTo = false;
never executed: needsMoveTo = false;
0
1069 i += 2;-
1070 last = path.elementAt(i);-
1071 break;
never executed: break;
0
1072 default
never executed: default:
:
never executed: default:
0
1073 ((!(false)) ? qt_assert("false",__FILE__,1626) : qt_noop());-
1074 }
never executed: end of block
0
1075 }-
1076-
1077 if (path.elementCount() > 0
path.elementCount() > 0Description
TRUEnever evaluated
FALSEnever evaluated
&& lastMoveTo != last
lastMoveTo != lastDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1078 lineTo_clipped(result, transform, last, lastMoveTo, needsMoveTo, false);
never executed: lineTo_clipped(result, transform, last, lastMoveTo, needsMoveTo, false);
0
1079-
1080 result.setFillRule(path.fillRule());-
1081 return
never executed: return result;
result;
never executed: return result;
0
1082}-
1083QPainterPath QTransform::map(const QPainterPath &path) const-
1084{-
1085 TransformationType t = inline_type();-
1086 if (t == TxNone
t == TxNoneDescription
TRUEnever evaluated
FALSEnever evaluated
|| path.elementCount() == 0
path.elementCount() == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1087 return
never executed: return path;
path;
never executed: return path;
0
1088-
1089 if (t >= TxProject
t >= TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1090 return
never executed: return mapProjective(*this, path);
mapProjective(*this, path);
never executed: return mapProjective(*this, path);
0
1091-
1092 QPainterPath copy = path;-
1093-
1094 if (t == TxTranslate
t == TxTranslateDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1095 copy.translate(affine._dx, affine._dy);-
1096 }
never executed: end of block
else {
0
1097 copy.detach();-
1098-
1099 for (int i=0; i<path.elementCount()
i<path.elementCount()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1100 QPainterPath::Element &e = copy.d_ptr->elements[i];-
1101 do { qreal FX_ = e.x; qreal FY_ = e.y; switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
e.x = FX_; e.y = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
e.x = FX_ + affine._dx; e.y = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
e.x = affine._m11 * FX_ + affine._dx; e.y = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
e.x = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; e.y = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; e.x *= w; e.y *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1102 }
never executed: end of block
0
1103 }
never executed: end of block
0
1104-
1105 return
never executed: return copy;
copy;
never executed: return copy;
0
1106}-
1107QPolygon QTransform::mapToPolygon(const QRect &rect) const-
1108{-
1109 TransformationType t = inline_type();-
1110-
1111 QPolygon a(4);-
1112 qreal x[4] = { 0, 0, 0, 0 }, y[4] = { 0, 0, 0, 0 };-
1113 if (t <= TxScale
t <= TxScaleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1114 x[0] = affine._m11*rect.x() + affine._dx;-
1115 y[0] = affine._m22*rect.y() + affine._dy;-
1116 qreal w = affine._m11*rect.width();-
1117 qreal h = affine._m22*rect.height();-
1118 if (w < 0
w < 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1119 w = -w;-
1120 x[0] -= w;-
1121 }
never executed: end of block
0
1122 if (h < 0
h < 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1123 h = -h;-
1124 y[0] -= h;-
1125 }
never executed: end of block
0
1126 x[1] = x[0]+w;-
1127 x[2] = x[1];-
1128 x[3] = x[0];-
1129 y[1] = y[0];-
1130 y[2] = y[0]+h;-
1131 y[3] = y[2];-
1132 }
never executed: end of block
else {
0
1133 qreal right = rect.x() + rect.width();-
1134 qreal bottom = rect.y() + rect.height();-
1135 do { qreal FX_ = rect.x(); qreal FY_ = rect.y(); switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
x[0] = FX_; y[0] = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
x[0] = FX_ + affine._dx; y[0] = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
x[0] = affine._m11 * FX_ + affine._dx; y[0] = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
x[0] = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; y[0] = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; x[0] *= w; y[0] *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1136 do { qreal FX_ = right; qreal FY_ = rect.y(); switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
x[1] = FX_; y[1] = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
x[1] = FX_ + affine._dx; y[1] = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
x[1] = affine._m11 * FX_ + affine._dx; y[1] = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
x[1] = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; y[1] = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; x[1] *= w; y[1] *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1137 do { qreal FX_ = right; qreal FY_ = bottom; switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
x[2] = FX_; y[2] = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
x[2] = FX_ + affine._dx; y[2] = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
x[2] = affine._m11 * FX_ + affine._dx; y[2] = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
x[2] = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; y[2] = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; x[2] *= w; y[2] *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1138 do { qreal FX_ = rect.x(); qreal FY_ = bottom; switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
x[3] = FX_; y[3] = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
x[3] = FX_ + affine._dx; y[3] = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
x[3] = affine._m11 * FX_ + affine._dx; y[3] = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
x[3] = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; y[3] = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; x[3] *= w; y[3] *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1139 }
never executed: end of block
0
1140-
1141-
1142-
1143 a.setPoints(4, qRound(x[0]), qRound(y[0]),-
1144 qRound(x[1]), qRound(y[1]),-
1145 qRound(x[2]), qRound(y[2]),-
1146 qRound(x[3]), qRound(y[3]));-
1147 return
never executed: return a;
a;
never executed: return a;
0
1148}-
1149bool QTransform::squareToQuad(const QPolygonF &quad, QTransform &trans)-
1150{-
1151 if (quad.count() != 4
quad.count() != 4Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1152 return
never executed: return false;
false;
never executed: return false;
0
1153-
1154 qreal dx0 = quad[0].x();-
1155 qreal dx1 = quad[1].x();-
1156 qreal dx2 = quad[2].x();-
1157 qreal dx3 = quad[3].x();-
1158-
1159 qreal dy0 = quad[0].y();-
1160 qreal dy1 = quad[1].y();-
1161 qreal dy2 = quad[2].y();-
1162 qreal dy3 = quad[3].y();-
1163-
1164 double ax = dx0 - dx1 + dx2 - dx3;-
1165 double ay = dy0 - dy1 + dy2 - dy3;-
1166-
1167 if (!ax
!axDescription
TRUEnever evaluated
FALSEnever evaluated
&& !ay
!ayDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1168 trans.setMatrix(dx1 - dx0, dy1 - dy0, 0,-
1169 dx2 - dx1, dy2 - dy1, 0,-
1170 dx0, dy0, 1);-
1171 }
never executed: end of block
else {
0
1172 double ax1 = dx1 - dx2;-
1173 double ax2 = dx3 - dx2;-
1174 double ay1 = dy1 - dy2;-
1175 double ay2 = dy3 - dy2;-
1176-
1177-
1178 double gtop = ax * ay2 - ax2 * ay;-
1179 double htop = ax1 * ay - ax * ay1;-
1180 double bottom = ax1 * ay2 - ax2 * ay1;-
1181-
1182 double a, b, c, d, e, f, g, h;-
1183-
1184 if (!bottom
!bottomDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1185 return
never executed: return false;
false;
never executed: return false;
0
1186-
1187 g = gtop/bottom;-
1188 h = htop/bottom;-
1189-
1190 a = dx1 - dx0 + g * dx1;-
1191 b = dx3 - dx0 + h * dx3;-
1192 c = dx0;-
1193 d = dy1 - dy0 + g * dy1;-
1194 e = dy3 - dy0 + h * dy3;-
1195 f = dy0;-
1196-
1197 trans.setMatrix(a, d, g,-
1198 b, e, h,-
1199 c, f, 1.0);-
1200 }
never executed: end of block
0
1201-
1202 return
never executed: return true;
true;
never executed: return true;
0
1203}-
1204bool QTransform::quadToSquare(const QPolygonF &quad, QTransform &trans)-
1205{-
1206 if (!squareToQuad(quad, trans)
!squareToQuad(quad, trans)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1207 return
never executed: return false;
false;
never executed: return false;
0
1208-
1209 bool invertible = false;-
1210 trans = trans.inverted(&invertible);-
1211-
1212 return
never executed: return invertible;
invertible;
never executed: return invertible;
0
1213}-
1214bool QTransform::quadToQuad(const QPolygonF &one,-
1215 const QPolygonF &two,-
1216 QTransform &trans)-
1217{-
1218 QTransform stq;-
1219 if (!quadToSquare(one, trans)
!quadToSquare(one, trans)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1220 return
never executed: return false;
false;
never executed: return false;
0
1221 if (!squareToQuad(two, stq)
!squareToQuad(two, stq)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1222 return
never executed: return false;
false;
never executed: return false;
0
1223 trans *= stq;-
1224-
1225 return
never executed: return true;
true;
never executed: return true;
0
1226}-
1227void QTransform::setMatrix(qreal m11, qreal m12, qreal m13,-
1228 qreal m21, qreal m22, qreal m23,-
1229 qreal m31, qreal m32, qreal m33)-
1230{-
1231 affine._m11 = m11; affine._m12 = m12; m_13 = m13;-
1232 affine._m21 = m21; affine._m22 = m22; m_23 = m23;-
1233 affine._dx = m31; affine._dy = m32; m_33 = m33;-
1234 m_type = TxNone;-
1235 m_dirty = TxProject;-
1236}
never executed: end of block
0
1237-
1238static inline bool needsPerspectiveClipping(const QRectF &rect, const QTransform &transform)-
1239{-
1240 const qreal wx = qMin(transform.m13() * rect.left(), transform.m13() * rect.right());-
1241 const qreal wy = qMin(transform.m23() * rect.top(), transform.m23() * rect.bottom());-
1242-
1243 return
never executed: return wx + wy + transform.m33() < (sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001);
wx + wy + transform.m33() < (sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001);
never executed: return wx + wy + transform.m33() < (sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001);
0
1244}-
1245-
1246QRect QTransform::mapRect(const QRect &rect) const-
1247{-
1248 TransformationType t = inline_type();-
1249 if (t <= TxTranslate
t <= TxTranslateDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1250 return
never executed: return rect.translated(qRound(affine._dx), qRound(affine._dy));
rect.translated(qRound(affine._dx), qRound(affine._dy));
never executed: return rect.translated(qRound(affine._dx), qRound(affine._dy));
0
1251-
1252 if (t <= TxScale
t <= TxScaleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1253 int x = qRound(affine._m11*rect.x() + affine._dx);-
1254 int y = qRound(affine._m22*rect.y() + affine._dy);-
1255 int w = qRound(affine._m11*rect.width());-
1256 int h = qRound(affine._m22*rect.height());-
1257 if (w < 0
w < 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1258 w = -w;-
1259 x -= w;-
1260 }
never executed: end of block
0
1261 if (h < 0
h < 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1262 h = -h;-
1263 y -= h;-
1264 }
never executed: end of block
0
1265 return
never executed: return QRect(x, y, w, h);
QRect(x, y, w, h);
never executed: return QRect(x, y, w, h);
0
1266 } else if (t < TxProject
t < TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
|| !needsPerspectiveClipping(rect, *this)
!needsPerspect...g(rect, *this)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1267-
1268 qreal x = 0, y = 0;-
1269 do { qreal FX_ = rect.left(); qreal FY_ = rect.top(); switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
x = FX_; y = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
x = FX_ + affine._dx; y = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
x = affine._m11 * FX_ + affine._dx; y = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
x = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; y = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; x *= w; y *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1270 qreal xmin = x;-
1271 qreal ymin = y;-
1272 qreal xmax = x;-
1273 qreal ymax = y;-
1274 do { qreal FX_ = rect.right() + 1; qreal FY_ = rect.top(); switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
x = FX_; y = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
x = FX_ + affine._dx; y = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
x = affine._m11 * FX_ + affine._dx; y = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
x = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; y = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; x *= w; y *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1275 xmin = qMin(xmin, x);-
1276 ymin = qMin(ymin, y);-
1277 xmax = qMax(xmax, x);-
1278 ymax = qMax(ymax, y);-
1279 do { qreal FX_ = rect.right() + 1; qreal FY_ = rect.bottom() + 1; switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
x = FX_; y = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
x = FX_ + affine._dx; y = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
x = affine._m11 * FX_ + affine._dx; y = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
x = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; y = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; x *= w; y *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1280 xmin = qMin(xmin, x);-
1281 ymin = qMin(ymin, y);-
1282 xmax = qMax(xmax, x);-
1283 ymax = qMax(ymax, y);-
1284 do { qreal FX_ = rect.left(); qreal FY_ = rect.bottom() + 1; switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
x = FX_; y = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
x = FX_ + affine._dx; y = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
x = affine._m11 * FX_ + affine._dx; y = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
x = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; y = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; x *= w; y *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1285 xmin = qMin(xmin, x);-
1286 ymin = qMin(ymin, y);-
1287 xmax = qMax(xmax, x);-
1288 ymax = qMax(ymax, y);-
1289 return
never executed: return QRect(qRound(xmin), qRound(ymin), qRound(xmax)-qRound(xmin), qRound(ymax)-qRound(ymin));
QRect(qRound(xmin), qRound(ymin), qRound(xmax)-qRound(xmin), qRound(ymax)-qRound(ymin));
never executed: return QRect(qRound(xmin), qRound(ymin), qRound(xmax)-qRound(xmin), qRound(ymax)-qRound(ymin));
0
1290 } else {-
1291 QPainterPath path;-
1292 path.addRect(rect);-
1293 return
never executed: return map(path).boundingRect().toRect();
map(path).boundingRect().toRect();
never executed: return map(path).boundingRect().toRect();
0
1294 }-
1295}-
1296QRectF QTransform::mapRect(const QRectF &rect) const-
1297{-
1298 TransformationType t = inline_type();-
1299 if (t <= TxTranslate
t <= TxTranslateDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1300 return
never executed: return rect.translated(affine._dx, affine._dy);
rect.translated(affine._dx, affine._dy);
never executed: return rect.translated(affine._dx, affine._dy);
0
1301-
1302 if (t <= TxScale
t <= TxScaleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1303 qreal x = affine._m11*rect.x() + affine._dx;-
1304 qreal y = affine._m22*rect.y() + affine._dy;-
1305 qreal w = affine._m11*rect.width();-
1306 qreal h = affine._m22*rect.height();-
1307 if (w < 0
w < 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1308 w = -w;-
1309 x -= w;-
1310 }
never executed: end of block
0
1311 if (h < 0
h < 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1312 h = -h;-
1313 y -= h;-
1314 }
never executed: end of block
0
1315 return
never executed: return QRectF(x, y, w, h);
QRectF(x, y, w, h);
never executed: return QRectF(x, y, w, h);
0
1316 } else if (t < TxProject
t < TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
|| !needsPerspectiveClipping(rect, *this)
!needsPerspect...g(rect, *this)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1317 qreal x = 0, y = 0;-
1318 do { qreal FX_ = rect.x(); qreal FY_ = rect.y(); switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
x = FX_; y = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
x = FX_ + affine._dx; y = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
x = affine._m11 * FX_ + affine._dx; y = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
x = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; y = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; x *= w; y *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1319 qreal xmin = x;-
1320 qreal ymin = y;-
1321 qreal xmax = x;-
1322 qreal ymax = y;-
1323 do { qreal FX_ = rect.x() + rect.width(); qreal FY_ = rect.y(); switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
x = FX_; y = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
x = FX_ + affine._dx; y = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
x = affine._m11 * FX_ + affine._dx; y = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
x = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; y = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; x *= w; y *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1324 xmin = qMin(xmin, x);-
1325 ymin = qMin(ymin, y);-
1326 xmax = qMax(xmax, x);-
1327 ymax = qMax(ymax, y);-
1328 do { qreal FX_ = rect.x() + rect.width(); qreal FY_ = rect.y() + rect.height(); switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
x = FX_; y = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
x = FX_ + affine._dx; y = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
x = affine._m11 * FX_ + affine._dx; y = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
x = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; y = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; x *= w; y *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1329 xmin = qMin(xmin, x);-
1330 ymin = qMin(ymin, y);-
1331 xmax = qMax(xmax, x);-
1332 ymax = qMax(ymax, y);-
1333 do { qreal FX_ = rect.x(); qreal FY_ = rect.y() + rect.height(); switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
x = FX_; y = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
x = FX_ + affine._dx; y = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
x = affine._m11 * FX_ + affine._dx; y = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
x = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; y = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; x *= w; y *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1334 xmin = qMin(xmin, x);-
1335 ymin = qMin(ymin, y);-
1336 xmax = qMax(xmax, x);-
1337 ymax = qMax(ymax, y);-
1338 return
never executed: return QRectF(xmin, ymin, xmax-xmin, ymax - ymin);
QRectF(xmin, ymin, xmax-xmin, ymax - ymin);
never executed: return QRectF(xmin, ymin, xmax-xmin, ymax - ymin);
0
1339 } else {-
1340 QPainterPath path;-
1341 path.addRect(rect);-
1342 return
never executed: return map(path).boundingRect();
map(path).boundingRect();
never executed: return map(path).boundingRect();
0
1343 }-
1344}-
1345void QTransform::map(qreal x, qreal y, qreal *tx, qreal *ty) const-
1346{-
1347 TransformationType t = inline_type();-
1348 do { qreal FX_ = x; qreal FY_ = y; switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
*tx = FX_; *ty = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
*tx = FX_ + affine._dx; *ty = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
*tx = affine._m11 * FX_ + affine._dx; *ty = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
*tx = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; *ty = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; *tx *= w; *ty *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1349}
never executed: end of block
0
1350void QTransform::map(int x, int y, int *tx, int *ty) const-
1351{-
1352 TransformationType t = inline_type();-
1353 qreal fx = 0, fy = 0;-
1354 do { qreal FX_ = x; qreal FY_ = y; switch(t) { case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
fx = FX_; fy = FY_; break;
never executed: break;
case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
fx = FX_ + affine._dx; fy = FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
fx = affine._m11 * FX_ + affine._dx; fy = affine._m22 * FY_ + affine._dy; break;
never executed: break;
case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
fx = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; fy = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; if (t == TxProject
t == TxProjectDescription
TRUEnever evaluated
FALSEnever evaluated
) { qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); if (w < qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001))
w < qreal((siz...001 : 0.0001))Description
TRUEnever evaluated
FALSEnever evaluated
) w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
never executed: w = qreal((sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001));
w = 1./w; fx *= w; fy *= w; }
never executed: end of block
}
never executed: end of block
} while (0);
0
1355 *tx = qRound(fx);-
1356 *ty = qRound(fy);-
1357}
never executed: end of block
0
1358-
1359-
1360-
1361-
1362-
1363-
1364-
1365const QMatrix &QTransform::toAffine() const-
1366{-
1367 return
never executed: return affine;
affine;
never executed: return affine;
0
1368}-
1369QTransform::TransformationType QTransform::type() const-
1370{-
1371 if(m_dirty == TxNone
m_dirty == TxNoneDescription
TRUEnever evaluated
FALSEnever evaluated
|| m_dirty < m_type
m_dirty < m_typeDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1372 return
never executed: return static_cast<TransformationType>(m_type);
static_cast<TransformationType>(m_type);
never executed: return static_cast<TransformationType>(m_type);
0
1373-
1374 switch (static_cast<TransformationType>(m_dirty)) {-
1375 case
never executed: case TxProject:
TxProject:
never executed: case TxProject:
0
1376 if (!qFuzzyIsNull(m_13)
!qFuzzyIsNull(m_13)Description
TRUEnever evaluated
FALSEnever evaluated
|| !qFuzzyIsNull(m_23)
!qFuzzyIsNull(m_23)Description
TRUEnever evaluated
FALSEnever evaluated
|| !qFuzzyIsNull(m_33 - 1)
!qFuzzyIsNull(m_33 - 1)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1377 m_type = TxProject;-
1378 break;
never executed: break;
0
1379 }-
1380 case
never executed: case TxShear:
TxShear:
never executed: case TxShear:
code before this statement never executed: case TxShear:
0
1381 case
never executed: case TxRotate:
TxRotate:
never executed: case TxRotate:
0
1382 if (!qFuzzyIsNull(affine._m12)
!qFuzzyIsNull(affine._m12)Description
TRUEnever evaluated
FALSEnever evaluated
|| !qFuzzyIsNull(affine._m21)
!qFuzzyIsNull(affine._m21)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1383 const qreal dot = affine._m11 * affine._m12 + affine._m21 * affine._m22;-
1384 if (qFuzzyIsNull(dot)
qFuzzyIsNull(dot)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1385 m_type = TxRotate;
never executed: m_type = TxRotate;
0
1386 else-
1387 m_type = TxShear;
never executed: m_type = TxShear;
0
1388 break;
never executed: break;
0
1389 }-
1390 case
never executed: case TxScale:
TxScale:
never executed: case TxScale:
code before this statement never executed: case TxScale:
0
1391 if (!qFuzzyIsNull(affine._m11 - 1)
!qFuzzyIsNull(affine._m11 - 1)Description
TRUEnever evaluated
FALSEnever evaluated
|| !qFuzzyIsNull(affine._m22 - 1)
!qFuzzyIsNull(affine._m22 - 1)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1392 m_type = TxScale;-
1393 break;
never executed: break;
0
1394 }-
1395 case
never executed: case TxTranslate:
TxTranslate:
never executed: case TxTranslate:
code before this statement never executed: case TxTranslate:
0
1396 if (!qFuzzyIsNull(affine._dx)
!qFuzzyIsNull(affine._dx)Description
TRUEnever evaluated
FALSEnever evaluated
|| !qFuzzyIsNull(affine._dy)
!qFuzzyIsNull(affine._dy)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1397 m_type = TxTranslate;-
1398 break;
never executed: break;
0
1399 }-
1400 case
never executed: case TxNone:
TxNone:
never executed: case TxNone:
code before this statement never executed: case TxNone:
0
1401 m_type = TxNone;-
1402 break;
never executed: break;
0
1403 }-
1404-
1405 m_dirty = TxNone;-
1406 return
never executed: return static_cast<TransformationType>(m_type);
static_cast<TransformationType>(m_type);
never executed: return static_cast<TransformationType>(m_type);
0
1407}-
1408-
1409-
1410-
1411-
1412-
1413QTransform::operator QVariant() const-
1414{-
1415 return
never executed: return QVariant(QVariant::Transform, this);
QVariant(QVariant::Transform, this);
never executed: return QVariant(QVariant::Transform, this);
0
1416}-
1417__attribute__((visibility("default")))-
1418bool qt_scaleForTransform(const QTransform &transform, qreal *scale)-
1419{-
1420 const QTransform::TransformationType type = transform.type();-
1421 if (type <= QTransform::TxTranslate
type <= QTrans...m::TxTranslateDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1422 if (scale
scaleDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1423 *
never executed: *scale = 1;
scale = 1;
never executed: *scale = 1;
0
1424 return
never executed: return true;
true;
never executed: return true;
0
1425 } else if (type == QTransform::TxScale
type == QTransform::TxScaleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1426 const qreal xScale = qAbs(transform.m11());-
1427 const qreal yScale = qAbs(transform.m22());-
1428 if (scale
scaleDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1429 *
never executed: *scale = qMax(xScale, yScale);
scale = qMax(xScale, yScale);
never executed: *scale = qMax(xScale, yScale);
0
1430 return
never executed: return qFuzzyCompare(xScale, yScale);
qFuzzyCompare(xScale, yScale);
never executed: return qFuzzyCompare(xScale, yScale);
0
1431 }-
1432-
1433-
1434 const qreal xScale1 = transform.m11() * transform.m11()-
1435 + transform.m21() * transform.m21();-
1436 const qreal yScale1 = transform.m12() * transform.m12()-
1437 + transform.m22() * transform.m22();-
1438-
1439-
1440 const qreal xScale2 = transform.m11() * transform.m11()-
1441 + transform.m12() * transform.m12();-
1442 const qreal yScale2 = transform.m21() * transform.m21()-
1443 + transform.m22() * transform.m22();-
1444-
1445-
1446 if (qAbs(xScale1 - yScale1) > qAbs(xScale2 - yScale2)
qAbs(xScale1 -...le2 - yScale2)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1447 if (scale
scaleDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1448 *
never executed: *scale = qSqrt(qMax(xScale1, yScale1));
scale = qSqrt(qMax(xScale1, yScale1));
never executed: *scale = qSqrt(qMax(xScale1, yScale1));
0
1449-
1450 return
never executed: return type == QTransform::TxRotate && qFuzzyCompare(xScale1, yScale1);
type == QTransform::TxRotate
type == QTransform::TxRotateDescription
TRUEnever evaluated
FALSEnever evaluated
&& qFuzzyCompare(xScale1, yScale1)
qFuzzyCompare(...ale1, yScale1)Description
TRUEnever evaluated
FALSEnever evaluated
;
never executed: return type == QTransform::TxRotate && qFuzzyCompare(xScale1, yScale1);
0
1451 } else {-
1452 if (scale
scaleDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1453 *
never executed: *scale = qSqrt(qMax(xScale2, yScale2));
scale = qSqrt(qMax(xScale2, yScale2));
never executed: *scale = qSqrt(qMax(xScale2, yScale2));
0
1454-
1455 return
never executed: return type == QTransform::TxRotate && qFuzzyCompare(xScale2, yScale2);
type == QTransform::TxRotate
type == QTransform::TxRotateDescription
TRUEnever evaluated
FALSEnever evaluated
&& qFuzzyCompare(xScale2, yScale2)
qFuzzyCompare(...ale2, yScale2)Description
TRUEnever evaluated
FALSEnever evaluated
;
never executed: return type == QTransform::TxRotate && qFuzzyCompare(xScale2, yScale2);
0
1456 }-
1457}-
1458-
1459-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9