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 }