summaryrefslogtreecommitdiffstats
path: root/examples/opengl/hellowindow/main.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@digia.com>2014-10-16 13:35:33 +0200
committerLaszlo Agocs <laszlo.agocs@digia.com>2014-10-16 14:41:19 +0200
commit0ff3e7d155967e6a0ffe7836d9fc133ca08e2302 (patch)
tree66ed83744da448098209ef46113b237d353e8ce1 /examples/opengl/hellowindow/main.cpp
parent57015838916ed15805e00283ef522fa179c76b04 (diff)
Make hellowindow multi display capable on embedded
Platforms like eglfs allow a single window per screen. Thus the behavior of --multiple is not suitable since it tries to open multiple windows on the primary screen. Instead, introduce --multiscreen. Add also --timeout to quit the app after 10 seconds. This is essential on platforms that do not have windows with decorations that can be used to close windows. With eglfs' kms/drm hooks, starting with --multiscreen will now show a rotating logo on all connected displays, with some random background color. Change-Id: I53f2651f05620e752c289038a9b3ff4508273173 Reviewed-by: Louai Al-Khanji <louai.al-khanji@digia.com> Reviewed-by: Andy Nichols <andy.nichols@digia.com>
Diffstat (limited to 'examples/opengl/hellowindow/main.cpp')
-rw-r--r--examples/opengl/hellowindow/main.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/examples/opengl/hellowindow/main.cpp b/examples/opengl/hellowindow/main.cpp
index 62b6bfca3f..e7ad9722c2 100644
--- a/examples/opengl/hellowindow/main.cpp
+++ b/examples/opengl/hellowindow/main.cpp
@@ -50,7 +50,9 @@ int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
+ // Some platforms can only have one window per screen. Therefore we need to differentiate.
const bool multipleWindows = QGuiApplication::arguments().contains(QStringLiteral("--multiple"));
+ const bool multipleScreens = QGuiApplication::arguments().contains(QStringLiteral("--multiscreen"));
QScreen *screen = QGuiApplication::primaryScreen();
@@ -93,12 +95,13 @@ int main(int argc, char *argv[])
windowC->setTitle(QStringLiteral("Thread B - Context B"));
windowC->setVisible(true);
windows.prepend(windowC);
-
+ }
+ if (multipleScreens) {
for (int i = 1; i < QGuiApplication::screens().size(); ++i) {
QScreen *screen = QGuiApplication::screens().at(i);
QSharedPointer<Renderer> renderer(new Renderer(format, rendererA.data(), screen));
- renderThread = new QThread;
+ QThread *renderThread = new QThread;
renderer->moveToThread(renderThread);
renderThreads.prepend(renderThread);
@@ -107,8 +110,7 @@ int main(int argc, char *argv[])
QSize windowSize = screenGeometry.size() * 0.8;
- HelloWindow *window = new HelloWindow(renderer);
- window->setScreen(screen);
+ HelloWindow *window = new HelloWindow(renderer, screen);
window->setGeometry(QRect(center, windowSize).translated(-windowSize.width() / 2, -windowSize.height() / 2));
QChar id = QChar('B' + i);
@@ -123,10 +125,16 @@ int main(int argc, char *argv[])
renderThreads.at(i)->start();
}
+ // Quit after 10 seconds. For platforms that do not have windows that are closeable.
+ if (QCoreApplication::arguments().contains(QStringLiteral("--timeout")))
+ QTimer::singleShot(10000, qGuiApp, SLOT(quit()));
+
const int exitValue = app.exec();
- for (int i = 0; i < renderThreads.size(); ++i)
+ for (int i = 0; i < renderThreads.size(); ++i) {
+ renderThreads.at(i)->quit(); // some platforms may not have windows to close so ensure quit()
renderThreads.at(i)->wait();
+ }
qDeleteAll(windows);
qDeleteAll(renderThreads);