Warning, /plasma/plasma-nano/components/qml/StartupFeedback.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2015 Marco Martin <notmart@gmail.com>
0003 *
0004 * SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006
0007 import QtQuick 2.12
0008 import QtQuick.Layouts 1.1
0009 import QtQuick.Window 2.2
0010 import org.kde.plasma.core as PlasmaCore
0011 import Qt5Compat.GraphicalEffects
0012
0013 import org.kde.kirigami 2.20 as Kirigami
0014 import org.kde.plasma.private.nanoshell 2.0 as NanoShell
0015
0016 pragma Singleton
0017
0018 Window {
0019 id: window
0020
0021 flags: Qt.FramelessWindowHint
0022 property alias backgroundColor: background.color
0023 Kirigami.ImageColors {
0024 id: colorGenerator
0025 source: icon.source
0026 }
0027
0028 function open(splashIcon, title, x, y, sourceIconSize, color) {
0029 iconParent.scale = sourceIconSize/iconParent.width;
0030 background.scale = 0;
0031 backgroundParent.x = -window.width/2 + x
0032 backgroundParent.y = -window.height/2 + y
0033 window.title = title;
0034 icon.source = splashIcon;
0035
0036 if (color !== undefined) {
0037 // Break binding to use custom color
0038 background.color = color
0039 } else {
0040 // Recreate binding
0041 background.color = Qt.binding(function() { return colorGenerator.dominant})
0042 }
0043
0044 background.state = "open";
0045 }
0046
0047 Connections {
0048 target: NanoShell.StartupNotifier
0049 enabled: NanoShell.StartupNotifier.isValid
0050
0051 function onActivationStarted(appId, iconName) {
0052 icon.source = iconName
0053 background.state = "open";
0054 }
0055 }
0056
0057 property alias state: background.state
0058 property alias icon: icon.source
0059
0060 width: Screen.width
0061 height: Screen.height
0062 color: "transparent"
0063 onVisibleChanged: {
0064 if (!visible) {
0065 background.state = "closed";
0066 }
0067 }
0068 onActiveChanged: {
0069 if (!active) {
0070 background.state = "closed";
0071 }
0072 }
0073
0074
0075 Item {
0076 id: backgroundParent
0077 width: window.width
0078 height: window.height
0079
0080 Item {
0081 id: iconParent
0082 z: 2
0083 anchors.centerIn: background
0084 width: Kirigami.Units.iconSizes.enormous
0085 height: width
0086 Kirigami.Icon {
0087 id: icon
0088 anchors.fill:parent
0089 Kirigami.Theme.colorSet: Kirigami.Theme.ComplementaryColorGroup
0090 }
0091 DropShadow {
0092 anchors.fill: icon
0093 horizontalOffset: 0
0094 verticalOffset: 0
0095 radius: 8.0
0096 samples: 17
0097 color: "#80000000"
0098 source: icon
0099 }
0100 }
0101
0102 Rectangle {
0103 id: background
0104 anchors.fill: parent
0105
0106 color: colorGenerator.dominant
0107
0108 state: "closed"
0109
0110 states: [
0111 State {
0112 name: "closed"
0113 PropertyChanges {
0114 target: window
0115 visible: false
0116 }
0117 },
0118 State {
0119 name: "open"
0120
0121 PropertyChanges {
0122 target: window
0123 visible: true
0124 }
0125 }
0126 ]
0127
0128 transitions: [
0129 Transition {
0130 from: "closed"
0131 SequentialAnimation {
0132 ScriptAction {
0133 script: {
0134 window.showMaximized();
0135 }
0136 }
0137 ParallelAnimation {
0138 ScaleAnimator {
0139 target: background
0140 from: background.scale
0141 to: 1
0142 duration: Kirigami.Units.longDuration
0143 easing.type: Easing.InOutQuad
0144 }
0145 ScaleAnimator {
0146 target: iconParent
0147 from: iconParent.scale
0148 to: 1
0149 duration: Kirigami.Units.longDuration
0150 easing.type: Easing.InOutQuad
0151 }
0152 XAnimator {
0153 target: backgroundParent
0154 from: backgroundParent.x
0155 to: 0
0156 duration: Kirigami.Units.longDuration
0157 easing.type: Easing.InOutQuad
0158 }
0159 YAnimator {
0160 target: backgroundParent
0161 from: backgroundParent.y
0162 to: 0
0163 duration: Kirigami.Units.longDuration
0164 easing.type: Easing.InOutQuad
0165 }
0166 }
0167 }
0168 }
0169 ]
0170 }
0171 }
0172 }