import qs.modules.common import QtQuick import QtQuick.Layouts Text { id: root property bool animateChange: false property real animationDistanceX: 0 property real animationDistanceY: 6 renderType: Text.NativeRendering verticalAlignment: Text.AlignVCenter font { hintingPreference: Font.PreferFullHinting family: Appearance?.font.family.main ?? "sans-serif" pixelSize: Appearance?.font.pixelSize.small ?? 15 } color: Appearance?.m3colors.m3onBackground ?? "black" linkColor: Appearance?.m3colors.m3primary component Anim: NumberAnimation { target: root duration: 300 / 2 easing.type: Easing.BezierSpline easing.bezierCurve: Appearance.animation.elementMoveFast.bezierCurve } Behavior on text { id: textAnimationBehavior property real originalX: root.x property real originalY: root.y enabled: root.animateChange SequentialAnimation { alwaysRunToEnd: true ScriptAction { script: textAnimationBehavior.originalX = root.x; } ScriptAction { script: textAnimationBehavior.originalY = root.y; } ParallelAnimation { Anim { property: "x" to: textAnimationBehavior.originalX - root.animationDistanceX easing.type: Easing.InSine } Anim { property: "y" to: textAnimationBehavior.originalY - root.animationDistanceY easing.type: Easing.InSine } Anim { property: "opacity" to: 0 easing.type: Easing.InSine } } PropertyAction {} // Tie the text update to this point (we don't want it to happen during the first slide+fade) PropertyAction { target: root property: "x" value: textAnimationBehavior.originalX + root.animationDistanceX } PropertyAction { target: root property: "y" value: textAnimationBehavior.originalY + root.animationDistanceY } ParallelAnimation { Anim { property: "x" to: textAnimationBehavior.originalX easing.type: Easing.OutSine } Anim { property: "y" to: textAnimationBehavior.originalY easing.type: Easing.OutSine } Anim { property: "opacity" to: 1 easing.type: Easing.OutSine } } } } }