QPainterPath: fix handling of fill rules
fillRule() contained a major blunder: instead of checking if the d-pointer was allocated, and return a default value if it wasn't, it checked whether the path contained any points. This means that QPainterPath p; p.setFillRule(x); Q_ASSERT(p.fillRule() == x); was failing. As a drive-by to test this change, fix another mistake in clear(): clear is documented to clear the elements in a path, but instead it also changed the fill rule. This commit partially reverses 697910e5fbd382e78bc1bcbac3f5824aded059b4. Change-Id: Ieb8145694b672439c3380d9ccb87d1206a2dd115 Done-with: Milian Wolff Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io> (cherry picked from commit 0b4ccbf81ee2009051169f2f0918442b56512b20) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
9d1b1c71b2
commit
9c12d8e8f7
@ -1369,7 +1369,7 @@ void QPainterPath::addRegion(const QRegion ®ion)
|
|||||||
*/
|
*/
|
||||||
Qt::FillRule QPainterPath::fillRule() const
|
Qt::FillRule QPainterPath::fillRule() const
|
||||||
{
|
{
|
||||||
return isEmpty() ? Qt::OddEvenFill : d_func()->fillRule;
|
return !d_func() ? Qt::OddEvenFill : d_func()->fillRule;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -292,7 +292,6 @@ inline void QPainterPathPrivate::clear()
|
|||||||
elements.clear();
|
elements.clear();
|
||||||
|
|
||||||
cStart = 0;
|
cStart = 0;
|
||||||
fillRule = Qt::OddEvenFill;
|
|
||||||
bounds = {};
|
bounds = {};
|
||||||
controlBounds = {};
|
controlBounds = {};
|
||||||
|
|
||||||
|
@ -173,8 +173,18 @@ void tst_QPainterPath::clear()
|
|||||||
p1.setFillRule(Qt::WindingFill);
|
p1.setFillRule(Qt::WindingFill);
|
||||||
QVERIFY(p1 != p3);
|
QVERIFY(p1 != p3);
|
||||||
p1.clear();
|
p1.clear();
|
||||||
QCOMPARE(p1.fillRule(), Qt::OddEvenFill);
|
QVERIFY(p1 != p3);
|
||||||
|
p1.setFillRule(Qt::OddEvenFill);
|
||||||
QCOMPARE(p1, p2);
|
QCOMPARE(p1, p2);
|
||||||
|
|
||||||
|
QPainterPath p4;
|
||||||
|
QCOMPARE(p4.fillRule(), Qt::OddEvenFill);
|
||||||
|
p4.setFillRule(Qt::WindingFill);
|
||||||
|
QCOMPARE(p4.fillRule(), Qt::WindingFill);
|
||||||
|
p4.clear();
|
||||||
|
QCOMPARE(p4.fillRule(), Qt::WindingFill);
|
||||||
|
p4 = QPainterPath();
|
||||||
|
QCOMPARE(p4.fillRule(), Qt::OddEvenFill);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QPainterPath::reserveAndCapacity()
|
void tst_QPainterPath::reserveAndCapacity()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user