Modified weight calculation logic in LinearLayout.
authorJeahoon Kim <jeahoon.kim@samsung.com>
Fri, 14 Jun 2013 01:56:27 +0000 (10:56 +0900)
committerJeahoon Kim <jeahoon.kim@samsung.com>
Fri, 14 Jun 2013 01:56:27 +0000 (10:56 +0900)
Change-Id: I954cde23dade662da0e4d668ef6c92bbc7fe9945
Signed-off-by: Jeahoon Kim <jeahoon.kim@samsung.com>
src/ui/layout/FUi_LayoutLinearLayout.cpp

index 42172f6..2c37879 100644 (file)
 
 #include <new>
 #include <FBaseResult.h>
+#include <FBaseUtilMath.h>
 #include "FUi_Math.h"
 #include "FUi_LayoutLinearLayout.h"
 #include "FUi_LayoutLayoutItemProxy.h"
 #include "FUi_LayoutProxyList.h"
 #include "FUi_LayoutLayoutItemInfo.h"
 
+using namespace Tizen::Base::Utility;
+
 namespace Tizen { namespace Ui { namespace _Layout
 {
 
@@ -874,7 +877,7 @@ LinearLayout::CalculateHorizontalWeight(float& emptySpace)
                        }
                        LayoutRect itemRect = pItemInfo->__itemRect;
                        itemRect.x += x;
-                       if (pItemInfo->__fixedSize == false && !_FloatCompare(usedEmptySpace, 0.0f))
+                       if (pItemInfo->__fixedSize == false && !_FloatCompare(usedEmptySpace, 0.0f) && !_FloatCompare(pItemInfo->__weight, 0.0f))
                        {
                                if (usedEmptySpace > 0.0f)
                                {
@@ -1000,11 +1003,6 @@ LinearLayout::CalculateHorizontalWeight(float& emptySpace)
        }
 
        float unitSize = emptySpace / __weightSum;
-       int correctionValue = emptySpace - (int)(unitSize * 100.0) * (int) (__weightSum) / 100.0f;
-       if (correctionValue < 0)
-       {
-               correctionValue = -correctionValue;
-       }
 
        ProxyListNode* pNode = pProxyList->GetFirstNode();
        while (pNode != null)
@@ -1016,19 +1014,7 @@ LinearLayout::CalculateHorizontalWeight(float& emptySpace)
                        return E_INVALID_STATE;
                }
                LayoutRect itemRect = pItemInfo->__itemRect;
-               int correctionSize = unitSize * pItemInfo->__weight;
-               if (correctionValue != 0)
-               {
-                       if (correctionSize < 0)
-                       {
-                               correctionSize--;
-                       }
-                       else
-                       {
-                               correctionSize++;
-                       }
-                       correctionValue--;
-               }
+               float correctionSize = unitSize * pItemInfo->__weight;
 
                if (__direction == LINEAR_LEFT_TO_RIGHT)
                {
@@ -1037,6 +1023,8 @@ LinearLayout::CalculateHorizontalWeight(float& emptySpace)
 
                if (pItemInfo->__fixedSize == false)
                {
+                       correctionSize = Math::Round(correctionSize);
+
                        itemRect.w += correctionSize;
                        x += correctionSize;
                        usedEmptySpace -= correctionSize;
@@ -1061,6 +1049,7 @@ LinearLayout::CalculateHorizontalWeight(float& emptySpace)
                        __weightSum -= pItemInfo->__weight;
                        pItemInfo->__fixedSize = true;
                }
+
 #ifdef NOT_SUPPORT_NEGATIVE_SIZE
                if (itemRect.w < 0.0f)
                {
@@ -1107,7 +1096,7 @@ LinearLayout::CalculateVerticalWeight(float& emptySpace)
                        }
                        LayoutRect itemRect = pItemInfo->__itemRect;
                        itemRect.y += y;
-                       if (pItemInfo->__fixedSize == false && !_FloatCompare(usedEmptySpace, 0.0f))
+                       if (pItemInfo->__fixedSize == false && !_FloatCompare(usedEmptySpace, 0.0f) && !_FloatCompare(pItemInfo->__weight, 0.0f))
                        {
                                if (usedEmptySpace > 0.0f)
                                {
@@ -1234,11 +1223,6 @@ LinearLayout::CalculateVerticalWeight(float& emptySpace)
        }
 
        float unitSize = emptySpace / __weightSum;
-       int correctionValue = emptySpace - (int) (unitSize * 100.0) * (int) (__weightSum) / 100;
-       if (correctionValue < 0)
-       {
-               correctionValue = -correctionValue;
-       }
 
        ProxyListNode* pNode = pProxyList->GetFirstNode();
        while (pNode != null)
@@ -1250,19 +1234,7 @@ LinearLayout::CalculateVerticalWeight(float& emptySpace)
                        return E_INVALID_STATE;
                }
                LayoutRect itemRect = pItemInfo->__itemRect;
-               int correctionSize = unitSize * pItemInfo->__weight;
-               if (correctionValue != 0)
-               {
-                       if (correctionSize < 0.0f)
-                       {
-                               correctionSize--;
-                       }
-                       else
-                       {
-                               correctionSize++;
-                       }
-                       correctionValue--;
-               }
+               float correctionSize = unitSize * pItemInfo->__weight;
 
                if (__direction == LINEAR_TOP_TO_BOTTOM)
                {
@@ -1271,6 +1243,8 @@ LinearLayout::CalculateVerticalWeight(float& emptySpace)
 
                if (pItemInfo->__fixedSize == false)
                {
+                       correctionSize = Math::Round(correctionSize);
+
                        itemRect.h += correctionSize;
                        y += correctionSize;
                        usedEmptySpace -= correctionSize;
@@ -1295,6 +1269,7 @@ LinearLayout::CalculateVerticalWeight(float& emptySpace)
                        __weightSum -= pItemInfo->__weight;
                        pItemInfo->__fixedSize = true;
                }
+
 #ifdef NOT_SUPPORT_NEGATIVE_SIZE
                if (itemRect.h < 0)
                {