Skip to content

Commit

Permalink
Revert "Set sharedPainter correctly for QGraphicsEffect"
Browse files Browse the repository at this point in the history
This reverts commit 7257862.

It has been reported that this patch causes widgets with certain effects
become invisible.

Task-number: QTBUG-60231
Task-number: QTBUG-66803
Task-number: QTBUG-66387
Change-Id: I9c3c4cf2f17ac639d1aee5489b665aa1e165af16
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
(cherry picked from commit 00304eac7b1ddd22b971da78aa84c86fe2919359)
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
  • Loading branch information
alpqr authored and jaheikk committed Mar 20, 2018
1 parent 38b20a4 commit 3ec397f
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 23 deletions.
4 changes: 2 additions & 2 deletions src/widgets/kernel/qwidget.cpp
Expand Up @@ -5520,11 +5520,11 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP
setSystemClip(pdev, rgn.translated(offset));
QPainter p(pdev);
p.translate(offset);
context.painter = context.sharedPainter = &p;
context.painter = &p;
graphicsEffect->draw(&p);
setSystemClip(pdev, QRegion());
} else {
context.painter = context.sharedPainter = sharedPainter;
context.painter = sharedPainter;
if (sharedPainter->worldTransform() != sourced->lastEffectTransform) {
sourced->invalidateCache();
sourced->lastEffectTransform = sharedPainter->worldTransform();
Expand Down
21 changes: 0 additions & 21 deletions tests/auto/widgets/effects/qgraphicseffect/tst_qgraphicseffect.cpp
Expand Up @@ -52,7 +52,6 @@ private slots:
void boundingRect2();
void draw();
void opacity();
void nestedOpaqueOpacity();
void grayscale();
void colorize();
void drawPixmapItem();
Expand Down Expand Up @@ -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(320, 200);
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)
Expand Down

0 comments on commit 3ec397f

Please sign in to comment.