Revert "QWidgetEffectSourcePrivate::draw(): Call render() when no shared painter exists"

The change causes drawing artifacts in Qt Creator.

This reverts commit 8b1377fde1.

Task-number: QTCREATORBUG-18322
Task-number: QTBUG-60231
Change-Id: Ic05507b0c23ea612fa5a9b92163380059b6e710d
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
This commit is contained in:
Friedemann Kleint 2017-06-14 14:39:16 +02:00
parent b598cd0483
commit bd263452cd
2 changed files with 1 additions and 22 deletions

View File

@ -5860,7 +5860,7 @@ QRectF QWidgetEffectSourcePrivate::boundingRect(Qt::CoordinateSystem system) con
void QWidgetEffectSourcePrivate::draw(QPainter *painter)
{
if (!context || context->painter != painter || !context->sharedPainter) {
if (!context || context->painter != painter) {
m_widget->render(painter);
return;
}

View File

@ -52,7 +52,6 @@ private slots:
void boundingRect2();
void draw();
void opacity();
void nestedOpaqueOpacity();
void grayscale();
void colorize();
void drawPixmapItem();
@ -408,26 +407,6 @@ void tst_QGraphicsEffect::opacity()
QCOMPARE(effect->m_opacity, qreal(0.5));
}
void tst_QGraphicsEffect::nestedOpaqueOpacity()
{
// QTBUG-60231: Nesting widgets with a QGraphicsEffect on a toplevel with
// QGraphicsOpacityEffect caused crashes due to constructing several
// QPainter instances on a device in the fast path for
// QGraphicsOpacityEffect::opacity=1
QWidget topLevel;
topLevel.setWindowTitle(QTest::currentTestFunction());
topLevel.resize(QApplication::desktop()->screenGeometry(&topLevel).size() / 8);
QGraphicsOpacityEffect *opacityEffect = new QGraphicsOpacityEffect;
opacityEffect->setOpacity(1);
topLevel.setGraphicsEffect(opacityEffect);
QWidget *child = new QWidget(&topLevel);
child->resize(topLevel.size() / 2);
QGraphicsDropShadowEffect *childEffect = new QGraphicsDropShadowEffect;
child->setGraphicsEffect(childEffect);
topLevel.show();
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
}
void tst_QGraphicsEffect::grayscale()
{
if (qApp->desktop()->depth() < 24)