// SPDX-FileCopyrightText: 2023 Devin Lin // SPDX-License-Identifier: LGPL-2.0-or-later import QtQuick import QtQuick.Layouts import QtQuick.Controls as Controls import QtQuick.Effects import org.kde.kirigami 2.20 as Kirigami import org.kde.private.mobile.homescreen.folio 1.0 as Folio import org.kde.plasma.private.mobileshell.state as MobileShellState import org.kde.plasma.private.mobileshell as MobileShell AbstractDelegate { id: root shadow: true name: application.name property Folio.FolioApplication application property alias iconItem: icon property bool turnToFolder: false property bool turnToFolderAnimEnabled: false function launchApp() { if (application.icon !== "") { MobileShellState.ShellDBusClient.openAppLaunchAnimation( application.icon, application.name, root.iconItem.Kirigami.ScenePosition.x + root.iconItem.width/2, root.iconItem.Kirigami.ScenePosition.y + root.iconItem.height/2, Math.min(root.iconItem.width, root.iconItem.height)); } application.setMinimizedDelegate(root); MobileShell.AppLaunch.launchOrActivateApp(application.storageId); } onAfterClickAnimation: { launchApp(); } contentItem: Item { height: folio.FolioSettings.delegateIconSize width: folio.FolioSettings.delegateIconSize // background for folder creation animation Rectangle { id: rect radius: Kirigami.Units.largeSpacing color: Qt.rgba(255, 255, 255, 0.3) anchors.fill: parent opacity: root.turnToFolder ? 1 : 0 property real scaleAmount: root.turnToFolder ? 1.2 : 1.0 Behavior on scaleAmount { enabled: root.turnToFolderAnimEnabled NumberAnimation { duration: Kirigami.Units.longDuration; easing.type: Easing.InOutQuad } } Behavior on opacity { enabled: root.turnToFolderAnimEnabled NumberAnimation { duration: Kirigami.Units.longDuration; easing.type: Easing.InOutQuad } } transform: Scale { origin.x: rect.width / 2 origin.y: rect.height / 2 xScale: rect.scaleAmount yScale: rect.scaleAmount } } // app icon DelegateAppIcon { id: icon folio: root.folio anchors.fill: parent source: root.application.icon property real scaleAmount: root.turnToFolder ? 0.3 : 1.0 Behavior on scaleAmount { enabled: root.turnToFolderAnimEnabled NumberAnimation { duration: root.turnToFolderAnimEnabled ? Kirigami.Units.longDuration : 0; easing.type: Easing.InOutQuad } } transform: Scale { origin.x: icon.width / 2 origin.y: icon.height / 2 xScale: icon.scaleAmount yScale: icon.scaleAmount } Rectangle { anchors { horizontalCenter: parent.horizontalCenter bottom: parent.bottom bottomMargin: -Kirigami.Units.smallSpacing } visible: root.application.running radius: width width: Kirigami.Units.smallSpacing height: width color: Kirigami.Theme.highlightColor } } } }