Warning, /system/mycroft-gui/import/qml/BusyIndicator.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  * Copyright 2021 by Aditya Mehra <aix.m@outlook.com>
0003  *
0004  * Licensed under the Apache License, Version 2.0 (the "License");
0005  * you may not use this file except in compliance with the License.
0006  * You may obtain a copy of the License at
0007  *
0008  *    http://www.apache.org/licenses/LICENSE-2.0
0009  *
0010  * Unless required by applicable law or agreed to in writing, software
0011  * distributed under the License is distributed on an "AS IS" BASIS,
0012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
0013  * See the License for the specific language governing permissions and
0014  * limitations under the License.
0015  *
0016  */
0017 
0018 import QtQuick 2.15
0019 import QtQuick.Controls 2.15 as Controls
0020 
0021 Controls.BusyIndicator {
0022     id: control
0023     width: 200
0024     height: 200
0025     padding: 0
0026 
0027     //Allow animations to be run at a slower speed if required
0028     property real speed: 1
0029 
0030     onRunningChanged: {
0031         if(!running) {
0032             changeStage()
0033         }
0034     }
0035 
0036     function changeStage() {
0037         canvas.startDeg = 0
0038         canvas.endDeg = 2
0039     }
0040 
0041     contentItem: Canvas {
0042         id: canvas
0043         anchors.fill: parent
0044         antialiasing: true
0045         visible: control.visible
0046 
0047         renderTarget: Canvas.FramebufferObject
0048         property int startDeg: 0
0049         property int endDeg: 2
0050         property color primaryColor: '#22A7F0'
0051 
0052         Behavior on primaryColor {
0053             ColorAnimation { duration: 200 }
0054         }
0055 
0056         onStartDegChanged: requestPaint()
0057         onEndDegChanged: requestPaint()
0058         onPrimaryColorChanged: requestPaint()
0059 
0060         onPaint: {
0061             function deg2Rad(deg) {
0062                 return (deg / 180) * Math.PI;
0063             }
0064 
0065             var ctx = canvas.getContext('2d');
0066             ctx.strokeStyle = primaryColor;
0067             ctx.lineWidth = 20;
0068             ctx.lineCap="round";
0069             ctx.clearRect(0, 0, canvas.width, canvas.height);
0070             ctx.beginPath();
0071             ctx.arc(canvas.width / 2, canvas.height / 2, (canvas.height > canvas.width ? canvas.width : canvas.height) / 2 - 20, deg2Rad(startDeg - 90), deg2Rad(endDeg - 90), false);
0072             ctx.stroke();
0073         }
0074     }
0075 
0076     SequentialAnimation {
0077         id: seqAnimator
0078         running: control.running
0079         loops: Animation.Infinite
0080 
0081         ParallelAnimation {
0082 
0083             NumberAnimation {
0084                 target: canvas
0085                 property: "endDeg"
0086                 to: 360
0087                 duration: 600 * control.speed
0088                 easing.type: Easing.InOutQuad
0089             }
0090 
0091             NumberAnimation {
0092                 target: canvas
0093                 property: "startDeg"
0094                 to: 360
0095                 duration: 900 * control.speed
0096                 easing.type: Easing.InOutQuad
0097             }
0098         }
0099 
0100         ScriptAction {
0101             script: changeStage()
0102         }
0103 
0104         ParallelAnimation {
0105 
0106             NumberAnimation {
0107                 target: canvas
0108                 property: "endDeg"
0109                 to: 360
0110                 duration: 900 * control.speed
0111                 easing.type: Easing.InOutQuad
0112             }
0113 
0114             NumberAnimation {
0115                 loops: 1
0116                 target: canvas
0117                 property: "rotation"
0118                 duration: 1200 * control.speed
0119                 from: 0
0120                 to: 720
0121             }
0122 
0123             NumberAnimation {
0124                 target: canvas
0125                 property: "startDeg"
0126                 to: 360
0127                 duration: 1200 * control.speed
0128                 easing.type: Easing.InOutQuad
0129             }
0130         }
0131 
0132         ScriptAction {
0133             script: changeStage()
0134         }
0135     }
0136 }