[NUI] fix CollecitonView item sizing on MeasureFirst (#3098)
authorSangHyeon Jade Lee <sh10233.lee@samsung.com>
Thu, 27 May 2021 05:15:49 +0000 (14:15 +0900)
committerGitHub <noreply@github.com>
Thu, 27 May 2021 05:15:49 +0000 (14:15 +0900)
item sizing on MeasureFirst need to reuse pre-calculated result.

src/Tizen.NUI.Components/Controls/RecyclerView/Layouter/GridLayouter.cs
src/Tizen.NUI.Components/Controls/RecyclerView/Layouter/LinearLayouter.cs

index 7821d7a..48cdaee 100755 (executable)
@@ -399,17 +399,25 @@ namespace Tizen.NUI.Components
                 (float x, float y) = GetItemPosition(i);
                 // 5. Placing item with Padding and Margin.
                 item.Position = new Position(x, y);
-                
+
                 //Linear Item need to be resized!
                 if (item.IsHeader || item.IsFooter || item.isGroupHeader || item.isGroupFooter)
                 {
+                    var size = (IsHorizontal? item.SizeWidth: item.SizeHeight);
+                    if (colView.SizingStrategy == ItemSizingStrategy.MeasureFirst)
+                    {
+                        if (item.IsHeader) size = headerSize;
+                        else if (item.IsFooter) size = footerSize;
+                        else if (item.isGroupHeader) size = groupHeaderSize;
+                        else if (item.isGroupFooter) size = groupFooterSize;
+                    }
                     if (IsHorizontal && item.HeightSpecification == LayoutParamPolicies.MatchParent)
                     {
-                        item.Size = new Size(item.Size.Width, Container.Size.Height - Padding.Top - Padding.Bottom - item.Margin.Top - item.Margin.Bottom);
+                        item.Size = new Size(size, Container.Size.Height - Padding.Top - Padding.Bottom - item.Margin.Top - item.Margin.Bottom);
                     }
                     else if (!IsHorizontal && item.WidthSpecification == LayoutParamPolicies.MatchParent)
                     {
-                        item.Size = new Size(Container.Size.Width - Padding.Start - Padding.End - item.Margin.Start - item.Margin.End, item.Size.Height);
+                        item.Size = new Size(Container.Size.Width - Padding.Start - Padding.End - item.Margin.Start - item.Margin.End, size);
                     }
                 }
                 //Console.WriteLine("[NUI] ["+item.Index+"] ["+item.Position.X+", "+item.Position.Y+" ==== \n");
index 0a820f2..b915b17 100755 (executable)
@@ -409,14 +409,27 @@ namespace Tizen.NUI.Components
                 // 5. Placing item.
                 (float posX, float posY) = GetItemPosition(i);
                 item.Position = new Position(posX, posY);
-            
+
+                var size = (IsHorizontal? item.SizeWidth: item.SizeHeight);
+
+                if (colView.SizingStrategy == ItemSizingStrategy.MeasureFirst)
+                {
+                    if (item.IsHeader || item.IsFooter || item.isGroupHeader || item.isGroupFooter)
+                    {
+                        if (item.IsHeader) size = headerSize;
+                        else if (item.IsFooter) size = footerSize;
+                        else if (item.isGroupHeader) size = groupHeaderSize;
+                        else if (item.isGroupFooter) size = groupFooterSize;
+                    }
+                    else size = StepCandidate;
+                }
                 if (IsHorizontal && item.HeightSpecification == LayoutParamPolicies.MatchParent)
                 {
-                    item.Size = new Size(item.Size.Width, Container.Size.Height - Padding.Top - Padding.Bottom - item.Margin.Top - item.Margin.Bottom);
+                    item.Size = new Size(size, Container.Size.Height - Padding.Top - Padding.Bottom - item.Margin.Top - item.Margin.Bottom);
                 }
                 else if (!IsHorizontal && item.WidthSpecification == LayoutParamPolicies.MatchParent)
                 {
-                    item.Size = new Size(Container.Size.Width - Padding.Start - Padding.End - item.Margin.Start - item.Margin.End, item.Size.Height);
+                    item.Size = new Size(Container.Size.Width - Padding.Start - Padding.End - item.Margin.Start - item.Margin.End, size);
                 }
             }
             return;