dashboard: fix tab indicator animation

This commit is contained in:
2 * r + 2 * t 2025-05-26 11:43:09 +08:00
parent db2eaaa3d0
commit daf92f36e1
2 changed files with 7 additions and 3 deletions

View file

@ -10,11 +10,12 @@ Item {
id: root id: root
required property PersistentProperties visibilities required property PersistentProperties visibilities
readonly property real nonAnimWidth: view.implicitWidth + viewWrapper.anchors.margins * 2
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
implicitWidth: view.implicitWidth + viewWrapper.anchors.margins * 2 implicitWidth: nonAnimWidth
implicitHeight: tabs.implicitHeight + tabs.anchors.topMargin + view.implicitHeight + viewWrapper.anchors.margins * 2 implicitHeight: tabs.implicitHeight + tabs.anchors.topMargin + view.implicitHeight + viewWrapper.anchors.margins * 2
Tabs { Tabs {
@ -26,6 +27,7 @@ Item {
anchors.topMargin: Appearance.padding.normal anchors.topMargin: Appearance.padding.normal
anchors.margins: Appearance.padding.large anchors.margins: Appearance.padding.large
nonAnimWidth: root.nonAnimWidth
currentIndex: view.currentIndex currentIndex: view.currentIndex
} }

View file

@ -8,9 +8,10 @@ import QtQuick.Controls
Item { Item {
id: root id: root
required property real nonAnimWidth
property alias currentIndex: bar.currentIndex property alias currentIndex: bar.currentIndex
implicitHeight: bar.height + indicator.height + indicator.anchors.topMargin + separator.height implicitHeight: bar.implicitHeight + indicator.implicitHeight + indicator.anchors.topMargin + separator.implicitHeight
TabBar { TabBar {
id: bar id: bar
@ -53,7 +54,8 @@ Item {
x: { x: {
const tab = bar.currentItem; const tab = bar.currentItem;
return tab.x + (tab.width - tab.implicitWidth) / 2; const width = (root.nonAnimWidth - DashboardConfig.sizes.tabIndicatorSpacing * (bar.count - 1) * 2) / bar.count
return width * tab.TabBar.index + (width - tab.implicitWidth) / 2;
} }
clip: true clip: true