From: Agnelo Vaz Date: Thu, 1 Nov 2018 17:17:13 +0000 (+0000) Subject: Parent of TextLabel does not resize when text changes X-Git-Tag: dali_1.3.50~2^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=c50913a6361a4ba502d4d248bf59e1efb867b2ab Parent of TextLabel does not resize when text changes Change-Id: I1fb688299dde9296eae0a93308d54e783089ccc1 --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-LayoutingNesting.cpp b/automated-tests/src/dali-toolkit/utc-Dali-LayoutingNesting.cpp index 155b54a..a21b1b8 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-LayoutingNesting.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-LayoutingNesting.cpp @@ -71,9 +71,7 @@ int UtcDaliLayoutingNesting_01(void) | Control (LinearLayout Horizontal) | - Control (LayoutingRequired) - | - Control (LinearLayout Horizontal) + Control (LinearLayout Vertical) | LeafControl @@ -82,8 +80,6 @@ int UtcDaliLayoutingNesting_01(void) 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 ); @@ -110,7 +106,7 @@ int UtcDaliLayoutingNesting_01(void) for( auto&& iter : controls ) { - hbox.Add( iter ); + vbox.Add( iter ); } rootControl.Add( hbox ); @@ -134,10 +130,8 @@ int UtcDaliLayoutingNesting_02(void) Root | Control (LinearLayout Horizontal) - | - Control (LayoutingRequired) - | - Control (LinearLayout Horizontal) + | | + Control (LinearLayout Vertical) | | LeafControl @@ -147,8 +141,6 @@ int UtcDaliLayoutingNesting_02(void) 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 ); @@ -175,7 +167,7 @@ int UtcDaliLayoutingNesting_02(void) for( auto&& iter : controls ) { - hbox.Add( iter ); + vbox.Add( iter ); } rootControl.Add( hbox ); @@ -200,4 +192,63 @@ int UtcDaliLayoutingNesting_02(void) DALI_TEST_EQUALS( controls[0].GetProperty( 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( Actor::Property::SIZE ), Vector3( 260.0f, 64.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( textLabel.GetProperty( 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( Actor::Property::SIZE ), Vector3( 432.0f, 64.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( textLabel.GetProperty( Actor::Property::SIZE ), Vector3( 432.0f, 64.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + END_TEST; } \ No newline at end of file diff --git a/dali-toolkit/devel-api/layouting/layout-group-impl.cpp b/dali-toolkit/devel-api/layouting/layout-group-impl.cpp index 06305bd..304cec5 100644 --- a/dali-toolkit/devel-api/layouting/layout-group-impl.cpp +++ b/dali-toolkit/devel-api/layouting/layout-group-impl.cpp @@ -784,11 +784,13 @@ void LayoutGroup::OnMeasure( MeasureSpec widthMeasureSpec, MeasureSpec heightMea // 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 diff --git a/dali-toolkit/internal/layouting/layout-group-data-impl.cpp b/dali-toolkit/internal/layouting/layout-group-data-impl.cpp index f1d7fea..56e92a3 100644 --- a/dali-toolkit/internal/layouting/layout-group-data-impl.cpp +++ b/dali-toolkit/internal/layouting/layout-group-data-impl.cpp @@ -26,7 +26,8 @@ namespace Internal LayoutGroup::Impl::Impl() : mChildren(), - mNextLayoutId(1) + mNextLayoutId(1), + mResizePolicyMapped( false ) { } diff --git a/dali-toolkit/internal/layouting/layout-group-data-impl.h b/dali-toolkit/internal/layouting/layout-group-data-impl.h index 231cc09..02a4716 100644 --- a/dali-toolkit/internal/layouting/layout-group-data-impl.h +++ b/dali-toolkit/internal/layouting/layout-group-data-impl.h @@ -44,6 +44,7 @@ public: std::vector mChildren; Toolkit::LayoutGroup::LayoutId mNextLayoutId; + bool mResizePolicyMapped; };