Add new layouting support for TextLabel and ImageView.
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / devel-api / layouting / layout-group-impl.cpp
index 428ac89..d28ec90 100644 (file)
@@ -406,6 +406,7 @@ void LayoutGroup::OnInitialize()
 
     DevelActor::ChildAddedSignal( control ).Connect( mSlotDelegate, &LayoutGroup::ChildAddedToOwner );
     DevelActor::ChildRemovedSignal( control ).Connect( mSlotDelegate, &LayoutGroup::ChildRemovedFromOwner );
+    DevelActor::ChildOrderChangedSignal( control ).Connect( mSlotDelegate, &LayoutGroup::ChildOrderChanged );
     DevelHandle::PropertySetSignal( control ).Connect( mSlotDelegate, &LayoutGroup::OnOwnerPropertySet );
 
     if( control.GetParent() )
@@ -450,7 +451,8 @@ void LayoutGroup::ChildAddedToOwner( Actor child )
 {
   LayoutItemPtr childLayout;
   Toolkit::Control control = Toolkit::Control::DownCast( child );
-  DALI_LOG_INFO( gLogFilter, Debug::Verbose, "LayoutGroup::ChildAddedToOwner(%s)\n", control.GetName().c_str() );
+
+  DALI_LOG_INFO( gLogFilter, Debug::Verbose, "LayoutGroup::ChildAddedToOwner control(%s)\n", control?control.GetName().c_str():"Invalid" );
 
   if( control ) // Can only support adding Controls, not Actors to layout
   {
@@ -469,6 +471,18 @@ void LayoutGroup::ChildAddedToOwner( Actor child )
 #endif
       childControlDataImpl.SetLayout( *childLayout.Get() );
 
+      Vector3 size = child.GetTargetSize();
+      // If the size of the control is set explicitly make sure that the control size
+      // stays the same after the layout except it is over written with match parent specs.
+      if ( size.x != 0 )
+      {
+        childLayout->SetMinimumWidth( size.x );
+      }
+
+      if ( size.y != 0 )
+      {
+        childLayout->SetMinimumHeight( size.y );
+      }
       // Default layout data will be generated by Add().
     }
     else
@@ -500,6 +514,16 @@ void LayoutGroup::ChildRemovedFromOwner( Actor child )
   }
 }
 
+void LayoutGroup::ChildOrderChanged()
+{
+  RequestLayout();
+  // Force Children to be relaid out:
+  for( auto&& child : mImpl->mChildren )
+  {
+    child.child->SetLayoutRequested();
+  }
+}
+
 void LayoutGroup::OnOwnerPropertySet( Handle& handle, Property::Index index, Property::Value value )
 {
   DALI_LOG_INFO( gLogFilter, Debug::Concise, "LayoutGroup::OnOwnerPropertySet\n");