Merge branch 'devel/master' into tizen
[platform/core/uifw/dali-core.git] / dali / internal / update / common / scene-graph-property-notification.cpp
index b92d3ad..82464fc 100644 (file)
@@ -1,20 +1,21 @@
-//
-// 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.
-//
-
-#include <dali/internal/event/common/proxy-object.h>
+/*
+ * Copyright (c) 2016 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.
+ *
+ */
+
+#include <dali/internal/event/common/object-impl.h>
 #include <dali/internal/event/animation/property-constraint.h>
 #include <dali/internal/event/animation/property-input-accessor.h>
 #include <dali/internal/event/animation/property-input-indexer.h>
@@ -23,8 +24,6 @@
 #include <dali/internal/update/common/scene-graph-property-notification.h>
 #include <dali/internal/update/common/property-condition-functions.h>
 
-using namespace std;
-
 namespace Dali
 {
 
@@ -34,7 +33,7 @@ namespace Internal
 namespace SceneGraph
 {
 
-PropertyNotification* PropertyNotification::New(ProxyObject& proxy,
+PropertyNotification* PropertyNotification::New(Object& object,
                                                 Property::Index propertyIndex,
                                                 Property::Type propertyType,
                                                 int componentIndex,
@@ -42,25 +41,27 @@ PropertyNotification* PropertyNotification::New(ProxyObject& proxy,
                                                 RawArgumentContainer& arguments,
                                                 NotifyMode notifyMode)
 {
-  return new PropertyNotification( proxy, propertyIndex, propertyType, componentIndex, condition, arguments, notifyMode );
+  return new PropertyNotification( object, propertyIndex, propertyType, componentIndex, condition, arguments, notifyMode );
 }
 
 
-PropertyNotification::PropertyNotification(ProxyObject& proxy,
+PropertyNotification::PropertyNotification(Object& object,
                                            Property::Index propertyIndex,
                                            Property::Type propertyType,
                                            int componentIndex,
                                            ConditionType condition,
                                            RawArgumentContainer& arguments,
                                            NotifyMode notifyMode)
-: mProxy(&proxy),
+: mObject(&object),
   mPropertyIndex(propertyIndex),
   mPropertyType(propertyType),
   mProperty(NULL),
   mComponentIndex(componentIndex),
   mConditionType(condition),
   mArguments(arguments),
-  mValid(false)
+  mValid(false),
+  mNotifyMode( Dali::PropertyNotification::Disabled ),
+  mConditionFunction(NULL)
 {
   SetNotifyMode(notifyMode);
 
@@ -103,8 +104,8 @@ PropertyNotification::PropertyNotification(ProxyObject& proxy,
     }
   }
 
-  mProperty = mProxy->GetSceneObjectInputProperty( mPropertyIndex );
-  int internalComponentIndex = mProxy->GetPropertyComponentIndex(mPropertyIndex);
+  mProperty = mObject->GetSceneObjectInputProperty( mPropertyIndex );
+  int internalComponentIndex = mObject->GetPropertyComponentIndex(mPropertyIndex);
   if( internalComponentIndex != Property::INVALID_COMPONENT_INDEX )
   {
     // override the one passed in
@@ -123,33 +124,7 @@ bool PropertyNotification::EvalFalse( const Dali::PropertyInput& value, RawArgum
 
 void PropertyNotification::SetNotifyMode( NotifyMode notifyMode )
 {
-  switch(notifyMode)
-  {
-    case Dali::PropertyNotification::Disabled:
-    {
-      mNotifyValidity[0] = false;
-      mNotifyValidity[1] = false;
-      break;
-    }
-    case Dali::PropertyNotification::NotifyOnTrue:
-    {
-      mNotifyValidity[0] = false;
-      mNotifyValidity[1] = true;
-      break;
-    }
-    case Dali::PropertyNotification::NotifyOnFalse:
-    {
-      mNotifyValidity[0] = true;
-      mNotifyValidity[1] = false;
-      break;
-    }
-    case Dali::PropertyNotification::NotifyOnChanged:
-    {
-      mNotifyValidity[0] = true;
-      mNotifyValidity[1] = true;
-      break;
-    }
-  }
+  mNotifyMode = notifyMode;
 }
 
 bool PropertyNotification::Check( BufferIndex bufferIndex )
@@ -160,8 +135,8 @@ bool PropertyNotification::Check( BufferIndex bufferIndex )
   if ( Property::INVALID_COMPONENT_INDEX != mComponentIndex )
   {
     // Evaluate Condition
-    const PropertyInputComponentAccessor component( mProperty, mComponentIndex );
-    const PropertyInputIndexer< PropertyInputComponentAccessor > input( bufferIndex, &component );
+    const PropertyInputAccessor component( mProperty, mComponentIndex );
+    const PropertyInputIndexer< PropertyInputAccessor > input( bufferIndex, &component );
     currentValid = mConditionFunction(input, mArguments);
   }
   else
@@ -176,7 +151,30 @@ bool PropertyNotification::Check( BufferIndex bufferIndex )
                         || (mConditionType == PropertyCondition::VariableStep))) )
   {
     mValid = currentValid;
-    notifyRequired = mNotifyValidity[currentValid];
+    //  means don't notify so notifyRequired stays false
+    switch( mNotifyMode )
+    {
+      case Dali::PropertyNotification::Disabled:
+      {
+        // notify never, already initialized to false
+        break;
+      }
+      case Dali::PropertyNotification::NotifyOnTrue:
+      {
+        notifyRequired = mValid; // notify if value is true
+        break;
+      }
+      case Dali::PropertyNotification::NotifyOnFalse:
+      {
+        notifyRequired = !mValid; // notify when its false
+        break;
+      }
+      case Dali::PropertyNotification::NotifyOnChanged:
+      {
+        notifyRequired = true; // notify whenever changed
+        break;
+      }
+    }
   }
 
   return notifyRequired;