OSDN Git Service

Fix regression for superpudu animations
authorNicolas Roard <nicolasroard@google.com>
Thu, 7 Apr 2011 23:45:06 +0000 (16:45 -0700)
committerNicolas Roard <nicolasroard@google.com>
Fri, 8 Apr 2011 00:24:32 +0000 (17:24 -0700)
bug:4181605 bug:3389597
Change-Id: I2717cdfdeea12df434a119bb8dcc9d2f17f07a7e
(cherry picked from commit 14866c7d6aaa0930627503d0b49bde8e21e90a6e)

WebCore/platform/graphics/android/AndroidAnimation.cpp
WebCore/platform/graphics/android/AndroidAnimation.h

index be9e0ee..1eb7f39 100644 (file)
@@ -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)"
index 602abe2..6f1410d 100644 (file)
@@ -66,6 +66,7 @@ class AndroidAnimation : public RefCounted<AndroidAnimation> {
     String m_name;
     AnimatedPropertyID m_type;
     KeyframeValueList* m_operations;
+    LayerAndroid* m_originalLayer;
 };
 
 class AndroidOpacityAnimation : public AndroidAnimation {