Skip to content

Commit

Permalink
optimize QTransform::TxRotate, QTransform::TxShear and QTransform::Tx…
Browse files Browse the repository at this point in the history
…Project mapping

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
  • Loading branch information
fluxer committed Oct 3, 2020
1 parent c1118b0 commit b2a2032
Showing 1 changed file with 56 additions and 56 deletions.
112 changes: 56 additions & 56 deletions src/gui/painting/qtransform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,32 +54,32 @@ QT_BEGIN_NAMESPACE
do { \
qreal FX_ = x; \
qreal FY_ = y; \
switch(t) { \
case TxNone: \
nx = FX_; \
ny = FY_; \
break; \
case TxTranslate: \
nx = FX_ + affine._dx; \
ny = FY_ + affine._dy; \
break; \
case TxScale: \
nx = affine._m11 * FX_ + affine._dx; \
ny = affine._m22 * FY_ + affine._dy; \
break; \
case TxRotate: \
case TxShear: \
case TxProject: \
nx = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; \
ny = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; \
if (t == TxProject) { \
qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); \
if (w < qreal(Q_NEAR_CLIP)) w = qreal(Q_NEAR_CLIP); \
w = 1./w; \
nx *= w; \
ny *= w; \
} \
} \
switch(t) { \
case TxNone: \
nx = FX_; \
ny = FY_; \
break; \
case TxTranslate: \
nx = FX_ + affine._dx; \
ny = FY_ + affine._dy; \
break; \
case TxScale: \
nx = affine._m11 * FX_ + affine._dx; \
ny = affine._m22 * FY_ + affine._dy; \
break; \
case TxRotate: \
case TxShear: \
nx = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; \
ny = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; \
break; \
case TxProject: \
qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); \
if (w < qreal(Q_NEAR_CLIP)) w = qreal(Q_NEAR_CLIP); \
w = 1./w; \
nx = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx * w; \
ny = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy * w; \
break; \
} \
} while (0)

/*!
Expand Down Expand Up @@ -1128,14 +1128,14 @@ QPoint QTransform::map(const QPoint &p) const
break;
case TxRotate:
case TxShear:
case TxProject:
x = affine._m11 * fx + affine._m21 * fy + affine._dx;
y = affine._m12 * fx + affine._m22 * fy + affine._dy;
if (t == TxProject) {
qreal w = 1./(m_13 * fx + m_23 * fy + m_33);
x *= w;
y *= w;
}
break;
case TxProject:
qreal w = 1./(m_13 * fx + m_23 * fy + m_33);
x = affine._m11 * fx + affine._m21 * fy + affine._dx * w;
y = affine._m12 * fx + affine._m22 * fy + affine._dy * w;
break;
}
return QPoint(qRound(x), qRound(y));
}
Expand Down Expand Up @@ -1179,14 +1179,14 @@ QPointF QTransform::map(const QPointF &p) const
break;
case TxRotate:
case TxShear:
case TxProject:
x = affine._m11 * fx + affine._m21 * fy + affine._dx;
y = affine._m12 * fx + affine._m22 * fy + affine._dy;
if (t == TxProject) {
qreal w = 1./(m_13 * fx + m_23 * fy + m_33);
x *= w;
y *= w;
}
break;
case TxProject:
qreal w = 1./(m_13 * fx + m_23 * fy + m_33);
x = affine._m11 * fx + affine._m21 * fy + affine._dx * w;
y = affine._m12 * fx + affine._m22 * fy + affine._dy * w;
break;
}
return QPointF(x, y);
}
Expand Down Expand Up @@ -1256,19 +1256,19 @@ QLine QTransform::map(const QLine &l) const
break;
case TxRotate:
case TxShear:
case TxProject:
x1 = affine._m11 * fx1 + affine._m21 * fy1 + affine._dx;
y1 = affine._m12 * fx1 + affine._m22 * fy1 + affine._dy;
x2 = affine._m11 * fx2 + affine._m21 * fy2 + affine._dx;
y2 = affine._m12 * fx2 + affine._m22 * fy2 + affine._dy;
if (t == TxProject) {
qreal w = 1./(m_13 * fx1 + m_23 * fy1 + m_33);
x1 *= w;
y1 *= w;
w = 1./(m_13 * fx2 + m_23 * fy2 + m_33);
x2 *= w;
y2 *= w;
}
break;
case TxProject:
qreal w = 1./(m_13 * fx1 + m_23 * fy1 + m_33);
x1 = affine._m11 * fx1 + affine._m21 * fy1 + affine._dx * w;
y1 = affine._m12 * fx1 + affine._m22 * fy1 + affine._dy * w;
w = 1./(m_13 * fx2 + m_23 * fy2 + m_33);
x2 = affine._m11 * fx2 + affine._m21 * fy2 + affine._dx * w;
y2 = affine._m12 * fx2 + affine._m22 * fy2 + affine._dy * w;
break;
}
return QLine(qRound(x1), qRound(y1), qRound(x2), qRound(y2));
}
Expand Down Expand Up @@ -1315,19 +1315,19 @@ QLineF QTransform::map(const QLineF &l) const
break;
case TxRotate:
case TxShear:
case TxProject:
x1 = affine._m11 * fx1 + affine._m21 * fy1 + affine._dx;
y1 = affine._m12 * fx1 + affine._m22 * fy1 + affine._dy;
x2 = affine._m11 * fx2 + affine._m21 * fy2 + affine._dx;
y2 = affine._m12 * fx2 + affine._m22 * fy2 + affine._dy;
if (t == TxProject) {
qreal w = 1./(m_13 * fx1 + m_23 * fy1 + m_33);
x1 *= w;
y1 *= w;
w = 1./(m_13 * fx2 + m_23 * fy2 + m_33);
x2 *= w;
y2 *= w;
}
break;
case TxProject:
qreal w = 1./(m_13 * fx1 + m_23 * fy1 + m_33);
x1 = affine._m11 * fx1 + affine._m21 * fy1 + affine._dx * w;
y1 = affine._m12 * fx1 + affine._m22 * fy1 + affine._dy * w;
w = 1./(m_13 * fx2 + m_23 * fy2 + m_33);
x2 = affine._m11 * fx2 + affine._m21 * fy2 + affine._dx * w;
y2 = affine._m12 * fx2 + affine._m22 * fy2 + affine._dy * w;
break;
}
return QLineF(x1, y1, x2, y2);
}
Expand Down

0 comments on commit b2a2032

Please sign in to comment.