/******************************************************************** This file is part of the KDE project. Copyright (C) 2014 Aleix Pol Gonzalez This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . *********************************************************************/ import QtQuick 2.6 import QtQuick.Controls 1.1 import QtQuick.Layouts 1.1 import QtGraphicalEffects 1.0 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.private.sessions 2.0 import "../components" Item { id: wallpaperFader property Item clock property Item mainStack property Item footer property alias source: wallpaperBlur.source state: lockScreenRoot.uiVisible ? "on" : "off" property real factor: 0 readonly property bool lightBackground: Math.max(PlasmaCore.ColorScope.backgroundColor.r, PlasmaCore.ColorScope.backgroundColor.g, PlasmaCore.ColorScope.backgroundColor.b) > 0.5 property bool alwaysShowClock: typeof config === "undefined" || typeof config.alwaysShowClock === "undefined" || config.alwaysShowClock === true Behavior on factor { NumberAnimation { target: wallpaperFader property: "factor" duration: 1000 easing.type: Easing.InOutQuad } } FastBlur { id: wallpaperBlur anchors.fill: parent radius: -100 * wallpaperFader.factor } ShaderEffect { id: wallpaperShader anchors.fill: parent supportsAtlasTextures: true property var source: ShaderEffectSource { sourceItem: wallpaperBlur live: true hideSource: true textureMirroring: ShaderEffectSource.NoMirroring } readonly property real contrast: 0.45 * wallpaperFader.factor + (1 - wallpaperFader.factor) readonly property real saturation: 1.7 * wallpaperFader.factor + (1 - wallpaperFader.factor) readonly property real intensity: (wallpaperFader.lightBackground ? 1.7 : 0.45) * wallpaperFader.factor + (1 - wallpaperFader.factor) readonly property real transl: (1.0 - contrast) / 2.0; readonly property real rval: (1.0 - saturation) * 0.2126; readonly property real gval: (1.0 - saturation) * 0.7152; readonly property real bval: (1.0 - saturation) * 0.0722; property var colorMatrix: Qt.matrix4x4( contrast, 0, 0, 0.0, 0, contrast, 0, 0.0, 0, 0, contrast, 0.0, transl, transl, transl, 1.0).times(Qt.matrix4x4( rval + saturation, rval, rval, 0.0, gval, gval + saturation, gval, 0.0, bval, bval, bval + saturation, 0.0, 0, 0, 0, 1.0)).times(Qt.matrix4x4( intensity, 0, 0, 0, 0, intensity, 0, 0, 0, 0, intensity, 0, 0, 0, 0, 1 )); fragmentShader: " uniform mediump mat4 colorMatrix; uniform mediump sampler2D source; varying mediump vec2 qt_TexCoord0; uniform lowp float qt_Opacity; void main(void) { mediump vec4 tex = texture2D(source, qt_TexCoord0); gl_FragColor = tex * colorMatrix * qt_Opacity; }" } states: [ State { name: "on" PropertyChanges { target: mainStack opacity: 1 } PropertyChanges { target: footer opacity: 1 } PropertyChanges { target: wallpaperFader factor: 1 } PropertyChanges { target: clock.shadow opacity: 0 } }, State { name: "off" PropertyChanges { target: mainStack opacity: 0 } PropertyChanges { target: footer opacity: 0 } PropertyChanges { target: wallpaperFader factor: 0 } PropertyChanges { target: clock.shadow opacity: 1 } } ] transitions: [ Transition { from: "off" to: "on" //Note: can't use animators as they don't play well with parallelanimations ParallelAnimation { NumberAnimation { target: mainStack property: "opacity" duration: units.longDuration easing.type: Easing.InOutQuad } NumberAnimation { target: footer property: "opacity" duration: units.longDuration easing.type: Easing.InOutQuad } } }, Transition { from: "on" to: "off" ParallelAnimation { NumberAnimation { target: mainStack property: "opacity" duration: 500 easing.type: Easing.InOutQuad } NumberAnimation { target: footer property: "opacity" duration: 500 easing.type: Easing.InOutQuad } } } ] }