Fix SuggestedMinimumWidth/Height to calculate required size correctly 89/274089/1
authorJaehyun Cho <jae_hyun.cho@samsung.com>
Thu, 21 Apr 2022 05:59:23 +0000 (14:59 +0900)
committerJaehyun Cho <jae_hyun.cho@samsung.com>
Thu, 21 Apr 2022 06:57:13 +0000 (15:57 +0900)
SuggestedMinimumWidth/Height returns the minimum width and height of a
view required in a layout.

Previously, SuggestedMinimumWidth/Height used GetWidthForHeight and
GetHeightForWidth to calculate the minimum width and height of a view
although width/height were not dependent on height/width.
e.g.
if naturalSize.width = 0 and naturalSize.height = 100,
then SuggestedMinimumHeight would be 0 instead of 100.

Now, SuggestedMinimumWidth/Height uses GetWidthForHeight and
GetHeightforWidth only if width/height are dependent on height/width.

Change-Id: Ib65522b8e5399278b57a8866ad548e4d2be61469

dali-csharp-binder/src/dali-wrap.cpp

index 4a4c757487a9c472dfc070dccb5be50a992ac61e..24f29f9a5725ce645f8fdb754f81394d80b0ea4b 100755 (executable)
@@ -59207,6 +59207,7 @@ SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Actor_GetSuggestedMinimumWidth(void * j
   Dali::Vector2 maximumSize;
   Dali::Vector2 minimumSize;
   Dali::Vector3 naturalSize;
+  bool widthForHeight;
   float result;
   {
     try {
@@ -59214,9 +59215,18 @@ SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Actor_GetSuggestedMinimumWidth(void * j
       maximumSize = arg1->GetProperty< Vector2 >( Actor::Property::MAXIMUM_SIZE );
       minimumSize = arg1->GetProperty< Vector2 >( Actor::Property::MINIMUM_SIZE );
       naturalSize = arg1->GetNaturalSize();
+      widthForHeight = arg1->GetProperty< bool >( Actor::Property::WIDTH_FOR_HEIGHT );
 
-      float baseHeight = maximumSize.height > 0 ? std::min(maximumSize.height, naturalSize.height) : naturalSize.height;
-      float baseWidth = arg1->GetWidthForHeight(baseHeight);
+      float baseWidth;
+      if (widthForHeight)
+      {
+        float baseHeight = maximumSize.height > 0 ? std::min(maximumSize.height, naturalSize.height) : naturalSize.height;
+        baseWidth = arg1->GetWidthForHeight(baseHeight);
+      }
+      else
+      {
+        baseWidth = naturalSize.width;
+      }
 
       result = minimumSize.width > 0 ? std::max(baseWidth, minimumSize.width) : baseWidth;
       result = maximumSize.width > 0 ? std::min(result, maximumSize.width) : result;
@@ -59231,6 +59241,7 @@ SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Actor_GetSuggestedMinimumHeight(void *
   Dali::Vector2 maximumSize;
   Dali::Vector2 minimumSize;
   Dali::Vector3 naturalSize;
+  bool heightForWidth;
   float result;
   {
     try {
@@ -59238,9 +59249,18 @@ SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Actor_GetSuggestedMinimumHeight(void *
       maximumSize = arg1->GetProperty< Vector2 >( Actor::Property::MAXIMUM_SIZE );
       minimumSize = arg1->GetProperty< Vector2 >( Actor::Property::MINIMUM_SIZE );
       naturalSize = arg1->GetNaturalSize();
+      heightForWidth = arg1->GetProperty< bool >( Actor::Property::HEIGHT_FOR_WIDTH );
 
-      float baseWidth = maximumSize.width > 0 ? std::min(maximumSize.width, naturalSize.width) : naturalSize.width;
-      float baseHeight = arg1->GetHeightForWidth(baseWidth);
+      float baseHeight;
+      if (heightForWidth)
+      {
+        float baseWidth = maximumSize.width > 0 ? std::min(maximumSize.width, naturalSize.width) : naturalSize.width;
+        baseHeight = arg1->GetHeightForWidth(baseWidth);
+      }
+      else
+      {
+        baseHeight = naturalSize.height;
+      }
 
       result = minimumSize.height > 0 ? std::max(baseHeight, minimumSize.height) : baseHeight;
       result = maximumSize.height > 0 ? std::min(result, maximumSize.height) : result;