summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2019-12-04 13:10:38 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2019-12-06 10:05:46 +0000
commit88103453f25d4ecda171ae1a0aeef96a81edf189 (patch)
tree1d21c16854a42eb4b82b190f1eaabaacecccc2a7
parentfebf0ca0676ccf2e19014260b0d9fe8eeef8cde0 (diff)
downloadqt-creator-88103453f25d4ecda171ae1a0aeef96a81edf189.tar.gz
QmlDesigner: Add option forceFreeType to qmlproject
This option enforces the usage of FreeType even on Windows for the form editor and live preview. This can be useful when developing for Linux devices. The option can be eanbled by adding 'forceFreeType: true' to the .qmlproject file. Task-number: QDS-1143 Change-Id: I7e749e95584e23202536596ee4f7cdaa09d3a371 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp16
-rw-r--r--src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp4
-rw-r--r--src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp5
-rw-r--r--src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h4
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.cpp9
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.h1
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectconstants.h1
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp5
8 files changed, 44 insertions, 1 deletions
diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp
index e40db1872e..10cdb9135f 100644
--- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp
@@ -218,7 +218,21 @@ QProcess *PuppetCreator::puppetProcess(const QString &puppetPath,
QObject::connect(puppetProcess, SIGNAL(readyRead()), handlerObject, outputSlot);
}
puppetProcess->setWorkingDirectory(workingDirectory);
- puppetProcess->start(puppetPath, {socketToken, puppetMode, "-graphicssystem raster"});
+
+ bool forceFreeType = false;
+ if (Utils::HostOsInfo::isWindowsHost() && m_currentProject && m_currentProject->activeTarget()) {
+ const QVariant customData = m_currentProject->activeTarget()
+ ->additionalData("CustomForceFreeType");
+
+ if (customData.isValid())
+ forceFreeType = customData.toBool();
+ }
+
+ QString forceFreeTypeOption;
+ if (forceFreeType)
+ forceFreeTypeOption = "-platform windows:fontengine=freetype";
+
+ puppetProcess->start(puppetPath, {socketToken, puppetMode, "-graphicssystem raster", forceFreeTypeOption });
#ifndef QMLDESIGNER_TEST
QString debugPuppet = m_designerSettings.value(DesignerSettingsKey::
diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp
index 2b3cfa9bdc..f62c7c1294 100644
--- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp
+++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp
@@ -93,6 +93,10 @@ QmlProjectItem *QmlProjectFileFormat::parseProjectFile(const Utils::FilePath &fi
if (fileSelectorsProperty.isValid())
projectItem->setFileSelectors(fileSelectorsProperty.toStringList());
+ const QVariant forceFreeTypeProperty = rootNode->property("forceFreeType");
+ if (forceFreeTypeProperty.isValid())
+ projectItem->setForceFreeType(forceFreeTypeProperty.toBool());
+
const QVariant targetDirectoryPropery = rootNode->property("targetDirectory");
if (targetDirectoryPropery.isValid())
projectItem->setTargetDirectory(targetDirectoryPropery.toString());
diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp
index 91d8eff591..b36938b9f2 100644
--- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp
+++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp
@@ -97,6 +97,11 @@ bool QmlProjectItem::matchesFile(const QString &filePath) const
});
}
+void QmlProjectItem::setForceFreeType(bool b)
+{
+ m_forceFreeType = b;
+}
+
Utils::EnvironmentItems QmlProjectItem::environment() const
{
return m_environment;
diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h
index 29b2e88d99..5245e3872c 100644
--- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h
+++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h
@@ -60,6 +60,9 @@ public:
QStringList files() const;
bool matchesFile(const QString &filePath) const;
+ bool forceFreeType() const { return m_forceFreeType; };
+ void setForceFreeType(bool);
+
QString mainFile() const { return m_mainFile; }
void setMainFile(const QString &mainFilePath) { m_mainFile = mainFilePath; }
@@ -79,6 +82,7 @@ protected:
QString m_mainFile;
Utils::EnvironmentItems m_environment;
QVector<QmlProjectContentItem *> m_content; // content property
+ bool m_forceFreeType = false;
};
} // namespace QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp
index d3d96c20ce..5da4acf317 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.cpp
+++ b/src/plugins/qmlprojectmanager/qmlproject.cpp
@@ -229,6 +229,13 @@ QStringList QmlProject::customFileSelectors() const
return {};
}
+bool QmlProject::forceFreeType() const
+{
+ if (m_projectItem)
+ return m_projectItem.data()->forceFreeType();
+ return false;
+}
+
bool QmlProject::addFiles(const QStringList &filePaths)
{
QStringList toAdd;
@@ -259,6 +266,8 @@ QVariant QmlProject::additionalData(Id id, const Target *) const
{
if (id == Constants::customFileSelectorsData)
return customFileSelectors();
+ if (id == Constants::customForceFreeTypeData)
+ return forceFreeType();
return {};
}
diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h
index 9b09cbd528..6433333278 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.h
+++ b/src/plugins/qmlprojectmanager/qmlproject.h
@@ -70,6 +70,7 @@ public:
Utils::EnvironmentItems environment() const;
QStringList customImportPaths() const;
QStringList customFileSelectors() const;
+ bool forceFreeType() const;
bool addFiles(const QStringList &filePaths);
diff --git a/src/plugins/qmlprojectmanager/qmlprojectconstants.h b/src/plugins/qmlprojectmanager/qmlprojectconstants.h
index eb2ddcddb1..ecf39bc32c 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectconstants.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectconstants.h
@@ -32,6 +32,7 @@ namespace Constants {
const char * const QMLPROJECT_MIMETYPE = QmlJSTools::Constants::QMLPROJECT_MIMETYPE;
const char customFileSelectorsData[] = "CustomFileSelectorsData";
+const char customForceFreeTypeData[] = "CustomForceFreeType";
} // namespace Constants
} // namespace QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
index 6e67361d11..066c28f455 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
@@ -394,6 +394,11 @@ QString QmlProjectRunConfiguration::commandLineArguments() const
Utils::QtcProcess::addArg(&args, fileSelector, osType);
}
+ if (Utils::HostOsInfo::isWindowsHost() && project->forceFreeType()) {
+ Utils::QtcProcess::addArg(&args, "-platform", osType);
+ Utils::QtcProcess::addArg(&args, "windows:fontengine=freetype", osType);
+ }
+
const QString main = project->targetFile(Utils::FilePath::fromString(mainScript()),
currentTarget).toString();
if (!main.isEmpty())