[Tizen] Revert the change for 0x0 size of the actor
[platform/core/uifw/dali-core.git] / dali / internal / event / actors / actor-impl.cpp
index 44a9e89..ba7e1cb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 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.
@@ -193,13 +193,13 @@ DALI_PROPERTY( "sensitive",                 BOOLEAN,  true,  false, false, Dali:
 DALI_PROPERTY( "leaveRequired",             BOOLEAN,  true,  false, false, Dali::Actor::Property::LEAVE_REQUIRED )
 DALI_PROPERTY( "inheritOrientation",        BOOLEAN,  true,  false, false, Dali::Actor::Property::INHERIT_ORIENTATION )
 DALI_PROPERTY( "inheritScale",              BOOLEAN,  true,  false, false, Dali::Actor::Property::INHERIT_SCALE )
-DALI_PROPERTY( "colorMode",                 STRING,   true,  false, false, Dali::Actor::Property::COLOR_MODE )
+DALI_PROPERTY( "colorMode",                 INTEGER,  true,  false, false, Dali::Actor::Property::COLOR_MODE )
 DALI_PROPERTY( "reservedProperty01",        STRING,   true,  false, false, Dali::Actor::Property::RESERVED_PROPERTY_01 ) // This property was removed, but to keep binary compatibility and TypeRegister test app, remain it here.
-DALI_PROPERTY( "drawMode",                  STRING,   true,  false, false, Dali::Actor::Property::DRAW_MODE )
+DALI_PROPERTY( "drawMode",                  INTEGER,  true,  false, false, Dali::Actor::Property::DRAW_MODE )
 DALI_PROPERTY( "sizeModeFactor",            VECTOR3,  true,  false, false, Dali::Actor::Property::SIZE_MODE_FACTOR )
 DALI_PROPERTY( "widthResizePolicy",         STRING,   true,  false, false, Dali::Actor::Property::WIDTH_RESIZE_POLICY )
 DALI_PROPERTY( "heightResizePolicy",        STRING,   true,  false, false, Dali::Actor::Property::HEIGHT_RESIZE_POLICY )
-DALI_PROPERTY( "sizeScalePolicy",           STRING,   true,  false, false, Dali::Actor::Property::SIZE_SCALE_POLICY )
+DALI_PROPERTY( "sizeScalePolicy",           INTEGER,  true,  false, false, Dali::Actor::Property::SIZE_SCALE_POLICY )
 DALI_PROPERTY( "widthForHeight",            BOOLEAN,  true,  false, false, Dali::Actor::Property::WIDTH_FOR_HEIGHT )
 DALI_PROPERTY( "heightForWidth",            BOOLEAN,  true,  false, false, Dali::Actor::Property::HEIGHT_FOR_WIDTH )
 DALI_PROPERTY( "padding",                   VECTOR4,  true,  false, false, Dali::Actor::Property::PADDING )
@@ -1154,6 +1154,8 @@ void Actor::SetWidth( float width )
     SceneGraph::NodeTransformComponentMessage<Vector3>::Send( GetEventThreadServices(), &GetNode(), &GetNode().mSize, &SceneGraph::TransformManagerPropertyHandler<Vector3>::BakeX, width );
   }
 
+  mUseAnimatedSize &= ~AnimatedSizeFlag::WIDTH;
+
   RelayoutRequest();
 }
 
@@ -1172,6 +1174,8 @@ void Actor::SetHeight( float height )
     SceneGraph::NodeTransformComponentMessage<Vector3>::Send( GetEventThreadServices(), &GetNode(), &GetNode().mSize, &SceneGraph::TransformManagerPropertyHandler<Vector3>::BakeY, height );
   }
 
+  mUseAnimatedSize &= ~AnimatedSizeFlag::HEIGHT;
+
   RelayoutRequest();
 }
 
@@ -1179,6 +1183,8 @@ void Actor::SetDepth( float depth )
 {
   mTargetSize.depth = depth;
 
+  mUseAnimatedSize &= ~AnimatedSizeFlag::DEPTH;
+
   // node is being used in a separate thread; queue a message to set the value & base value
   SceneGraph::NodeTransformComponentMessage<Vector3>::Send( GetEventThreadServices(), &GetNode(), &GetNode().mSize, &SceneGraph::TransformManagerPropertyHandler<Vector3>::BakeZ, depth );
 }
@@ -1187,14 +1193,35 @@ Vector3 Actor::GetTargetSize() const
 {
   Vector3 size = mTargetSize;
 
-  // Should return preferred size if size is fixed as set by SetSize
-  if( GetResizePolicy( Dimension::WIDTH ) == ResizePolicy::FIXED )
+  if( mUseAnimatedSize & AnimatedSizeFlag::WIDTH )
   {
-    size.width = GetPreferredSize().width;
+    // Should return animated size if size is animated
+    size.width = mAnimatedSize.width;
   }
-  if( GetResizePolicy( Dimension::HEIGHT ) == ResizePolicy::FIXED )
+  else
+  {
+    // Should return preferred size if size is fixed as set by SetSize
+    if( GetResizePolicy( Dimension::WIDTH ) == ResizePolicy::FIXED )
+    {
+      size.width = GetPreferredSize().width;
+    }
+  }
+
+  if( mUseAnimatedSize & AnimatedSizeFlag::HEIGHT )
+  {
+    size.height = mAnimatedSize.height;
+  }
+  else
+  {
+    if( GetResizePolicy( Dimension::HEIGHT ) == ResizePolicy::FIXED )
+    {
+      size.height = GetPreferredSize().height;
+    }
+  }
+
+  if( mUseAnimatedSize & AnimatedSizeFlag::DEPTH )
   {
-    size.height = GetPreferredSize().height;
+    size.depth = mAnimatedSize.depth;
   }
 
   return size;
@@ -2031,9 +2058,11 @@ Actor::Actor( DerivedType derivedType, const SceneGraph::Node& node )
   mTargetSize( Vector3::ZERO ),
   mTargetPosition( Vector3::ZERO ),
   mTargetScale( Vector3::ONE ),
+  mAnimatedSize( Vector3::ZERO ),
   mName(),
   mSortedDepth( 0u ),
   mDepth( 0u ),
+  mUseAnimatedSize( AnimatedSizeFlag::CLEAR ),
   mIsRoot( ROOT_LAYER == derivedType ),
   mIsLayer( LAYER == derivedType || ROOT_LAYER == derivedType ),
   mIsOnStage( false ),
@@ -2496,7 +2525,16 @@ void Actor::SetDefaultProperty( Property::Index index, const Property::Value& pr
 
     case Dali::Actor::Property::COLOR:
     {
-      SetColor( property.Get< Vector4 >() );
+      Property::Type type = property.GetType();
+      if( type == Property::VECTOR3 )
+      {
+        Vector3 color = property.Get< Vector3 >();
+        SetColor( Vector4( color.r, color.g, color.b, 1.0f ) );
+      }
+      else if( type == Property::VECTOR4 )
+      {
+        SetColor( property.Get< Vector4 >() );
+      }
       break;
     }
 
@@ -2614,7 +2652,7 @@ void Actor::SetDefaultProperty( Property::Index index, const Property::Value& pr
     case Dali::Actor::Property::SIZE_SCALE_POLICY:
     {
       SizeScalePolicy::Type type = GetSizeScalePolicy();
-      if( Scripting::GetEnumeration< SizeScalePolicy::Type >( property.Get< std::string >().c_str(), SIZE_SCALE_POLICY_TABLE, SIZE_SCALE_POLICY_TABLE_COUNT, type ) )
+      if( Scripting::GetEnumerationProperty< SizeScalePolicy::Type >( property, SIZE_SCALE_POLICY_TABLE, SIZE_SCALE_POLICY_TABLE_COUNT, type ) )
       {
         SetSizeScalePolicy( type );
       }
@@ -2921,6 +2959,9 @@ void Actor::OnNotifyDefaultPropertyAnimation( Animation& animation, Property::In
         {
           if( value.Get( mTargetSize ) )
           {
+            mAnimatedSize = mTargetSize;
+            mUseAnimatedSize = AnimatedSizeFlag::WIDTH | AnimatedSizeFlag::HEIGHT | AnimatedSizeFlag::DEPTH;
+
             // Notify deriving classes
             OnSizeAnimation( animation, mTargetSize );
           }
@@ -2931,6 +2972,9 @@ void Actor::OnNotifyDefaultPropertyAnimation( Animation& animation, Property::In
         {
           if( value.Get( mTargetSize.width ) )
           {
+            mAnimatedSize.width = mTargetSize.width;
+            mUseAnimatedSize |= AnimatedSizeFlag::WIDTH;
+
             // Notify deriving classes
             OnSizeAnimation( animation, mTargetSize );
           }
@@ -2941,6 +2985,9 @@ void Actor::OnNotifyDefaultPropertyAnimation( Animation& animation, Property::In
         {
           if( value.Get( mTargetSize.height ) )
           {
+            mAnimatedSize.height = mTargetSize.height;
+            mUseAnimatedSize |= AnimatedSizeFlag::HEIGHT;
+
             // Notify deriving classes
             OnSizeAnimation( animation, mTargetSize );
           }
@@ -2951,6 +2998,9 @@ void Actor::OnNotifyDefaultPropertyAnimation( Animation& animation, Property::In
         {
           if( value.Get( mTargetSize.depth ) )
           {
+            mAnimatedSize.depth = mTargetSize.depth;
+            mUseAnimatedSize |= AnimatedSizeFlag::DEPTH;
+
             // Notify deriving classes
             OnSizeAnimation( animation, mTargetSize );
           }
@@ -3065,6 +3115,9 @@ void Actor::OnNotifyDefaultPropertyAnimation( Animation& animation, Property::In
         {
           if( AdjustValue< Vector3 >( mTargetSize, value ) )
           {
+            mAnimatedSize = mTargetSize;
+            mUseAnimatedSize = AnimatedSizeFlag::WIDTH | AnimatedSizeFlag::HEIGHT | AnimatedSizeFlag::DEPTH;
+
             // Notify deriving classes
             OnSizeAnimation( animation, mTargetSize );
           }
@@ -3075,6 +3128,9 @@ void Actor::OnNotifyDefaultPropertyAnimation( Animation& animation, Property::In
         {
           if( AdjustValue< float >( mTargetSize.width, value ) )
           {
+            mAnimatedSize.width = mTargetSize.width;
+            mUseAnimatedSize |= AnimatedSizeFlag::WIDTH;
+
             // Notify deriving classes
             OnSizeAnimation( animation, mTargetSize );
           }
@@ -3085,6 +3141,9 @@ void Actor::OnNotifyDefaultPropertyAnimation( Animation& animation, Property::In
         {
           if( AdjustValue< float >( mTargetSize.height, value ) )
           {
+            mAnimatedSize.height = mTargetSize.height;
+            mUseAnimatedSize |= AnimatedSizeFlag::HEIGHT;
+
             // Notify deriving classes
             OnSizeAnimation( animation, mTargetSize );
           }
@@ -3095,6 +3154,9 @@ void Actor::OnNotifyDefaultPropertyAnimation( Animation& animation, Property::In
         {
           if( AdjustValue< float >( mTargetSize.depth, value ) )
           {
+            mAnimatedSize.depth = mTargetSize.depth;
+            mUseAnimatedSize |= AnimatedSizeFlag::DEPTH;
+
             // Notify deriving classes
             OnSizeAnimation( animation, mTargetSize );
           }
@@ -3688,13 +3750,13 @@ bool Actor::GetCachedPropertyValue( Property::Index index, Property::Value& valu
 
     case Dali::Actor::Property::COLOR_MODE:
     {
-      value = Scripting::GetLinearEnumerationName< ColorMode >( GetColorMode(), COLOR_MODE_TABLE, COLOR_MODE_TABLE_COUNT );
+      value = GetColorMode();
       break;
     }
 
     case Dali::Actor::Property::DRAW_MODE:
     {
-      value = Scripting::GetEnumerationName< DrawMode::Type >( GetDrawMode(), DRAW_MODE_TABLE, DRAW_MODE_TABLE_COUNT );
+      value = GetDrawMode();
       break;
     }
 
@@ -3718,7 +3780,7 @@ bool Actor::GetCachedPropertyValue( Property::Index index, Property::Value& valu
 
     case Dali::Actor::Property::SIZE_SCALE_POLICY:
     {
-      value = Scripting::GetLinearEnumerationName< SizeScalePolicy::Type >( GetSizeScalePolicy(), SIZE_SCALE_POLICY_TABLE, SIZE_SCALE_POLICY_TABLE_COUNT );
+      value = GetSizeScalePolicy();
       break;
     }
 
@@ -4190,12 +4252,12 @@ float Actor::CalculateChildSizeBase( const Dali::Actor& child, Dimension::Type d
 
     case ResizePolicy::SIZE_RELATIVE_TO_PARENT:
     {
-      return GetLatestSize( dimension ) * GetDimensionValue( child.GetSizeModeFactor(), dimension );
+      return GetLatestSize( dimension ) * GetDimensionValue( child.GetProperty< Vector3 >( Dali::Actor::Property::SIZE_MODE_FACTOR ), dimension );
     }
 
     case ResizePolicy::SIZE_FIXED_OFFSET_FROM_PARENT:
     {
-      return GetLatestSize( dimension ) + GetDimensionValue( child.GetSizeModeFactor(), dimension );
+      return GetLatestSize( dimension ) + GetDimensionValue( child.GetProperty< Vector3 >( Dali::Actor::Property::SIZE_MODE_FACTOR ), dimension );
     }
 
     default:
@@ -4638,6 +4700,10 @@ void Actor::SetPreferredSize( const Vector2& size )
 {
   EnsureRelayoutData();
 
+  // If valid width or height, then set the resize policy to FIXED
+  // A 0 width or height may also be required so if the resize policy has not been changed, i.e. is still set to DEFAULT,
+  // then change to FIXED as well
+
   if( size.width > 0.0f )
   {
     SetResizePolicy( ResizePolicy::FIXED, Dimension::WIDTH );
@@ -4650,6 +4716,8 @@ void Actor::SetPreferredSize( const Vector2& size )
 
   mRelayoutData->preferredSize = size;
 
+  mUseAnimatedSize = AnimatedSizeFlag::CLEAR;
+
   RelayoutRequest();
 }