From: neostom432 Date: Tue, 11 Feb 2020 03:33:17 +0000 (+0900) Subject: Add child flex node with its margin X-Git-Tag: dali_1.9.0~5^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=810d35ceaa80c4b38988cccf9731c7837385e3cf Add child flex node with its margin 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 --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-FlexNode.cpp b/automated-tests/src/dali-toolkit/utc-Dali-FlexNode.cpp index 3d54ae2..31a6bf2 100755 --- a/automated-tests/src/dali-toolkit/utc-Dali-FlexNode.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-FlexNode.cpp @@ -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); diff --git a/dali-toolkit/devel-api/layouting/flex-node.cpp b/dali-toolkit/devel-api/layouting/flex-node.cpp index 189ab8a..f13549c 100644 --- a/dali-toolkit/devel-api/layouting/flex-node.cpp +++ b/dali-toolkit/devel-api/layouting/flex-node.cpp @@ -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 ); diff --git a/dali-toolkit/devel-api/layouting/flex-node.h b/dali-toolkit/devel-api/layouting/flex-node.h index 034e555..1b76f76 100644 --- a/dali-toolkit/devel-api/layouting/flex-node.h +++ b/dali-toolkit/devel-api/layouting/flex-node.h @@ -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.