X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-Layouting.cpp;h=a9712d0c765d92c8d64cb332ca9f973cf077901d;hp=e5a57b3c62d4b75c9731ee40c020b6128e946f29;hb=1498b458e65cce375898c232cfa87c831b1f1c6b;hpb=ae45011bfee6c5b17f4468241bddf3620a6d62f2 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Layouting.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Layouting.cpp index e5a57b3..a9712d0 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Layouting.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Layouting.cpp @@ -21,9 +21,10 @@ #include #include -#include -#include #include +#include + +#include <../custom-layout.h> #include @@ -47,7 +48,7 @@ int UtcDaliLayouting_HboxLayout01(void) Stage stage = Stage::GetCurrent(); auto hbox = Control::New(); - auto hboxLayout = HboxLayout::New(); + auto hboxLayout = LinearLayout::New(); hboxLayout.SetCellPadding( LayoutSize( 10, 0 ) ); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); @@ -83,7 +84,7 @@ int UtcDaliLayouting_HboxLayout01(void) DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::SIZE ), Vector3( 100.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); // Change a layout - auto newHBoxLayout = HboxLayout::New(); + auto newHBoxLayout = LinearLayout::New(); newHBoxLayout.SetCellPadding( LayoutSize( 10, 0 ) ); DevelControl::SetLayout( hbox, newHBoxLayout ); @@ -106,11 +107,11 @@ int UtcDaliLayouting_HboxLayout02(void) Stage stage = Stage::GetCurrent(); auto hbox1 = Control::New(); - auto hboxLayout1 = HboxLayout::New(); + auto hboxLayout1 = LinearLayout::New(); DevelControl::SetLayout( hbox1, hboxLayout1 ); auto hbox2 = Control::New(); - auto hboxLayout2 = HboxLayout::New(); + auto hboxLayout2 = LinearLayout::New(); DevelControl::SetLayout( hbox2, hboxLayout2 ); hbox1.SetName( "HBox1"); @@ -146,7 +147,7 @@ int UtcDaliLayouting_HboxLayout02(void) hbox2.SetAnchorPoint( AnchorPoint::CENTER ); auto hbox3 = Control::New(); - auto hboxLayout3 = HboxLayout::New(); + auto hboxLayout3 = LinearLayout::New(); DevelControl::SetLayout( hbox3, hboxLayout3 ); hbox3.SetParentOrigin( ParentOrigin::CENTER ); @@ -206,11 +207,11 @@ int UtcDaliLayouting_HboxLayout03(void) Stage stage = Stage::GetCurrent(); auto hbox1 = Control::New(); - auto hboxLayout1 = HboxLayout::New(); + auto hboxLayout1 = LinearLayout::New(); DevelControl::SetLayout( hbox1, hboxLayout1 ); auto hbox2 = Control::New(); - auto hboxLayout2 = HboxLayout::New(); + auto hboxLayout2 = LinearLayout::New(); DevelControl::SetLayout( hbox2, hboxLayout2 ); hbox1.SetName( "HBox1"); @@ -250,7 +251,7 @@ int UtcDaliLayouting_HboxLayout03(void) hbox2.SetAnchorPoint( AnchorPoint::CENTER ); auto hbox3 = Control::New(); - auto hboxLayout3 = HboxLayout::New(); + auto hboxLayout3 = LinearLayout::New(); DevelControl::SetLayout( hbox3, hboxLayout3); hbox3.SetParentOrigin( ParentOrigin::CENTER ); @@ -311,11 +312,11 @@ int UtcDaliLayouting_HboxLayout04(void) Stage stage = Stage::GetCurrent(); auto hbox1 = Control::New(); - auto hboxLayout1 = HboxLayout::New(); + auto hboxLayout1 = LinearLayout::New(); DevelControl::SetLayout( hbox1, hboxLayout1 ); auto hbox2 = Control::New(); - auto hboxLayout2 = HboxLayout::New(); + auto hboxLayout2 = LinearLayout::New(); DevelControl::SetLayout( hbox2, hboxLayout2 ); hbox1.SetName( "HBox1"); // Default spec is to wrap content @@ -352,7 +353,7 @@ int UtcDaliLayouting_HboxLayout04(void) controls[6].SetProperty( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::MATCH_PARENT ); auto hbox3 = Control::New(); - auto hboxLayout3 = HboxLayout::New(); + auto hboxLayout3 = LinearLayout::New(); DevelControl::SetLayout( hbox3, hboxLayout3 ); hbox3.SetParentOrigin( ParentOrigin::CENTER ); @@ -410,7 +411,7 @@ int UtcDaliLayouting_HboxLayout05(void) Stage stage = Stage::GetCurrent(); auto hbox = Control::New(); - auto hboxLayout = HboxLayout::New(); + auto hboxLayout = LinearLayout::New(); hboxLayout.SetCellPadding( LayoutSize( 10, 0 ) ); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); @@ -451,6 +452,195 @@ int UtcDaliLayouting_HboxLayout05(void) END_TEST; } +int UtcDaliLayouting_HboxLayout06(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliLayouting_HboxLayout06 - Test nested layouts"); + + Stage stage = Stage::GetCurrent(); + + auto rootControl = Control::New(); + auto absoluteLayout = AbsoluteLayout::New(); + DevelControl::SetLayout( rootControl, absoluteLayout ); + rootControl.SetName( "AbsoluteLayout" ); + stage.Add( rootControl ); + + auto hbox = Control::New(); + auto hboxLayout = LinearLayout::New(); + hboxLayout.SetOrientation( LinearLayout::Orientation::HORIZONTAL ); + DevelControl::SetLayout( hbox, hboxLayout ); + hbox.SetName( "HBox" ); + + std::vector< Control > controls; + controls.push_back( CreateLeafControl( 40, 40 ) ); + controls.push_back( CreateLeafControl( 60, 40 ) ); + + for( auto&& iter : controls ) + { + hbox.Add( iter ); + } + hbox.SetParentOrigin( ParentOrigin::CENTER ); + hbox.SetAnchorPoint( AnchorPoint::CENTER ); + rootControl.Add( hbox ); + + // Ensure layouting happens + application.SendNotification(); + application.Render(); + + // hbox centers elements vertically, it fills test harness stage, which is 480x800. + // hbox left justifies elements + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::POSITION ), Vector3( 40.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::SIZE ), Vector3( 40.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::SIZE ), Vector3( 60.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + DALI_TEST_EQUALS( hbox.GetProperty( Actor::Property::SIZE ), Vector3( 100.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + // Change a layout + auto newHBoxLayout = LinearLayout::New(); + newHBoxLayout.SetOrientation( LinearLayout::Orientation::HORIZONTAL ); + DevelControl::SetLayout( hbox, newHBoxLayout ); + + hbox.SetProperty( Toolkit::LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); + hbox.SetProperty( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( hbox.GetProperty( Actor::Property::SIZE ), Vector3( 100.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + // Change size specification + hbox.SetProperty( Toolkit::LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::MATCH_PARENT ); + hbox.SetProperty( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::MATCH_PARENT ); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( hbox.GetProperty( Actor::Property::SIZE ), Vector3( 480.0f, 800.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + // Use WRAP_CONTENT again + hbox.SetProperty( Toolkit::LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); + hbox.SetProperty( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( hbox.GetProperty( Actor::Property::SIZE ), Vector3( 100.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + END_TEST; +} + + +int UtcDaliLayouting_HboxLayout07(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliLayouting_HboxLayout07 - Set LTR/RTL direction"); + + Stage stage = Stage::GetCurrent(); + auto hbox = Control::New(); + auto hboxLayout = LinearLayout::New(); + hboxLayout.SetCellPadding( LayoutSize( 10, 0 ) ); + DevelControl::SetLayout( hbox, hboxLayout ); + hbox.SetName( "HBox"); + + std::vector< Control > controls; + controls.push_back( CreateLeafControl( 40, 40 ) ); + controls.push_back( CreateLeafControl( 60, 40 ) ); + controls.push_back( CreateLeafControl( 80, 40 ) ); + controls.push_back( CreateLeafControl( 100, 40 ) ); + + for( auto&& iter : controls ) + { + hbox.Add( iter ); + } + hbox.SetParentOrigin( ParentOrigin::CENTER ); + hbox.SetAnchorPoint( AnchorPoint::CENTER ); + stage.Add( hbox ); + + hbox.SetProperty( Actor::Property::LAYOUT_DIRECTION, LayoutDirection::LEFT_TO_RIGHT ); + + // Ensure layouting happens + application.SendNotification(); + application.Render(); + + // hbox centers elements vertically, it fills test harness stage, which is 480x800 from left to right. + // hbox left justifies elements + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::POSITION ), Vector3( 50.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[2].GetProperty( Actor::Property::POSITION ), Vector3( 120.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::POSITION ), Vector3( 210.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::SIZE ), Vector3( 40.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::SIZE ), Vector3( 60.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[2].GetProperty( Actor::Property::SIZE ), Vector3( 80.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::SIZE ), Vector3( 100.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + hbox.SetProperty( Actor::Property::LAYOUT_DIRECTION, LayoutDirection::RIGHT_TO_LEFT ); + + // Ensure layouting happens + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::POSITION ), Vector3( 470.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::POSITION ), Vector3( 400.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[2].GetProperty( Actor::Property::POSITION ), Vector3( 310.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::POSITION ), Vector3( 200.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::SIZE ), Vector3( 40.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::SIZE ), Vector3( 60.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[2].GetProperty( Actor::Property::SIZE ), Vector3( 80.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::SIZE ), Vector3( 100.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliLayouting_HboxLayout08(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliLayouting_HboxLayout08 - Test layout animation"); + + Stage stage = Stage::GetCurrent(); + + auto rootControl = Control::New(); + auto absoluteLayout = AbsoluteLayout::New(); + absoluteLayout.SetAnimateLayout( true ); + DevelControl::SetLayout( rootControl, absoluteLayout ); + rootControl.SetName( "AbsoluteLayout" ); + stage.Add( rootControl ); + + Control control1 = CreateLeafControl( 40, 40 ); + rootControl.Add( control1 ); + + auto hbox = Control::New(); + auto hboxLayout = LinearLayout::New(); + hboxLayout.SetOrientation( LinearLayout::Orientation::HORIZONTAL ); + DevelControl::SetLayout( hbox, hboxLayout ); + hbox.SetName( "HBox" ); + + Control control2 = CreateLeafControl( 40, 40 ); + hbox.Add( control2 ); + + hbox.SetParentOrigin( ParentOrigin::CENTER ); + hbox.SetAnchorPoint( AnchorPoint::CENTER ); + rootControl.Add( hbox ); + + DALI_TEST_EQUALS( absoluteLayout.IsLayoutAnimated(), true, TEST_LOCATION ); + DALI_TEST_EQUALS( DevelControl::GetLayout( control1 ).IsLayoutAnimated(), true, TEST_LOCATION ); + DALI_TEST_EQUALS( hboxLayout.IsLayoutAnimated(), false, TEST_LOCATION ); + DALI_TEST_EQUALS( DevelControl::GetLayout( control2 ).IsLayoutAnimated(), false, TEST_LOCATION ); + + hboxLayout.SetAnimateLayout( true ); + absoluteLayout.SetAnimateLayout( false ); + + DALI_TEST_EQUALS( absoluteLayout.IsLayoutAnimated(), false, TEST_LOCATION ); + DALI_TEST_EQUALS( DevelControl::GetLayout( control1 ).IsLayoutAnimated(), false, TEST_LOCATION ); + DALI_TEST_EQUALS( hboxLayout.IsLayoutAnimated(), true, TEST_LOCATION ); + DALI_TEST_EQUALS( DevelControl::GetLayout( control2 ).IsLayoutAnimated(), true, TEST_LOCATION ); + + END_TEST; +} + // Padding tests int UtcDaliLayouting_HboxLayout_Padding01(void) @@ -460,7 +650,7 @@ int UtcDaliLayouting_HboxLayout_Padding01(void) Stage stage = Stage::GetCurrent(); auto hbox = Control::New(); - auto hboxLayout = HboxLayout::New(); + auto hboxLayout = LinearLayout::New(); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); @@ -525,7 +715,7 @@ int UtcDaliLayouting_HboxLayout_Padding02(void) Stage stage = Stage::GetCurrent(); auto hbox = Control::New(); - auto hboxLayout = HboxLayout::New(); + auto hboxLayout = LinearLayout::New(); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); @@ -600,11 +790,11 @@ int UtcDaliLayouting_HboxLayout_Padding02(void) int UtcDaliLayouting_HboxLayout_Padding03(void) { ToolkitTestApplication application; - tet_infoline("UtcDaliLayouting_HboxLayout_Padding03 - Adding Changing padding on a single child"); + tet_infoline("UtcDaliLayouting_HboxLayout_Padding03 - Changing padding on a single child"); Stage stage = Stage::GetCurrent(); auto hbox = Control::New(); - auto hboxLayout = HboxLayout::New(); + auto hboxLayout = LinearLayout::New(); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); @@ -681,6 +871,227 @@ int UtcDaliLayouting_HboxLayout_Padding03(void) END_TEST; } +int UtcDaliLayouting_HboxLayout_Padding04(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliLayouting_HboxLayout_Padding04 - Adding Padding to the hbox"); + + // Adding padding to the layout should offset the positioning of the children. + + const Extents LAYOUT_PADDING = Extents(5, 10, 20, 2 ); + const Size CONTROL_SIZE = Size( 40, 40 ); + + Stage stage = Stage::GetCurrent(); + // Create a root layout, ideally Dali would have a default layout in the root layer. + // Without this root layer the LinearLayout (or any other layout) will not + // honour WIDTH_SPECIFICATION or HEIGHT_SPECIFICATION settings. + // It uses the default stage size and ideally should have a layout added to it. + auto rootLayoutControl = Control::New(); + rootLayoutControl.SetName( "AbsoluteLayout"); + auto rootLayout = AbsoluteLayout::New(); + DevelControl::SetLayout( rootLayoutControl, rootLayout ); + rootLayoutControl.SetAnchorPoint( AnchorPoint::CENTER ); + rootLayoutControl.SetParentOrigin( ParentOrigin::CENTER ); + stage.Add( rootLayoutControl ); + + auto hbox = Control::New(); + auto hboxLayout = LinearLayout::New(); + hboxLayout.SetOrientation( LinearLayout::Orientation::HORIZONTAL ); + DevelControl::SetLayout( hbox, hboxLayout ); + hbox.SetName( "HBox"); + hbox.SetProperty(Toolkit::Control::Property::PADDING, LAYOUT_PADDING ); + hbox.SetProperty( Toolkit::LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); + hbox.SetProperty( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); + + std::vector< Control > controls; + controls.push_back( CreateLeafControl( CONTROL_SIZE.width, CONTROL_SIZE.height ) ); + controls.push_back( CreateLeafControl( CONTROL_SIZE.width, CONTROL_SIZE.height ) ); + controls.push_back( CreateLeafControl( CONTROL_SIZE.width, CONTROL_SIZE.height ) ); + controls.push_back( CreateLeafControl( CONTROL_SIZE.width, CONTROL_SIZE.height ) ); + + for( auto&& iter : controls ) + { + hbox.Add( iter ); + } + + hbox.SetParentOrigin( ParentOrigin::CENTER ); + hbox.SetAnchorPoint( AnchorPoint::CENTER ); + rootLayoutControl.Add( hbox ); + + // Ensure layouting happens + application.SendNotification(); + application.Render(); + + // Extra update needed to Relayout one more time. Catches any position updates, false positive without this seen. + application.SendNotification(); + + // hbox centers elements vertically, it fills test harness stage, which is 480x800. + // hbox left justifies elements + tet_infoline("Test Child Actor Position"); + + auto controlXPosition=0.0f; + + controlXPosition = LAYOUT_PADDING.start; // First child positioned at offset defined by the padding + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::POSITION ), Vector3( LAYOUT_PADDING.start, + LAYOUT_PADDING.top, + 0.0f ), 0.0001f, TEST_LOCATION ); + + controlXPosition+=CONTROL_SIZE.width; // Second child positioned is the position of the first child + the first child's width. + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::POSITION ), Vector3( controlXPosition, + LAYOUT_PADDING.top, + 0.0f ), + 0.0001f, TEST_LOCATION ); + + controlXPosition+=CONTROL_SIZE.width; // Third child positioned adjacent to second + DALI_TEST_EQUALS( controls[2].GetProperty( Actor::Property::POSITION ), Vector3( controlXPosition, + LAYOUT_PADDING.top, + 0.0f ), 0.0001f, TEST_LOCATION ); + + controlXPosition+=CONTROL_SIZE.width; // Forth passed adjacent to the third + DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::POSITION ), Vector3( controlXPosition, + LAYOUT_PADDING.top, + 0.0f ), 0.0001f, TEST_LOCATION ); + + auto totalControlsWidth = CONTROL_SIZE.width * controls.size(); + auto totalControlsHeight = CONTROL_SIZE.height; + + DALI_TEST_EQUALS( hbox.GetProperty( Actor::Property::SIZE ), Vector3( totalControlsWidth + LAYOUT_PADDING.start + LAYOUT_PADDING.end, + totalControlsHeight + LAYOUT_PADDING.top + LAYOUT_PADDING.bottom, + 0.0f ), 0.0001f, TEST_LOCATION ); + + + END_TEST; +} + +int UtcDaliLayouting_HboxLayout_Padding05(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliLayouting_HboxLayout_Padding05 - Changing the hbox Padding"); + + // Adding padding to the layout should offset the positioning of the children. + + const Extents LAYOUT_PADDING = Extents(5, 10, 20, 2 ); + const Size CONTROL_SIZE = Size( 40, 40 ); + + Stage stage = Stage::GetCurrent(); + // Create a root layout, ideally Dali would have a default layout in the root layer. + // Without this root layer the LinearLayout (or any other layout) will not + // honour WIDTH_SPECIFICATION or HEIGHT_SPECIFICATION settings. + // It uses the default stage size and ideally should have a layout added to it. + auto rootLayoutControl = Control::New(); + rootLayoutControl.SetName( "AbsoluteLayout"); + auto rootLayout = AbsoluteLayout::New(); + DevelControl::SetLayout( rootLayoutControl, rootLayout ); + rootLayoutControl.SetAnchorPoint( AnchorPoint::CENTER ); + rootLayoutControl.SetParentOrigin( ParentOrigin::CENTER ); + stage.Add( rootLayoutControl ); + + auto hbox = Control::New(); + auto hboxLayout = LinearLayout::New(); + hboxLayout.SetOrientation( LinearLayout::Orientation::HORIZONTAL ); + DevelControl::SetLayout( hbox, hboxLayout ); + hbox.SetName( "HBox"); + hbox.SetProperty(Toolkit::Control::Property::PADDING, LAYOUT_PADDING ); + hbox.SetProperty( Toolkit::LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); + hbox.SetProperty( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); + + std::vector< Control > controls; + controls.push_back( CreateLeafControl( CONTROL_SIZE.width, CONTROL_SIZE.height ) ); + controls.push_back( CreateLeafControl( CONTROL_SIZE.width, CONTROL_SIZE.height ) ); + controls.push_back( CreateLeafControl( CONTROL_SIZE.width, CONTROL_SIZE.height ) ); + controls.push_back( CreateLeafControl( CONTROL_SIZE.width, CONTROL_SIZE.height ) ); + + for( auto&& iter : controls ) + { + hbox.Add( iter ); + } + + hbox.SetParentOrigin( ParentOrigin::CENTER ); + hbox.SetAnchorPoint( AnchorPoint::CENTER ); + rootLayoutControl.Add( hbox ); + + // Ensure layouting happens + application.SendNotification(); + application.Render(); + + // Extra update needed to Relayout one more time. Catches any position updates, false positive without this seen. + application.SendNotification(); + + // hbox centers elements vertically, it fills test harness stage, which is 480x800. + // hbox left justifies elements + tet_infoline("Test Child Actor Position"); + + auto controlXPosition=0.0f; + + controlXPosition = LAYOUT_PADDING.start; // First child positioned at offset defined by the padding + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::POSITION ), Vector3( LAYOUT_PADDING.start, + LAYOUT_PADDING.top, + 0.0f ), 0.0001f, TEST_LOCATION ); + + controlXPosition+=CONTROL_SIZE.width; // Second child positioned is the position of the first child + the first child's width. + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::POSITION ), Vector3( controlXPosition, + LAYOUT_PADDING.top, + 0.0f ), + 0.0001f, TEST_LOCATION ); + + controlXPosition+=CONTROL_SIZE.width; // Third child positioned adjacent to second + DALI_TEST_EQUALS( controls[2].GetProperty( Actor::Property::POSITION ), Vector3( controlXPosition, + LAYOUT_PADDING.top, + 0.0f ), 0.0001f, TEST_LOCATION ); + + controlXPosition+=CONTROL_SIZE.width; // Forth passed adjacent to the third + DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::POSITION ), Vector3( controlXPosition, + LAYOUT_PADDING.top, + 0.0f ), 0.0001f, TEST_LOCATION ); + + auto totalControlsWidth = CONTROL_SIZE.width * controls.size(); + auto totalControlsHeight = CONTROL_SIZE.height; + + DALI_TEST_EQUALS( hbox.GetProperty( Actor::Property::SIZE ), Vector3( totalControlsWidth + LAYOUT_PADDING.start + LAYOUT_PADDING.end, + totalControlsHeight + LAYOUT_PADDING.top + LAYOUT_PADDING.bottom, + 0.0f ), 0.0001f, TEST_LOCATION ); + + // Change layout padding + const Extents NEW_LAYOUT_PADDING = Extents(5, 20, 10, 2 ); + tet_printf( "\nChanging Padding to control at index 1 \n" ); + hbox.SetProperty(Toolkit::Control::Property::PADDING, NEW_LAYOUT_PADDING ); + + // Ensure layouting happens + application.SendNotification(); + application.Render(); + + // Extra update needed to Relayout one more time. Catches any position updates, false positive without this seen. + application.SendNotification(); + + controlXPosition = NEW_LAYOUT_PADDING.start; // First child positioned at offset defined by the padding + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::POSITION ), Vector3( NEW_LAYOUT_PADDING.start, + NEW_LAYOUT_PADDING.top, + 0.0f ), 0.0001f, TEST_LOCATION ); + + controlXPosition+=CONTROL_SIZE.width; // Second child positioned is the position of the first child + the first child's width. + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::POSITION ), Vector3( controlXPosition, + NEW_LAYOUT_PADDING.top, + 0.0f ), + 0.0001f, TEST_LOCATION ); + + controlXPosition+=CONTROL_SIZE.width; // Third child positioned adjacent to second + DALI_TEST_EQUALS( controls[2].GetProperty( Actor::Property::POSITION ), Vector3( controlXPosition, + NEW_LAYOUT_PADDING.top, + 0.0f ), 0.0001f, TEST_LOCATION ); + + controlXPosition+=CONTROL_SIZE.width; // Forth passed adjacent to the third + DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::POSITION ), Vector3( controlXPosition, + NEW_LAYOUT_PADDING.top, + 0.0f ), 0.0001f, TEST_LOCATION ); + totalControlsWidth = CONTROL_SIZE.width * controls.size(); + totalControlsHeight = CONTROL_SIZE.height; + + DALI_TEST_EQUALS( hbox.GetProperty( Actor::Property::SIZE ), Vector3( totalControlsWidth + NEW_LAYOUT_PADDING.start + NEW_LAYOUT_PADDING.end, + totalControlsHeight + NEW_LAYOUT_PADDING.top + NEW_LAYOUT_PADDING.bottom, + 0.0f ), 0.0001f, TEST_LOCATION ); + END_TEST; +} + // Margin Tests int UtcDaliLayouting_HboxLayout_Margin01(void) @@ -690,7 +1101,7 @@ int UtcDaliLayouting_HboxLayout_Margin01(void) Stage stage = Stage::GetCurrent(); auto hbox = Control::New(); - auto hboxLayout = HboxLayout::New(); + auto hboxLayout = LinearLayout::New(); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); @@ -752,7 +1163,8 @@ int UtcDaliLayouting_VboxLayout01(void) Stage stage = Stage::GetCurrent(); auto vbox = Control::New(); - auto vboxLayout = VboxLayout::New(); + auto vboxLayout = LinearLayout::New(); + vboxLayout.SetOrientation( LinearLayout::Orientation::VERTICAL ); DevelControl::SetLayout( vbox, vboxLayout ); vbox.SetName( "Vbox"); @@ -811,7 +1223,8 @@ int UtcDaliLayouting_VboxLayout02(void) stage.Add( rootControl ); auto vbox = Control::New(); - auto vboxLayout = VboxLayout::New(); + auto vboxLayout = LinearLayout::New(); + vboxLayout.SetOrientation( LinearLayout::Orientation::VERTICAL ); DevelControl::SetLayout( vbox, vboxLayout ); vbox.SetName( "Vbox"); rootControl.Add( vbox ); @@ -875,14 +1288,15 @@ int UtcDaliLayouting_VboxLayout03(void) // // For this test, add an hbox instead auto hbox = Control::New(); - auto hboxLayout = HboxLayout::New(); + auto hboxLayout = LinearLayout::New(); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "Hbox"); stage.Add( hbox ); auto vbox = Control::New(); - auto vboxLayout = VboxLayout::New(); + auto vboxLayout = LinearLayout::New(); vboxLayout.SetCellPadding( LayoutSize( 0, 10 ) ); + vboxLayout.SetOrientation( LinearLayout::Orientation::VERTICAL ); DALI_TEST_EQUALS( vboxLayout.GetCellPadding(), LayoutSize( 0, 10 ), TEST_LOCATION ); @@ -935,3 +1349,156 @@ int UtcDaliLayouting_VboxLayout03(void) END_TEST; } + + + +int UtcDaliLayouting_RelayoutOnChildOrderChanged(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliLayouting_RelayoutOnChildOrderChanged"); + tet_infoline(" Test that if the sibling order changes, the container is re-laid out automatically"); + + Stage stage = Stage::GetCurrent(); + + auto hbox = Control::New(); + auto hboxLayout = Test::CustomLayout::New(); + DevelControl::SetLayout( hbox, hboxLayout ); + hbox.SetName( "HBox"); + + std::vector< Control > controls; + controls.push_back( CreateLeafControl( 40, 40 ) ); + controls.push_back( CreateLeafControl( 60, 40 ) ); + controls.push_back( CreateLeafControl( 80, 40 ) ); + controls.push_back( CreateLeafControl( 100, 40 ) ); + + for( auto&& iter : controls ) + { + hbox.Add( iter ); + } + hbox.SetParentOrigin( ParentOrigin::CENTER ); + hbox.SetAnchorPoint( AnchorPoint::CENTER ); + stage.Add( hbox ); + + // Ensure layouting happens + application.SendNotification(); + application.Render(); + + // hbox centers elements vertically, it fills test harness stage, which is 480x800. + // hbox left justifies elements + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::POSITION ), Vector3( 40.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[2].GetProperty( Actor::Property::POSITION ), Vector3( 100.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::POSITION ), Vector3( 180.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::SIZE ), Vector3( 40.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::SIZE ), Vector3( 60.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[2].GetProperty( Actor::Property::SIZE ), Vector3( 80.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::SIZE ), Vector3( 100.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + controls[0].RaiseToTop(); // 0->3; 1, 2, 3, 0 + controls[2].Lower(); // 2->1; 2, 1, 3, 0 + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( controls[2].GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::POSITION ), Vector3( 80.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::POSITION ), Vector3( 140.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::POSITION ), Vector3( 240.0f, 380.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::SIZE ), Vector3( 40.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::SIZE ), Vector3( 60.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[2].GetProperty( Actor::Property::SIZE ), Vector3( 80.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::SIZE ), Vector3( 100.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliLayouting_HboxLayout_TargetSize(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliLayouting_HboxLayout07 - Set target size on leaf"); + + Stage stage = Stage::GetCurrent(); + auto hbox = Control::New(); + auto hboxLayout = LinearLayout::New(); + DevelControl::SetLayout( hbox, hboxLayout ); + hbox.SetName( "HBox"); + + std::vector< Control > controls; + controls.push_back( CreateLeafControl( 40, 40 ) ); + for( auto&& iter : controls ) + { + iter.SetSize( 100, 100 ); + hbox.Add( iter ); + } + hbox.SetParentOrigin( ParentOrigin::CENTER ); + hbox.SetAnchorPoint( AnchorPoint::CENTER ); + stage.Add( hbox ); + + // Ensure layouting happens + application.SendNotification(); + application.Render(); + + // hbox centers elements vertically, it fills test harness stage, which is 480x800 from left to right. + // hbox left justifies elements + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 350.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::SIZE ), Vector3( 100.0f, 100.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + END_TEST; +} + + +int UtcDaliLayouting_RemoveLayout01(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliLayouting_RemoveLayout"); + + Stage stage = Stage::GetCurrent(); + + auto rootControl = Control::New(); + auto absoluteLayout = AbsoluteLayout::New(); + DevelControl::SetLayout( rootControl, absoluteLayout ); + rootControl.SetName( "AbsoluteLayout" ); + stage.Add( rootControl ); + + auto hbox = Control::New(); + auto hboxLayout = LinearLayout::New(); + hboxLayout.SetOrientation( LinearLayout::Orientation::HORIZONTAL ); + DevelControl::SetLayout( hbox, hboxLayout ); + hbox.SetName( "HBox" ); + + std::vector< Control > controls; + controls.push_back( CreateLeafControl( 40, 40 ) ); + controls.push_back( CreateLeafControl( 60, 40 ) ); + + for( auto&& iter : controls ) + { + hbox.Add( iter ); + } + hbox.SetParentOrigin( ParentOrigin::CENTER ); + hbox.SetAnchorPoint( AnchorPoint::CENTER ); + rootControl.Add( hbox ); + + tet_infoline("Layout as normal"); + application.SendNotification(); + application.Render(); + + tet_infoline("Set an empty layout on hbox container"); + LinearLayout emptyLayout; + DevelControl::SetLayout( hbox, emptyLayout ); + + tet_infoline("Run another layout"); + application.SendNotification(); + application.Render(); + + tet_infoline("Check leaf controls haven't moved"); + + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::POSITION ), Vector3( 40.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::SIZE ), Vector3( 40.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::SIZE ), Vector3( 60.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + END_TEST; +}