Warning, /utilities/alpaka/src/apps/qml/TypingIndicator.qml is written in an unsupported language. File is not indexed.
0001 /* SPDX-FileCopyrightText: 2020 Carl Schwan <carl@carlschwan.de> 0002 * SPDX-FileCopyrightText: 2020 Noah Davis <noahadvs@gmail.com> 0003 * SPDX-FileCopyrightText: 2021 Srevin Saju <srevinsaju@sugarlabs.org> 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 // Please note that this is a slightly tweaked version of the typing indicator from Neochat, so go there if you have any 0008 // problems with the animation. 0009 0010 import QtQuick 0011 import QtQuick.Layouts 0012 import QtQuick.Controls as QQC2 0013 import org.kde.kirigami as Kirigami 0014 0015 Loader { 0016 id: root 0017 0018 active: visible 0019 sourceComponent: QQC2.Pane { 0020 id: typingPane 0021 0022 leftPadding: Kirigami.Units.largeSpacing 0023 rightPadding: Kirigami.Units.largeSpacing 0024 topPadding: Kirigami.Units.smallSpacing 0025 bottomPadding: Kirigami.Units.smallSpacing 0026 spacing: Kirigami.Units.largeSpacing 0027 0028 FontMetrics { 0029 id: fontMetrics 0030 } 0031 0032 Kirigami.Theme.colorSet: Kirigami.Theme.View 0033 Kirigami.Theme.inherit: false 0034 0035 contentItem: Row { 0036 id: dotRow 0037 property int duration: 400 0038 spacing: Kirigami.Units.smallSpacing 0039 Repeater { 0040 model: 3 0041 delegate: Rectangle { 0042 id: dot 0043 color: Kirigami.Theme.textColor 0044 radius: height/2 0045 implicitWidth: fontMetrics.xHeight 0046 implicitHeight: fontMetrics.xHeight 0047 // rotating 45 degrees makes the dots look a bit smoother when scaled up 0048 rotation: 45 0049 opacity: 0.5 0050 scale: 1 0051 // FIXME: Sometimes the animation timings for each 0052 // dot drift slightly reletative to each other. 0053 // Not everyone can see this, but I'm pretty sure it's there. 0054 SequentialAnimation { 0055 running: true 0056 PauseAnimation { duration: dotRow.duration * index / 2 } 0057 SequentialAnimation { 0058 loops: Animation.Infinite 0059 ParallelAnimation { 0060 // Animators unfortunately sync up instead of being 0061 // staggered, so I'm using NumberAnimations instead. 0062 NumberAnimation { 0063 target: dot; property: "scale"; 0064 from: 1; to: 1.33 0065 duration: dotRow.duration 0066 } 0067 NumberAnimation { 0068 target: dot; property: "opacity" 0069 from: 0.5; to: 1 0070 duration: dotRow.duration 0071 } 0072 } 0073 ParallelAnimation { 0074 NumberAnimation { 0075 target: dot; property: "scale" 0076 from: 1.33; to: 1 0077 duration: dotRow.duration 0078 } 0079 NumberAnimation { 0080 target: dot; property: "opacity" 0081 from: 1; to: 0.5 0082 duration: dotRow.duration 0083 } 0084 } 0085 PauseAnimation { duration: dotRow.duration } 0086 } 0087 } 0088 } 0089 } 0090 } 0091 0092 leftInset: !mirrored ? 0 : -background.radius 0093 rightInset: mirrored ? 0 : -background.radius 0094 bottomInset: -background.radius 0095 background: Rectangle { 0096 color: palette.alternateBase 0097 } 0098 } 0099 }