diff options
author | Gareth Stockwell <ext-gareth.stockwell@nokia.com> | 2011-08-31 14:52:25 (GMT) |
---|---|---|
committer | Gareth Stockwell <ext-gareth.stockwell@nokia.com> | 2011-09-27 09:06:10 (GMT) |
commit | 24855ef3983fa5d87b3e3a06fe891a769e670ae5 (patch) | |
tree | dff8907bb32b5c078f88d0af315b109c4cab1e23 /tests/auto | |
parent | e90cffc2c5f313cc813d0a21a1d9d0afe8d0ea7a (diff) | |
download | Qt-24855ef3983fa5d87b3e3a06fe891a769e670ae5.zip Qt-24855ef3983fa5d87b3e3a06fe891a769e670ae5.tar.gz Qt-24855ef3983fa5d87b3e3a06fe891a769e670ae5.tar.bz2 |
Always recreate backing store when TLW transparency changes
When using either the opengl or openvg graphics system on Symbian,
if a TLW is made transparent, the widget switches to using raster
rendering, because EGL surface transparency is currently not
supported by the platform.
This patch enables the reverse to occur: when the widget is
subsequently made opaque, rendering switches back to using GL/VG.
Task-number: QTBUG-21211
Reviewed-by: Jani Hautakangas
Reviewed-by: Laszlo Agocs
Reviewed-by: Sami Merila
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/qwidget/tst_qwidget.cpp | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index 43dd077..2161f99 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -397,6 +397,9 @@ private slots: void minimizedWindowModeTransitions(); void normalWindowModeTransitions(); void focusSwitchClosesPopupMenu(); +#if !defined(Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE) + void opacityChangeCausesBackingStoreRecreation(); +#endif #endif void focusProxyAndInputMethods(); @@ -10336,7 +10339,47 @@ void tst_QWidget::focusSwitchClosesPopupMenu() mainWindow.activateWindow(); QVERIFY(!CEikonEnv::Static()->AppUiFactory()->MenuBar()->IsDisplayed()); } -#endif + +#if !defined(Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE) +class OpacityChangeWidget : public QWidget +{ +public: + OpacityChangeWidget() : m_paintEngineType(QPaintEngine::MaxUser) { } + void paintEvent(QPaintEvent *) + { + QPainter painter(this); + m_paintEngineType = painter.paintEngine()->type(); + } + QPaintEngine::Type paintEngineType() const { return m_paintEngineType; } +private: + QPaintEngine::Type m_paintEngineType; +}; + +void tst_QWidget::opacityChangeCausesBackingStoreRecreation() +{ + OpacityChangeWidget w; + w.show(); + QTest::qWaitForWindowShown(&w); + const QPaintEngine::Type type = w.paintEngineType(); + if (QPaintEngine::OpenGL != type && QPaintEngine::OpenVG != type) { + QSKIP("Test case is only valid when using opengl or openvg graphics system", SkipAll); + } else { + if (QApplicationPrivate::instance()->useTranslucentEGLSurfaces) { + QSKIP("Test case is only valid when EGL surface transparency is not supported", SkipAll); + } else { + // Making window transparent should force switch to raster graphics system + w.setAttribute(Qt::WA_TranslucentBackground, true); + w.repaint(); + QCOMPARE(w.paintEngineType(), QPaintEngine::Raster); + // Making window opaque should cause switch back to previous graphics system + w.setAttribute(Qt::WA_TranslucentBackground, false); + w.repaint(); + QCOMPARE(w.paintEngineType(), type); + } + } +} +#endif // !Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE +#endif // Q_OS_SYMBIAN class InputContextTester : public QInputContext { |