Warning, /plasma/plasma-mobile/containments/homescreens/folio/package/contents/ui/HomeScreenPages.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org> 0002 // SPDX-License-Identifier: LGPL-2.0-or-later 0003 0004 import QtQuick 0005 import QtQuick.Window 0006 import QtQuick.Layouts 0007 0008 import org.kde.plasma.components 3.0 as PC3 0009 import org.kde.kirigami 2.10 as Kirigami 0010 import org.kde.private.mobile.homescreen.folio 1.0 as Folio 0011 0012 MouseArea { 0013 id: root 0014 0015 property var homeScreen 0016 0017 readonly property real verticalMargin: Math.round((Folio.HomeScreenState.pageHeight - Folio.HomeScreenState.pageContentHeight) / 2) 0018 readonly property real horizontalMargin: Math.round((Folio.HomeScreenState.pageWidth - Folio.HomeScreenState.pageContentWidth) / 2) 0019 0020 onPressAndHold: Folio.HomeScreenState.openSettingsView() 0021 0022 Repeater { 0023 model: Folio.PageListModel 0024 0025 delegate: HomeScreenPage { 0026 id: homeScreenPage 0027 pageNum: model.index 0028 pageModel: model.delegate 0029 homeScreen: root.homeScreen 0030 0031 anchors.fill: root 0032 anchors.leftMargin: root.horizontalMargin 0033 anchors.rightMargin: root.horizontalMargin 0034 anchors.topMargin: root.verticalMargin 0035 anchors.bottomMargin: root.verticalMargin 0036 0037 // animation so that full opacity is only when the page is in view 0038 readonly property real distanceToCenter: Math.abs(-Folio.HomeScreenState.pageViewX - root.width * pageNum) 0039 readonly property real positionX: root.width * index + Folio.HomeScreenState.pageViewX 0040 readonly property real progressToCenter: 1 - Math.min(1, Math.max(0, distanceToCenter / root.width)) 0041 0042 visible: opacity > 0 0043 opacity: { 0044 switch (Folio.FolioSettings.pageTransitionEffect) { 0045 case Folio.FolioSettings.StackTransition: 0046 return (positionX < 0) ? progressToCenter : 0047 ((progressToCenter < 0.3) ? 0 : ((1 / 0.7) * (progressToCenter - 0.3))) 0048 default: 0049 return progressToCenter; 0050 } 0051 } 0052 0053 // x position of page 0054 transform: { 0055 switch (Folio.FolioSettings.pageTransitionEffect) { 0056 case Folio.FolioSettings.SlideTransition: 0057 return [translate]; 0058 case Folio.FolioSettings.CubeTransition: 0059 return [translate, cubeTransitionRotation]; 0060 case Folio.FolioSettings.FadeTransition: 0061 return []; 0062 case Folio.FolioSettings.StackTransition: 0063 return [stackScale, stackTranslate]; 0064 case Folio.FolioSettings.RotationTransition: 0065 return [translate, rotationTransitionRotation]; 0066 default: 0067 return [translate]; 0068 } 0069 } 0070 0071 Translate { 0072 id: translate 0073 x: homeScreenPage.positionX 0074 } 0075 0076 Scale { 0077 id: stackScale 0078 origin.x: Folio.HomeScreenState.pageWidth / 2 0079 origin.y: Folio.HomeScreenState.pageHeight / 2 0080 xScale: (homeScreenPage.positionX < 0) ? 1 : 0.5 + homeScreenPage.progressToCenter * 0.5 0081 yScale: (homeScreenPage.positionX < 0) ? 1 : 0.5 + homeScreenPage.progressToCenter * 0.5 0082 } 0083 0084 Translate { 0085 id: stackTranslate 0086 x: Math.min(0, homeScreenPage.positionX) 0087 } 0088 0089 Rotation { 0090 id: cubeTransitionRotation 0091 origin.x: (positionX < 0) ? 0092 (Folio.HomeScreenState.pageWidth / 2) * homeScreenPage.progressToCenter : 0093 (Folio.HomeScreenState.pageWidth / 2) + (Folio.HomeScreenState.pageWidth / 2) * (1 - homeScreenPage.progressToCenter); 0094 origin.y: Folio.HomeScreenState.pageHeight / 2; 0095 axis { x: 0; y: 1; z: 0 } 0096 angle: { 0097 return Math.min(1, Math.max(0, distanceToCenter / root.width)) * 90 * ((positionX > 0) ? 1 : -1) 0098 } 0099 } 0100 0101 Rotation { 0102 id: rotationTransitionRotation 0103 origin.x: (positionX < 0) ? 0104 (Folio.HomeScreenState.pageWidth / 2) * homeScreenPage.progressToCenter : 0105 (Folio.HomeScreenState.pageWidth / 2) + (Folio.HomeScreenState.pageWidth / 2) * (1 - homeScreenPage.progressToCenter); 0106 origin.y: 0 0107 axis { x: -0.2; y: 0.3; z: 0.5 } 0108 angle: { 0109 return Math.min(1, Math.max(0, distanceToCenter / root.width)) * 90 * ((positionX > 0) ? 1 : -1) 0110 } 0111 } 0112 } 0113 } 0114 }