Add child flex node with its margin 88/224488/3
authorneostom432 <minho.sun@samsung.com>
Tue, 11 Feb 2020 03:33:17 +0000 (12:33 +0900)
committerneostom432 <minho.sun@samsung.com>
Wed, 12 Feb 2020 06:06:13 +0000 (15:06 +0900)
To set margin to FlexLayout child, we should know its margin.
Unfortunately, Margin is set to view's layout object when using layout so we cannot know it in DALi side.

So, make new api which can pass child's margin.

Change-Id: I7f9708eef332a6d9d4d541ddce439e9bc723066f

automated-tests/src/dali-toolkit/utc-Dali-FlexNode.cpp
dali-toolkit/devel-api/layouting/flex-node.cpp
dali-toolkit/devel-api/layouting/flex-node.h

index 3d54ae2..31a6bf2 100755 (executable)
@@ -63,6 +63,36 @@ int UtcDaliToolkitFlexNodeConstructorP(void)
   END_TEST;
 }
 
+int UtcDaliToolkitFlexNodeAddChildWithMarginP(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline(" UtcDaliToolkitFlexNodeAddChildWithMarginP");
+  Flex::Node* flexNode = new Flex::Node();
+  DALI_TEST_CHECK( flexNode );
+
+  // Position elements as a Row
+  flexNode->SetFlexDirection(Flex::FlexDirection::ROW);
+
+  // Create two actors and add them to the parent flex node
+  Actor actor = Actor::New();
+  DALI_TEST_CHECK( actor );
+
+  Extents margin( 5,5,5,5);
+  flexNode->AddChild(actor, margin, &MeasureChild, 0);
+
+  DALI_TEST_EQUALS( (int)flexNode->GetFlexDirection(), (int)Flex::FlexDirection::ROW, TEST_LOCATION );
+
+  flexNode->CalculateLayout(480, 800, false);
+
+  Vector4 actorFrame = flexNode->GetNodeFrame(0);
+
+  tet_printf("Actor frame(left:%f,top:%f,right:%f,bottom:%f)\n", actorFrame.x, actorFrame.y, actorFrame.z, actorFrame.w);
+
+  DALI_TEST_EQUALS( actorFrame, Vector4( 5.0f, 5.0f, ITEM_SIZE.width+5, ITEM_SIZE.height+5 ), TEST_LOCATION );
+
+  END_TEST;
+}
+
 int UtcDaliToolkitFlexNodeAddChildrenRowP(void)
 {
   ToolkitTestApplication application;
@@ -79,8 +109,8 @@ int UtcDaliToolkitFlexNodeAddChildrenRowP(void)
   DALI_TEST_CHECK( actor1 );
   DALI_TEST_CHECK( actor2 );
 
-  flexNode->AddChild(actor1, &MeasureChild, 0);
-  flexNode->AddChild(actor2, &MeasureChild, 1);
+  flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
+  flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
 
   DALI_TEST_EQUALS( (int)flexNode->GetFlexDirection(), (int)Flex::FlexDirection::ROW, TEST_LOCATION );
 
@@ -114,8 +144,8 @@ int UtcDaliToolkitFlexNodeAddChildrenColumnP(void)
   DALI_TEST_CHECK( actor1 );
   DALI_TEST_CHECK( actor2 );
 
-  flexNode->AddChild(actor1, &MeasureChild, 0);
-  flexNode->AddChild(actor2, &MeasureChild, 1);
+  flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
+  flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
 
   flexNode->CalculateLayout(480, 800, false);
 
@@ -158,8 +188,8 @@ int UtcDaliToolkitFlexNodeAddChildrenColumnJustify(void)
   DALI_TEST_EQUALS( (int)flexNode->GetFlexJustification(), (int)Flex::Justification::FLEX_START, TEST_LOCATION );
   DALI_TEST_EQUALS( (int)flexNode->GetFlexItemsAlignment(), (int)Flex::Alignment::FLEX_START, TEST_LOCATION );
 
-  flexNode->AddChild(actor1, &MeasureChild, 0);
-  flexNode->AddChild(actor2, &MeasureChild, 1);
+  flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
+  flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
 
   flexNode->CalculateLayout(480, 800, false);
 
@@ -256,8 +286,8 @@ int UtcDaliToolkitFlexNodeSizingP(void)
   DALI_TEST_CHECK( actor1 );
   DALI_TEST_CHECK( actor2 );
 
-  flexNode->AddChild(actor1, &MeasureChild, 0);
-  flexNode->AddChild(actor2, &MeasureChild, 1);
+  flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
+  flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
 
   flexNode->CalculateLayout(480, 800, false);
 
@@ -290,10 +320,10 @@ int UtcDaliToolkitFlexNodeWrapModeP(void)
   DALI_TEST_EQUALS( (int)flexNode->GetFlexAlignment(), (int)Flex::Alignment::FLEX_START, TEST_LOCATION );
   DALI_TEST_EQUALS( (int)flexNode->GetFlexWrap(), (int)Flex::WrapType::NO_WRAP, TEST_LOCATION );
 
-  flexNode->AddChild( actor1, &MeasureChild, 0 );
-  flexNode->AddChild( actor2, &MeasureChild, 1 );
-  flexNode->AddChild( actor2, &MeasureChild, 2 );
-  flexNode->AddChild( actor2, &MeasureChild, 3 );
+  flexNode->AddChild( actor1, Extents(0,0,0,0), &MeasureChild, 0 );
+  flexNode->AddChild( actor2, Extents(0,0,0,0), &MeasureChild, 1 );
+  flexNode->AddChild( actor2, Extents(0,0,0,0), &MeasureChild, 2 );
+  flexNode->AddChild( actor2, Extents(0,0,0,0), &MeasureChild, 3 );
 
   flexNode->CalculateLayout(30, 800, false);
 
@@ -377,8 +407,8 @@ int UtcDaliToolkitFlexNodeRemoveChildP(void)
   DALI_TEST_CHECK( actor1 );
   DALI_TEST_CHECK( actor2 );
 
-  flexNode->AddChild(actor1, &MeasureChild, 0);
-  flexNode->AddChild(actor2, &MeasureChild, 1);
+  flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
+  flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
 
   flexNode->CalculateLayout(480, 800, false);
 
@@ -420,8 +450,8 @@ int UtcDaliToolkitFlexNodeRemoveAllChildrenP(void)
   DALI_TEST_CHECK( actor1 );
   DALI_TEST_CHECK( actor2 );
 
-  flexNode->AddChild(actor1, &MeasureChild, 0);
-  flexNode->AddChild(actor2, &MeasureChild, 1);
+  flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
+  flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
 
   flexNode->CalculateLayout(480, 800, false);
 
@@ -462,8 +492,8 @@ int UtcDaliToolkitFlexNodePaddingMarginP(void)
   DALI_TEST_CHECK( actor1 );
   DALI_TEST_CHECK( actor2 );
 
-  flexNode->AddChild(actor1, &MeasureChild, 0);
-  flexNode->AddChild(actor2, &MeasureChild, 1);
+  flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
+  flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
 
   Extents padding( 5,5,5,5);
   Extents margin( 5,5,5,5);
@@ -509,8 +539,8 @@ int UtcDaliToolkitFlexNodeCallbackTestP(void)
   DALI_TEST_CHECK( actor1 );
   DALI_TEST_CHECK( actor2 );
 
-  flexNode->AddChild(actor1, &MeasureChild, 0);
-  flexNode->AddChild(actor2, &MeasureChild, 1);
+  flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
+  flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
 
   flexNode->CalculateLayout(480, 800, false);
 
index 189ab8a..f13549c 100644 (file)
@@ -101,7 +101,7 @@ Node::~Node()
   DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Destructor() <<\n");
 }
 
-void Node::AddChild( Actor child, MeasureCallback measureFunction, int index )
+void Node::AddChild( Actor child, Extents margin, MeasureCallback measureFunction, int index )
 {
   if( child )
   {
@@ -115,11 +115,17 @@ void Node::AddChild( Actor child, MeasureCallback measureFunction, int index )
     childNode->mImpl->mActor = child;
     Vector2 minumumSize = child.GetMinimumSize();
     Vector2 maximumSize = child.GetMaximumSize();
+
     YGNodeStyleSetMaxWidth( childNode->mImpl->mYogaNode, maximumSize.width );
     YGNodeStyleSetMaxHeight( childNode->mImpl->mYogaNode, maximumSize.height );
     YGNodeStyleSetMinWidth( childNode->mImpl->mYogaNode, minumumSize.width );
     YGNodeStyleSetMinHeight( childNode->mImpl->mYogaNode, minumumSize.height );
 
+    YGNodeStyleSetMargin( childNode->mImpl->mYogaNode, YGEdgeLeft, margin.start );
+    YGNodeStyleSetMargin( childNode->mImpl->mYogaNode, YGEdgeTop, margin.top );
+    YGNodeStyleSetMargin( childNode->mImpl->mYogaNode, YGEdgeRight, margin.end );
+    YGNodeStyleSetMargin( childNode->mImpl->mYogaNode, YGEdgeBottom, margin.bottom );
+
     YGNodeSetMeasureFunc( childNode->mImpl->mYogaNode, &MeasureChild );
 
     YGNodeInsertChild( mImpl->mYogaNode, childNode->mImpl->mYogaNode, index );
index 034e555..1b76f76 100644 (file)
@@ -130,10 +130,11 @@ public:
   /**
    * @brief Insert child into the FlexLayout at the given index.
    * @param[in] child Actor to insert.
+   * @param[in] margin of child Actor.
    * @param[in] measureFunction for the child.
    * @param[in] index to insert at.
    */
-  void AddChild( Actor child, MeasureCallback measureFunction, int index );
+  void AddChild( Actor child, Extents margin, MeasureCallback measureFunction, int index );
 
   /**
    * @brief Remove child from the FlexLayout at the given index.