[dali_1.0.11] Merge branch 'tizen'
[platform/core/uifw/dali-toolkit.git] / base / dali-toolkit / internal / builder / builder-animations.cpp
index 454a686..de6b380 100644 (file)
@@ -1,18 +1,19 @@
-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Flora License, Version 1.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://floralicense.org/license/
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an AS IS BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
 
 // EXTERNAL INCLUDES
 #include <dali/integration-api/debug.h>
@@ -108,20 +109,34 @@ AlphaFunction GetAlphaFunction( const std::string& alphaFunction )
   if( 0 == alphaFunctionLut.size() )
   {
     // coding convention is uppercase enums
-    alphaFunctionLut["DEFAULT"]         = Dali::AlphaFunctions::Default;
-    alphaFunctionLut["LINEAR"]          = Dali::AlphaFunctions::Linear;
-    alphaFunctionLut["REVERSE"]         = Dali::AlphaFunctions::Reverse;
-    alphaFunctionLut["EASE_IN"]         = Dali::AlphaFunctions::EaseIn;
-    alphaFunctionLut["EASE_OUT"]        = Dali::AlphaFunctions::EaseOut;
-    alphaFunctionLut["EASE_IN_OUT"]     = Dali::AlphaFunctions::EaseInOut;
-    alphaFunctionLut["EASE_IN_SINE"]    = Dali::AlphaFunctions::EaseInSine;
-    alphaFunctionLut["EASE_OUT_SINE"]   = Dali::AlphaFunctions::EaseOutSine;
-    alphaFunctionLut["EASE_IN_OUT_SINE"]= Dali::AlphaFunctions::EaseInOutSine;
-    alphaFunctionLut["BOUNCE"]          = Dali::AlphaFunctions::Bounce;
-    alphaFunctionLut["BOUNCE_BACK"]     = Dali::AlphaFunctions::BounceBack;
-    alphaFunctionLut["EASE_OUT_BACK"]   = Dali::AlphaFunctions::EaseOutBack;
-    alphaFunctionLut["SIN"]             = Dali::AlphaFunctions::Sin;
-    alphaFunctionLut["SIN2X"]           = Dali::AlphaFunctions::Sin;
+    alphaFunctionLut["DEFAULT"]                    = AlphaFunctions::Default;
+    alphaFunctionLut["LINEAR"]                     = AlphaFunctions::Linear;
+    alphaFunctionLut["SQUARE"]                     = AlphaFunctions::Square;
+    alphaFunctionLut["REVERSE"]                    = AlphaFunctions::Reverse;
+    alphaFunctionLut["EASE_IN"]                    = AlphaFunctions::EaseIn;
+    alphaFunctionLut["EASE_OUT"]                   = AlphaFunctions::EaseOut;
+    alphaFunctionLut["EASE_IN_OUT"]                = AlphaFunctions::EaseInOut;
+    alphaFunctionLut["EASE_IN_SINE"]               = AlphaFunctions::EaseInSine;
+    alphaFunctionLut["EASE_OUT_SINE"]              = AlphaFunctions::EaseOutSine;
+    alphaFunctionLut["EASE_IN_OUT_SINE"]           = AlphaFunctions::EaseInOutSine;
+    alphaFunctionLut["EASE_IN_SINE_33"]            = AlphaFunctions::EaseInSine33;
+    alphaFunctionLut["EASE_OUT_SINE_33"]           = AlphaFunctions::EaseOutSine33;
+    alphaFunctionLut["EASE_IN_OUT_SINE_33"]        = AlphaFunctions::EaseInOutSine33;
+    alphaFunctionLut["EASE_IN_OUT_SINE_50"]        = AlphaFunctions::EaseInOutSine50;
+    alphaFunctionLut["EASE_IN_OUT_SINE_60"]        = AlphaFunctions::EaseInOutSine60;
+    alphaFunctionLut["EASE_IN_OUT_SINE_70"]        = AlphaFunctions::EaseInOutSine70;
+    alphaFunctionLut["EASE_IN_OUT_SINE_80"]        = AlphaFunctions::EaseInOutSine80;
+    alphaFunctionLut["EASE_IN_OUT_SINE_90"]        = AlphaFunctions::EaseInOutSine90;
+    alphaFunctionLut["DOUBLE_EASE_IN_OUT_SINE_60"] = AlphaFunctions::DoubleEaseInOutSine60;
+    alphaFunctionLut["EASE_OUT_QUINT_50"]          = AlphaFunctions::EaseOutQuint50;
+    alphaFunctionLut["EASE_OUT_QUINT_80"]          = AlphaFunctions::EaseOutQuint80;
+    alphaFunctionLut["BOUNCE"]                     = AlphaFunctions::Bounce;
+    alphaFunctionLut["BOUNCE_BACK"]                = AlphaFunctions::BounceBack;
+    alphaFunctionLut["EASE_IN_BACK"]               = AlphaFunctions::EaseInBack;
+    alphaFunctionLut["EASE_OUT_BACK"]              = AlphaFunctions::EaseOutBack;
+    alphaFunctionLut["EASE_IN_OUT_BACK"]           = AlphaFunctions::EaseInOutBack;
+    alphaFunctionLut["SIN"]                        = AlphaFunctions::Sin;
+    alphaFunctionLut["SIN2X"]                      = AlphaFunctions::Sin2x;
   }
 
   const AlphaFunctionLut::const_iterator iter( alphaFunctionLut.find( alphaFunction ) );
@@ -186,19 +201,19 @@ Animation CreateAnimation( const TreeNode& child, const Replacement& constant, D
     }
   }
 
-  if( OptionalString endAction = constant.IsString(  IsChild(child, "destroy-action" ) ) )
+  if( OptionalString endAction = constant.IsString(  IsChild(child, "disconnect-action" ) ) )
   {
     if("BAKE" == *endAction)
     {
-      animation.SetDestroyAction( Animation::Bake );
+      animation.SetDisconnectAction( Animation::Bake );
     }
     else if("DISCARD" == *endAction)
     {
-      animation.SetDestroyAction( Animation::Discard );
+      animation.SetDisconnectAction( Animation::Discard );
     }
     else if("BAKE_FINAL" == *endAction)
     {
-      animation.SetDestroyAction( Animation::BakeFinal );
+      animation.SetDisconnectAction( Animation::BakeFinal );
     }
   }
 
@@ -215,27 +230,33 @@ Animation CreateAnimation( const TreeNode& child, const Replacement& constant, D
       DALI_ASSERT_ALWAYS( actorName && "Animation must specify actor name" );
       DALI_ASSERT_ALWAYS( property  && "Animation must specify a property name" );
 
-      Actor targetActor = searchActor.FindChildByName( *actorName );
-      DALI_ASSERT_ALWAYS( targetActor && "Actor must exist for property" );
+      Handle targetHandle = searchActor.FindChildByName( *actorName );
+      DALI_ASSERT_ALWAYS( targetHandle && "Actor must exist for property" );
 
-      Property::Index idx( targetActor.GetPropertyIndex( *property ) );
+      Property::Index idx( targetHandle.GetPropertyIndex( *property ) );
 
-      // A limitation here is that its possible that between binding to the signal and
-      // the signal call that the ShaderEffect of the targetActor has been changed.
-      // However this is a unlikely use case especially when using scripts.
+      // if the property is not found from the (actor) handle, try to downcast it to renderable actor
+      // to allow animating shader uniforms
       if( idx == Property::INVALID_INDEX )
       {
-        if( ShaderEffect effect = targetActor.GetShaderEffect() )
+        RenderableActor renderable = RenderableActor::DownCast( targetHandle );
+        if( renderable )
         {
-          idx = effect.GetPropertyIndex( *property );
-          if(idx != Property::INVALID_INDEX)
+          // A limitation here is that its possible that between creation of animation
+          // and running it the ShaderEffect of the actor has been changed.
+          // However this is a unlikely use case especially when using scripts.
+          if( ShaderEffect effect = renderable.GetShaderEffect() )
           {
-            targetActor = effect;
-          }
-          else
-          {
-            DALI_SCRIPT_WARNING( "Cannot find property on object or ShaderEffect\n" );
-            continue;
+            idx = effect.GetPropertyIndex( *property );
+            if(idx != Property::INVALID_INDEX)
+            {
+              targetHandle = effect;
+            }
+            else
+            {
+              DALI_SCRIPT_WARNING( "Cannot find property on object or ShaderEffect\n" );
+              continue;
+            }
           }
         }
         else
@@ -251,7 +272,7 @@ Animation CreateAnimation( const TreeNode& child, const Replacement& constant, D
         continue;
       }
 
-      Property prop( Property( targetActor, idx ) );
+      Property prop( Property( targetHandle, idx ) );
       Property::Value propValue;
 
       // these are the defaults