on xenial help sign in
fix selected animation
commitbe428f2893f0cd6ed1fe40faa71302da0547d223 authorMichael Zanetti <michael.zanetti@canonical.com> dateWed 15 Jan 2014, 18:53 (13 years ago) parent2e2f62f
1 file changed+50−39
qml/Stages/PhoneStage.qml+50−39
qml/Stages/PhoneStage.qml+50−39
@@ -261,10 +261,12 @@ Item {
261261
262262 property real oldProgress: 0
263263 onProgressChanged: {
264− if (oldProgress <= coverFlip.progressMarker1 && progress > coverFlip.progressMarker1) {
265− ApplicationManager.focusApplication(ApplicationManager.get(1).appId)
266− } else if (oldProgress >= coverFlip.progressMarker1 && progress <= coverFlip.progressMarker1) {
267− ApplicationManager.focusApplication(ApplicationManager.get(1).appId)
264+ if (coverFlipDragArea.dragging) {
265+ if (oldProgress <= coverFlip.progressMarker1 && progress > coverFlip.progressMarker1) {
266+ ApplicationManager.move(0, 1)
267+ } else if (oldProgress >= coverFlip.progressMarker1 && progress <= coverFlip.progressMarker1) {
268+ ApplicationManager.move(0, 1)
269+ }
268270 }
269271 oldProgress = progress;
270272 }
@@ -272,14 +274,20 @@ Item {
272274 function snap() {
273275 if (coverFlip.progress < 0.25) {
274276 snapAnimation.targetContentX = 0
277+ snapAnimation.targetAppId = ApplicationManager.get(0).appId;
278+ } else if (coverFlip.progress < coverFlip.progressMarker1) {
279+ snapAnimation.targetContentX = root.width * coverFlip.progressMarker1
280+ snapAnimation.targetAppId = ApplicationManager.get(1).appId;
275281 } else if (coverFlip.progress < 0.6) {
276282 snapAnimation.targetContentX = root.width * coverFlip.progressMarker1
283+ snapAnimation.targetAppId = ApplicationManager.get(0).appId;
277284 } else {
278285 if (ApplicationManager.count == 3) {
279286 snapAnimation.targetContentX = root.width * .8;
280287 } else {
281288 snapAnimation.targetContentX = root.width * .9;
282289 }
290+ snapAnimation.targetAppId = "";
283291 }
284292 snapAnimation.start();
285293 }
@@ -291,6 +299,7 @@ Item {
291299 SequentialAnimation {
292300 id: snapAnimation
293301 property var targetContentX
302+ property var targetAppId
294303
295304 UbuntuNumberAnimation {
296305 target: coverFlickable
@@ -302,6 +311,9 @@ Item {
302311 if (snapAnimation.targetContentX == root.width * coverFlip.progressMarker1) {
303312 coverFlickable.contentX = 0;
304313 }
314+ if (snapAnimation.targetAppId) {
315+ ApplicationManager.focusApplication(snapAnimation.targetAppId);
316+ }
305317 }
306318 }
307319 }
@@ -332,6 +344,7 @@ Item {
332344 // We need to remember some values when app is selected to be able to animate it to the foreground
333345 property real selectedXTranslation: 0
334346 property real selectedTranslatedProgress: 0
347+ property real selectedProgress: 0
335348 property real selectedAngle: 0
336349 property real selectedXScale: 0
337350
@@ -339,8 +352,10 @@ Item {
339352 appImage.selectedXTranslation = appImage.xTranslation;
340353 appImage.selectedAngle = appImage.angle;
341354 appImage.selectedXScale = appImage.xScale;
342− appImage.selectedTranslatedProgress = appImage.translatedProgress;
355+ appImage.selectedTranslatedProgress = appImage.translatedProgress - coverFlip.progressMarker1;
356+ appImage.selectedProgress = appImage.progress - coverFlip.progressMarker1;
343357 appImage.isSelected = true;
358+ switchToAppAnimation.targetContentX = coverFlip.progressMarker1 * root.width
344359 switchToAppAnimation.start();
345360 }
346361
@@ -370,14 +385,18 @@ Item {
370385 default:
371386 if (appImage.progress > coverFlip.progressMarker1) {
372387 xTranslate = xTranslateEasing.value * xTranslateEasing.period;
388+ if (appImage.isSelected) {
389+ var translateDiff = root.width * index + appImage.selectedXTranslation
390+ var progressDiff = appImage.selectedProgress
391+ var progress = progressDiff - (appImage.progress - coverFlip.progressMarker1);
392+ // progress : progressDiff = translate : translateDiff
393+ var newTranslate = progress * translateDiff / progressDiff;
394+
395+ xTranslate = appImage.selectedXTranslation - newTranslate;
396+ }
373397 break;
374398 }
375399 }
376− if (appImage.isSelected) {
377− var newTranslate = selectedXTranslateEasing.value * selectedXTranslateEasing.period
378− xTranslate = appImage.selectedXTranslation + newTranslate;
379− }
380−
381400 return xTranslate;
382401 }
383402
@@ -416,12 +435,17 @@ Item {
416435 // make sure we stop at the left screen edge
417436 newAngle = Math.max(newAngle, coverFlip.endAngle);
418437
419− }
420− if (appImage.isSelected) {
421− var selectedAngleTranslate = selectedAngleEasing.value * selectedAngleEasing.period
422− newAngle = appImage.selectedAngle - selectedAngleTranslate;
423− }
438+ if (appImage.isSelected) {
439+// var selectedAngleTranslate = selectedAngleEasing.value * selectedAngleEasing.period
440+ var angleDiff = appImage.selectedAngle
441+ var progressDiff = appImage.selectedProgress
442+ var progress = progressDiff - (appImage.progress - coverFlip.progressMarker1);
443+ // progress : progressDiff = angle : angleDiff
444+ var selectedAngleTranslate = progress * angleDiff / progressDiff;
424445
446+ newAngle = appImage.selectedAngle - selectedAngleTranslate;
447+ }
448+ }
425449 return newAngle;
426450 }
427451
@@ -448,51 +472,37 @@ Item {
448472 // Intentionally no break
449473 default:
450474 scale = coverFlip.maxScale - scaleEasing.value * scaleEasing.period;
451− }
452− if (appImage.isSelected) {
453− var selectedScaleTranslate = selectedScaleEasing.value * selectedScaleEasing.period
454− scale = appImage.selectedXScale + selectedScaleTranslate;
475+ if (appImage.isSelected) {
476+ var scaleDiff = -(1 - appImage.selectedXScale)
477+ var progressDiff = appImage.selectedProgress
478+ var progress = progressDiff - (appImage.progress - coverFlip.progressMarker1);
479+ // progress : progressDiff = angle : angleDiff
480+ var selectedScaleTranslate = progress * scaleDiff / progressDiff;
481+
482+ scale = appImage.selectedXScale - selectedScaleTranslate;
483+ }
455484 }
456485 return Math.min(coverFlip.maxScale, Math.max(coverFlip.minScale, scale));
457486 }
458487
459−
460488 EasingCurve {
461489 id: xTranslateEasing
462490 type: EasingCurve.OutQuad
463491 period: index * -width
464492 progress: appImage.translatedProgress
465493 }
466− EasingCurve {
467− id: selectedXTranslateEasing
468− type: EasingCurve.Linear
469− period: xTranslateEasing.period - appImage.selectedXTranslation
470− progress: appImage.selectedTranslatedProgress - xTranslateEasing.progress
471− }
472494 EasingCurve {
473495 id: angleEasing
474496 type: EasingCurve.InQuad
475497 period: coverFlip.startAngle - coverFlip.endAngle
476498 progress: appImage.translatedProgress
477499 }
478− EasingCurve {
479− id: selectedAngleEasing
480− type: EasingCurve.Linear
481− period: appImage.selectedAngle
482− progress: appImage.selectedTranslatedProgress - angleEasing.progress
483− }
484500 EasingCurve {
485501 id: scaleEasing
486502 type: EasingCurve.Linear
487503 period: coverFlip.maxScale - coverFlip.minScale
488504 progress: appImage.translatedProgress
489505 }
490− EasingCurve {
491− id: selectedScaleEasing
492− type: EasingCurve.Linear
493− period: 1 - appImage.selectedXScale
494− progress: appImage.selectedTranslatedProgress - scaleEasing.progress
495− }
496506
497507 transform: [
498508 Rotation {
@@ -520,8 +530,9 @@ Item {
520530
521531 SequentialAnimation {
522532 id: switchToAppAnimation
533+ property int targetContentX
523534 ParallelAnimation {
524− UbuntuNumberAnimation { target: coverFlickable; property: "contentX"; to: 0}
535+ UbuntuNumberAnimation { target: coverFlickable; property: "contentX"; to: switchToAppAnimation.targetContentX }
525536 }
526537 ScriptAction {
527538 script: {