diff options
author | Laszlo Agocs <laszlo.agocs@digia.com> | 2014-10-16 13:35:33 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@digia.com> | 2014-10-16 14:41:19 +0200 |
commit | 0ff3e7d155967e6a0ffe7836d9fc133ca08e2302 (patch) | |
tree | 66ed83744da448098209ef46113b237d353e8ce1 /examples/opengl/hellowindow/main.cpp | |
parent | 57015838916ed15805e00283ef522fa179c76b04 (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.cpp | 18 |
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); |