Vector2 CalculatePositionsVertical(Vector2 size, Vector2 offset)
        {
            var position         = offset;
            var align            = new Vector2(0, 0);
            var transposed_group = EasyLayoutUtilites.Transpose(ElementsGroup);

            CalculateMaxRowsHeights();
            CalculateColumnsHeights(transposed_group);

            for (int y = 0; y < transposed_group.Count; y++)
            {
                var column_cell_max_size = GetMaxCellSize(transposed_group[y]);

                for (int x = 0; x < transposed_group[y].Count; x++)
                {
                    var element = transposed_group[y][x];

                    align = GetAlignByHeight(element, MaxRowsHeights[x], column_cell_max_size, size.y - ColumnsHeights[y]);

                    element.PositionTopLeft = GetElementPosition(position, align);

                    position.y -= ((Layout.LayoutType == LayoutTypes.Compact) ? element.Height : MaxRowsHeights[x]) + Layout.Spacing.y;
                }

                position.y  = offset.y;
                position.x += column_cell_max_size.x + Layout.Spacing.x;
            }

            return(size);
        }
Example #2
0
        void ShrinkHeightToFit()
        {
            var height           = Layout.InternalSize.y;
            var transposed_group = EasyLayoutUtilites.Transpose(ElementsGroup);

            for (int i = 0; i < transposed_group.Count; i++)
            {
                ShrinkToFit(height, transposed_group[i], Layout.Spacing.y, RectTransform.Axis.Vertical);
            }
        }
Example #3
0
        /// <summary>
        /// Group the specified elements.
        /// </summary>
        protected override void Group()
        {
            ElementsGroup.Clear();

            if (Elements.Count == 0)
            {
                return;
            }

            if (Layout.IsHorizontal)
            {
                GroupHorizontal(ElementsGroup);
            }
            else
            {
                GroupVertical(ElementsGroup);
            }

            var rows    = ElementsGroup.Count;
            var columns = EasyLayoutUtilites.MaxCount(ElementsGroup);

            if ((Layout.CompactConstraint == CompactConstraints.MaxRowCount) && (rows > Layout.ConstraintCount))
            {
                ElementsGroup.Clear();
                GroupByRows();
            }
            else if ((Layout.CompactConstraint == CompactConstraints.MaxColumnCount) && (columns > Layout.ConstraintCount))
            {
                ElementsGroup.Clear();
                GroupByColumns();
            }

            if (!Layout.TopToBottom)
            {
                ElementsGroup.Reverse();
            }

            if (Layout.RightToLeft)
            {
                ElementsGroup.ForEach(ReverseList);
            }
        }
        /// <summary>
        /// Shrink elements on overflow.
        /// </summary>
        protected void ShrinkOnOverflow()
        {
            if (ElementsGroup.Count == 0)
            {
                return;
            }

            var size    = Layout.InternalSize;
            var rows    = ElementsGroup.Count - 1;
            var columns = EasyLayoutUtilites.MaxCount(ElementsGroup) - 1;
            var size_without_spacing    = new Vector2(size.x - (Layout.Spacing.x * columns), size.y - (Layout.Spacing.y * rows));
            var ui_size_without_spacing = new Vector2(Layout.UISize.x - (Layout.Spacing.x * columns), Layout.UISize.y - (Layout.Spacing.y * rows));
            var scale = GetShrinkScale(size_without_spacing, ui_size_without_spacing);

            foreach (var row in ElementsGroup)
            {
                foreach (var elem in row)
                {
                    elem.NewWidth  = elem.Width * scale;
                    elem.NewHeight = elem.Height * scale;
                }
            }
        }
        /// <summary>
        /// Resize columns width to fit.
        /// </summary>
        protected void ResizeColumnWidthToFit()
        {
            var transposed_group = EasyLayoutUtilites.Transpose(ElementsGroup);

            ResizeToFit(Layout.InternalSize.x, transposed_group, Layout.Spacing.x, RectTransform.Axis.Horizontal);
        }