Bug 1264125: Queue transitioncancel when animation status is idle

Issue #55
This commit is contained in:
janekptacijarabaci 2018-03-14 09:10:08 +01:00 • committed by Roy Tam
commit ffa8225e06

View file

@ -211,9 +211,9 @@ CSSTransition::QueueEvents()
// perhaps even with different timelines. // perhaps even with different timelines.
// The zero timestamp is for transitionrun events where we ignore the delay // The zero timestamp is for transitionrun events where we ignore the delay
// for the purpose of ordering events. // for the purpose of ordering events.
TimeStamp zeroTimeStamp = AnimationTimeToTimeStamp(zeroDuration); TimeStamp zeroTimeStamp = AnimationTimeToTimeStamp(zeroDuration);
TimeStamp startTimeStamp = ElapsedTimeToTimeStamp(intervalStartTime); TimeStamp startTimeStamp = ElapsedTimeToTimeStamp(intervalStartTime);
TimeStamp endTimeStamp = ElapsedTimeToTimeStamp(intervalEndTime); TimeStamp endTimeStamp = ElapsedTimeToTimeStamp(intervalEndTime);
TransitionPhase currentPhase; TransitionPhase currentPhase;
if (mPendingState != PendingState::NotPending && if (mPendingState != PendingState::NotPending &&
@ -226,30 +226,44 @@ CSSTransition::QueueEvents()
} }
AutoTArray<TransitionEventParams, 3> events; AutoTArray<TransitionEventParams, 3> events;
// Handle cancel events firts
if (mPreviousTransitionPhase != TransitionPhase::Idle &&
currentPhase == TransitionPhase::Idle) {
// FIXME: bug 1264125: We will need to get active time when cancelling
// the transition.
StickyTimeDuration activeTime(0);
TimeStamp activeTimeStamp = ElapsedTimeToTimeStamp(activeTime);
events.AppendElement(TransitionEventParams{ eTransitionCancel,
activeTime,
activeTimeStamp });
}
// All other events
switch (mPreviousTransitionPhase) { switch (mPreviousTransitionPhase) {
case TransitionPhase::Idle: case TransitionPhase::Idle:
if (currentPhase == TransitionPhase::Pending || if (currentPhase == TransitionPhase::Pending ||
currentPhase == TransitionPhase::Before) { currentPhase == TransitionPhase::Before) {
events.AppendElement(TransitionEventParams{ eTransitionRun, events.AppendElement(TransitionEventParams{ eTransitionRun,
intervalStartTime, intervalStartTime,
zeroTimeStamp }); zeroTimeStamp });
} else if (currentPhase == TransitionPhase::Active) { } else if (currentPhase == TransitionPhase::Active) {
events.AppendElement(TransitionEventParams{ eTransitionRun, events.AppendElement(TransitionEventParams{ eTransitionRun,
intervalStartTime, intervalStartTime,
zeroTimeStamp }); zeroTimeStamp });
events.AppendElement(TransitionEventParams{ eTransitionStart, events.AppendElement(TransitionEventParams{ eTransitionStart,
intervalStartTime, intervalStartTime,
startTimeStamp }); startTimeStamp });
} else if (currentPhase == TransitionPhase::After) { } else if (currentPhase == TransitionPhase::After) {
events.AppendElement(TransitionEventParams{ eTransitionRun, events.AppendElement(TransitionEventParams{ eTransitionRun,
intervalStartTime, intervalStartTime,
zeroTimeStamp }); zeroTimeStamp });
events.AppendElement(TransitionEventParams{ eTransitionStart, events.AppendElement(TransitionEventParams{ eTransitionStart,
intervalStartTime, intervalStartTime,
startTimeStamp }); startTimeStamp });
events.AppendElement(TransitionEventParams{ eTransitionEnd, events.AppendElement(TransitionEventParams{ eTransitionEnd,
intervalEndTime, intervalEndTime,
endTimeStamp }); endTimeStamp });
} }
break; break;
@ -257,42 +271,42 @@ CSSTransition::QueueEvents()
case TransitionPhase::Before: case TransitionPhase::Before:
if (currentPhase == TransitionPhase::Active) { if (currentPhase == TransitionPhase::Active) {
events.AppendElement(TransitionEventParams{ eTransitionStart, events.AppendElement(TransitionEventParams{ eTransitionStart,
intervalStartTime, intervalStartTime,
startTimeStamp }); startTimeStamp });
} else if (currentPhase == TransitionPhase::After) { } else if (currentPhase == TransitionPhase::After) {
events.AppendElement(TransitionEventParams{ eTransitionStart, events.AppendElement(TransitionEventParams{ eTransitionStart,
intervalStartTime, intervalStartTime,
startTimeStamp }); startTimeStamp });
events.AppendElement(TransitionEventParams{ eTransitionEnd, events.AppendElement(TransitionEventParams{ eTransitionEnd,
intervalEndTime, intervalEndTime,
endTimeStamp }); endTimeStamp });
} }
break; break;
case TransitionPhase::Active: case TransitionPhase::Active:
if (currentPhase == TransitionPhase::After) { if (currentPhase == TransitionPhase::After) {
events.AppendElement(TransitionEventParams{ eTransitionEnd, events.AppendElement(TransitionEventParams{ eTransitionEnd,
intervalEndTime, intervalEndTime,
endTimeStamp }); endTimeStamp });
} else if (currentPhase == TransitionPhase::Before) { } else if (currentPhase == TransitionPhase::Before) {
events.AppendElement(TransitionEventParams{ eTransitionEnd, events.AppendElement(TransitionEventParams{ eTransitionEnd,
intervalStartTime, intervalStartTime,
startTimeStamp }); startTimeStamp });
} }
break; break;
case TransitionPhase::After: case TransitionPhase::After:
if (currentPhase == TransitionPhase::Active) { if (currentPhase == TransitionPhase::Active) {
events.AppendElement(TransitionEventParams{ eTransitionStart, events.AppendElement(TransitionEventParams{ eTransitionStart,
intervalEndTime, intervalEndTime,
startTimeStamp }); startTimeStamp });
} else if (currentPhase == TransitionPhase::Before) { } else if (currentPhase == TransitionPhase::Before) {
events.AppendElement(TransitionEventParams{ eTransitionStart, events.AppendElement(TransitionEventParams{ eTransitionStart,
intervalEndTime, intervalEndTime,
startTimeStamp }); startTimeStamp });
events.AppendElement(TransitionEventParams{ eTransitionEnd, events.AppendElement(TransitionEventParams{ eTransitionEnd,
intervalStartTime, intervalStartTime,
endTimeStamp }); endTimeStamp });
} }
break; break;
} }