From f386507d3c6996e39fcd459d032b9e0cf6f0f563 Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Wed, 6 Jan 2021 15:58:18 +0200 Subject: [PATCH] main: Add different QMLs for doing screenshots A better of way trying to verify that we have the homescreen up-and-running would be to load-up a reference image which doesn't change depending on time or other things loaded up (weather for instance). Alternatively, a possible solution would be to have a totally different application that basically does the same thing as homescreen. Instead of doing that, use an environment variable to choose up what QMLs to load instead of the original application. Modifying the env variable then re-starting the application is sufficient to have the screenshot for CI. Signed-off-by: Marius Vlad Change-Id: Ie1478bb75f23c36e3c24c9e8d3e2d7c4848dd779 --- homescreen/qml/background_demo.qml | 11 ++++++++++ homescreen/qml/bottompanel_demo.qml | 12 +++++++++++ homescreen/qml/qml.qrc | 3 +++ homescreen/qml/toppanel_demo.qml | 12 +++++++++++ homescreen/src/main.cpp | 43 +++++++++++++++++++++++++++---------- 5 files changed, 70 insertions(+), 11 deletions(-) create mode 100644 homescreen/qml/background_demo.qml create mode 100644 homescreen/qml/bottompanel_demo.qml create mode 100644 homescreen/qml/toppanel_demo.qml diff --git a/homescreen/qml/background_demo.qml b/homescreen/qml/background_demo.qml new file mode 100644 index 0000000..e3a99a1 --- /dev/null +++ b/homescreen/qml/background_demo.qml @@ -0,0 +1,11 @@ +import QtQuick 2.13 +import QtQuick.Window 2.13 + +Window { + id: background + width: Screen.width + height: Screen.height + flags: Qt.FramelessWindowHint + visible: true + color: 'red' +} diff --git a/homescreen/qml/bottompanel_demo.qml b/homescreen/qml/bottompanel_demo.qml new file mode 100644 index 0000000..27c00df --- /dev/null +++ b/homescreen/qml/bottompanel_demo.qml @@ -0,0 +1,12 @@ +import QtQuick 2.2 +import QtQuick.Window 2.11 +import QtQuick.Layouts 1.1 + +Window { + visible: true + flags: Qt.FramelessWindowHint + width: Screen.width + height: 216 + title: 'HomeScreen bottom' + color: 'green' +} diff --git a/homescreen/qml/qml.qrc b/homescreen/qml/qml.qrc index 801d0f4..7a0be7c 100644 --- a/homescreen/qml/qml.qrc +++ b/homescreen/qml/qml.qrc @@ -13,5 +13,8 @@ background.qml toppanel.qml bottompanel.qml + background_demo.qml + toppanel_demo.qml + bottompanel_demo.qml diff --git a/homescreen/qml/toppanel_demo.qml b/homescreen/qml/toppanel_demo.qml new file mode 100644 index 0000000..2546d7c --- /dev/null +++ b/homescreen/qml/toppanel_demo.qml @@ -0,0 +1,12 @@ +import QtQuick 2.2 +import QtQuick.Window 2.11 +import QtQuick.Layouts 1.1 + +Window { + visible: true + flags: Qt.FramelessWindowHint + width: Screen.width + height: 216 + title: 'HomeScreen top' + color: 'blue' +} diff --git a/homescreen/src/main.cpp b/homescreen/src/main.cpp index 8c7bb22..376644f 100644 --- a/homescreen/src/main.cpp +++ b/homescreen/src/main.cpp @@ -138,21 +138,40 @@ static void load_agl_shell_app(QPlatformNativeInterface *native, QQmlApplicationEngine *engine, struct agl_shell *agl_shell, QUrl &bindingAddress, - const char *screen_name) + const char *screen_name, bool is_demo) { struct wl_surface *bg, *top, *bottom; struct wl_output *output; QObject *qobj_bg, *qobj_top, *qobj_bottom; QScreen *screen = nullptr; - QQmlComponent bg_comp(engine, QUrl("qrc:/background.qml")); - qInfo() << bg_comp.errors(); + if (is_demo) { + QQmlComponent bg_comp(engine, QUrl("qrc:/background_demo.qml")); + qInfo() << bg_comp.errors(); - QQmlComponent top_comp(engine, QUrl("qrc:/toppanel.qml")); - qInfo() << top_comp.errors(); + QQmlComponent top_comp(engine, QUrl("qrc:/toppanel_demo.qml")); + qInfo() << top_comp.errors(); - QQmlComponent bot_comp(engine, QUrl("qrc:/bottompanel.qml")); - qInfo() << bot_comp.errors(); + QQmlComponent bot_comp(engine, QUrl("qrc:/bottompanel_demo.qml")); + qInfo() << bot_comp.errors(); + + top = create_component(native, &top_comp, screen, &qobj_top); + bottom = create_component(native, &bot_comp, screen, &qobj_bottom); + bg = create_component(native, &bg_comp, screen, &qobj_bg); + } else { + QQmlComponent bg_comp(engine, QUrl("qrc:/background.qml")); + qInfo() << bg_comp.errors(); + + QQmlComponent top_comp(engine, QUrl("qrc:/toppanel.qml")); + qInfo() << top_comp.errors(); + + QQmlComponent bot_comp(engine, QUrl("qrc:/bottompanel.qml")); + qInfo() << bot_comp.errors(); + + top = create_component(native, &top_comp, screen, &qobj_top); + bottom = create_component(native, &bot_comp, screen, &qobj_bottom); + bg = create_component(native, &bg_comp, screen, &qobj_bg); + } if (!screen_name) screen = qApp->primaryScreen(); @@ -163,9 +182,6 @@ load_agl_shell_app(QPlatformNativeInterface *native, "first screen " << qApp->screens().first()->name(); output = getWlOutput(native, screen); - top = create_component(native, &top_comp, screen, &qobj_top); - bottom = create_component(native, &bot_comp, screen, &qobj_bottom); - bg = create_component(native, &bg_comp, screen, &qobj_bg); /* engine.rootObjects() works only if we had a load() */ StatusBarModel *statusBar = qobj_top->findChild("statusBar"); @@ -192,11 +208,16 @@ int main(int argc, char *argv[]) setenv("QT_QPA_PLATFORM", "wayland", 1); QGuiApplication a(argc, argv); const char *screen_name; + bool is_demo_val = false; QPlatformNativeInterface *native = qApp->platformNativeInterface(); struct agl_shell *agl_shell = nullptr; screen_name = getenv("HOMESCREEN_START_SCREEN"); + const char *is_demo = getenv("HOMESCREEN_DEMO_CI"); + if (is_demo && strcmp(is_demo, "1") == 0) + is_demo_val = true; + QCoreApplication::setOrganizationDomain("LinuxFoundation"); QCoreApplication::setOrganizationName("AutomotiveGradeLinux"); QCoreApplication::setApplicationName("HomeScreen"); @@ -269,7 +290,7 @@ int main(int argc, char *argv[]) /* instead of loading main.qml we load one-by-one each of the QMLs, * divided now between several surfaces: panels, background. */ - load_agl_shell_app(native, &engine, agl_shell, bindingAddress, screen_name); + load_agl_shell_app(native, &engine, agl_shell, bindingAddress, screen_name, is_demo_val); return a.exec(); } -- 2.16.6