1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-11-09 20:42:47 +01:00
ScreenPlay/ScreenPlayWallpaper/qml/Wallpaper.qml

356 lines
10 KiB
QML
Raw Normal View History

import QtQml
import QtQuick
import QtQuick.Controls
import ScreenPlayWallpaper 1.0
import ScreenPlay.Enums.InstalledType 1.0
import ScreenPlay.Enums.VideoCodec 1.0
2020-09-13 19:51:20 +02:00
2019-03-28 21:25:39 +01:00
Rectangle {
id: root
onStateChanged: print(state)
2021-05-16 19:37:55 +02:00
property bool canFadeByWallpaperFillMode: true
function init() {
switch (Wallpaper.type) {
case InstalledType.VideoWallpaper:
if (Wallpaper.videoCodec === VideoCodec.Unknown) {
Wallpaper.terminate()
}
// macOS only supports h264 via the native Qt MM
2021-11-13 14:26:48 +01:00
if (Qt.platform.os === "osx") {
if ((Wallpaper.videoCodec === VideoCodec.VP8
|| Wallpaper.videoCodec === VideoCodec.VP9)) {
loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaWebView.qml"
} else {
loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml"
}
}
if (Qt.platform.os === "windows") {
loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml"
}
2021-11-01 19:12:58 +01:00
fadeIn()
break
2021-05-16 19:37:55 +02:00
case InstalledType.HTMLWallpaper:
loader.setSource(
"qrc:/ScreenPlayWallpaper/qml/WebsiteWallpaper.qml", {
"url": Qt.resolvedUrl(
Wallpaper.projectSourceFileAbsolute)
})
break
2021-05-16 19:37:55 +02:00
case InstalledType.QMLWallpaper:
loader.source = Qt.resolvedUrl(Wallpaper.projectSourceFileAbsolute)
fadeIn()
break
2021-05-16 19:37:55 +02:00
case InstalledType.WebsiteWallpaper:
loader.setSource(
"qrc:/ScreenPlayWallpaper/qml/WebsiteWallpaper.qml", {
"url": Wallpaper.projectSourceFileAbsolute
})
fadeIn()
break
2021-05-16 19:37:55 +02:00
case InstalledType.GifWallpaper:
loader.setSource("qrc:/ScreenPlayWallpaper/qml/GifWallpaper.qml", {
"source": Qt.resolvedUrl(
Wallpaper.projectSourceFileAbsolute)
})
fadeIn()
break
2019-03-28 21:25:39 +01:00
}
}
2021-05-16 19:37:55 +02:00
function fadeIn() {
Wallpaper.setVisible(true)
2021-05-16 19:37:55 +02:00
if (canFadeByWallpaperFillMode && Wallpaper.canFade)
imgCover.state = "hideDefaultBackgroundImage"
2021-05-16 19:37:55 +02:00
else
imgCover.opacity = 0
2021-05-16 19:37:55 +02:00
}
2019-03-28 21:25:39 +01:00
2021-05-16 19:37:55 +02:00
anchors.fill: parent
color: {
if (Qt.platform.os !== "windows")
return "black"
2021-05-16 19:37:55 +02:00
else
return Wallpaper.windowsDesktopProperties.color
2021-05-16 19:37:55 +02:00
}
2020-03-09 18:06:50 +01:00
Component.onCompleted: {
init()
2020-03-09 18:06:50 +01:00
}
Connections {
function onQmlExit() {
2021-05-16 19:37:55 +02:00
if (canFadeByWallpaperFillMode && Wallpaper.canFade)
imgCover.state = "exit"
2021-05-16 19:37:55 +02:00
else
Wallpaper.terminate()
}
2019-03-30 12:56:34 +01:00
function onQmlSceneValueReceived(key, value) {
var obj2 = 'import QtQuick; Item {Component.onCompleted: loader.item.'
+ key + ' = ' + value + '; }'
var newObject = Qt.createQmlObject(obj2.toString(), root, "err")
newObject.destroy(10000)
}
// Replace wallpaper with QML Scene
function onReloadQML(oldType) {
loader.sourceComponent = undefined
loader.source = ""
Wallpaper.clearComponentCache()
loader.source = Qt.resolvedUrl(Wallpaper.projectSourceFileAbsolute)
}
// Replace wallpaper with GIF
function onReloadGIF(oldType) {
init()
}
// This function only gets called here (the same function
// is inside the MultimediaWebView.qml) when the previous Wallpaper type
// was not a video
function onReloadVideo(oldType) {
// We need to check if the old type
// was also Video not get called twice
if (oldType === InstalledType.VideoWallpaper)
return
loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml"
2020-03-09 18:06:50 +01:00
}
2019-03-28 21:25:39 +01:00
2021-05-16 19:37:55 +02:00
target: Wallpaper
2019-03-28 21:25:39 +01:00
}
Loader {
id: loader
2021-05-16 19:37:55 +02:00
anchors.fill: parent
// QML Engine deadlocks in 5.15.2 when a loader cannot load
// an item. QApplication::quit(); waits for the destruction forever.
//asynchronous: true
onStatusChanged: {
if (loader.status === Loader.Error) {
loader.source = ""
// Wallpaper.terminate();
}
}
2021-05-16 19:37:55 +02:00
Connections {
function onRequestFadeIn() {
fadeIn()
}
2021-05-16 19:37:55 +02:00
ignoreUnknownSignals: true
target: loader.item
}
}
2019-03-28 21:25:39 +01:00
Image {
id: imgCover
2021-05-16 19:37:55 +02:00
2021-04-21 18:13:47 +02:00
state: "showDefaultBackgroundImage"
sourceSize.width: Wallpaper.width
sourceSize.height: Wallpaper.height
source: {
2021-05-16 19:37:55 +02:00
if (Qt.platform.os === "windows")
return Qt.resolvedUrl(
"file:///" + Wallpaper.windowsDesktopProperties.wallpaperPath)
2021-05-21 12:02:16 +02:00
else
return ""
2021-05-16 19:37:55 +02:00
}
2021-05-16 19:37:55 +02:00
Component.onCompleted: {
if (Qt.platform.os !== "windows") {
root.canFadeByWallpaperFillMode = false
return
2021-05-16 19:37:55 +02:00
}
switch (Wallpaper.windowsDesktopProperties.wallpaperStyle) {
case 10:
imgCover.fillMode = Image.PreserveAspectCrop
break
2021-05-16 19:37:55 +02:00
case 6:
imgCover.fillMode = Image.PreserveAspectFit
break
2021-05-16 19:37:55 +02:00
case 2:
break
2021-05-16 19:37:55 +02:00
case 0:
if (desktopProperties.isTiled) {
// Tiled
imgCover.fillMode = Image.Tile
2021-05-16 19:37:55 +02:00
} else {
// Center
imgCover.fillMode = Image.PreserveAspectFit
imgCover.anchors.centerIn = parent
imgCover.width = sourceSize.width
imgCover.height = sourceSize.height
2021-05-16 19:37:55 +02:00
}
break
2021-05-16 19:37:55 +02:00
case 22:
root.canFadeByWallpaperFillMode = false
break
}
}
2021-05-16 19:37:55 +02:00
anchors {
top: parent.top
// To fix the offset from setupWallpaperForOneScreen
// but I'm not sure when it happens
//topMargin: -3
2021-05-16 19:37:55 +02:00
left: parent.left
right: parent.right
}
states: [
State {
2021-04-21 18:13:47 +02:00
name: "showDefaultBackgroundImage"
2021-05-16 19:37:55 +02:00
PropertyChanges {
target: imgCover
opacity: 1
}
},
State {
2021-04-21 18:13:47 +02:00
name: "hideDefaultBackgroundImage"
2021-05-16 19:37:55 +02:00
PropertyChanges {
target: imgCover
opacity: 0
}
},
State {
2021-04-21 18:13:47 +02:00
name: "exit"
2021-05-16 19:37:55 +02:00
PropertyChanges {
target: imgCover
opacity: 1
}
}
]
transitions: [
Transition {
2021-04-21 18:13:47 +02:00
from: "showDefaultBackgroundImage"
to: "hideDefaultBackgroundImage"
reversible: true
2021-04-21 18:13:47 +02:00
SequentialAnimation {
PauseAnimation {
duration: 100
}
2021-05-16 19:37:55 +02:00
2021-04-21 18:13:47 +02:00
PropertyAnimation {
target: imgCover
duration: 600
property: "opacity"
}
}
},
Transition {
2021-04-21 18:13:47 +02:00
from: "hideDefaultBackgroundImage"
to: "exit"
reversible: true
2021-05-16 19:37:55 +02:00
SequentialAnimation {
PropertyAnimation {
target: imgCover
duration: 600
property: "opacity"
}
2021-05-16 19:37:55 +02:00
ScriptAction {
script: Wallpaper.terminate()
}
2019-03-28 21:25:39 +01:00
}
}
2021-05-16 19:37:55 +02:00
]
2019-03-28 21:25:39 +01:00
}
Pane {
id: debug
2021-05-16 19:37:55 +02:00
visible: Wallpaper.debugMode
enabled: Wallpaper.debugMode
2021-05-16 19:37:55 +02:00
width: parent.width * 0.3
height: parent.height * 0.3
anchors.centerIn: parent
Column {
anchors.fill: parent
anchors.margins: 20
spacing: 10
2021-05-16 19:37:55 +02:00
Text {
text: "appID " + Wallpaper.appID
font.pointSize: 14
}
2021-05-16 19:37:55 +02:00
Text {
text: "projectPath " + Wallpaper.projectPath
font.pointSize: 14
}
2021-05-16 19:37:55 +02:00
Text {
text: "getApplicationPath " + Wallpaper.getApplicationPath()
font.pointSize: 14
}
Text {
text: "projectSourceFileAbsolute " + Qt.resolvedUrl(Wallpaper.projectSourceFileAbsolute)
font.pointSize: 14
}
2021-05-16 19:37:55 +02:00
Text {
text: "fillMode " + Wallpaper.fillMode
font.pointSize: 14
}
2021-05-16 19:37:55 +02:00
Text {
text: "sdk.type " + Wallpaper.sdk.type
font.pointSize: 14
}
2021-05-16 19:37:55 +02:00
Text {
text: "sdk.isConnected " + Wallpaper.sdk.isConnected
font.pointSize: 14
}
2021-05-16 19:37:55 +02:00
Text {
text: "sdk.appID " + Wallpaper.sdk.appID
font.pointSize: 14
}
2021-05-16 19:37:55 +02:00
2021-04-21 18:13:47 +02:00
Text {
text: "canFadeByWallpaperFillMode " + canFadeByWallpaperFillMode
font.pointSize: 14
}
2021-05-16 19:37:55 +02:00
2021-04-21 18:13:47 +02:00
Text {
text: "Wallpaper.canFade " + Wallpaper.canFade
font.pointSize: 14
}
2021-05-16 19:37:55 +02:00
2021-04-21 18:13:47 +02:00
Text {
2021-05-18 17:26:02 +02:00
text: {
if (Qt.platform.os === "windows")
return "imgCover.source " + Qt.resolvedUrl(
"file:///" + Wallpaper.windowsDesktopProperties.wallpaperPath)
else
return ""
2021-05-18 17:26:02 +02:00
}
2021-04-21 18:13:47 +02:00
font.pointSize: 14
}
2021-05-16 19:37:55 +02:00
2021-04-21 18:13:47 +02:00
Text {
text: "imgCover.status " + imgCover.status
font.pointSize: 14
}
2021-05-16 19:37:55 +02:00
}
background: Rectangle {
opacity: 0.5
}
}
2019-03-28 21:25:39 +01:00
}