QWidgetEffectSourcePrivate::draw(): Call render() when no shared painter exists
Task-number: QTBUG-60231 Change-Id: If07274a01bb9a4b9323865a3e061b3674507fd5b Reviewed-by: Andy Shaw <andy.shaw@qt.io> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>bb10
parent
b418c76396
commit
8b1377fde1
|
|
@ -5858,7 +5858,7 @@ QRectF QWidgetEffectSourcePrivate::boundingRect(Qt::CoordinateSystem system) con
|
|||
|
||||
void QWidgetEffectSourcePrivate::draw(QPainter *painter)
|
||||
{
|
||||
if (!context || context->painter != painter) {
|
||||
if (!context || context->painter != painter || !context->sharedPainter) {
|
||||
m_widget->render(painter);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ private slots:
|
|||
void boundingRect2();
|
||||
void draw();
|
||||
void opacity();
|
||||
void nestedOpaqueOpacity();
|
||||
void grayscale();
|
||||
void colorize();
|
||||
void drawPixmapItem();
|
||||
|
|
@ -407,6 +408,26 @@ 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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue