|
Control (LinearLayout Horizontal)
|
- Control (LayoutingRequired)
- |
- Control (LinearLayout Horizontal)
+ Control (LinearLayout Vertical)
|
LeafControl
ToolkitTestApplication application;
tet_infoline("UtcDaliLayoutingNesting_01 - Nesting a LinearLayout (MATCH_PARENT) containing a leaf control within a LinearLayout");
- Stage stage = Stage::GetCurrent();
-
auto rootControl = Control::New();
SetupRootLayoutControl( rootControl );
for( auto&& iter : controls )
{
- hbox.Add( iter );
+ vbox.Add( iter );
}
rootControl.Add( hbox );
Root
|
Control (LinearLayout Horizontal)
- |
- Control (LayoutingRequired)
- |
- Control (LinearLayout Horizontal)
+ | |
+ Control (LinearLayout Vertical)
| |
LeafControl
tet_infoline("UtcDaliLayoutingNesting_02 - Nesting a LinearLayout (MATCH_PARENT) containing a leaf control within a LinearLayout");
tet_infoline("Then change the parent's size and test child responded correctly");
- Stage stage = Stage::GetCurrent();
-
auto rootControl = Control::New();
SetupRootLayoutControl( rootControl );
for( auto&& iter : controls )
{
- hbox.Add( iter );
+ vbox.Add( iter );
}
rootControl.Add( hbox );
DALI_TEST_EQUALS( controls[0].GetProperty<Vector3>( Actor::Property::SIZE ), Vector3( 40.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION );
END_TEST;
+}
+
+int UtcDaliLayoutingNesting_LeafSizeChange(void)
+{
+ /*
+ Root
+ |
+ Control (LayoutingRequired)
+ |
+ Control (LinearLayout Horizontal) (WRAP_CONTENT)
+ | |
+ TextLabel
+ */
+
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliLayoutingNesting_LeafSizeChange - Nesting a TextLabel within a layout that is parented to a control");
+ tet_infoline("Then change the TextLabels size and test the parent resized to wrap the new size");
+
+ auto rootControl = Control::New();
+ SetupRootLayoutControl( rootControl );
+
+ auto control = Control::New();
+ DevelControl::SetLayoutingRequired( control, true );
+ control.SetName( "control" );
+
+ auto hbox = Control::New();
+ auto hboxLayout = LinearLayout::New();
+ hboxLayout.SetOrientation( LinearLayout::Orientation::HORIZONTAL );
+ DevelControl::SetLayout( hbox, hboxLayout );
+ hbox.SetName( "hBox" );
+ hbox.SetProperty( Toolkit::LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::WRAP_CONTENT );
+ hbox.SetProperty( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT );
+
+ control.Add( hbox );
+
+ TextLabel textLabel = CreateTextLabel("SmallText" );
+
+ hbox.Add( textLabel );
+
+ rootControl.Add( control );
+
+ // Ensure layouting happens
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS( hbox.GetProperty<Vector3>( Actor::Property::SIZE ), Vector3( 260.0f, 64.0f, 0.0f ), 0.0001f, TEST_LOCATION );
+ DALI_TEST_EQUALS( textLabel.GetProperty<Vector3>( Actor::Property::SIZE ), Vector3( 260.0f, 64.0f, 0.0f ), 0.0001f, TEST_LOCATION );
+
+ tet_infoline("Changing to longer text");
+ textLabel.SetProperty( TextLabel::Property::TEXT, "muchlongerText" );
+
+ // Ensure layouting happens
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS( hbox.GetProperty<Vector3>( Actor::Property::SIZE ), Vector3( 432.0f, 64.0f, 0.0f ), 0.0001f, TEST_LOCATION );
+ DALI_TEST_EQUALS( textLabel.GetProperty<Vector3>( Actor::Property::SIZE ), Vector3( 432.0f, 64.0f, 0.0f ), 0.0001f, TEST_LOCATION );
+
+ END_TEST;
}
\ No newline at end of file
// Check below will be true for legacy containers and controls with layout required set.
// Other layouts will have their own OnMeasure (a checked requirement) hence not execute LayoutGroup::OnMeasure.
// Controls which have set layout required will not be legacy controls hence should not have a ResizePolicy set.
- if( childControl.GetChildCount() > 0 )
+ // Only need to map the resize policy the first time as the Layouting system will then set it to FIXED.
+ if( childControl.GetChildCount() > 0 && ! mImpl->mResizePolicyMapped )
{
// First pass, Static mappings that are not dependant on parent
SizeNegotiationMapper::SetLayoutParametersUsingResizePolicy( childControl, childLayout, Dimension::WIDTH );
SizeNegotiationMapper::SetLayoutParametersUsingResizePolicy( childControl, childLayout, Dimension::HEIGHT );
+ mImpl->mResizePolicyMapped = true;
}
// Second pass, if any mappings were not possible due to parent size dependancies then calculate an exact desired size for child