mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-03 05:47:29 +09:00
Bug 1264125: Call the queueing events when canceling transition via Style or Script
Issue #55
This commit is contained in:
parent
ffa8225e06
commit
96037b8c9a
4 changed files with 53 additions and 7 deletions
|
|
@ -180,7 +180,7 @@ CSSTransition::UpdateTiming(SeekFlag aSeekFlag, SyncNotifyFlag aSyncNotifyFlag)
|
|||
}
|
||||
|
||||
void
|
||||
CSSTransition::QueueEvents()
|
||||
CSSTransition::QueueEvents(StickyTimeDuration aActiveTime)
|
||||
{
|
||||
if (!mEffect ||
|
||||
!mOwningElement.IsSet()) {
|
||||
|
|
@ -230,12 +230,9 @@ CSSTransition::QueueEvents()
|
|||
// 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);
|
||||
TimeStamp activeTimeStamp = ElapsedTimeToTimeStamp(aActiveTime);
|
||||
events.AppendElement(TransitionEventParams{ eTransitionCancel,
|
||||
activeTime,
|
||||
aActiveTime,
|
||||
activeTimeStamp });
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -162,6 +162,18 @@ public:
|
|||
|
||||
Animation::CancelFromStyle();
|
||||
|
||||
// The above call to Animation::CancelFromStyle may cause a transitioncancel
|
||||
// event to be queued. However, it will also remove the transition from its
|
||||
// timeline. If this transition was the last animation attached to
|
||||
// the timeline, the timeline will stop observing the refresh driver and
|
||||
// there may be no subsequent tick fro dispatching animation events.
|
||||
//
|
||||
// To ensure the cancel event is dispatched we tell the timeline it needs to
|
||||
// observe the refresh driver for at least one more tick.
|
||||
if (mTimeline) {
|
||||
mTimeline->NotifyAnimationUpdated(*this);
|
||||
}
|
||||
|
||||
// It is important we do this *after* calling CancelFromStyle().
|
||||
// This is because CancelFromStyle() will end up posting a restyle and
|
||||
// that restyle should target the *transitions* level of the cascade.
|
||||
|
|
@ -214,6 +226,10 @@ public:
|
|||
const TimeDuration& aStartTime,
|
||||
double aPlaybackRate);
|
||||
|
||||
void MaybeQueueCancelEvent(StickyTimeDuration aActiveTime) override {
|
||||
QueueEvents(aActiveTime);
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual ~CSSTransition()
|
||||
{
|
||||
|
|
@ -225,7 +241,7 @@ protected:
|
|||
void UpdateTiming(SeekFlag aSeekFlag,
|
||||
SyncNotifyFlag aSyncNotifyFlag) override;
|
||||
|
||||
void QueueEvents();
|
||||
void QueueEvents(StickyTimeDuration activeTime = StickyTimeDuration());
|
||||
|
||||
// The (pseudo-)element whose computed transition-property refers to this
|
||||
// transition (if any).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue