main: Add different QMLs for doing screenshots 69/25869/1 10.92.0 10.93.0 koi/10.92.0 koi/10.93.0 koi_10.92.0 koi_10.93.0
authorMarius Vlad <marius.vlad@collabora.com>
Wed, 6 Jan 2021 13:58:18 +0000 (15:58 +0200)
committerMarius Vlad <marius.vlad@collabora.com>
Wed, 6 Jan 2021 22:12:10 +0000 (00:12 +0200)
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 <marius.vlad@collabora.com>
Change-Id: Ie1478bb75f23c36e3c24c9e8d3e2d7c4848dd779

homescreen/qml/background_demo.qml [new file with mode: 0644]
homescreen/qml/bottompanel_demo.qml [new file with mode: 0644]
homescreen/qml/qml.qrc
homescreen/qml/toppanel_demo.qml [new file with mode: 0644]
homescreen/src/main.cpp

diff --git a/homescreen/qml/background_demo.qml b/homescreen/qml/background_demo.qml
new file mode 100644 (file)
index 0000000..e3a99a1
--- /dev/null
@@ -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 (file)
index 0000000..27c00df
--- /dev/null
@@ -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'
+}
index 801d0f4..7a0be7c 100644 (file)
@@ -13,5 +13,8 @@
         <file>background.qml</file>
         <file>toppanel.qml</file>
         <file>bottompanel.qml</file>
+        <file>background_demo.qml</file>
+        <file>toppanel_demo.qml</file>
+        <file>bottompanel_demo.qml</file>
     </qresource>
 </RCC>
diff --git a/homescreen/qml/toppanel_demo.qml b/homescreen/qml/toppanel_demo.qml
new file mode 100644 (file)
index 0000000..2546d7c
--- /dev/null
@@ -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'
+}
index 8c7bb22..376644f 100644 (file)
@@ -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<StatusBarModel *>("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();
 }