Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(247)

Unified Diff: third_party/WebKit/Source/core/animation/Animation.cpp

Issue 2944423003: Implement new AnimationTimeline superclass (Closed)
Patch Set: Rebase Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/animation/Animation.cpp
diff --git a/third_party/WebKit/Source/core/animation/Animation.cpp b/third_party/WebKit/Source/core/animation/Animation.cpp
index 22cfbc8bed5fd219e95054aa02c3c58d23151e64..bd3225a61e3d3554eb391a103b7f23fc5a7bb609 100644
--- a/third_party/WebKit/Source/core/animation/Animation.cpp
+++ b/third_party/WebKit/Source/core/animation/Animation.cpp
@@ -34,6 +34,7 @@
#include "core/animation/CompositorPendingAnimations.h"
#include "core/animation/DocumentTimeline.h"
#include "core/animation/KeyframeEffectReadOnly.h"
+#include "core/animation/SuperAnimationTimeline.h"
#include "core/animation/css/CSSAnimations.h"
#include "core/dom/DOMNodeIds.h"
#include "core/dom/Document.h"
@@ -68,18 +69,20 @@ static unsigned NextSequenceNumber() {
}
Animation* Animation::Create(AnimationEffectReadOnly* effect,
- AnimationTimeline* timeline) {
- if (!timeline) {
+ SuperAnimationTimeline* timeline) {
+ if (!timeline || !timeline->IsAnimationTimeline()) {
// FIXME: Support creating animations without a timeline.
NOTREACHED();
return nullptr;
}
+ AnimationTimeline* subtimeline = ToAnimationTimeline(timeline);
+
Animation* animation = new Animation(
- timeline->GetDocument()->ContextDocument(), *timeline, effect);
+ subtimeline->GetDocument()->ContextDocument(), *subtimeline, effect);
- if (timeline) {
- timeline->AnimationAttached(*animation);
+ if (subtimeline) {
+ subtimeline->AnimationAttached(*animation);
animation->AttachCompositorTimeline();
}
@@ -97,7 +100,7 @@ Animation* Animation::Create(ExecutionContext* execution_context,
Animation* Animation::Create(ExecutionContext* execution_context,
AnimationEffectReadOnly* effect,
- AnimationTimeline* timeline,
+ SuperAnimationTimeline* timeline,
ExceptionState& exception_state) {
DCHECK(RuntimeEnabledFeatures::WebAnimationsAPIEnabled());
@@ -790,7 +793,7 @@ Animation::CheckCanStartAnimationOnCompositorInternal(
}
// FIXME: Timeline playback rates should be compositable
- if (timeline() && timeline()->PlaybackRate() != 1) {
+ if (TimelineInternal() && TimelineInternal()->PlaybackRate() != 1) {
return CompositorAnimations::FailureCode::NonActionable(
"Accelerated animations do not support timelines with playback rates "
"other than 1");
@@ -852,7 +855,7 @@ void Animation::StartAnimationOnCompositor(
bool reversed = playback_rate_ < 0;
- double start_time = timeline()->ZeroTime() + StartTimeInternal();
+ double start_time = TimelineInternal()->ZeroTime() + StartTimeInternal();
if (reversed) {
start_time -= EffectEnd() / fabs(playback_rate_);
}
@@ -885,7 +888,8 @@ void Animation::SetCompositorPending(bool effect_changed) {
compositor_state_->playback_rate != playback_rate_ ||
compositor_state_->start_time != start_time_) {
compositor_pending_ = true;
- timeline()->GetDocument()->GetCompositorPendingAnimations().Add(this);
+ TimelineInternal()->GetDocument()->GetCompositorPendingAnimations().Add(
+ this);
}
}
@@ -941,8 +945,9 @@ bool Animation::Update(TimingUpdateReason reason) {
const AtomicString& event_type = EventTypeNames::cancel;
if (GetExecutionContext() && HasEventListeners(event_type)) {
double event_current_time = NullValue();
- pending_cancelled_event_ = AnimationPlaybackEvent::Create(
- event_type, event_current_time, timeline()->currentTime());
+ pending_cancelled_event_ =
+ AnimationPlaybackEvent::Create(event_type, event_current_time,
+ TimelineInternal()->currentTime());
pending_cancelled_event_->SetTarget(this);
pending_cancelled_event_->SetCurrentTarget(this);
timeline_->GetDocument()->EnqueueAnimationFrameEvent(
@@ -952,8 +957,9 @@ bool Animation::Update(TimingUpdateReason reason) {
const AtomicString& event_type = EventTypeNames::finish;
if (GetExecutionContext() && HasEventListeners(event_type)) {
double event_current_time = CurrentTimeInternal() * 1000;
- pending_finished_event_ = AnimationPlaybackEvent::Create(
- event_type, event_current_time, timeline()->currentTime());
+ pending_finished_event_ =
+ AnimationPlaybackEvent::Create(event_type, event_current_time,
+ TimelineInternal()->currentTime());
pending_finished_event_->SetTarget(this);
pending_finished_event_->SetCurrentTarget(this);
timeline_->GetDocument()->EnqueueAnimationFrameEvent(
@@ -1065,7 +1071,7 @@ void Animation::DetachCompositedLayers() {
}
void Animation::NotifyAnimationStarted(double monotonic_time, int group) {
- timeline()
+ TimelineInternal()
->GetDocument()
->GetCompositorPendingAnimations()
.NotifyCompositorAnimationStarted(monotonic_time, group);
@@ -1169,9 +1175,9 @@ Animation::PlayStateUpdateScope::~PlayStateUpdateScope() {
animation_->EndUpdatingState();
if (old_play_state != new_play_state) {
- probe::animationPlayStateChanged(animation_->timeline()->GetDocument(),
- animation_, old_play_state,
- new_play_state);
+ probe::animationPlayStateChanged(
+ animation_->TimelineInternal()->GetDocument(), animation_,
+ old_play_state, new_play_state);
}
}
« no previous file with comments | « third_party/WebKit/Source/core/animation/Animation.h ('k') | third_party/WebKit/Source/core/animation/AnimationTimeline.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698