15#include <private/qbezier_p.h>
27#define Q_NEAR_CLIP (sizeof(qreal) == sizeof(double) ? 0.000001 : 0.0001)
32#define MAP(x, y, nx, ny) \
42 nx = FX_ + m_matrix[2][0]; \
43 ny = FY_ + m_matrix[2][1]; \
46 nx = m_matrix[0][0] * FX_ + m_matrix[2][0]; \
47 ny = m_matrix[1][1] * FY_ + m_matrix[2][1]; \
52 nx = m_matrix[0][0] * FX_ + m_matrix[1][0] * FY_ + m_matrix[2][0]; \
53 ny = m_matrix[0][1] * FX_ + m_matrix[1][1] * FY_ + m_matrix[2][1]; \
54 if (t == TxProject) { \
55 qreal w = (m_matrix[0][2] * FX_ + m_matrix[1][2] * FY_ + m_matrix[2][2]); \
56 if (w < qreal(Q_NEAR_CLIP)) w = qreal(Q_NEAR_CLIP); \
267 h11 = m_matrix[1][1] * m_matrix[2][2] - m_matrix[1][2] * m_matrix[2][1];
268 h21 = m_matrix[1][2] * m_matrix[2][0] - m_matrix[1][0] * m_matrix[2][2];
269 h31 = m_matrix[1][0] * m_matrix[2][1] - m_matrix[1][1] * m_matrix[2][0];
270 h12 = m_matrix[0][2] * m_matrix[2][1] - m_matrix[0][1] * m_matrix[2][2];
271 h22 = m_matrix[0][0] * m_matrix[2][2] - m_matrix[0][2] * m_matrix[2][0];
272 h32 = m_matrix[0][1] * m_matrix[2][0] - m_matrix[0][0] * m_matrix[2][1];
273 h13 = m_matrix[0][1] * m_matrix[1][2] - m_matrix[0][2] * m_matrix[1][1];
274 h23 = m_matrix[0][2] * m_matrix[1][0] - m_matrix[0][0] * m_matrix[1][2];
275 h33 = m_matrix[0][0] * m_matrix[1][1] - m_matrix[0][1] * m_matrix[1][0];
287 QTransform t(m_matrix[0][0], m_matrix[1][0], m_matrix[2][0],
288 m_matrix[0][1], m_matrix[1][1], m_matrix[2][1],
289 m_matrix[0][2], m_matrix[1][2], m_matrix[2][2]);
308 switch(inline_type()) {
312 invert.m_matrix[2][0] = -m_matrix[2][0];
313 invert.m_matrix[2][1] = -m_matrix[2][1];
319 invert.m_matrix[0][0] = 1. / m_matrix[0][0];
320 invert.m_matrix[1][1] = 1. / m_matrix[1][1];
321 invert.m_matrix[2][0] = -m_matrix[2][0] *
invert.m_matrix[0][0];
322 invert.m_matrix[2][1] = -m_matrix[2][1] *
invert.m_matrix[1][1];
358 if (
dx == 0 &&
dy == 0)
367 switch(inline_type()) {
373 m_matrix[2][0] +=
dx;
374 m_matrix[2][1] +=
dy;
377 m_matrix[2][0] +=
dx * m_matrix[0][0];
378 m_matrix[2][1] +=
dy * m_matrix[1][1];
381 m_matrix[2][2] +=
dx * m_matrix[0][2] +
dy * m_matrix[1][2];
385 m_matrix[2][0] +=
dx * m_matrix[0][0] +
dy * m_matrix[1][0];
386 m_matrix[2][1] +=
dy * m_matrix[1][1] +
dx * m_matrix[0][1];
410 if (
dx == 0 &&
dy == 0)
426 if (sx == 1 && sy == 1)
435 switch(inline_type()) {
442 m_matrix[0][2] *= sx;
443 m_matrix[1][2] *= sy;
447 m_matrix[0][1] *= sx;
448 m_matrix[1][0] *= sy;
451 m_matrix[0][0] *= sx;
452 m_matrix[1][1] *= sy;
476 if (sx == 1. && sy == 1.)
492 if (sh == 0 && sv == 0)
501 switch(inline_type()) {
508 m_matrix[0][1] = sv*m_matrix[1][1];
509 m_matrix[1][0] = sh*m_matrix[0][0];
512 qreal tm13 = sv * m_matrix[1][2];
513 qreal tm23 = sh * m_matrix[0][2];
514 m_matrix[0][2] += tm13;
515 m_matrix[1][2] += tm23;
520 qreal tm11 = sv * m_matrix[1][0];
521 qreal tm22 = sh * m_matrix[0][1];
522 qreal tm12 = sv * m_matrix[1][1];
523 qreal tm21 = sh * m_matrix[0][0];
524 m_matrix[0][0] += tm11;
525 m_matrix[0][1] += tm12;
526 m_matrix[1][0] += tm21;
527 m_matrix[1][1] += tm22;
570 if (
a == 90. ||
a == -270.)
572 else if (
a == 270. ||
a == -90.)
583 switch(inline_type()) {
586 m_matrix[0][0] = cosa;
587 m_matrix[0][1] = sina;
588 m_matrix[1][0] = -sina;
589 m_matrix[1][1] = cosa;
592 qreal tm11 = cosa * m_matrix[0][0];
593 qreal tm12 = sina * m_matrix[1][1];
594 qreal tm21 = -sina * m_matrix[0][0];
595 qreal tm22 = cosa * m_matrix[1][1];
596 m_matrix[0][0] = tm11;
597 m_matrix[0][1] = tm12;
598 m_matrix[1][0] = tm21;
599 m_matrix[1][1] = tm22;
603 qreal tm13 = cosa * m_matrix[0][2] + sina * m_matrix[1][2];
604 qreal tm23 = -sina * m_matrix[0][2] + cosa * m_matrix[1][2];
605 m_matrix[0][2] = tm13;
606 m_matrix[1][2] = tm23;
611 qreal tm11 = cosa * m_matrix[0][0] + sina * m_matrix[1][0];
612 qreal tm12 = cosa * m_matrix[0][1] + sina * m_matrix[1][1];
613 qreal tm21 = -sina * m_matrix[0][0] + cosa * m_matrix[1][0];
614 qreal tm22 = -sina * m_matrix[0][1] + cosa * m_matrix[1][1];
615 m_matrix[0][0] = tm11;
616 m_matrix[0][1] = tm12;
617 m_matrix[1][0] = tm21;
618 m_matrix[1][1] = tm22;
626 sina /= distanceToPlane;
630 result.m_matrix[0][0] = cosa;
631 result.m_matrix[0][2] = -sina;
633 result.m_matrix[1][1] = cosa;
634 result.m_matrix[1][2] = -sina;
643#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
657 return rotate(
a, axis, 1024.0);
694 switch(inline_type()) {
697 m_matrix[0][0] = cosa;
698 m_matrix[0][1] = sina;
699 m_matrix[1][0] = -sina;
700 m_matrix[1][1] = cosa;
703 qreal tm11 = cosa * m_matrix[0][0];
704 qreal tm12 = sina * m_matrix[1][1];
705 qreal tm21 = -sina * m_matrix[0][0];
706 qreal tm22 = cosa * m_matrix[1][1];
707 m_matrix[0][0] = tm11;
708 m_matrix[0][1] = tm12;
709 m_matrix[1][0] = tm21;
710 m_matrix[1][1] = tm22;
714 qreal tm13 = cosa * m_matrix[0][2] + sina * m_matrix[1][2];
715 qreal tm23 = -sina * m_matrix[0][2] + cosa * m_matrix[1][2];
716 m_matrix[0][2] = tm13;
717 m_matrix[1][2] = tm23;
722 qreal tm11 = cosa * m_matrix[0][0] + sina * m_matrix[1][0];
723 qreal tm12 = cosa * m_matrix[0][1] + sina * m_matrix[1][1];
724 qreal tm21 = -sina * m_matrix[0][0] + cosa * m_matrix[1][0];
725 qreal tm22 = -sina * m_matrix[0][1] + cosa * m_matrix[1][1];
726 m_matrix[0][0] = tm11;
727 m_matrix[0][1] = tm12;
728 m_matrix[1][0] = tm21;
729 m_matrix[1][1] = tm22;
737 sina /= distanceToPlane;
741 result.m_matrix[0][0] = cosa;
742 result.m_matrix[0][2] = -sina;
744 result.m_matrix[1][1] = cosa;
745 result.m_matrix[1][2] = -sina;
753#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
778 return m_matrix[0][0] ==
o.m_matrix[0][0] &&
779 m_matrix[0][1] ==
o.m_matrix[0][1] &&
780 m_matrix[1][0] ==
o.m_matrix[1][0] &&
781 m_matrix[1][1] ==
o.m_matrix[1][1] &&
782 m_matrix[2][0] ==
o.m_matrix[2][0] &&
783 m_matrix[2][1] ==
o.m_matrix[2][1] &&
784 m_matrix[0][2] ==
o.m_matrix[0][2] &&
785 m_matrix[1][2] ==
o.m_matrix[1][2] &&
786 m_matrix[2][2] ==
o.m_matrix[2][2];
844 m_matrix[2][0] +=
o.m_matrix[2][0];
845 m_matrix[2][1] +=
o.m_matrix[2][1];
849 qreal m11 = m_matrix[0][0] *
o.m_matrix[0][0];
850 qreal m22 = m_matrix[1][1] *
o.m_matrix[1][1];
852 qreal m31 = m_matrix[2][0] *
o.m_matrix[0][0] +
o.m_matrix[2][0];
853 qreal m32 = m_matrix[2][1] *
o.m_matrix[1][1] +
o.m_matrix[2][1];
855 m_matrix[0][0] =
m11;
856 m_matrix[1][1] =
m22;
857 m_matrix[2][0] =
m31; m_matrix[2][1] =
m32;
863 qreal m11 = m_matrix[0][0] *
o.m_matrix[0][0] + m_matrix[0][1] *
o.m_matrix[1][0];
864 qreal m12 = m_matrix[0][0] *
o.m_matrix[0][1] + m_matrix[0][1] *
o.m_matrix[1][1];
866 qreal m21 = m_matrix[1][0] *
o.m_matrix[0][0] + m_matrix[1][1] *
o.m_matrix[1][0];
867 qreal m22 = m_matrix[1][0] *
o.m_matrix[0][1] + m_matrix[1][1] *
o.m_matrix[1][1];
869 qreal m31 = m_matrix[2][0] *
o.m_matrix[0][0] + m_matrix[2][1] *
o.m_matrix[1][0] +
o.m_matrix[2][0];
870 qreal m32 = m_matrix[2][0] *
o.m_matrix[0][1] + m_matrix[2][1] *
o.m_matrix[1][1] +
o.m_matrix[2][1];
872 m_matrix[0][0] =
m11;
873 m_matrix[0][1] =
m12;
874 m_matrix[1][0] =
m21;
875 m_matrix[1][1] =
m22;
876 m_matrix[2][0] =
m31;
877 m_matrix[2][1] =
m32;
882 qreal m11 = m_matrix[0][0] *
o.m_matrix[0][0] + m_matrix[0][1] *
o.m_matrix[1][0] + m_matrix[0][2] *
o.m_matrix[2][0];
883 qreal m12 = m_matrix[0][0] *
o.m_matrix[0][1] + m_matrix[0][1] *
o.m_matrix[1][1] + m_matrix[0][2] *
o.m_matrix[2][1];
884 qreal m13 = m_matrix[0][0] *
o.m_matrix[0][2] + m_matrix[0][1] *
o.m_matrix[1][2] + m_matrix[0][2] *
o.m_matrix[2][2];
886 qreal m21 = m_matrix[1][0] *
o.m_matrix[0][0] + m_matrix[1][1] *
o.m_matrix[1][0] + m_matrix[1][2] *
o.m_matrix[2][0];
887 qreal m22 = m_matrix[1][0] *
o.m_matrix[0][1] + m_matrix[1][1] *
o.m_matrix[1][1] + m_matrix[1][2] *
o.m_matrix[2][1];
888 qreal m23 = m_matrix[1][0] *
o.m_matrix[0][2] + m_matrix[1][1] *
o.m_matrix[1][2] + m_matrix[1][2] *
o.m_matrix[2][2];
890 qreal m31 = m_matrix[2][0] *
o.m_matrix[0][0] + m_matrix[2][1] *
o.m_matrix[1][0] + m_matrix[2][2] *
o.m_matrix[2][0];
891 qreal m32 = m_matrix[2][0] *
o.m_matrix[0][1] + m_matrix[2][1] *
o.m_matrix[1][1] + m_matrix[2][2] *
o.m_matrix[2][1];
892 qreal m33 = m_matrix[2][0] *
o.m_matrix[0][2] + m_matrix[2][1] *
o.m_matrix[1][2] + m_matrix[2][2] *
o.m_matrix[2][2];
894 m_matrix[0][0] =
m11; m_matrix[0][1] =
m12; m_matrix[0][2] =
m13;
895 m_matrix[1][0] =
m21; m_matrix[1][1] =
m22; m_matrix[1][2] =
m23;
896 m_matrix[2][0] =
m31; m_matrix[2][1] =
m32; m_matrix[2][2] =
m33;
930 t.m_matrix[2][0] = m_matrix[2][0] +
m.m_matrix[2][0];
931 t.m_matrix[2][1] = m_matrix[2][1] +
m.m_matrix[2][1];
935 qreal m11 = m_matrix[0][0] *
m.m_matrix[0][0];
936 qreal m22 = m_matrix[1][1] *
m.m_matrix[1][1];
938 qreal m31 = m_matrix[2][0] *
m.m_matrix[0][0] +
m.m_matrix[2][0];
939 qreal m32 = m_matrix[2][1] *
m.m_matrix[1][1] +
m.m_matrix[2][1];
941 t.m_matrix[0][0] =
m11;
942 t.m_matrix[1][1] =
m22;
943 t.m_matrix[2][0] =
m31;
944 t.m_matrix[2][1] =
m32;
950 qreal m11 = m_matrix[0][0] *
m.m_matrix[0][0] + m_matrix[0][1] *
m.m_matrix[1][0];
951 qreal m12 = m_matrix[0][0] *
m.m_matrix[0][1] + m_matrix[0][1] *
m.m_matrix[1][1];
953 qreal m21 = m_matrix[1][0] *
m.m_matrix[0][0] + m_matrix[1][1] *
m.m_matrix[1][0];
954 qreal m22 = m_matrix[1][0] *
m.m_matrix[0][1] + m_matrix[1][1] *
m.m_matrix[1][1];
956 qreal m31 = m_matrix[2][0] *
m.m_matrix[0][0] + m_matrix[2][1] *
m.m_matrix[1][0] +
m.m_matrix[2][0];
957 qreal m32 = m_matrix[2][0] *
m.m_matrix[0][1] + m_matrix[2][1] *
m.m_matrix[1][1] +
m.m_matrix[2][1];
959 t.m_matrix[0][0] =
m11;
t.m_matrix[0][1] =
m12;
960 t.m_matrix[1][0] =
m21;
t.m_matrix[1][1] =
m22;
961 t.m_matrix[2][0] =
m31;
t.m_matrix[2][1] =
m32;
966 qreal m11 = m_matrix[0][0] *
m.m_matrix[0][0] + m_matrix[0][1] *
m.m_matrix[1][0] + m_matrix[0][2] *
m.m_matrix[2][0];
967 qreal m12 = m_matrix[0][0] *
m.m_matrix[0][1] + m_matrix[0][1] *
m.m_matrix[1][1] + m_matrix[0][2] *
m.m_matrix[2][1];
968 qreal m13 = m_matrix[0][0] *
m.m_matrix[0][2] + m_matrix[0][1] *
m.m_matrix[1][2] + m_matrix[0][2] *
m.m_matrix[2][2];
970 qreal m21 = m_matrix[1][0] *
m.m_matrix[0][0] + m_matrix[1][1] *
m.m_matrix[1][0] + m_matrix[1][2] *
m.m_matrix[2][0];
971 qreal m22 = m_matrix[1][0] *
m.m_matrix[0][1] + m_matrix[1][1] *
m.m_matrix[1][1] + m_matrix[1][2] *
m.m_matrix[2][1];
972 qreal m23 = m_matrix[1][0] *
m.m_matrix[0][2] + m_matrix[1][1] *
m.m_matrix[1][2] + m_matrix[1][2] *
m.m_matrix[2][2];
974 qreal m31 = m_matrix[2][0] *
m.m_matrix[0][0] + m_matrix[2][1] *
m.m_matrix[1][0] + m_matrix[2][2] *
m.m_matrix[2][0];
975 qreal m32 = m_matrix[2][0] *
m.m_matrix[0][1] + m_matrix[2][1] *
m.m_matrix[1][1] + m_matrix[2][2] *
m.m_matrix[2][1];
976 qreal m33 = m_matrix[2][0] *
m.m_matrix[0][2] + m_matrix[2][1] *
m.m_matrix[1][2] + m_matrix[2][2] *
m.m_matrix[2][2];
978 t.m_matrix[0][0] =
m11;
t.m_matrix[0][1] =
m12;
t.m_matrix[0][2] =
m13;
979 t.m_matrix[1][0] =
m21;
t.m_matrix[1][1] =
m22;
t.m_matrix[1][2] =
m23;
980 t.m_matrix[2][0] =
m31;
t.m_matrix[2][1] =
m32;
t.m_matrix[2][2] =
m33;
1041#ifndef QT_NO_DATASTREAM
1054 s << double(
m.m11())
1078 double m11, m12, m13,
1091 t.setMatrix(m11, m12, m13,
1099#ifndef QT_NO_DEBUG_STREAM
1102 static const char typeStr[][12] =
1111 "",
"",
"",
"",
"",
"",
"",
1116 dbg.nospace() <<
"QTransform(type=" <<
typeStr[
m.type()] <<
','
1117 <<
" 11=" <<
m.m11()
1118 <<
" 12=" <<
m.m12()
1119 <<
" 13=" <<
m.m13()
1120 <<
" 21=" <<
m.m21()
1121 <<
" 22=" <<
m.m22()
1122 <<
" 23=" <<
m.m23()
1123 <<
" 31=" <<
m.m31()
1124 <<
" 32=" <<
m.m32()
1125 <<
" 33=" <<
m.m33()
1154 x = fx + m_matrix[2][0];
1155 y = fy + m_matrix[2][1];
1158 x = m_matrix[0][0] * fx + m_matrix[2][0];
1159 y = m_matrix[1][1] * fy + m_matrix[2][1];
1164 x = m_matrix[0][0] * fx + m_matrix[1][0] * fy + m_matrix[2][0];
1165 y = m_matrix[0][1] * fx + m_matrix[1][1] * fy + m_matrix[2][1];
1167 qreal w = 1./(m_matrix[0][2] * fx + m_matrix[1][2] * fy + m_matrix[2][2]);
1205 x = fx + m_matrix[2][0];
1206 y = fy + m_matrix[2][1];
1209 x = m_matrix[0][0] * fx + m_matrix[2][0];
1210 y = m_matrix[1][1] * fy + m_matrix[2][1];
1215 x = m_matrix[0][0] * fx + m_matrix[1][0] * fy + m_matrix[2][0];
1216 y = m_matrix[0][1] * fx + m_matrix[1][1] * fy + m_matrix[2][1];
1218 qreal w = 1./(m_matrix[0][2] * fx + m_matrix[1][2] * fy + m_matrix[2][2]);
1278 x1 = fx1 + m_matrix[2][0];
1279 y1 = fy1 + m_matrix[2][1];
1280 x2 = fx2 + m_matrix[2][0];
1281 y2 = fy2 + m_matrix[2][1];
1284 x1 = m_matrix[0][0] * fx1 + m_matrix[2][0];
1285 y1 = m_matrix[1][1] * fy1 + m_matrix[2][1];
1286 x2 = m_matrix[0][0] * fx2 + m_matrix[2][0];
1287 y2 = m_matrix[1][1] * fy2 + m_matrix[2][1];
1292 x1 = m_matrix[0][0] * fx1 + m_matrix[1][0] * fy1 + m_matrix[2][0];
1293 y1 = m_matrix[0][1] * fx1 + m_matrix[1][1] * fy1 + m_matrix[2][1];
1294 x2 = m_matrix[0][0] * fx2 + m_matrix[1][0] * fy2 + m_matrix[2][0];
1295 y2 = m_matrix[0][1] * fx2 + m_matrix[1][1] * fy2 + m_matrix[2][1];
1297 qreal w = 1./(m_matrix[0][2] * fx1 + m_matrix[1][2] * fy1 + m_matrix[2][2]);
1300 w = 1./(m_matrix[0][2] * fx2 + m_matrix[1][2] * fy2 + m_matrix[2][2]);
1337 x1 = fx1 + m_matrix[2][0];
1338 y1 = fy1 + m_matrix[2][1];
1339 x2 = fx2 + m_matrix[2][0];
1340 y2 = fy2 + m_matrix[2][1];
1343 x1 = m_matrix[0][0] * fx1 + m_matrix[2][0];
1344 y1 = m_matrix[1][1] * fy1 + m_matrix[2][1];
1345 x2 = m_matrix[0][0] * fx2 + m_matrix[2][0];
1346 y2 = m_matrix[1][1] * fy2 + m_matrix[2][1];
1351 x1 = m_matrix[0][0] * fx1 + m_matrix[1][0] * fy1 + m_matrix[2][0];
1352 y1 = m_matrix[0][1] * fx1 + m_matrix[1][1] * fy1 + m_matrix[2][1];
1353 x2 = m_matrix[0][0] * fx2 + m_matrix[1][0] * fy2 + m_matrix[2][0];
1354 y2 = m_matrix[0][1] * fx2 + m_matrix[1][1] * fy2 + m_matrix[2][1];
1356 qreal w = 1./(m_matrix[0][2] * fx1 + m_matrix[1][2] * fy1 + m_matrix[2][2]);
1359 w = 1./(m_matrix[0][2] * fx2 + m_matrix[1][2] * fy2 + m_matrix[2][2]);
1369 if (poly.
size() == 0)
1372 if (poly.
size() == 1)
1376 path.addPolygon(poly);
1381 const int elementCount =
path.elementCount();
1382 result.reserve(elementCount);
1383 for (
int i = 0;
i < elementCount; ++
i)
1420 return a.translated(m_matrix[2][0], m_matrix[2][1]);
1425 int size =
a.size();
1432 MAP(da[
i].xp, da[
i].yp, dp[
i].xp, dp[
i].yp);
1450 return a.translated(
qRound(m_matrix[2][0]),
qRound(m_matrix[2][1]));
1458 const QPoint *da =
a.constData();
1505 if (
m11() < 0 ||
m22() < 0) {
1522 return p.toFillPolygon().toPolygon();
1550 bool needsMoveTo,
bool needsLineTo =
true)
1561 hb.
x += (ha.
x - hb.
x) *
t;
1562 hb.
y += (ha.
y - hb.
y) *
t;
1567 ha.
x += (hb.
x - ha.
x) *
t;
1568 ha.
y += (hb.
y - ha.
y) *
t;
1574 needsMoveTo =
false;
1604 needsMoveTo =
false;
1606 return !needsMoveTo;
1615 bool needsMoveTo =
true;
1616 for (
int i = 0;
i <
path.elementCount(); ++
i) {
1617 switch (
path.elementAt(
i).type) {
1619 if (
i > 0 && lastMoveTo != last)
1622 lastMoveTo =
path.elementAt(
i);
1623 last =
path.elementAt(
i);
1628 needsMoveTo =
false;
1629 last =
path.elementAt(
i);
1633 needsMoveTo =
false;
1635 last =
path.elementAt(
i);
1642 if (
path.elementCount() > 0 && lastMoveTo != last)
1678 copy.translate(m_matrix[2][0], m_matrix[2][1]);
1682 for (
int i=0;
i<
path.elementCount(); ++
i) {
1716 qreal x[4] = { 0, 0, 0, 0 },
y[4] = { 0, 0, 0, 0 };
1718 x[0] = m_matrix[0][0]*
rect.x() + m_matrix[2][0];
1719 y[0] = m_matrix[1][1]*
rect.y() + m_matrix[2][1];
1763 if (
quad.size() != 4)
1776 double ax = dx0 - dx1 + dx2 - dx3;
1777 double ay = dy0 - dy1 + dy2 - dy3;
1780 trans.
setMatrix(dx1 - dx0, dy1 - dy0, 0,
1781 dx2 - dx1, dy2 - dy1, 0,
1784 double ax1 = dx1 - dx2;
1785 double ax2 = dx3 - dx2;
1786 double ay1 = dy1 - dy2;
1787 double ay2 = dy3 - dy2;
1790 double gtop = ax * ay2 - ax2 * ay;
1791 double htop = ax1 * ay - ax * ay1;
1792 double bottom = ax1 * ay2 - ax2 * ay1;
1802 a = dx1 - dx0 +
g * dx1;
1803 b = dx3 - dx0 +
h * dx3;
1805 d = dy1 - dy0 +
g * dy1;
1806 e = dy3 - dy0 +
h * dy3;
1831 bool invertible =
false;
1832 trans = trans.
inverted(&invertible);
1878 m_matrix[0][0] =
m11; m_matrix[0][1] =
m12; m_matrix[0][2] =
m13;
1879 m_matrix[1][0] =
m21; m_matrix[1][1] =
m22; m_matrix[1][2] =
m23;
1880 m_matrix[2][0] =
m31; m_matrix[2][1] =
m32; m_matrix[2][2] =
m33;
1900 int x =
qRound(m_matrix[0][0] *
rect.x() + m_matrix[2][0]);
1901 int y =
qRound(m_matrix[1][1] *
rect.y() + m_matrix[2][1]);
1922 xmin =
qMin(xmin,
x);
1923 ymin =
qMin(ymin,
y);
1924 xmax =
qMax(xmax,
x);
1925 ymax =
qMax(ymax,
y);
1927 xmin =
qMin(xmin,
x);
1928 ymin =
qMin(ymin,
y);
1929 xmax =
qMax(xmax,
x);
1930 ymax =
qMax(ymax,
y);
1932 xmin =
qMin(xmin,
x);
1933 ymin =
qMin(ymin,
y);
1934 xmax =
qMax(xmax,
x);
1935 ymax =
qMax(ymax,
y);
1940 return map(
path).boundingRect().toRect();
1967 return rect.translated(m_matrix[2][0], m_matrix[2][1]);
1970 qreal x = m_matrix[0][0] *
rect.x() + m_matrix[2][0];
1971 qreal y = m_matrix[1][1] *
rect.y() + m_matrix[2][1];
1991 xmin =
qMin(xmin,
x);
1992 ymin =
qMin(ymin,
y);
1993 xmax =
qMax(xmax,
x);
1994 ymax =
qMax(ymax,
y);
1996 xmin =
qMin(xmin,
x);
1997 ymin =
qMin(ymin,
y);
1998 xmax =
qMax(xmax,
x);
1999 ymax =
qMax(ymax,
y);
2001 xmin =
qMin(xmin,
x);
2002 ymin =
qMin(ymin,
y);
2003 xmax =
qMax(xmax,
x);
2004 ymax =
qMax(ymax,
y);
2005 return QRectF(xmin, ymin, xmax-xmin, ymax - ymin);
2009 return map(
path).boundingRect();
2054 qreal fx = 0, fy = 0;
2074 if (m_dirty ==
TxNone || m_dirty < m_type)
2087 const qreal dot = m_matrix[0][0] * m_matrix[1][0] + m_matrix[0][1] * m_matrix[1][1];
2329 if (
qAbs(xScale1 - yScale1) >
qAbs(xScale2 - yScale2)) {
2344 if (
s.version() == 1) {
2345 float m11, m12, m21, m22, dx, dy;
2346 s >> m11;
s >> m12;
s >> m21;
s >> m22;
s >> dx;
s >> dy;
2348 m.m_matrix[0][0] = m11;
2349 m.m_matrix[0][1] = m12;
2350 m.m_matrix[1][0] = m21;
2351 m.m_matrix[1][1] = m22;
2352 m.m_matrix[2][0] = dx;
2353 m.m_matrix[2][1] = dy;
2355 s >>
m.m_matrix[0][0];
2356 s >>
m.m_matrix[0][1];
2357 s >>
m.m_matrix[1][0];
2358 s >>
m.m_matrix[1][1];
2359 s >>
m.m_matrix[2][0];
2360 s >>
m.m_matrix[2][1];
2362 m.m_matrix[0][2] = 0;
2363 m.m_matrix[1][2] = 0;
2364 m.m_matrix[2][2] = 1;
2370 if (
s.version() == 1) {
2371 s << (float)
m.m_matrix[0][0]
2372 << (
float)
m.m_matrix[0][1]
2373 << (float)
m.m_matrix[1][0]
2374 << (
float)
m.m_matrix[1][1]
2375 << (float)
m.m_matrix[2][0]
2376 << (
float)
m.m_matrix[2][1];
2378 s <<
m.m_matrix[0][0]
2383 <<
m.m_matrix[2][1];
static QBezier fromPoints(const QPointF &p1, const QPointF &p2, const QPointF &p3, const QPointF &p4)
QPolygonF toPolygon(qreal bezier_flattening_threshold=0.5) const
\inmodule QtCore\reentrant
constexpr qreal x1() const
Returns the x-coordinate of the line's start point.
constexpr qreal y2() const
Returns the y-coordinate of the line's end point.
constexpr qreal x2() const
Returns the x-coordinate of the line's end point.
constexpr qreal y1() const
Returns the y-coordinate of the line's start point.
constexpr int x2() const
Returns the x-coordinate of the line's end point.
constexpr int y2() const
Returns the y-coordinate of the line's end point.
constexpr int y1() const
Returns the y-coordinate of the line's start point.
constexpr int x1() const
Returns the x-coordinate of the line's start point.
qsizetype size() const noexcept
const_reference at(qsizetype i) const noexcept
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
constexpr int x() const noexcept
Returns the x coordinate of this point.
The QPolygonF class provides a list of points using floating point precision.
QPolygon Q_GUI_EXPORT toPolygon() const
Creates and returns a QPolygon by converting each QPointF to a QPoint.
The QPolygon class provides a list of points using integer precision.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
constexpr bool isEmpty() const noexcept
Returns true if the rectangle is empty, otherwise returns false.
The QRegion class specifies a clip region for a painter.
constexpr size_type size() const noexcept
const T * constData() const
void reserve(qsizetype sz)
static auto fromValue(T &&value) noexcept(std::is_nothrow_copy_constructible_v< T > &&Private::CanUseInternalSpace< T >) -> std::enable_if_t< std::conjunction_v< std::is_copy_constructible< T >, std::is_destructible< T > >, QVariant >
QHash< int, QWidget * > hash
[35multi]
QMap< QString, QString > map
[6]
Combined button and popup list for selecting options.
static jboolean copy(JNIEnv *, jobject)
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
bool qFuzzyIsNull(qfloat16 f) noexcept
bool qIsNaN(qfloat16 f) noexcept
bool qIsNull(qfloat16 f) noexcept
qfloat16 qSqrt(qfloat16 f)
int qRound(qfloat16 d) noexcept
constexpr float qDegreesToRadians(float degrees)
QRect qt_mapFillRect(const QRectF &rect, const QTransform &xf)
constexpr const T & qMin(const T &a, const T &b)
constexpr const T & qMax(const T &a, const T &b)
constexpr T qAbs(const T &t)
GLboolean GLboolean GLboolean b
GLint GLint GLint GLint GLint x
[0]
GLfloat GLfloat GLfloat w
[0]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLuint GLfloat GLfloat GLfloat GLfloat y1
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint GLfloat GLfloat GLfloat x1
GLfloat GLfloat GLfloat GLfloat h
GLuint GLenum GLenum transform
GLfixed GLfixed GLfixed y2
GLsizei const GLchar *const * path
GLenum GLenum GLenum GLenum GLenum scale
QPainterPath qt_regionToPath(const QRegion ®ion)
static qreal dot(const QPointF &a, const QPointF &b)
static Q_CONSTINIT QBasicAtomicInteger< unsigned > seed
static const struct TessellationModeTab quad[]
static QLatin1StringView typeStr(QShaderDescription::VariableType t)
const QPointF toPoint() const
QHomogeneousCoordinate(qreal x_, qreal y_, qreal w_)