|
|
|
import QtGraphicalEffects 1.0
|
|
|
|
import QtQuick 2.12
|
|
|
|
|
|
|
|
Item {
|
|
|
|
property var timelineRoot
|
|
|
|
property var imageSource
|
|
|
|
property int screenTimeout
|
|
|
|
|
|
|
|
anchors.fill: parent
|
|
|
|
|
|
|
|
Timer {
|
|
|
|
id: screenSaverTimer
|
|
|
|
|
|
|
|
interval: screenTimeout * 1000
|
|
|
|
running: true
|
|
|
|
onTriggered: {
|
|
|
|
timelineRoot.grabToImage(function(result) {
|
|
|
|
imageSource = result.url;
|
|
|
|
screenSaver.visible = true;
|
|
|
|
particles.resume();
|
|
|
|
}, Qt.size(width, height));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Reset screensaver timer when clicks are received
|
|
|
|
MouseArea {
|
|
|
|
anchors.fill: parent
|
|
|
|
// Pass mouse events through
|
|
|
|
propagateComposedEvents: true
|
|
|
|
hoverEnabled: true
|
|
|
|
onClicked: {
|
|
|
|
screenSaverTimer.restart();
|
|
|
|
mouse.accepted = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
id: screenSaver
|
|
|
|
|
|
|
|
anchors.fill: parent
|
|
|
|
visible: false
|
|
|
|
color: "transparent"
|
|
|
|
|
|
|
|
Image {
|
|
|
|
id: image
|
|
|
|
|
|
|
|
visible: screenSaver.visible
|
|
|
|
anchors.fill: parent
|
|
|
|
source: imageSource
|
|
|
|
}
|
|
|
|
|
|
|
|
ShaderEffectSource {
|
|
|
|
id: effectSource
|
|
|
|
|
|
|
|
sourceItem: image
|
|
|
|
anchors.fill: image
|
|
|
|
sourceRect: Qt.rect(0, 0, width, height)
|
|
|
|
}
|
|
|
|
|
|
|
|
FastBlur {
|
|
|
|
id: blur
|
|
|
|
|
|
|
|
anchors.fill: effectSource
|
|
|
|
source: effectSource
|
|
|
|
radius: 50
|
|
|
|
}
|
|
|
|
|
|
|
|
MouseArea {
|
|
|
|
anchors.fill: parent
|
|
|
|
propagateComposedEvents: true
|
|
|
|
hoverEnabled: true
|
|
|
|
onClicked: {
|
|
|
|
screenSaver.visible = false;
|
|
|
|
screenSaverTimer.restart();
|
|
|
|
mouse.accepted = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|