summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2018-09-10 09:11:00 +0200
committerLiang Qi <liang.qi@qt.io>2018-09-10 12:12:46 +0200
commit683e144efbd91163795dc582aedc210c7d78de4d (patch)
tree2211fffdbaad8bad9569f63e017e7caf85eec2b6 /tests/auto
parentb66357e3ebf3e3dbda04f880e87184e247882843 (diff)
parent1f1e2aa57b480f0b227e11d0cff0b3cfcffb1f39 (diff)
Merge remote-tracking branch 'origin/5.11' into 5.12
Conflicts: mkspecs/common/macx.conf Change-Id: I8576493b417912fa5e5501bc2c1b935d186ac209
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
index db125f6644..21c9f41646 100644
--- a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
+++ b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
@@ -30,6 +30,7 @@
#include <QtGui/QOpenGLFunctions>
#include <QtGui/QPainter>
#include <QtGui/QScreen>
+#include <QtGui/QStaticText>
#include <QtWidgets/QDesktopWidget>
#include <QtWidgets/QGraphicsView>
#include <QtWidgets/QGraphicsScene>
@@ -40,6 +41,8 @@
#include <QtTest/QtTest>
#include <QSignalSpy>
#include <private/qguiapplication_p.h>
+#include <private/qstatictext_p.h>
+#include <private/qopengltextureglyphcache_p.h>
#include <qpa/qplatformintegration.h>
class tst_QOpenGLWidget : public QObject
@@ -64,6 +67,10 @@ private slots:
void stackWidgetOpaqueChildIsVisible();
void offscreen();
void offscreenThenOnscreen();
+
+#ifdef QT_BUILD_INTERNAL
+ void staticTextDanglingPointer();
+#endif
};
void tst_QOpenGLWidget::initTestCase()
@@ -675,6 +682,53 @@ void tst_QOpenGLWidget::offscreenThenOnscreen()
QVERIFY(image.pixel(30, 40) == qRgb(0, 0, 255));
}
+class StaticTextPainterWidget : public QOpenGLWidget
+{
+public:
+ StaticTextPainterWidget(QWidget *parent = nullptr)
+ : QOpenGLWidget(parent)
+ {
+ }
+
+ void paintEvent(QPaintEvent *)
+ {
+ QPainter p(this);
+ text.setText(QStringLiteral("test"));
+ p.drawStaticText(0, 0, text);
+
+ ctx = QOpenGLContext::currentContext();
+ }
+
+ QStaticText text;
+ QOpenGLContext *ctx;
+};
+
+#ifdef QT_BUILD_INTERNAL
+void tst_QOpenGLWidget::staticTextDanglingPointer()
+{
+ QWidget w;
+ StaticTextPainterWidget *glw = new StaticTextPainterWidget(&w);
+ w.resize(640, 480);
+ glw->resize(320, 200);
+ w.show();
+
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+ QStaticTextPrivate *d = QStaticTextPrivate::get(&glw->text);
+
+ QCOMPARE(d->itemCount, 1);
+ QFontEngine *fe = d->items->fontEngine();
+
+ for (int i = QFontEngine::Format_None; i <= QFontEngine::Format_ARGB; ++i) {
+ QOpenGLTextureGlyphCache *cache =
+ (QOpenGLTextureGlyphCache *) fe->glyphCache(glw->ctx,
+ QFontEngine::GlyphFormat(i),
+ QTransform());
+ if (cache != nullptr)
+ QCOMPARE(cache->paintEnginePrivate(), nullptr);
+ }
+}
+#endif
+
QTEST_MAIN(tst_QOpenGLWidget)
#include "tst_qopenglwidget.moc"