Ejemplo n.º 1
0
        public static Rect DrawElementStackVertical <T>(Rect rect, float rowHeight, List <T> elements, StackElementDrawer <T> drawer, StackElementWidthGetter <T> widthGetter, float elementMargin = 5f)
        {
            tmpRects.Clear();
            for (int i = 0; i < elements.Count; i++)
            {
                tmpRects.Add(new StackedElementRect(new Rect(0f, 0f, widthGetter(elements[i]), rowHeight), i));
            }
            int elem = Mathf.FloorToInt(rect.height / rowHeight);

            spacingCache.Reset(elem);
            int   num  = 0;
            float num2 = 0f;
            float num3 = 0f;

            for (int j = 0; j < tmpRects.Count; j++)
            {
                StackedElementRect stackedElementRect = tmpRects[j];
                if (num3 + stackedElementRect.rect.height > rect.height)
                {
                    num3 = 0f;
                    num  = 0;
                }
                drawer(new Rect(rect.x + spacingCache.GetSpaceFor(num), rect.y + num3, stackedElementRect.rect.width, stackedElementRect.rect.height), elements[stackedElementRect.elementIndex]);
                num3 += stackedElementRect.rect.height + elementMargin;
                spacingCache.AddSpace(num, stackedElementRect.rect.width + elementMargin);
                num2 = Mathf.Max(num2, spacingCache.GetSpaceFor(num));
                num++;
            }
            return(new Rect(rect.x, rect.y, num2, num3 + rowHeight));
        }
Ejemplo n.º 2
0
        public static Rect DrawElementStack <T>(Rect rect, float rowHeight, List <T> elements, StackElementDrawer <T> drawer, StackElementWidthGetter <T> widthGetter, float rowMargin = 4f, float elementMargin = 5f, bool allowOrderOptimization = true)
        {
            tmpRects.Clear();
            tmpRects2.Clear();
            for (int i = 0; i < elements.Count; i++)
            {
                tmpRects.Add(new StackedElementRect(new Rect(0f, 0f, widthGetter(elements[i]), rowHeight), i));
            }
            int num = Mathf.FloorToInt(rect.height / rowHeight);
            List <StackedElementRect> list = tmpRects;
            float num3;
            float num2;

            if (allowOrderOptimization)
            {
                num3 = (num2 = 0f);
                while (num2 < (float)num)
                {
                    StackedElementRect item = default(StackedElementRect);
                    int num4 = -1;
                    for (int j = 0; j < list.Count; j++)
                    {
                        StackedElementRect stackedElementRect = list[j];
                        if (num4 == -1 || (item.rect.width < stackedElementRect.rect.width && stackedElementRect.rect.width < rect.width - num3))
                        {
                            num4 = j;
                            item = stackedElementRect;
                        }
                    }
                    if (num4 == -1)
                    {
                        if (num3 == 0f)
                        {
                            break;
                        }
                        num3  = 0f;
                        num2 += 1f;
                    }
                    else
                    {
                        num3 += item.rect.width + elementMargin;
                        tmpRects2.Add(item);
                    }
                    list.RemoveAt(num4);
                    if (list.Count <= 0)
                    {
                        break;
                    }
                }
                list = tmpRects2;
            }
            num3 = (num2 = 0f);
            while (list.Count > 0)
            {
                StackedElementRect stackedElementRect2 = list[0];
                if (num3 + stackedElementRect2.rect.width > rect.width)
                {
                    num3  = 0f;
                    num2 += rowHeight + rowMargin;
                }
                drawer(new Rect(rect.x + num3, rect.y + num2, stackedElementRect2.rect.width, stackedElementRect2.rect.height), elements[stackedElementRect2.elementIndex]);
                num3 += stackedElementRect2.rect.width + elementMargin;
                list.RemoveAt(0);
            }
            return(new Rect(rect.x, rect.y, rect.width, num2 + rowHeight));
        }