Warning, /plasma/latte-dock/declarativeimports/abilities/client/indicators/LatteIndicator.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2019 Michail Vourlakos <mvourlakos@gmail.com>
0003 SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005
0006 import QtQuick 2.0
0007 import QtQuick.Layouts 1.1
0008 import QtGraphicalEffects 1.0
0009
0010 import org.kde.plasma.plasmoid 2.0
0011 import org.kde.plasma.core 2.0 as PlasmaCore
0012 import org.kde.plasma.components 2.0 as PlasmaComponents
0013
0014 import org.kde.latte.core 0.2 as LatteCore
0015 import org.kde.latte.components 1.0 as LatteComponents
0016
0017 LatteComponents.IndicatorItem{
0018 id: root
0019 extraMaskThickness: reversedEnabled && glowEnabled ? 1.7 * (factor * indicator.maxIconSize) : 0
0020
0021 enabledForApplets: indicator && indicator.configuration ? indicator.configuration.enabledForApplets : true
0022 lengthPadding: indicator && indicator.configuration ? indicator.configuration.lengthPadding : 0.08
0023
0024 readonly property real factor: 0.08
0025 readonly property int size: factor * indicator.currentIconSize
0026
0027 readonly property int screenEdgeMargin: plasmoid.location === PlasmaCore.Types.Floating || reversedEnabled ? 0 : indicator.screenEdgeMargin
0028
0029 property real textColorBrightness: colorBrightness(theme.textColor)
0030
0031 property color isActiveColor: theme.buttonFocusColor
0032 property color minimizedColor: {
0033 if (minimizedTaskColoredDifferently) {
0034 return (textColorBrightness > 127.5 ? Qt.darker(theme.textColor, 1.7) : Qt.lighter(theme.textColor, 7));
0035 }
0036
0037 return isActiveColor;
0038 }
0039
0040 property color notActiveColor: indicator.isMinimized ? minimizedColor : isActiveColor
0041
0042 //! Common Options
0043 readonly property bool reversedEnabled: indicator.configuration.reversed
0044
0045 //! Configuration Options
0046 readonly property bool extraDotOnActive: indicator.configuration.extraDotOnActive
0047 readonly property bool minimizedTaskColoredDifferently: indicator.configuration.minimizedTaskColoredDifferently
0048 readonly property int activeStyle: indicator.configuration.activeStyle
0049 //!glow options
0050 readonly property bool glowEnabled: indicator.configuration.glowEnabled
0051 readonly property bool glow3D: indicator.configuration.glow3D
0052 readonly property int glowApplyTo: indicator.configuration.glowApplyTo
0053 readonly property real glowOpacity: indicator.configuration.glowOpacity
0054
0055 /*Rectangle{
0056 anchors.fill: parent
0057 border.width: 1
0058 border.color: "yellow"
0059 color: "transparent"
0060 opacity:0.6
0061 }*/
0062
0063 function colorBrightness(color) {
0064 return colorBrightnessFromRGB(color.r * 255, color.g * 255, color.b * 255);
0065 }
0066
0067 // formula for brightness according to:
0068 // https://www.w3.org/TR/AERT/#color-contrast
0069 function colorBrightnessFromRGB(r, g, b) {
0070 return (r * 299 + g * 587 + b * 114) / 1000
0071 }
0072
0073 Item{
0074 id: mainIndicatorElement
0075
0076 width: flowItem.width
0077 height: flowItem.height
0078
0079 Flow{
0080 id: flowItem
0081 flow: plasmoid.formFactor === PlasmaCore.Types.Vertical ? Flow.TopToBottom : Flow.LeftToRight
0082
0083 LatteComponents.GlowPoint{
0084 id:firstPoint
0085 opacity: {
0086 if (indicator.isEmptySpace) {
0087 return 0;
0088 }
0089
0090 if (indicator.isTask) {
0091 return indicator.isLauncher || (indicator.inRemoving && !activeAndReverseAnimation.running) ? 0 : 1
0092 }
0093
0094 if (indicator.isApplet) {
0095 return (indicator.isActive || activeAndReverseAnimation.running) ? 1 : 0
0096 }
0097 }
0098
0099 basicColor: indicator.isActive || (indicator.isGroup && indicator.hasShown) ? root.isActiveColor : root.notActiveColor
0100
0101 size: root.size
0102 glow3D: glow3D
0103 animation: Math.max(1.65*3*LatteCore.Environment.longDuration,indicator.durationTime*3*LatteCore.Environment.longDuration)
0104 location: plasmoid.location
0105 glowOpacity: root.glowOpacity
0106 contrastColor: indicator.shadowColor
0107 attentionColor: theme.negativeTextColor
0108
0109 roundCorners: true
0110 showAttention: indicator.inAttention
0111 showGlow: {
0112 if (glowEnabled && (glowApplyTo === 2 /*All*/ || showAttention ))
0113 return true;
0114 else if (glowEnabled && glowApplyTo === 1 /*OnActive*/ && indicator.hasActive)
0115 return true;
0116 else
0117 return false;
0118 }
0119 showBorder: glowEnabled && glow3D
0120
0121 property int stateWidth: indicator.isGroup ? root.width - secondPoint.width : root.width - spacer.width
0122 property int stateHeight: indicator.isGroup ? root.height - secondPoint.height : root.height - spacer.height
0123
0124 property int animationTime: indicator.durationTime* (0.7*LatteCore.Environment.longDuration)
0125
0126 property bool isActive: indicator.hasActive || indicator.isActive
0127
0128 property bool vertical: plasmoid.formFactor === PlasmaCore.Types.Vertical
0129
0130 property real scaleFactor: indicator.scaleFactor
0131
0132 function updateInitialSizes(){
0133 if(root){
0134 if(vertical)
0135 width = root.size;
0136 else
0137 height = root.size;
0138
0139 if(vertical && isActive && activeStyle === 0 /*Line*/)
0140 height = stateHeight;
0141 else
0142 height = root.size;
0143
0144 if(!vertical && isActive && activeStyle === 0 /*Line*/)
0145 width = stateWidth;
0146 else
0147 width = root.size;
0148 }
0149 }
0150
0151
0152 onIsActiveChanged: {
0153 if (activeStyle === 0 /*Line*/)
0154 activeAndReverseAnimation.start();
0155 }
0156
0157 onScaleFactorChanged: {
0158 if(!activeAndReverseAnimation.running && !vertical && isActive && activeStyle === 0 /*Line*/){
0159 width = stateWidth;
0160 }
0161 else if (!activeAndReverseAnimation.running && vertical && isActive && activeStyle === 0 /*Line*/){
0162 height = stateHeight;
0163 }
0164 }
0165
0166 onStateWidthChanged:{
0167 if(!activeAndReverseAnimation.running && !vertical && isActive && activeStyle === 0 /*Line*/)
0168 width = stateWidth;
0169 }
0170
0171 onStateHeightChanged:{
0172 if(!activeAndReverseAnimation.running && vertical && isActive && activeStyle === 0 /*Line*/)
0173 height = stateHeight;
0174 }
0175
0176 onVerticalChanged: updateInitialSizes();
0177
0178 Component.onCompleted: {
0179 updateInitialSizes();
0180
0181 if (indicator) {
0182 indicator.onCurrentIconSizeChanged.connect(updateInitialSizes);
0183 }
0184 }
0185
0186 Component.onDestruction: {
0187 if (indicator) {
0188 indicator.onCurrentIconSizeChanged.disconnect(updateInitialSizes);
0189 }
0190 }
0191
0192 NumberAnimation{
0193 id: activeAndReverseAnimation
0194 target: firstPoint
0195 property: plasmoid.formFactor === PlasmaCore.Types.Vertical ? "height" : "width"
0196 to: indicator.hasActive && activeStyle === 0 /*Line*/
0197 ? (plasmoid.formFactor === PlasmaCore.Types.Vertical ? firstPoint.stateHeight : firstPoint.stateWidth) : root.size
0198 duration: firstPoint.animationTime
0199 easing.type: Easing.InQuad
0200
0201 onStopped: firstPoint.updateInitialSizes()
0202 }
0203 }
0204
0205 Item{
0206 id:spacer
0207 width: secondPoint.visible ? 0.5*root.size : 0
0208 height: secondPoint.visible ? 0.5*root.size : 0
0209 }
0210
0211 LatteComponents.GlowPoint{
0212 id:secondPoint
0213 width: visible ? root.size : 0
0214 height: width
0215
0216 size: root.size
0217 glow3D: glow3D
0218 animation: Math.max(1.65*3*LatteCore.Environment.longDuration,indicator.durationTime*3*LatteCore.Environment.longDuration)
0219 location: plasmoid.location
0220 glowOpacity: root.glowOpacity
0221 contrastColor: indicator.shadowColor
0222 showBorder: glowEnabled && glow3D
0223
0224 basicColor: state2Color
0225 roundCorners: true
0226 showGlow: glowEnabled && glowApplyTo === 2 /*All*/
0227 visible: ( indicator.isGroup && ((extraDotOnActive && activeStyle === 0) /*Line*/
0228 || activeStyle === 1 /*Dot*/
0229 || !indicator.hasActive) ) ? true: false
0230
0231 //when there is no active window
0232 property color state1Color: indicator.hasShown ? root.isActiveColor : root.minimizedColor
0233 //when there is active window
0234 property color state2Color: indicator.hasMinimized ? root.minimizedColor : root.isActiveColor
0235 }
0236 }
0237
0238 states: [
0239 State {
0240 name: "left"
0241 when: ((plasmoid.location === PlasmaCore.Types.LeftEdge && !reversedEnabled) ||
0242 (plasmoid.location === PlasmaCore.Types.RightEdge && reversedEnabled))
0243
0244 AnchorChanges {
0245 target: mainIndicatorElement
0246 anchors{ verticalCenter:parent.verticalCenter; horizontalCenter:undefined;
0247 top:undefined; bottom:undefined; left:parent.left; right:undefined;}
0248 }
0249 PropertyChanges{
0250 target: mainIndicatorElement
0251 anchors.leftMargin: root.screenEdgeMargin; anchors.rightMargin: 0; anchors.topMargin:0; anchors.bottomMargin:0;
0252 anchors.horizontalCenterOffset: 0; anchors.verticalCenterOffset: 0;
0253 }
0254 },
0255 State {
0256 name: "bottom"
0257 when: (plasmoid.location === PlasmaCore.Types.Floating ||
0258 (plasmoid.location === PlasmaCore.Types.BottomEdge && !reversedEnabled) ||
0259 (plasmoid.location === PlasmaCore.Types.TopEdge && reversedEnabled))
0260
0261 AnchorChanges {
0262 target: mainIndicatorElement
0263 anchors{ verticalCenter:undefined; horizontalCenter:parent.horizontalCenter;
0264 top:undefined; bottom:parent.bottom; left:undefined; right:undefined;}
0265 }
0266 PropertyChanges{
0267 target: mainIndicatorElement
0268 anchors.leftMargin: 0; anchors.rightMargin: 0; anchors.topMargin:0; anchors.bottomMargin: root.screenEdgeMargin;
0269 anchors.horizontalCenterOffset: 0; anchors.verticalCenterOffset: 0;
0270 }
0271 },
0272 State {
0273 name: "top"
0274 when: ((plasmoid.location === PlasmaCore.Types.TopEdge && !reversedEnabled) ||
0275 (plasmoid.location === PlasmaCore.Types.BottomEdge && reversedEnabled))
0276
0277 AnchorChanges {
0278 target: mainIndicatorElement
0279 anchors{ verticalCenter:undefined; horizontalCenter:parent.horizontalCenter;
0280 top:parent.top; bottom:undefined; left:undefined; right:undefined;}
0281 }
0282 PropertyChanges{
0283 target: mainIndicatorElement
0284 anchors.leftMargin: 0; anchors.rightMargin: 0; anchors.topMargin: root.screenEdgeMargin; anchors.bottomMargin:0;
0285 anchors.horizontalCenterOffset: 0; anchors.verticalCenterOffset: 0;
0286 }
0287 },
0288 State {
0289 name: "right"
0290 when: ((plasmoid.location === PlasmaCore.Types.RightEdge && !reversedEnabled) ||
0291 (plasmoid.location === PlasmaCore.Types.LeftEdge && reversedEnabled))
0292
0293 AnchorChanges {
0294 target: mainIndicatorElement
0295 anchors{ verticalCenter:parent.verticalCenter; horizontalCenter:undefined;
0296 top:undefined; bottom:undefined; left:undefined; right:parent.right;}
0297 }
0298 PropertyChanges{
0299 target: mainIndicatorElement
0300 anchors.leftMargin: 0; anchors.rightMargin: root.screenEdgeMargin; anchors.topMargin:0; anchors.bottomMargin:0;
0301 anchors.horizontalCenterOffset: 0; anchors.verticalCenterOffset: 0;
0302 }
0303 }
0304 ]
0305 }
0306 }// number of windows indicator
0307