C

Qt Cluster: Rendering and Recovery from Main UI Failure

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

// This file is part of the Qt Safe Renderer module

import QtQuick
import ".."
import ClusterDemo

Item {
    id: centerStack
    property int viewIndex: 4
    height: root.height - 173
    width: root.width / 2
    clip: true

    property alias fadeOutCenter: fadeOutCenter
    property alias fadeInCenter: fadeInCenter
    property alias loader: loader

    Loader {
        id: loader
        onStatusChanged: {
            if (status == Loader.Ready)
                fadeInCenter.start()
        }
        anchors.fill: parent
    }

    Component.onCompleted: {
        loader.source = "../MediaPlayerView.qml"
        // Start with car view, there is some kind of a problem when starting with any
        // other (It seems NoDraw doesn't work if this is not the first view)
        //loadCenterView(true) // We get the first change from signal
    }

    PropertyAnimation {
        id: fadeInCenter
        target: loader
        property: "opacity"
        from: 0.0
        to: 1.0
        duration: 400
        easing.type: Easing.Linear
    }

    PropertyAnimation {
        id: fadeOutCenter
        property: "opacity"
        from: 1.0
        to: 0.0
        duration: 250
        easing.type: Easing.Linear
        onStopped: {
            if (target === car) {
                car.visible = false
                car.item.hidden = true
            } else if (target === camera) {
                camera.visible = false
            }
            if (centerStack.viewIndex === carviewindex) {
                car.visible = true
                fadeInCenter.target = car
                car.item.hidden = false
                fadeInCenter.start()
            } else if (centerStack.viewIndex === videoviewindex) {
                camera.x = centerStack.x
                camera.y = centerStack.y
                camera.visible = true
                fadeInCenter.target = camera
                fadeInCenter.start()
            } else {
                fadeInCenter.target = loader
            }
            loader.source = component[centerStack.viewIndex]
        }
    }
}