Add simple palette to tst_QWidget

When a widget's palette has different active / inactive colors,
multiple paint events can occur. This makes tst_QWidget functions fail
when they expect a spcific amount of paint events and the platform
theme provides a palette with active / inactive differences.

This patch adds a function to populate test widgets with a simple
palette, to prevent multiple paint events.

Change-Id: If9b2faedcc5ca87ba24991cedd5e4ac927b02644
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 1576f827214cca8a2233f3c81e7d0e3d89eb8007)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Axel Spoerl 2022-11-25 11:15:26 +01:00 committed by Qt Cherry-pick Bot
parent 9f1d4b2e52
commit 08f754d923

View File

@ -437,6 +437,7 @@ private:
const bool m_windowsAnimationsEnabled;
QPointingDevice *m_touchScreen;
const int m_fuzz;
QPalette simplePalette();
};
// Testing get/set functions
@ -4520,6 +4521,7 @@ void tst_QWidget::optimizedResizeMove()
if (m_platform == QStringLiteral("wayland"))
QSKIP("Wayland: This fails. Figure out why.");
QWidget parent;
parent.setPalette(simplePalette());
parent.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
parent.resize(400, 400);
@ -4604,6 +4606,7 @@ void tst_QWidget::optimizedResize_topLevel()
if (QHighDpiScaling::isActive())
QSKIP("Skip due to rounding errors in the regions.");
StaticWidget topLevel;
topLevel.setPalette(simplePalette());
topLevel.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
topLevel.gotPaintEvent = false;
topLevel.show();
@ -5215,6 +5218,7 @@ void tst_QWidget::update()
Q_CHECK_PAINTEVENTS
UpdateWidget w;
w.setPalette(simplePalette());
w.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
w.resize(100, 100);
centerOnScreen(&w);
@ -5228,6 +5232,7 @@ void tst_QWidget::update()
w.reset();
UpdateWidget child(&w);
child.setPalette(simplePalette());
child.setGeometry(10, 10, 80, 80);
child.show();
@ -5299,6 +5304,7 @@ void tst_QWidget::update()
// overlapping sibling
UpdateWidget sibling(&w);
sibling.setPalette(simplePalette());
child.setGeometry(10, 10, 20, 20);
sibling.setGeometry(15, 15, 20, 20);
sibling.show();
@ -5378,9 +5384,11 @@ void tst_QWidget::isOpaque()
{
#ifndef Q_OS_MACOS
QWidget w;
w.setPalette(simplePalette());
QVERIFY(::isOpaque(&w));
QWidget child(&w);
child.setPalette(simplePalette());
QVERIFY(!::isOpaque(&child));
child.setAutoFillBackground(true);
@ -5462,6 +5470,7 @@ void tst_QWidget::scroll()
const int h = qMin(500, screen->availableGeometry().height() / 2);
UpdateWidget updateWidget;
updateWidget.setPalette(simplePalette());
updateWidget.resize(w, h);
updateWidget.reset();
updateWidget.move(m_availableTopLeft);
@ -8563,6 +8572,7 @@ void tst_QWidget::updateWhileMinimized()
QSKIP("Platform does not support showMinimized()");
#endif
UpdateWidget widget;
widget.setPalette(simplePalette());
widget.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
// Filter out activation change and focus events to avoid update() calls in QWidget.
widget.updateOnActivationChangeAndFocusIn = false;
@ -9136,6 +9146,7 @@ void tst_QWidget::doubleRepaint()
QSKIP("Not having window server access causes the wrong number of repaints to be issues");
#endif
UpdateWidget widget;
widget.setPalette(simplePalette());
widget.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
centerOnScreen(&widget);
widget.setFocusPolicy(Qt::StrongFocus);
@ -9167,6 +9178,7 @@ void tst_QWidget::resizeInPaintEvent()
QWidget window;
window.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
UpdateWidget widget(&window);
widget.setPalette(simplePalette());
window.resize(200, 200);
window.show();
QApplication::setActiveWindow(&window);
@ -9298,6 +9310,7 @@ public slots:
void tst_QWidget::setMaskInResizeEvent()
{
UpdateWidget w;
w.setPalette(simplePalette());
w.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
w.reset();
w.resize(200, 200);
@ -9377,6 +9390,7 @@ void tst_QWidget::immediateRepaintAfterInvalidateBackingStore()
QSKIP("We don't support immediate repaint right after show on other platforms.");
QScopedPointer<UpdateWidget> widget(new UpdateWidget);
widget->setPalette(simplePalette());
widget->setWindowTitle(QLatin1String(QTest::currentTestFunction()));
centerOnScreen(widget.data());
widget->show();
@ -9828,6 +9842,7 @@ void tst_QWidget::setClearAndResizeMask()
QSKIP("Wayland: This fails. Figure out why.");
UpdateWidget topLevel;
topLevel.setPalette(simplePalette());
topLevel.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
topLevel.resize(160, 160);
centerOnScreen(&topLevel);
@ -9862,6 +9877,7 @@ void tst_QWidget::setClearAndResizeMask()
}
UpdateWidget child(&topLevel);
child.setPalette(simplePalette());
child.setAutoFillBackground(true); // NB! Opaque child.
child.setPalette(Qt::red);
child.resize(100, 100);
@ -10662,6 +10678,7 @@ void tst_QWidget::focusWidget_task254563()
void tst_QWidget::destroyBackingStore()
{
UpdateWidget w;
w.setPalette(simplePalette());
w.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
centerOnScreen(&w);
w.reset();
@ -12368,6 +12385,7 @@ void tst_QWidget::resizeStaticContentsChildWidget_QTBUG35282()
widget.resize(200,200);
UpdateWidget childWidget(&widget);
childWidget.setPalette(simplePalette());
childWidget.setAttribute(Qt::WA_StaticContents);
childWidget.setAttribute(Qt::WA_OpaquePaintEvent);
childWidget.setGeometry(250, 250, 500, 500);
@ -12964,6 +12982,35 @@ void tst_QWidget::activateWhileModalHidden()
QCOMPARE(QApplication::activeWindow(), &window);
}
// Create a simple palette to prevent multiple paint events
QPalette tst_QWidget::simplePalette()
{
static QPalette simplePalette = []{
const QColor windowText = Qt::black;
const QColor backGround = QColor(239, 239, 239);
const QColor light = backGround.lighter(150);
const QColor mid = (backGround.darker(130));
const QColor midLight = mid.lighter(110);
const QColor base = Qt::white;
const QColor dark = backGround.darker(150);
const QColor text = Qt::black;
const QColor highlight = QColor(48, 140, 198);
const QColor hightlightedText = Qt::white;
const QColor button = backGround;
const QColor shadow = dark.darker(135);
QPalette defaultPalette(windowText, backGround, light, dark, mid, text, base);
defaultPalette.setBrush(QPalette::Midlight, midLight);
defaultPalette.setBrush(QPalette::Button, button);
defaultPalette.setBrush(QPalette::Shadow, shadow);
defaultPalette.setBrush(QPalette::HighlightedText, hightlightedText);
defaultPalette.setBrush(QPalette::Active, QPalette::Highlight, highlight);
return defaultPalette;
}();
return simplePalette;
}
#ifdef Q_OS_ANDROID
void tst_QWidget::showFullscreenAndroid()
{