Skip to content
Snippets Groups Projects
NhekoBusyIndicator.qml 1.67 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nicolas Werner's avatar
    Nicolas Werner committed
    // SPDX-FileCopyrightText: 2021 Nheko Contributors
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    // SPDX-License-Identifier: GPL-3.0-or-later
    
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    import QtQuick.Controls 2.3
    
    import QtQuick.Layouts 1.2
    
    import im.nheko 1.0
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    
    BusyIndicator {
        id: control
    
        contentItem: Item {
    
            implicitWidth: 64
            implicitHeight: 64
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    
            Item {
                id: item
    
                height: Math.min(parent.height, parent.width)
                width: height
                opacity: control.running ? 1 : 0
    
                RotationAnimator {
                    target: item
                    running: control.visible && control.running
                    from: 0
                    to: 360
                    loops: Animation.Infinite
                    duration: 2000
                }
    
                Repeater {
                    id: repeater
    
                    model: 6
    
                    Rectangle {
                        implicitWidth: radius * 2
                        implicitHeight: radius * 2
                        radius: item.height / 6
    
                        color: Nheko.colors.text
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                        opacity: (index + 2) / (repeater.count + 2)
                        transform: [
                            Translate {
                                y: -Math.min(item.width, item.height) * 0.5 + item.height / 6
                            },
                            Rotation {
                                angle: index / repeater.count * 360
                                origin.x: item.height / 2
                                origin.y: item.height / 2
                            }
                        ]
                    }
    
                }
    
                Behavior on opacity {
                    OpacityAnimator {
                        duration: 250
                    }
    
                }
    
            }
    
        }
    
    }