multiwindow: Make it easier to test 1-N windows
Changes the --extrawindows option to --numwindows with a default of 3, and layouts all windows in rows and columns so that they are all exposed at startup. Change-Id: I5e8d63a14b778bcddc2fee3bf7e78d6664532b5b Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
parent
10fe509123
commit
c1804bb5c1
@ -38,6 +38,7 @@
|
|||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QElapsedTimer>
|
#include <QElapsedTimer>
|
||||||
#include <QCommandLineParser>
|
#include <QCommandLineParser>
|
||||||
|
#include <QScreen>
|
||||||
|
|
||||||
const char applicationDescription[] = "\n\
|
const char applicationDescription[] = "\n\
|
||||||
This application opens multiple windows and continuously schedules updates for\n\
|
This application opens multiple windows and continuously schedules updates for\n\
|
||||||
@ -143,8 +144,8 @@ int main(int argc, char **argv)
|
|||||||
"by setting swap interval to 1 for the first window and 0 for the others.");
|
"by setting swap interval to 1 for the first window and 0 for the others.");
|
||||||
parser.addOption(vsyncOneOption);
|
parser.addOption(vsyncOneOption);
|
||||||
|
|
||||||
QCommandLineOption extraWindowsOption("extrawindows", "Open <N> windows in addition to the default 3.", "N", "0");
|
QCommandLineOption numWindowsOption("numwindows", "Open <N> windows instead of the default 3.", "N", "3");
|
||||||
parser.addOption(extraWindowsOption);
|
parser.addOption(numWindowsOption);
|
||||||
|
|
||||||
parser.process(app);
|
parser.process(app);
|
||||||
|
|
||||||
@ -157,35 +158,40 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
QSurfaceFormat::setDefaultFormat(fmt);
|
QSurfaceFormat::setDefaultFormat(fmt);
|
||||||
|
|
||||||
Window w1(0);
|
QRect availableGeometry = app.primaryScreen()->availableGeometry();
|
||||||
if (parser.isSet(vsyncOneOption)) {
|
|
||||||
qDebug("swap interval 1 for first window only");
|
|
||||||
QSurfaceFormat w1fmt = fmt;
|
|
||||||
w1fmt.setSwapInterval(1);
|
|
||||||
w1.setFormat(w1fmt);
|
|
||||||
fmt.setSwapInterval(0);
|
|
||||||
QSurfaceFormat::setDefaultFormat(fmt);
|
|
||||||
}
|
|
||||||
Window w2(1);
|
|
||||||
Window w3(2);
|
|
||||||
w1.setGeometry(QRect(QPoint(10, 100), w1.size()));
|
|
||||||
w2.setGeometry(QRect(QPoint(300, 100), w2.size()));
|
|
||||||
w3.setGeometry(QRect(QPoint(600, 100), w3.size()));
|
|
||||||
w1.show();
|
|
||||||
w2.show();
|
|
||||||
w3.show();
|
|
||||||
|
|
||||||
QList<QWindow *> extraWindows;
|
int numberOfWindows = qMax(parser.value(numWindowsOption).toInt(), 1);
|
||||||
if (int extraWindowCount = parser.value(extraWindowsOption).toInt()) {
|
QList<QWindow *> windows;
|
||||||
for (int i = 0; i < extraWindowCount; ++i) {
|
for (int i = 0; i < numberOfWindows; ++i) {
|
||||||
Window *w = new Window(3 + i);
|
Window *w = new Window(i + 1);
|
||||||
extraWindows << w;
|
windows << w;
|
||||||
w->show();
|
|
||||||
|
if (i == 0 && parser.isSet(vsyncOneOption)) {
|
||||||
|
qDebug("swap interval 1 for first window only");
|
||||||
|
QSurfaceFormat vsyncedSurfaceFormat = fmt;
|
||||||
|
vsyncedSurfaceFormat.setSwapInterval(1);
|
||||||
|
w->setFormat(vsyncedSurfaceFormat);
|
||||||
|
fmt.setSwapInterval(0);
|
||||||
|
QSurfaceFormat::setDefaultFormat(fmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int windowWidth = w->width() + 20;
|
||||||
|
static int windowHeight = w->height() + 20;
|
||||||
|
|
||||||
|
static int windowsPerRow = availableGeometry.width() / windowWidth;
|
||||||
|
|
||||||
|
int col = i;
|
||||||
|
int row = col / windowsPerRow;
|
||||||
|
col -= row * windowsPerRow;
|
||||||
|
|
||||||
|
QPoint position = availableGeometry.topLeft();
|
||||||
|
position += QPoint(col * windowWidth, row * windowHeight);
|
||||||
|
w->setFramePosition(position);
|
||||||
|
w->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
int r = app.exec();
|
int r = app.exec();
|
||||||
qDeleteAll(extraWindows);
|
qDeleteAll(windows);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user