mirror of
https://bitbucket.org/smil3y/katie.git
synced 2025-02-25 11:22:58 +00:00
fix QTransform regression since b2a2032ea0
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
f03d910da3
commit
5ce921f356
1 changed files with 46 additions and 35 deletions
|
@ -63,12 +63,13 @@ QT_BEGIN_NAMESPACE
|
||||||
ny = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; \
|
ny = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; \
|
||||||
break; \
|
break; \
|
||||||
case TxProject: \
|
case TxProject: \
|
||||||
|
nx = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx; \
|
||||||
|
ny = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy; \
|
||||||
qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); \
|
qreal w = (m_13 * FX_ + m_23 * FY_ + m_33); \
|
||||||
if (w < Q_NEAR_CLIP) w = Q_NEAR_CLIP; \
|
if (w < qreal(Q_NEAR_CLIP)) w = qreal(Q_NEAR_CLIP); \
|
||||||
w = 1./w; \
|
w = 1./w; \
|
||||||
nx = affine._m11 * FX_ + affine._m21 * FY_ + affine._dx * w; \
|
nx *= w; \
|
||||||
ny = affine._m12 * FX_ + affine._m22 * FY_ + affine._dy * w; \
|
ny *= w; \
|
||||||
break; \
|
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
@ -1122,9 +1123,11 @@ QPoint QTransform::map(const QPoint &p) const
|
||||||
y = affine._m12 * fx + affine._m22 * fy + affine._dy;
|
y = affine._m12 * fx + affine._m22 * fy + affine._dy;
|
||||||
break;
|
break;
|
||||||
case TxProject:
|
case TxProject:
|
||||||
|
x = affine._m11 * fx + affine._m21 * fy + affine._dx;
|
||||||
|
y = affine._m12 * fx + affine._m22 * fy + affine._dy;
|
||||||
qreal w = 1./(m_13 * fx + m_23 * fy + m_33);
|
qreal w = 1./(m_13 * fx + m_23 * fy + m_33);
|
||||||
x = affine._m11 * fx + affine._m21 * fy + affine._dx * w;
|
x *= w;
|
||||||
y = affine._m12 * fx + affine._m22 * fy + affine._dy * w;
|
y *= w;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return QPoint(qRound(x), qRound(y));
|
return QPoint(qRound(x), qRound(y));
|
||||||
|
@ -1173,9 +1176,11 @@ QPointF QTransform::map(const QPointF &p) const
|
||||||
y = affine._m12 * fx + affine._m22 * fy + affine._dy;
|
y = affine._m12 * fx + affine._m22 * fy + affine._dy;
|
||||||
break;
|
break;
|
||||||
case TxProject:
|
case TxProject:
|
||||||
|
x = affine._m11 * fx + affine._m21 * fy + affine._dx;
|
||||||
|
y = affine._m12 * fx + affine._m22 * fy + affine._dy;
|
||||||
qreal w = 1./(m_13 * fx + m_23 * fy + m_33);
|
qreal w = 1./(m_13 * fx + m_23 * fy + m_33);
|
||||||
x = affine._m11 * fx + affine._m21 * fy + affine._dx * w;
|
x *= w;
|
||||||
y = affine._m12 * fx + affine._m22 * fy + affine._dy * w;
|
y *= w;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return QPointF(x, y);
|
return QPointF(x, y);
|
||||||
|
@ -1252,12 +1257,16 @@ QLine QTransform::map(const QLine &l) const
|
||||||
y2 = affine._m12 * fx2 + affine._m22 * fy2 + affine._dy;
|
y2 = affine._m12 * fx2 + affine._m22 * fy2 + affine._dy;
|
||||||
break;
|
break;
|
||||||
case TxProject:
|
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;
|
||||||
qreal w = 1./(m_13 * fx1 + m_23 * fy1 + m_33);
|
qreal w = 1./(m_13 * fx1 + m_23 * fy1 + m_33);
|
||||||
x1 = affine._m11 * fx1 + affine._m21 * fy1 + affine._dx * w;
|
x1 *= w;
|
||||||
y1 = affine._m12 * fx1 + affine._m22 * fy1 + affine._dy * w;
|
y1 *= w;
|
||||||
w = 1./(m_13 * fx2 + m_23 * fy2 + m_33);
|
w = 1./(m_13 * fx2 + m_23 * fy2 + m_33);
|
||||||
x2 = affine._m11 * fx2 + affine._m21 * fy2 + affine._dx * w;
|
x2 *= w;
|
||||||
y2 = affine._m12 * fx2 + affine._m22 * fy2 + affine._dy * w;
|
y2 *= w;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return QLine(qRound(x1), qRound(y1), qRound(x2), qRound(y2));
|
return QLine(qRound(x1), qRound(y1), qRound(x2), qRound(y2));
|
||||||
|
@ -1265,9 +1274,7 @@ QLine QTransform::map(const QLine &l) const
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\overload
|
\overload
|
||||||
|
|
||||||
\fn QLineF QTransform::map(const QLineF &line) const
|
\fn QLineF QTransform::map(const QLineF &line) const
|
||||||
|
|
||||||
Creates and returns a QLine object that is a copy of the given \a
|
Creates and returns a QLine object that is a copy of the given \a
|
||||||
line, mapped into the coordinate system defined by this matrix.
|
line, mapped into the coordinate system defined by this matrix.
|
||||||
Note that the transformed coordinates are rounded to the nearest
|
Note that the transformed coordinates are rounded to the nearest
|
||||||
|
@ -1311,12 +1318,16 @@ QLineF QTransform::map(const QLineF &l) const
|
||||||
y2 = affine._m12 * fx2 + affine._m22 * fy2 + affine._dy;
|
y2 = affine._m12 * fx2 + affine._m22 * fy2 + affine._dy;
|
||||||
break;
|
break;
|
||||||
case TxProject:
|
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;
|
||||||
qreal w = 1./(m_13 * fx1 + m_23 * fy1 + m_33);
|
qreal w = 1./(m_13 * fx1 + m_23 * fy1 + m_33);
|
||||||
x1 = affine._m11 * fx1 + affine._m21 * fy1 + affine._dx * w;
|
x1 *= w;
|
||||||
y1 = affine._m12 * fx1 + affine._m22 * fy1 + affine._dy * w;
|
y1 *= w;
|
||||||
w = 1./(m_13 * fx2 + m_23 * fy2 + m_33);
|
w = 1./(m_13 * fx2 + m_23 * fy2 + m_33);
|
||||||
x2 = affine._m11 * fx2 + affine._m21 * fy2 + affine._dx * w;
|
x2 *= w;
|
||||||
y2 = affine._m12 * fx2 + affine._m22 * fy2 + affine._dy * w;
|
y2 *= w;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return QLineF(x1, y1, x2, y2);
|
return QLineF(x1, y1, x2, y2);
|
||||||
|
|
Loading…
Add table
Reference in a new issue