@@ -6,6 +6,7 @@ SpreadDelegate {
8 property bool selected: false
8 property bool selected: false
9+ property bool otherSelected: false
10 property real progress: 0
11 property real progress: 0
11 property real animatedProgress: 0
12 property real animatedProgress: 0
@@ -22,24 +23,59 @@ SpreadDelegate {
23 onSelectedChanged: {
24 onSelectedChanged: {
24 if (selected) {
25 if (selected) {
25− priv.selectedProgress = root.progress
26+ priv.snapshot();
26− priv.selectedXTranslate = priv.xTranslate;
27+ }
27− priv.selectedAngle = priv.angle;
28+ print("setting selected to", selected)
28− priv.selectedScale = priv.scale;
29+ priv.isSelected = selected;
29− priv.isSelected = true;
30+ }
30− print("tile", index, "selected!!!!!!!!!!!!!!!!")
31+
32+ onOtherSelectedChanged: {
36+ priv.otherSelected = otherSelected;
42+ if (spreadView.stage == 1) {
44+ priv.stage2startTranslate = priv.easingAnimation(0, spreadView.positionMarker4, 0, -spreadView.width, spreadView.positionMarker4) + spreadView.width;
31− } else {
45+ } else if (index == 1) {
32− priv.isSelected = false;
46+ // find where the main easing for Tile 1 would be when reaching stage 2
47+ var stage2Progress = spreadView.positionMarker4 - spreadView.tileDistance / spreadView.width;
48+ priv.stage2startTranslate = priv.easingAnimation(0, stage2Progress, 0, -spreadView.width + root.endDistance, stage2Progress);
49+ priv.stage2startAngle = priv.easingAnimation(0, stage2Progress, root.startAngle, root.endAngle, stage2Progress)
50+ priv.stage2startScale = priv.easingAnimation(0, stage2Progress, root.startScale, root.endScale, stage2Progress);
36 QtObject {
56 QtObject {
38 property bool isSelected: false
58 property bool isSelected: false
59+ property bool otherSelected: false
39 property real selectedProgress
60 property real selectedProgress
40 property real selectedXTranslate
61 property real selectedXTranslate
41 property real selectedAngle
62 property real selectedAngle
42 property real selectedScale
63 property real selectedScale
64+ property real selectedOpacity
66+ // Those values are needed as target values for the end of stage 1.
67+ // As they are static values, lets caluclate them once when entering stage 1 instead of calculating them in each animation pass.
68+ property real stage2startTranslate
69+ property real stage2startAngle
70+ property real stage2startScale
72+ function snapshot() {
73+ selectedProgress = root.progress;
74+ selectedXTranslate = xTranslate;
75+ selectedAngle = angle;
76+ selectedScale = scale;
77+ selectedOpacity = opacity;
44 property real negativeProgress: {
80 property real negativeProgress: {
45 if (index < 2) {
81 if (index < 2) {
@@ -63,14 +99,11 @@ SpreadDelegate {
63 var translation = 0;
99 var translation = 0;
64 switch (index) {
100 switch (index) {
66− print("+++++++++++++++++++++++++++", spreadView.stage, priv.isSelected)
67 if (spreadView.stage == 0) {
102 if (spreadView.stage == 0) {
68 translation = linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.width * .25, root.animatedProgress)
103 translation = linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.width * .25, root.animatedProgress)
70 } else if (spreadView.stage == 1){
105 } else if (spreadView.stage == 1){
71− // find where the main easing would be when reaching stage 2
72− var targetTranslate = easingAnimation(0, spreadView.positionMarker4, 0, -spreadView.width, spreadView.positionMarker4) + spreadView.width
73− translation = linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, -spreadView.width * .25, targetTranslate, root.progress)
106+ translation = linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, -spreadView.width * .25, priv.stage2startTranslate, root.progress)
75 } else if (!priv.isSelected){ // Stage 2
108 } else if (!priv.isSelected){ // Stage 2
76 // Move the first tile a bit to the right to be aligned with the others
109 // Move the first tile a bit to the right to be aligned with the others
@@ -88,13 +121,8 @@ SpreadDelegate {
88 translation = linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.width * spreadView.snapPosition, root.animatedProgress)
121 translation = linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.width * spreadView.snapPosition, root.animatedProgress)
90 } else if (spreadView.stage == 1 && !priv.isSelected) {
123 } else if (spreadView.stage == 1 && !priv.isSelected) {
91− // find where the main easing would be when reaching stage 2
92− var stage2Progress = spreadView.positionMarker4 - spreadView.tileDistance / spreadView.width;
93− targetTranslate = easingAnimation(0, stage2Progress, 0, -spreadView.width + root.endDistance, stage2Progress);
95 translation = linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4,
124 translation = linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4,
96− -spreadView.width * spreadView.snapPosition, targetTranslate, root.progress);
125+ -spreadView.width * spreadView.snapPosition, priv.stage2startTranslate, root.progress);
@@ -106,7 +134,6 @@ SpreadDelegate {
106 if (priv.isSelected) {
134 if (priv.isSelected) {
107 // Distance to left edge
135 // Distance to left edge
108 var targetTranslate = -spreadView.width - ((index - 1) * root.startDistance)
136 var targetTranslate = -spreadView.width - ((index - 1) * root.startDistance)
109− print("selectedProgress:", selectedProgress, "negativeProgress:", negativeProgress, "progress", root.progress)
110 translation = linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, targetTranslate, root.progress)
137 translation = linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, targetTranslate, root.progress)
@@ -128,10 +155,7 @@ SpreadDelegate {
128 newAngle = linearAnimation(0, spreadView.positionMarker2, root.startAngle, root.startAngle * (1-spreadView.snapPosition), root.animatedProgress)
155 newAngle = linearAnimation(0, spreadView.positionMarker2, root.startAngle, root.startAngle * (1-spreadView.snapPosition), root.animatedProgress)
130 } else if (spreadView.stage == 1 && !priv.isSelected) {
157 } else if (spreadView.stage == 1 && !priv.isSelected) {
131− // find where the main easing would be when reaching stage 2
132− var stage2Progress = spreadView.positionMarker4 - spreadView.tileDistance / spreadView.width;
133− var targetAngle = easingAnimation(0, stage2Progress, root.startAngle, root.endAngle, stage2Progress)
134− newAngle = linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, root.startAngle * (1-spreadView.snapPosition), targetAngle, root.progress)
158+ newAngle = linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, root.startAngle * (1-spreadView.snapPosition), priv.stage2startAngle, root.progress)
@@ -160,9 +184,7 @@ SpreadDelegate {
160 newScale = linearAnimation(0, spreadView.positionMarker2, root.tile1StartScale, 1, root.animatedProgress)
184 newScale = linearAnimation(0, spreadView.positionMarker2, root.tile1StartScale, 1, root.animatedProgress)
162 } else if (spreadView.stage == 1 && !priv.isSelected) {
186 } else if (spreadView.stage == 1 && !priv.isSelected) {
163− // find where the main easing would be when reaching positionMarker4
164− var targetScale = easingAnimation(0, spreadView.positionMarker4, root.startScale, root.endScale, spreadView.positionMarker4);
165− newScale = linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, 1, targetScale, root.progress)
187+ newScale = linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, 1, priv.stage2startScale, root.progress)
@@ -174,6 +196,22 @@ SpreadDelegate {
175 return newScale;
197 return newScale;
200+ property real opacity: {
201+ if (otherSelected) {
202+ return linearAnimation (selectedProgress, selectedProgress - .5, selectedOpacity, 0, root.progress)
205+ switch (spreadView.stage) {
207+ return linearAnimation(0, spreadView.positionMarker2, 1, .3, root.animatedProgress)
209+ return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, .3, 1, root.animatedProgress)
179 transform: [
217 transform: [
@@ -191,6 +229,7 @@ SpreadDelegate {
191 x: priv.xTranslate
229 x: priv.xTranslate
232+ opacity: priv.opacity
195 EasingCurve {
234 EasingCurve {
196 id: easingCurve
235 id: easingCurve