Warning, /plasma/latte-dock/containment/package/contents/ui/layouts/ParabolicEdgeSpacer.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2022 Michail Vourlakos <mvourlakos@gmail.com>
0003 SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005
0006 import QtQuick 2.7
0007 import org.kde.latte.core 0.2 as LatteCore
0008
0009 Item {
0010 id: edgeSpacer
0011 width: length
0012 height: length
0013
0014 readonly property bool isParabolicEdgeSpacer: true
0015 readonly property bool isHidden: true
0016
0017 readonly property bool isAutoFillApplet: false
0018 readonly property bool isInternalViewSplitter: false
0019 readonly property bool isPlaceHolder: false
0020 readonly property bool isTailSpacer: index < parent.beginIndex
0021 readonly property bool isHeadSpacer: index >= parent.beginIndex
0022
0023 readonly property int animationTime: animations.speedFactor.normal * (1.2*animations.duration.small)
0024 readonly property int hiddenItemsCount: (parabolic.spread - 1)/2
0025
0026 property int index: -1
0027 property real length: 0
0028
0029 Behavior on length {
0030 id: animatedLengthBehavior
0031 enabled: !parabolic.directRenderingEnabled || restoreAnimation.running
0032 NumberAnimation {
0033 duration: 3 * edgeSpacer.animationTime
0034 easing.type: Easing.OutCubic
0035 }
0036 }
0037
0038 Behavior on length {
0039 enabled: !animatedLengthBehavior.enabled
0040 NumberAnimation { duration: 0 }
0041 }
0042
0043 ParallelAnimation{
0044 id: restoreAnimation
0045
0046 PropertyAnimation {
0047 target: edgeSpacer
0048 property: "length"
0049 to: 0
0050 duration: 4 * edgeSpacer.animationTime
0051 easing.type: Easing.InCubic
0052 }
0053 }
0054
0055 function updateScale(istail, newScales) {
0056 var nextFactor = 0;
0057 for (var i=0; i<hiddenItemsCount; ++i) {
0058 if (i<newScales.length) {
0059 nextFactor += (newScales[i] - 1);
0060 }
0061 }
0062
0063 length = nextFactor * metrics.totals.length;
0064 }
0065
0066 function sltUpdateLowerItemScale(delegateIndex, newScales) {
0067 if (!isTailSpacer || delegateIndex !== index) {
0068 return;
0069 }
0070
0071 if (myView.alignment === LatteCore.Types.Center || myView.alignment === LatteCore.Types.Justify) {
0072 updateScale(isTailSpacer, newScales);
0073 } else {
0074 length = 0;
0075 }
0076
0077 //! clear side neighbours
0078 parabolic.sglUpdateLowerItemScale(index - 1, [1]);
0079 }
0080
0081 function sltUpdateHigherItemScale(delegateIndex, newScales) {
0082 if (!isHeadSpacer || delegateIndex !== index) {
0083 return;
0084 }
0085
0086 if (myView.alignment === LatteCore.Types.Center || myView.alignment === LatteCore.Types.Justify) {
0087 updateScale(isHeadSpacer, newScales);
0088 } else {
0089 length = 0;
0090 }
0091
0092 //! clear side neighbours
0093 parabolic.sglUpdateHigherItemScale(index + 1, [1]);
0094 }
0095
0096 function sltClearZoom(){
0097 restoreAnimation.start();
0098 }
0099
0100 Component.onCompleted: {
0101 parabolic.sglClearZoom.connect(sltClearZoom);
0102 parabolic.sglUpdateLowerItemScale.connect(sltUpdateLowerItemScale);
0103 parabolic.sglUpdateHigherItemScale.connect(sltUpdateHigherItemScale);
0104 }
0105
0106 Component.onDestruction: {
0107 parabolic.sglClearZoom.disconnect(sltClearZoom);
0108 parabolic.sglUpdateLowerItemScale.disconnect(sltUpdateLowerItemScale);
0109 parabolic.sglUpdateHigherItemScale.disconnect(sltUpdateHigherItemScale);
0110 }
0111
0112 Loader{
0113 anchors.fill: parent
0114 active: debug.spacersEnabled
0115
0116 sourceComponent: Rectangle{
0117 color: "#44ff0000"
0118 border.width: 1
0119 border.color: "red"
0120 }
0121 }
0122 }