From db110d3dd9014246922c7d44d485928cc2ea2692 Mon Sep 17 00:00:00 2001 From: Nicolas Roard Date: Thu, 7 Apr 2011 16:45:06 -0700 Subject: Fix regression for superpudu animations bug:4181605 bug:3389597 Change-Id: I2717cdfdeea12df434a119bb8dcc9d2f17f07a7e (cherry picked from commit 14866c7d6aaa0930627503d0b49bde8e21e90a6e) --- WebCore/platform/graphics/android/AndroidAnimation.cpp | 15 +++++++++++++-- WebCore/platform/graphics/android/AndroidAnimation.h | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'WebCore/platform/graphics') diff --git a/WebCore/platform/graphics/android/AndroidAnimation.cpp b/WebCore/platform/graphics/android/AndroidAnimation.cpp index be9e0ee..1eb7f39 100644 --- a/WebCore/platform/graphics/android/AndroidAnimation.cpp +++ b/WebCore/platform/graphics/android/AndroidAnimation.cpp @@ -66,6 +66,7 @@ AndroidAnimation::AndroidAnimation(AnimatedPropertyID type, , m_timingFunction(animation->timingFunction()) , m_type(type) , m_operations(operations) + , m_originalLayer(0) { ASSERT(m_timingFunction); @@ -84,6 +85,7 @@ AndroidAnimation::AndroidAnimation(AndroidAnimation* anim) , m_timingFunction(anim->m_timingFunction) , m_type(anim->m_type) , m_operations(anim->m_operations) + , m_originalLayer(0) { gDebugAndroidAnimationInstances++; } @@ -232,9 +234,13 @@ bool AndroidOpacityAnimation::evaluate(LayerAndroid* layer, double time) if (progress >= 1) { m_finished = true; - return false; + if (layer != m_originalLayer) + return false; } + if (!m_originalLayer) + m_originalLayer = layer; + // First, we need to get the from and to values int from, to; @@ -258,6 +264,7 @@ bool AndroidOpacityAnimation::evaluate(LayerAndroid* layer, double time) layer->setOpacity(value); XLOG("AndroidOpacityAnimation::evaluate(%p, %p, %.2f) value=%.6f", this, layer, time, value); + return true; } @@ -300,9 +307,13 @@ bool AndroidTransformAnimation::evaluate(LayerAndroid* layer, double time) if (progress >= 1) { m_finished = true; - return false; + if (layer != m_originalLayer) + return false; } + if (!m_originalLayer) + m_originalLayer = layer; + IntSize size(layer->getSize().width(), layer->getSize().height()); TransformationMatrix matrix; XLOG("Evaluate transforms animations, %d operations, progress %.2f for layer %d (%d, %d)" diff --git a/WebCore/platform/graphics/android/AndroidAnimation.h b/WebCore/platform/graphics/android/AndroidAnimation.h index 602abe2..6f1410d 100644 --- a/WebCore/platform/graphics/android/AndroidAnimation.h +++ b/WebCore/platform/graphics/android/AndroidAnimation.h @@ -66,6 +66,7 @@ class AndroidAnimation : public RefCounted { String m_name; AnimatedPropertyID m_type; KeyframeValueList* m_operations; + LayerAndroid* m_originalLayer; }; class AndroidOpacityAnimation : public AndroidAnimation { -- cgit v1.1