summaryrefslogtreecommitdiffstats
path: root/basicsuite/shared
diff options
context:
space:
mode:
authorPasi Petäjäjärvi <pasi.petajajarvi@qt.io>2021-03-01 18:47:24 +0200
committerPasi Petäjäjärvi <pasi.petajajarvi@qt.io>2021-04-09 08:16:07 +0000
commitbc9b21b132c6459a4354e22d80e1db9bb447d1ea (patch)
treedbb2c9b8a644ccd331bb1186d413a57840a69bc3 /basicsuite/shared
parent5df03932a3046b23e26007f439222525fa221c3f (diff)
Add support to build ebike demo independently from launcher
Task-number: QTBUG-85573 Change-Id: I0100480d5ab73abdef2f2b8b743d97832c0b70f6 Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
Diffstat (limited to 'basicsuite/shared')
-rw-r--r--basicsuite/shared/SharedMain.qml9
-rw-r--r--basicsuite/shared/fonts.qrc19
-rw-r--r--basicsuite/shared/main.cpp109
-rw-r--r--basicsuite/shared/shared.pri120
-rw-r--r--basicsuite/shared/shared_fonts.qrc10
-rw-r--r--basicsuite/shared/shared_plugin.pri17
6 files changed, 172 insertions, 112 deletions
diff --git a/basicsuite/shared/SharedMain.qml b/basicsuite/shared/SharedMain.qml
index ec6d13b..543355c 100644
--- a/basicsuite/shared/SharedMain.qml
+++ b/basicsuite/shared/SharedMain.qml
@@ -60,6 +60,15 @@ Window {
color: "black"
+ /* Updating Text properties dynamically can cause rebuild of whole SceneGraph node tree which is expensive.
+ Enabling this might help in that case to prevent full rebuild from happening.
+ More info see https://www.qt.io/blog/2017/01/19/shoot-foot-using-scene-graph-neat-optimization-trick-inside
+ */
+ readonly property bool clipDynamicText: false
+
+ /* SpeedView uses Canvas so it might be optimization when enabling layer for rendering it */
+ readonly property bool enableLayerForSpeedView: false
+
Item {
id: root
anchors.centerIn: window.contentItem
diff --git a/basicsuite/shared/fonts.qrc b/basicsuite/shared/fonts.qrc
deleted file mode 100644
index ccc8864..0000000
--- a/basicsuite/shared/fonts.qrc
+++ /dev/null
@@ -1,19 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>fonts/TitilliumWeb-Black.ttf</file>
- <file>fonts/TitilliumWeb-Bold.ttf</file>
- <file>fonts/TitilliumWeb-ExtraLight.ttf</file>
- <file>fonts/TitilliumWeb-Light.ttf</file>
- <file>fonts/TitilliumWeb-Regular.ttf</file>
- <file>fonts/TitilliumWeb-SemiBold.ttf</file>
- <file>fonts/ebike-fonts/fontawesome-webfont.ttf</file>
- <file>fonts/ebike-fonts/Montserrat-Bold.ttf</file>
- <file>fonts/ebike-fonts/Montserrat-Light.ttf</file>
- <file>fonts/ebike-fonts/Montserrat-Medium.ttf</file>
- <file>fonts/ebike-fonts/Montserrat-Regular.ttf</file>
- <file>fonts/ebike-fonts/Teko-Bold.ttf</file>
- <file>fonts/ebike-fonts/Teko-Light.ttf</file>
- <file>fonts/ebike-fonts/Teko-Medium.ttf</file>
- <file>fonts/ebike-fonts/Teko-Regular.ttf</file>
- </qresource>
-</RCC>
diff --git a/basicsuite/shared/main.cpp b/basicsuite/shared/main.cpp
index 9e27596..b3e2253 100644
--- a/basicsuite/shared/main.cpp
+++ b/basicsuite/shared/main.cpp
@@ -48,24 +48,24 @@
**
****************************************************************************/
#include <QtCore/QDebug>
-// QtWidget (QApplication) dependecy is required by QtCharts demo,
-// when QtWidget dependecy is not required use QGuiApplication from QtGui module
-#include <QtWidgets/QApplication>
+#ifdef QT_WIDGETS_LIB
+#include <QApplication>
+#elif QT_GUI_LIB
+#include <QGuiApplication>
+#endif
#include <QtGui/QFont>
#include <QtGui/QFontDatabase>
#include <QtGui/QScreen>
#include <QtGui/QPalette>
-#include <QtCore/QRegExp>
-#include <QtCore/QFile>
#include <QtQml/QQmlApplicationEngine>
-
#include <QtQml/QQmlEngine>
#include <QtQml/QQmlContext>
#include <QtQml/QQmlComponent>
#include <QSettings>
#include <QQuickStyle>
#include <QIcon>
+#include <QDir>
#include <QQuickWindow>
#if defined(USE_QTWEBENGINE)
@@ -90,75 +90,69 @@ int main(int argc, char **argv)
QtWebEngine::initialize();
#endif
- //qputenv("QT_IM_MODULE", QByteArray("qtvkb"));
- qputenv("QT_QUICK_CONTROLS_CONF", "/data/user/qt/qtquickcontrols2/qtquickcontrols2.conf");
- QIcon::setThemeName("gallery");
- QIcon::setThemeSearchPaths(QStringList() << "/data/user/qt/qtquickcontrols2/icons");
+ QString appPath = QString::fromLocal8Bit(argv[0]);
+ QByteArray appDir = appPath.left(appPath.lastIndexOf(QDir::separator())).toLocal8Bit();
+ QByteArray appName = appPath.split(QDir::separator().toLatin1()).last().toLocal8Bit();
- QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+ // VKB is active also for desktop
+ qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
- QApplication app(argc, argv);
+#if QT_CONFIG(cross_compile)
+ qputenv("QT_QUICK_CONTROLS_CONF", "/data/user/qt/" + appName + "/qtquickcontrols2.conf");
+#endif
- QFontDatabase::addApplicationFont(":/fonts/TitilliumWeb-Regular.ttf");
- QFontDatabase::addApplicationFont(":/fonts/TitilliumWeb-SemiBold.ttf");
- QFontDatabase::addApplicationFont(":/fonts/TitilliumWeb-Bold.ttf");
- QFontDatabase::addApplicationFont(":/fonts/TitilliumWeb-Black.ttf");
-
- //For eBike demo
- QFontDatabase::addApplicationFont(":/fonts/ebike-fonts/Montserrat-Bold.ttf");
- QFontDatabase::addApplicationFont(":/fonts/ebike-fonts/Montserrat-Light.ttf");
- QFontDatabase::addApplicationFont(":/fonts/ebike-fonts/Montserrat-Medium.ttf");
- QFontDatabase::addApplicationFont(":/fonts/ebike-fonts/Montserrat-Regular.ttf");
- QFontDatabase::addApplicationFont(":/fonts/ebike-fonts/Teko-Bold.ttf");
- QFontDatabase::addApplicationFont(":/fonts/ebike-fonts/Teko-Light.ttf");
- QFontDatabase::addApplicationFont(":/fonts/ebike-fonts/Teko-Medium.ttf");
- QFontDatabase::addApplicationFont(":/fonts/ebike-fonts/Teko-Regular.ttf");
- QFontDatabase::addApplicationFont(":/fonts/ebike-fonts/fontawesome-webfont.ttf");
-
- QString path = app.applicationDirPath();
-
- QPalette pal;
- pal.setColor(QPalette::Text, Qt::black);
- pal.setColor(QPalette::WindowText, Qt::black);
- pal.setColor(QPalette::ButtonText, Qt::black);
- pal.setColor(QPalette::Base, Qt::white);
- QGuiApplication::setPalette(pal);
-
- QString target = qgetenv("B2QT_BASE") + "-" + qgetenv("B2QT_PLATFORM");
- QFile excludeFile(path + QStringLiteral("/exclude.txt"));
- if (excludeFile.open(QFile::ReadOnly)) {
- const QStringList excludeList = QString::fromUtf8(excludeFile.readAll()).split(QRegExp(":|\\s+"));
- if (excludeList.contains(target))
- qDebug("Warning: This example may not be fully functional on this platform");
- excludeFile.close();
+ if (appName.contains("qtquickcontrols2")) {
+ QIcon::setThemeName("gallery");
+ QIcon::setThemeSearchPaths(QStringList() << appDir + "/icons");
}
- QString fontName = QStringLiteral("/system/lib/fonts/DejaVuSans.ttf");
- if (QFile::exists(fontName)) {
- QFontDatabase::addApplicationFont(fontName);
- QFont font("DejaVu Sans");
- font.setPixelSize(12);
- QGuiApplication::setFont(font);
+ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+
+#ifdef QT_WIDGETS_LIB
+ QApplication app(argc, argv);
+#elif QT_GUI_LIB
+ QGuiApplication app(argc, argv);
+#endif
+
+ bool fontsAsResource = false;
+ QStringList fonts;
+ QDir fontsResource(QStringLiteral(":/fonts"));
+ if (fontsResource.exists()) {
+ fontsAsResource = true;
+ fonts = fontsResource.entryList();
} else {
- QFont font;
- font.setStyleHint(QFont::SansSerif);
- QGuiApplication::setFont(font);
+ QDir fontsDirectory(QCoreApplication::applicationDirPath() + QStringLiteral("/fonts"));
+ fonts = fontsDirectory.entryList();
}
- // Material style can be set only for devices supporting GL
+ if (fonts.isEmpty())
+ qWarning() << "No fonts provided, using system default!";
+
+ QString path = fontsAsResource ? QStringLiteral(":/fonts/") : QCoreApplication::applicationDirPath() + QStringLiteral("/fonts/");
+ for (int i = 0; i < fonts.size(); ++i)
+ QFontDatabase::addApplicationFont(path + fonts.at(i));
+
+ // Material style can be set only for devices supporting OpenGL
QSettings styleSettings;
QString style = styleSettings.value("style").toString();
if (checkGlAvailability()) {
if (style.isEmpty() || style == "Default")
styleSettings.setValue("style", "Material");
} else {
- qDebug()<<"No GL available, skipping Material style";
+ qWarning() << "No OpenGL available, skipping Material style";
}
QQuickStyle::setStyle(styleSettings.value("style").toString());
DummyEngine engine;
QQmlApplicationEngine applicationengine;
+
+#if !QT_CONFIG(cross_compile)
+ applicationengine.addImportPath(QCoreApplication::applicationDirPath() + "/qmlplugins");
+#else
+ applicationengine.addImportPath("/data/user/qt/qmlplugins");
+#endif
+
QString appFont("TitilliumWeb");
applicationengine.rootContext()->setContextProperty("engine", &engine);
applicationengine.rootContext()->setContextProperty("appFont", appFont);
@@ -173,10 +167,7 @@ int main(int argc, char **argv)
applicationengine.rootContext()->setContextProperty("_primaryGrey", demoSettings.value("primaryGrey", "#9d9faa"));
applicationengine.rootContext()->setContextProperty("_secondaryGrey", demoSettings.value("secondaryGrey", "#3a4055"));
- applicationengine.rootContext()->setContextProperty("VideosLocation", demoSettings.value("videosLocation", "file:///data/videos"));
- applicationengine.rootContext()->setContextProperty("DefaultVideoUrl", demoSettings.value("defaultVideoUrl", "file:///data/videos/Qt+for+Designers+and+Developers.mp4"));
-
- applicationengine.load(QUrl::fromLocalFile(path + "/SharedMain.qml"));
+ applicationengine.load(QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + "/SharedMain.qml"));
app.exec();
}
diff --git a/basicsuite/shared/shared.pri b/basicsuite/shared/shared.pri
index 9277275..86bc7de 100644
--- a/basicsuite/shared/shared.pri
+++ b/basicsuite/shared/shared.pri
@@ -1,48 +1,100 @@
-# widget dependecy is required by QtCharts demo
-QT += quick widgets quickcontrols2
+QT += quickcontrols2
-qtHaveModule(webengine) {
- DEFINES += USE_QTWEBENGINE
- QT += webengine
+#Use only for desktop or if target Qt does not support fontconfg
+DEFINES += FONTS_AS_RESOURCES
+
+defineTest(b2qtdemo_deploy_defaults) {
+ # Just backward compatibility do nothing
}
-DESTPATH = /data/user/qt/$$TARGET
-target.path = $$DESTPATH
+# copies the given files to the destination directory
+defineTest(copyToDestDir) {
+ files = $$1
+ dir = $$2
-SOURCES += $$PWD/main.cpp \
- $$PWD/engine.cpp
+ for(file, files) {
+ QMAKE_POST_LINK += $$QMAKE_COPY_DIR $$shell_quote($$file) $$shell_quote($$dir) $$escape_expand(\\n\\t)
+ }
-HEADERS += $$PWD/engine.h
+ export(QMAKE_POST_LINK)
+}
+
+CONFIG(cross_compile) {
+ message("Building for target")
+ DESTPATH = /data/user/qt/$$TARGET
+ target.path = $$DESTPATH
+} else {
+ message("Building for Desktop")
+ DESTPATH = $$OUT_PWD
+ target.path = $$DESTPATH
+ COPIES += commonFiles content images style
+}
+
+# Common fonts if app does not explicitly add it's own
+fonts.files += \
+ $$PWD/fonts/TitilliumWeb-Black.ttf \
+ $$PWD/fonts/TitilliumWeb-Bold.ttf \
+ $$PWD/fonts/TitilliumWeb-ExtraLight.ttf \
+ $$PWD/fonts/TitilliumWeb-Light.ttf \
+ $$PWD/fonts/TitilliumWeb-Regular.ttf \
+ $$PWD/fonts/TitilliumWeb-SemiBold.ttf
+
+contains(DEFINES, FONTS_AS_RESOURCES) {
+ !contains(DEFINES, USE_APP_FONTS) {
+ # Common fonts
+ RESOURCES += $$PWD/shared_fonts.qrc
+ }
+
+ # Application defined fonts
+ APP_FONTS=$${_PRO_FILE_PWD_}/fonts.qrc
+ exists($${APP_FONTS}) {
+ RESOURCES += $${APP_FONTS}
+ }
+} else {
+ fonts.path = $$DESTPATH/fonts
+ INSTALLS += fonts
+
+ CONFIG(cross_compile) {
+ QT_FOR_CONFIG += gui-private
+
+ qtConfig(fontconfig) {
+ #use fontconfig to provide fonts on target
+ fonts.path = /usr/share/fonts/truetype
+ }
+ } else {
+ COPIES += fonts
+ }
+}
+
+contains(DEFINES, STANDALONE) {
+ message("Building as Standalone")
+} else {
+ message("Building for B2Qt Launcher")
+ SOURCES += $$PWD/main.cpp \
+ $$PWD/engine.cpp
+
+ HEADERS += $$PWD/engine.h
-defineTest(b2qtdemo_deploy_defaults) {
commonFiles.files = \
- ../shared/SharedMain.qml \
+ $$PWD/SharedMain.qml \
+ # Resides on each application own source directory
preview_l.jpg \
demo.xml
+
commonFiles.path = $$DESTPATH
OTHER_FILES += $${commonFiles.files}
INSTALLS += commonFiles
- export(commonFiles.files)
- export(commonFiles.path)
- export(OTHER_FILES)
- export(INSTALLS)
}
-DISTFILES += $$PWD/fonts/TitilliumWeb-Black.ttf \
- $$PWD/fonts/TitilliumWeb-Bold.ttf \
- $$PWD/fonts/TitilliumWeb-ExtraLight.ttf \
- $$PWD/fonts/TitilliumWeb-Light.ttf \
- $$PWD/fonts/TitilliumWeb-Regular.ttf \
- $$PWD/fonts/TitilliumWeb-SemiBold.ttf \
- $$PWD/fonts/ebike-fonts/fontawesome-webfont.ttf \
- $$PWD/fonts/ebike-fonts/Montserrat-Bold.ttf \
- $$PWD/fonts/ebike-fonts/Montserrat-Light.ttf \
- $$PWD/fonts/ebike-fonts/Montserrat-Medium.ttf \
- $$PWD/fonts/ebike-fonts/Montserrat-Regular.ttf \
- $$PWD/fonts/ebike-fonts/Teko-Bold.ttf \
- $$PWD/fonts/ebike-fonts/Teko-Light.ttf \
- $$PWD/fonts/ebike-fonts/Teko-Medium.ttf \
- $$PWD/fonts/ebike-fonts/Teko-Regular.ttf
-
-RESOURCES += \
- $$PWD/fonts.qrc
+# Common for all projects that include this file. Only redefine in your project file
+# if different destination folder that default is preferred
+content.path = $$DESTPATH
+OTHER_FILES += $${content.files}
+
+images.path = $$DESTPATH/images
+OTHER_FILES += $${images.files}
+
+style.path = $$DESTPATH/Style
+OTHER_FILES += $${style.files}
+
+INSTALLS += target content images style
diff --git a/basicsuite/shared/shared_fonts.qrc b/basicsuite/shared/shared_fonts.qrc
new file mode 100644
index 0000000..51851e6
--- /dev/null
+++ b/basicsuite/shared/shared_fonts.qrc
@@ -0,0 +1,10 @@
+<RCC>
+ <qresource prefix="/">
+ <file>fonts/TitilliumWeb-Black.ttf</file>
+ <file>fonts/TitilliumWeb-Bold.ttf</file>
+ <file>fonts/TitilliumWeb-ExtraLight.ttf</file>
+ <file>fonts/TitilliumWeb-Light.ttf</file>
+ <file>fonts/TitilliumWeb-Regular.ttf</file>
+ <file>fonts/TitilliumWeb-SemiBold.ttf</file>
+ </qresource>
+</RCC>
diff --git a/basicsuite/shared/shared_plugin.pri b/basicsuite/shared/shared_plugin.pri
new file mode 100644
index 0000000..8259200
--- /dev/null
+++ b/basicsuite/shared/shared_plugin.pri
@@ -0,0 +1,17 @@
+pluginfiles.files += qmldir
+
+CONFIG(cross_compile) {
+ message("Building for target")
+ B2QT_DEPLOYPATH = /data/user/qt/qmlplugins/$$QML_MODULENAME
+ target.path += $$B2QT_DEPLOYPATH
+ pluginfiles.path += $$B2QT_DEPLOYPATH
+} else {
+ message("Building for Desktop")
+ DESTDIR = $$top_builddir/qmlplugins/$$QML_MODULENAME
+ target.path += $$DESTDIR
+ pluginfiles.path += $$DESTDIR
+ DEFINES += DESKTOP_BUILD
+ COPIES += target pluginfiles
+}
+
+INSTALLS += target pluginfiles