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 ClusterDemo
Item {
id: playerView
property real xCenter: remainingTimeImage.width / 2
property real yCenter: remainingTimeImage.height / 2
property var timeElapsed: ValueSource.musicElapsed
Image {
id: musicCover
anchors.top: parent.top
anchors.topMargin: (ValueSource.carId === 0) ? 160 : 70
anchors.horizontalCenter: parent.horizontalCenter
source: "image://etc/MusicPlayer_Cover.png"
width: 136 * scaleFactor
height: 136 * scaleFactor
}
Image {
id: remainingTimeImage
anchors.centerIn: musicCover
source: "image://etc/MusicPlayer_CircleRemaining.png"
width: 136 * scaleFactor
height: 136 * scaleFactor
}
Text {
id: song
anchors.top: remainingTimeImage.bottom
anchors.topMargin: 10
anchors.horizontalCenter: remainingTimeImage.horizontalCenter
text: "Tonight's the Night \n(Gonna Be Alright)"
font.pointSize: 12
color: "white"
}
Text {
anchors.top: song.bottom
anchors.horizontalCenter: song.horizontalCenter
text: "ROD STEWART"
font.pointSize: 10
color: "white"
}
function paintBackground(ctx) {
ctx.beginPath()
ctx.lineWidth = 2
ctx.strokeStyle = "white"
ctx.arc(xCenter, yCenter, yCenter - ctx.lineWidth / 2, 1.5 * Math.PI,
2 * Math.PI * timeElapsed / 100 + 1.5 * Math.PI)
ctx.stroke()
}
Canvas {
id: canvas
width: remainingTimeImage.width
height: width
anchors.centerIn: musicCover
onPaint: {
var ctx = getContext("2d")
ctx.reset()
paintBackground(ctx)
}
}
onTimeElapsedChanged: {
canvas.requestPaint()
}
//Do not play music timer if view not visible
Component.onCompleted: ValueSource.musicTimer.running = true
onVisibleChanged: {
if (!visible)
ValueSource.musicTimer.running = false
else
ValueSource.musicTimer.running = true
}
}