From fddf5e9f314dea3ac4439dd4aeb88bcfd40e0a6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20B=C3=BCchi?= Date: Sun, 2 Jun 2024 01:46:03 +0200 Subject: [PATCH] add icon list to task scrub mode --- kwin/mobiletaskswitcher/qml/Task.qml | 1 - kwin/mobiletaskswitcher/qml/TaskSwitcher.qml | 61 +++++++++++++++----- 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/kwin/mobiletaskswitcher/qml/Task.qml b/kwin/mobiletaskswitcher/qml/Task.qml index eb9bd80e..fdd540ee 100644 --- a/kwin/mobiletaskswitcher/qml/Task.qml +++ b/kwin/mobiletaskswitcher/qml/Task.qml @@ -17,7 +17,6 @@ Item { required property var taskSwitcher required property QtObject window - required property int index required property var model diff --git a/kwin/mobiletaskswitcher/qml/TaskSwitcher.qml b/kwin/mobiletaskswitcher/qml/TaskSwitcher.qml index ba39e184..67ebcddd 100644 --- a/kwin/mobiletaskswitcher/qml/TaskSwitcher.qml +++ b/kwin/mobiletaskswitcher/qml/TaskSwitcher.qml @@ -430,10 +430,55 @@ FocusScope { } } + RowLayout { + id: scrubIconList + opacity: taskSwitcherHelpers.isInTaskScrubMode ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: Kirigami.Units.longDuration } } + + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottomMargin: taskSwitcherHelpers.openedYPosition * 5 / 8 + + anchors.horizontalCenterOffset: { + let size = Kirigami.Units.iconSizes.large + Kirigami.Units.largeSpacing * 2; + let offset = (root.state.currentTaskIndex - 0.5) * size; + return offset; + } + Behavior on anchors.horizontalCenterOffset { + NumberAnimation { + // TODO: this duration should track the duration of xAnim but that is variable through function parameter + // how do we make sure this is always the same duration? + duration: Kirigami.Units.longDuration * 2; + easing.type: Easing.OutBack; + } + } + + spacing: Kirigami.Units.largeSpacing * 2 + + layoutDirection: Qt.RightToLeft + + Repeater { + model: root.tasksModel + + delegate: Kirigami.Icon { + id: iconDelegate + + required property QtObject window + required property int index + + readonly property bool isCenteredIcon: iconDelegate.index === root.state.currentTaskIndex; + Layout.preferredHeight: isCenteredIcon ? Kirigami.Units.iconSizes.huge : Kirigami.Units.iconSizes.large + Layout.preferredWidth: isCenteredIcon ? Kirigami.Units.iconSizes.huge : Kirigami.Units.iconSizes.large + Layout.alignment: Qt.AlignVCenter + source: iconDelegate.window.icon + } + } + } + RowLayout { id: scrubIndicator opacity: taskSwitcherHelpers.isInTaskScrubMode ? 1 : 0 - Behavior on opacity { NumberAnimation { duration: 200} } + Behavior on opacity { NumberAnimation { duration: 200 } } anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter @@ -442,7 +487,7 @@ FocusScope { Kirigami.Icon { id: iconScrubBack opacity: root.state.currentTaskIndex == 0 ? 0.3 : 1 - Behavior on opacity { NumberAnimation { duration: 200} } + Behavior on opacity { NumberAnimation { duration: Kirigami.Units.longDuration * 2; easing.type: Easing.OutExpo } } Layout.alignment: Qt.AlignHCenter implicitWidth: Kirigami.Units.iconSizes.medium implicitHeight: Kirigami.Units.iconSizes.medium @@ -450,16 +495,6 @@ FocusScope { color: "white" } - /*Kirigami.Heading { - Layout.fillWidth: true - Layout.maximumWidth: root.width * 0.75 - Layout.alignment: Qt.AlignHCenter - color: "white" - level: 3 - wrapMode: Text.Wrap - horizontalAlignment: Text.AlignHCenter - text: i18n("Swipe") - }*/ Item { width: taskSwitcherHelpers.windowWidth / 4 } @@ -467,7 +502,7 @@ FocusScope { Kirigami.Icon { id: iconScrubFront opacity: root.state.currentTaskIndex == tasksCount - 1 ? 0.3 : 1 - Behavior on opacity { NumberAnimation { duration: 200} } + Behavior on opacity { NumberAnimation { duration: Kirigami.Units.longDuration * 2; easing.type: Easing.OutExpo } } Layout.alignment: Qt.AlignHCenter implicitWidth: Kirigami.Units.iconSizes.medium implicitHeight: Kirigami.Units.iconSizes.medium