mirror of https://github.com/Nheko-Reborn/nheko
Chat Privacy screen See merge request nheko-reborn/nheko!6pull/446/head
commit
f73418f368
@ -0,0 +1,151 @@ |
|||||||
|
import QtGraphicalEffects 1.0 |
||||||
|
import QtQuick 2.12 |
||||||
|
import im.nheko 1.0 |
||||||
|
|
||||||
|
Item { |
||||||
|
id: privacyScreen |
||||||
|
|
||||||
|
property var timelineRoot |
||||||
|
property var imageSource: "" |
||||||
|
property int screenTimeout |
||||||
|
|
||||||
|
anchors.fill: parent |
||||||
|
|
||||||
|
Connections { |
||||||
|
target: TimelineManager |
||||||
|
onFocusChanged: { |
||||||
|
if (TimelineManager.isWindowFocused) { |
||||||
|
screenSaverTimer.stop(); |
||||||
|
screenSaver.state = "Invisible"; |
||||||
|
} else { |
||||||
|
if (timelineRoot.visible) |
||||||
|
screenSaverTimer.start(); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Timer { |
||||||
|
id: screenSaverTimer |
||||||
|
|
||||||
|
interval: screenTimeout * 1000 |
||||||
|
running: true |
||||||
|
onTriggered: { |
||||||
|
if (MainWindow.visible) |
||||||
|
timelineRoot.grabToImage(function(result) { |
||||||
|
screenSaver.state = "Visible"; |
||||||
|
imageSource = result.url; |
||||||
|
}, Qt.size(width, height)); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Rectangle { |
||||||
|
id: screenSaver |
||||||
|
|
||||||
|
state: "Invisible" |
||||||
|
anchors.fill: parent |
||||||
|
visible: false |
||||||
|
color: "transparent" |
||||||
|
states: [ |
||||||
|
State { |
||||||
|
name: "Visible" |
||||||
|
|
||||||
|
PropertyChanges { |
||||||
|
target: screenSaver |
||||||
|
visible: true |
||||||
|
} |
||||||
|
|
||||||
|
PropertyChanges { |
||||||
|
target: screenSaver |
||||||
|
opacity: 1 |
||||||
|
} |
||||||
|
|
||||||
|
}, |
||||||
|
State { |
||||||
|
name: "Invisible" |
||||||
|
|
||||||
|
PropertyChanges { |
||||||
|
target: screenSaver |
||||||
|
opacity: 0 |
||||||
|
} |
||||||
|
|
||||||
|
PropertyChanges { |
||||||
|
target: screenSaver |
||||||
|
visible: false |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
] |
||||||
|
transitions: [ |
||||||
|
Transition { |
||||||
|
from: "Visible" |
||||||
|
to: "Invisible" |
||||||
|
|
||||||
|
SequentialAnimation { |
||||||
|
NumberAnimation { |
||||||
|
target: screenSaver |
||||||
|
property: "opacity" |
||||||
|
duration: 250 |
||||||
|
easing.type: Easing.InQuad |
||||||
|
} |
||||||
|
|
||||||
|
NumberAnimation { |
||||||
|
target: screenSaver |
||||||
|
property: "visible" |
||||||
|
duration: 0 |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
}, |
||||||
|
Transition { |
||||||
|
from: "Invisible" |
||||||
|
to: "Visible" |
||||||
|
|
||||||
|
SequentialAnimation { |
||||||
|
NumberAnimation { |
||||||
|
target: screenSaver |
||||||
|
property: "visible" |
||||||
|
duration: 0 |
||||||
|
} |
||||||
|
|
||||||
|
NumberAnimation { |
||||||
|
target: screenSaver |
||||||
|
property: "opacity" |
||||||
|
duration: 500 |
||||||
|
easing.type: Easing.InQuad |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
] |
||||||
|
|
||||||
|
Image { |
||||||
|
id: image |
||||||
|
|
||||||
|
cache: false |
||||||
|
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 |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue