aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qmlscene/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/qmlscene/main.cpp')
-rw-r--r--tools/qmlscene/main.cpp117
1 files changed, 74 insertions, 43 deletions
diff --git a/tools/qmlscene/main.cpp b/tools/qmlscene/main.cpp
index fe01b92244..fc4fc3e167 100644
--- a/tools/qmlscene/main.cpp
+++ b/tools/qmlscene/main.cpp
@@ -156,7 +156,7 @@ struct Options
applicationAttributes.append(Qt::AA_ShareOpenGLContexts);
}
- QUrl file;
+ QUrl url;
bool originalQml;
bool originalQmlRaster;
bool maximized;
@@ -204,7 +204,7 @@ static int displayOptionsDialog(Options *options)
QFileInfoList fileInfos = findQmlFiles(":/bundle") + findQmlFiles("./qmlscene-resources");
foreach (QFileInfo fileInfo, fileInfos)
- qmlFileComboBox->addItem(fileInfo.dir().dirName() + "/" + fileInfo.fileName(), QVariant::fromValue(fileInfo));
+ qmlFileComboBox->addItem(fileInfo.dir().dirName() + QLatin1Char('/') + fileInfo.fileName(), QVariant::fromValue(fileInfo));
QCheckBox *originalCheckBox = new QCheckBox(&dialog);
originalCheckBox->setText("Use original QML viewer");
@@ -235,7 +235,7 @@ static int displayOptionsDialog(Options *options)
QVariant variant = qmlFileComboBox->itemData(qmlFileComboBox->currentIndex());
QFileInfo fileInfo = variant.value<QFileInfo>();
- if (fileInfo.canonicalFilePath().startsWith(":"))
+ if (fileInfo.canonicalFilePath().startsWith(QLatin1Char(':')))
options->file = QUrl("qrc" + fileInfo.canonicalFilePath());
else
options->file = QUrl::fromLocalFile(fileInfo.canonicalFilePath());
@@ -252,12 +252,10 @@ static bool checkVersion(const QUrl &url)
if (!qgetenv("QMLSCENE_IMPORT_NAME").isEmpty())
fprintf(stderr, "QMLSCENE_IMPORT_NAME is no longer supported.\n");
- QString fileName = url.toLocalFile();
- if (fileName.isEmpty()) {
- fprintf(stderr, "qmlscene: filename required.\n");
- return false;
- }
+ if (!url.isLocalFile())
+ return true;
+ const QString fileName = url.toLocalFile();
QFile f(fileName);
if (!f.open(QFile::ReadOnly | QFile::Text)) {
fprintf(stderr, "qmlscene: failed to check version of file '%s', could not open...\n",
@@ -272,7 +270,7 @@ static bool checkVersion(const QUrl &url)
bool codeFound= false;
while (!codeFound) {
QString line = stream.readLine();
- if (line.contains("{")) {
+ if (line.contains(QLatin1Char('{'))) {
codeFound = true;
} else {
QString import;
@@ -300,7 +298,7 @@ static void displayFileDialog(Options *options)
QString fileName = QFileDialog::getOpenFileName(0, "Open QML file", QString(), "QML Files (*.qml)");
if (!fileName.isEmpty()) {
QFileInfo fi(fileName);
- options->file = QUrl::fromLocalFile(fi.canonicalFilePath());
+ options->url = QUrl::fromLocalFile(fi.canonicalFilePath());
}
#else
Q_UNUSED(options);
@@ -358,6 +356,8 @@ static void usage()
puts(" --desktop..........................Force use of desktop GL (AA_UseDesktopOpenGL)");
puts(" --gles.............................Force use of GLES (AA_UseOpenGLES)");
puts(" --software.........................Force use of software rendering (AA_UseOpenGLES)");
+ puts(" --scaling..........................Enable High DPI scaling (AA_EnableHighDpiScaling)");
+ puts(" --no-scaling.......................Disable High DPI scaling (AA_DisableHighDpiScaling)");
puts(" --verbose..........................Print version and graphical diagnostics for the run-time");
puts(" -I <path> ........................ Add <path> to the list of import paths");
puts(" -P <path> ........................ Add <path> to the list of plugin paths");
@@ -416,17 +416,65 @@ static void setWindowTitle(bool verbose, const QObject *topLevel, QWindow *windo
window->setTitle(newTitle);
}
+static QUrl parseUrlArgument(const QString &arg)
+{
+ const QUrl url = QUrl::fromUserInput(arg, QDir::currentPath(), QUrl::AssumeLocalFile);
+ if (!url.isValid()) {
+ fprintf(stderr, "Invalid URL: \"%s\"\n", qPrintable(arg));
+ return QUrl();
+ }
+ if (url.isLocalFile()) {
+ const QFileInfo fi(url.toLocalFile());
+ if (!fi.exists()) {
+ fprintf(stderr, "\"%s\" does not exist.\n",
+ qPrintable(QDir::toNativeSeparators(fi.absoluteFilePath())));
+ return QUrl();
+ }
+ }
+ return url;
+}
+
int main(int argc, char ** argv)
{
Options options;
QStringList imports;
QStringList pluginPaths;
+
+ // Parse arguments for application attributes to be applied before Q[Gui]Application creation.
for (int i = 1; i < argc; ++i) {
- if (*argv[i] != '-' && QFileInfo(QFile::decodeName(argv[i])).exists()) {
- options.file = QUrl::fromLocalFile(argv[i]);
+ const char *arg = argv[i];
+ if (!qstrcmp(arg, "--disable-context-sharing"))
+ options.applicationAttributes.removeAll(Qt::AA_ShareOpenGLContexts);
+ else if (!qstrcmp(arg, "--gles"))
+ options.applicationAttributes.append(Qt::AA_UseOpenGLES);
+ else if (!qstrcmp(arg, "--software"))
+ options.applicationAttributes.append(Qt::AA_UseSoftwareOpenGL);
+ else if (!qstrcmp(arg, "--desktop"))
+ options.applicationAttributes.append(Qt::AA_UseDesktopOpenGL);
+ else if (!qstrcmp(arg, "--scaling"))
+ options.applicationAttributes.append(Qt::AA_EnableHighDpiScaling);
+ else if (!qstrcmp(arg, "--no-scaling"))
+ options.applicationAttributes.append(Qt::AA_DisableHighDpiScaling);
+ }
+
+ foreach (Qt::ApplicationAttribute a, options.applicationAttributes)
+ QCoreApplication::setAttribute(a);
+#ifdef QT_WIDGETS_LIB
+ QApplication app(argc, argv);
+#else
+ QGuiApplication app(argc, argv);
+#endif
+ app.setApplicationName("QtQmlViewer");
+ app.setOrganizationName("QtProject");
+ app.setOrganizationDomain("qt-project.org");
+
+ const QStringList arguments = QCoreApplication::arguments();
+ for (int i = 1, size = arguments.size(); i < size; ++i) {
+ if (!arguments.at(i).startsWith(QLatin1Char('-'))) {
+ options.url = parseUrlArgument(arguments.at(i));
} else {
- const QString lowerArgument = QString::fromLatin1(argv[i]).toLower();
+ const QString lowerArgument = arguments.at(i).toLower();
if (lowerArgument == QLatin1String("--maximized"))
options.maximized = true;
else if (lowerArgument == QLatin1String("--fullscreen"))
@@ -447,20 +495,12 @@ int main(int argc, char ** argv)
options.resizeViewToRootItem = true;
else if (lowerArgument == QLatin1String("--multisample"))
options.multisample = true;
- else if (lowerArgument == QLatin1String("--disable-context-sharing"))
- options.applicationAttributes.removeAll(Qt::AA_ShareOpenGLContexts);
- else if (lowerArgument == QLatin1String("--gles"))
- options.applicationAttributes.append(Qt::AA_UseOpenGLES);
- else if (lowerArgument == QLatin1String("--software"))
- options.applicationAttributes.append(Qt::AA_UseSoftwareOpenGL);
- else if (lowerArgument == QLatin1String("--desktop"))
- options.applicationAttributes.append(Qt::AA_UseDesktopOpenGL);
else if (lowerArgument == QLatin1String("--verbose"))
options.verbose = true;
- else if (lowerArgument == QLatin1String("-i") && i + 1 < argc)
- imports.append(QString::fromLatin1(argv[++i]));
- else if (lowerArgument == QLatin1String("-p") && i + 1 < argc)
- pluginPaths.append(QString::fromLatin1(argv[++i]));
+ else if (lowerArgument == QLatin1String("-i") && i + 1 < size)
+ imports.append(arguments.at(++i));
+ else if (lowerArgument == QLatin1String("-p") && i + 1 < size)
+ pluginPaths.append(arguments.at(++i));
else if (lowerArgument == QLatin1String("--help")
|| lowerArgument == QLatin1String("-help")
|| lowerArgument == QLatin1String("--h")
@@ -469,17 +509,6 @@ int main(int argc, char ** argv)
}
}
- foreach (Qt::ApplicationAttribute a, options.applicationAttributes)
- QCoreApplication::setAttribute(a);
-#ifdef QT_WIDGETS_LIB
- QApplication app(argc, argv);
-#else
- QGuiApplication app(argc, argv);
-#endif
- app.setApplicationName("QtQmlViewer");
- app.setOrganizationName("QtProject");
- app.setOrganizationDomain("qt-project.org");
-
#ifndef QT_NO_TRANSLATION
QTranslator translator;
QTranslator qtTranslator;
@@ -502,7 +531,7 @@ int main(int argc, char ** argv)
QUnifiedTimer::instance()->setSlowModeEnabled(options.slowAnimations);
- if (options.file.isEmpty())
+ if (options.url.isEmpty())
#if defined(QMLSCENE_BUNDLE)
displayOptionsDialog(&options);
#else
@@ -514,8 +543,8 @@ int main(int argc, char ** argv)
if (options.verbose)
puts(QLibraryInfo::build());
- if (!options.file.isEmpty()) {
- if (!options.versionDetection || checkVersion(options.file)) {
+ if (!options.url.isEmpty()) {
+ if (!options.versionDetection || checkVersion(options.url)) {
#ifndef QT_NO_TRANSLATION
QTranslator translator;
#endif
@@ -528,15 +557,17 @@ int main(int argc, char ** argv)
engine.addImportPath(imports.at(i));
for (int i = 0; i < pluginPaths.size(); ++i)
engine.addPluginPath(pluginPaths.at(i));
- if (options.file.isLocalFile()) {
- QFileInfo fi(options.file.toLocalFile());
+ if (options.url.isLocalFile()) {
+ QFileInfo fi(options.url.toLocalFile());
#ifndef QT_NO_TRANSLATION
loadTranslationFile(translator, fi.path());
#endif
loadDummyDataFiles(engine, fi.path());
}
QObject::connect(&engine, SIGNAL(quit()), QCoreApplication::instance(), SLOT(quit()));
- component->loadUrl(options.file);
+ component->loadUrl(options.url);
+ while (component->isLoading())
+ QCoreApplication::processEvents();
if ( !component->isReady() ) {
fprintf(stderr, "%s\n", qPrintable(component->errorString()));
return -1;
@@ -560,7 +591,7 @@ int main(int argc, char ** argv)
qxView->setResizeMode(QQuickView::SizeViewToRootObject);
else
qxView->setResizeMode(QQuickView::SizeRootObjectToView);
- qxView->setContent(options.file, component, contentItem);
+ qxView->setContent(options.url, component, contentItem);
}
}