diff options
author | Pasi Petäjäjärvi <pasi.petajajarvi@qt.io> | 2021-03-01 18:47:24 +0200 |
---|---|---|
committer | Pasi Petäjäjärvi <pasi.petajajarvi@qt.io> | 2021-04-09 08:16:07 +0000 |
commit | bc9b21b132c6459a4354e22d80e1db9bb447d1ea (patch) | |
tree | dbb2c9b8a644ccd331bb1186d413a57840a69bc3 /basicsuite/shared | |
parent | 5df03932a3046b23e26007f439222525fa221c3f (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.qml | 9 | ||||
-rw-r--r-- | basicsuite/shared/fonts.qrc | 19 | ||||
-rw-r--r-- | basicsuite/shared/main.cpp | 109 | ||||
-rw-r--r-- | basicsuite/shared/shared.pri | 120 | ||||
-rw-r--r-- | basicsuite/shared/shared_fonts.qrc | 10 | ||||
-rw-r--r-- | basicsuite/shared/shared_plugin.pri | 17 |
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 |