1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-11-07 03:22:33 +01:00
ScreenPlay/ScreenPlayWallpaper/Wallpaper.qml

237 lines
6.8 KiB
QML
Raw Normal View History

import QtQuick 2.14
import QtQml 2.14
import ScreenPlayWallpaper 1.0
2020-09-13 19:51:20 +02:00
import ScreenPlay.Shader 1.0
import "ShaderWrapper" as ShaderWrapper
2019-03-28 21:25:39 +01:00
Rectangle {
id: root
2019-03-28 21:25:39 +01:00
anchors.fill: parent
color: {
if (Qt.platform.os !== "windows") {
2019-03-28 21:25:39 +01:00
return "black"
} else {
return Wallpaper.windowsDesktopProperties.color
2019-03-28 21:25:39 +01:00
}
}
2019-08-11 19:48:07 +02:00
property bool canFadeByWallpaperFillMode: true
2019-03-28 21:25:39 +01:00
2020-03-09 18:06:50 +01:00
Component.onCompleted: {
init()
2020-03-09 18:06:50 +01:00
}
Connections {
target: Wallpaper
function onQmlExit() {
if (canFadeByWallpaperFillMode && Wallpaper.canFade) {
imgCover.state = "outExit"
} else {
Wallpaper.terminate()
}
}
2019-03-30 12:56:34 +01:00
function onQmlSceneValueReceived(key, value) {
var obj2 = 'import QtQuick 2.0; Item {Component.onCompleted: loader.item.'
+ key + ' = ' + value + '; }'
print(key, value)
var newObject = Qt.createQmlObject(obj2.toString(), root, "err")
newObject.destroy(10000)
}
// Replace wallpaper with QML Scene
function onReloadQML(oldType) {
2020-03-09 18:06:50 +01:00
loader.sourceComponent = undefined
loader.source = ""
2020-11-07 14:02:27 +01:00
Wallpaper.clearComponentCache()
loader.source = Qt.resolvedUrl(Wallpaper.fullContentPath)
}
// This function only gets called here (the same function
// is inside the WebView.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 === Wallpaper.WallpaperType.Video)
2020-08-23 19:06:17 +02:00
return
imgCover.state = "in"
loader.source = "qrc:/WebView.qml"
2020-03-09 18:06:50 +01:00
}
}
2019-03-28 21:25:39 +01:00
function init() {
switch (Wallpaper.type) {
2019-03-28 21:25:39 +01:00
case Wallpaper.WallpaperType.Video:
loader.source = "qrc:/WebView.qml"
2019-03-28 21:25:39 +01:00
break
case Wallpaper.WallpaperType.Html:
loader.webViewUrl = Qt.resolvedUrl(Wallpaper.fullContentPath)
2019-11-23 18:20:32 +01:00
loader.source = "qrc:/WebView.qml"
fadeIn()
2019-03-28 21:25:39 +01:00
break
case Wallpaper.WallpaperType.Qml:
loader.source = Qt.resolvedUrl(Wallpaper.fullContentPath)
imgCover.state = "out"
fadeIn()
2019-03-28 21:25:39 +01:00
break
2020-12-28 17:26:56 +01:00
case Wallpaper.WallpaperType.Website:
loader.setSource("qrc:/WebsiteWallpaper.qml", {
"source": Qt.resolvedUrl(
Wallpaper.fullContentPath)
})
fadeIn()
break
case Wallpaper.WallpaperType.Gif:
loader.setSource("qrc:/GifWallpaper.qml", {
"source": Qt.resolvedUrl(
Wallpaper.fullContentPath)
})
fadeIn()
break
2019-03-28 21:25:39 +01:00
}
}
function fadeIn() {
Wallpaper.setVisible(true)
if (canFadeByWallpaperFillMode && Wallpaper.canFade) {
imgCover.state = "out"
2019-03-28 21:25:39 +01:00
} else {
imgCover.opacity = 0
}
}
Loader {
id: loader
anchors.fill: parent
property string webViewUrl
onStatusChanged: {
if (loader.status === Loader.Ready) {
2020-12-11 14:14:00 +01:00
if (Wallpaper.type === Wallpaper.WallpaperType.Html) {
loader.item.url = loader.webViewUrl
print(loader.item.url, " --- ", loader.webViewUrl)
}
}
}
Connections {
ignoreUnknownSignals: true
target: loader.item
function onRequestFadeIn() {
fadeIn()
}
}
}
2019-03-28 21:25:39 +01:00
Image {
id: imgCover
anchors {
top: parent.top
2020-12-11 14:14:00 +01:00
topMargin: -3 // To fix the offset from setupWallpaperForOneScreen
left: parent.left
right: parent.right
}
state: "in"
sourceSize.width: Wallpaper.width
sourceSize.height: Wallpaper.height
source: {
if (Qt.platform.os === "windows") {
return Qt.resolvedUrl(
"file:///" + Wallpaper.windowsDesktopProperties.wallpaperPath)
} else {
return ""
}
}
states: [
State {
name: "in"
PropertyChanges {
target: imgCover
opacity: 1
}
},
State {
name: "out"
PropertyChanges {
target: imgCover
opacity: 0
}
},
State {
name: "outExit"
PropertyChanges {
target: imgCover
opacity: 1
}
}
]
transitions: [
Transition {
from: "out"
to: "in"
reversible: true
PropertyAnimation {
target: imgCover
duration: 600
property: "opacity"
}
},
Transition {
from: "out"
to: "outExit"
reversible: true
SequentialAnimation {
PropertyAnimation {
target: imgCover
duration: 600
property: "opacity"
}
ScriptAction {
script: Wallpaper.terminate()
}
}
}
]
2019-03-28 21:25:39 +01:00
Component.onCompleted: {
2020-08-23 19:06:17 +02:00
if (Qt.platform.os !== "windows") {
root.canFadeByWallpaperFillMode = false
return
2020-08-23 19:06:17 +02:00
}
switch (Wallpaper.windowsDesktopProperties.wallpaperStyle) {
2019-03-28 21:25:39 +01:00
case 10:
imgCover.fillMode = Image.PreserveAspectCrop
break
case 6:
imgCover.fillMode = Image.PreserveAspectFit
break
case 2:
break
case 0:
if (desktopProperties.isTiled) {
// Tiled
imgCover.fillMode = Image.Tile
} else {
// Center
imgCover.fillMode = Image.PreserveAspectFit
imgCover.anchors.centerIn = parent
imgCover.width = sourceSize.width
imgCover.height = sourceSize.height
}
break
case 22:
2020-08-23 19:06:17 +02:00
root.canFadeByWallpaperFillMode = false
2019-03-28 21:25:39 +01:00
break
}
}
}
}