public LayoutData( LayoutDimensions layoutWidth = default(LayoutDimensions), LayoutDimensions layoutHeight = default(LayoutDimensions)) { SetWidth(layoutWidth); SetHeight(layoutHeight); }
void SetHeight(LayoutDimensions dims) { Debug.Log("LayoutData.SetHeight() dims = " + dims); // #donotcommit minHeight = dims.Min; preferredHeight = dims.Preferred; flexibleHeight = dims.Flexible; }
void SetWidth(LayoutDimensions dims) { Debug.Log("LayoutData.SetWidth() dims = " + dims); // #donotcommit minWidth = dims.Min; preferredWidth = dims.Preferred; flexibleWidth = dims.Flexible; }
public LayoutDimensions GetLayoutDimensions(LayoutAxis axis) { var hovLayoutGroup = (HorizontalOrVerticalLayoutGroup)ICellLayout.LayoutGroup; bool isVertical = hovLayoutGroup is VerticalLayoutGroup; float layoutPadding = (axis != 0) ? hovLayoutGroup.padding.vertical : hovLayoutGroup.padding.horizontal; bool initialAxis = isVertical ^ (axis == LayoutAxis.Vertical); var layoutDimensions = new LayoutDimensions() { Min = layoutPadding, Preferred = layoutPadding, Flexible = 0f }; foreach (CellData cellRecord in CellRecords) { bool cellNeedsLayoutData = (!cellRecord.LayoutData.DimensionsHorizontalSet && axis == LayoutAxis.Horizontal) || (!cellRecord.LayoutData.DimensionsVerticalSet && axis == LayoutAxis.Vertical); //if (cellNeedsLayoutData) //{ cellRecord.LayoutData.SetDimensions(PrecalculateCellLayoutData(cellRecord, axis), axis); //} float minSize = RecyclerUtil.GetMinSize(cellRecord.LayoutData, (int)axis); float preferredSize = RecyclerUtil.GetPreferredSize(cellRecord.LayoutData, (int)axis); float flexibleSize = RecyclerUtil.GetFlexibleSize(cellRecord.LayoutData, (int)axis); if ((axis != 0) ? hovLayoutGroup.childForceExpandHeight : hovLayoutGroup.childForceExpandWidth) { flexibleSize = Mathf.Max(flexibleSize, 1f); } if (initialAxis) { layoutDimensions.Min = Mathf.Max(minSize + layoutPadding, layoutDimensions.Min); layoutDimensions.Preferred = Mathf.Max(preferredSize + layoutPadding, layoutDimensions.Preferred); layoutDimensions.Flexible = Mathf.Max(flexibleSize, layoutDimensions.Flexible); } else { layoutDimensions.Min += minSize + hovLayoutGroup.spacing; layoutDimensions.Preferred += preferredSize + hovLayoutGroup.spacing; layoutDimensions.Flexible += flexibleSize; } } if (!initialAxis && CellRecords.Count > 0) { layoutDimensions.Min -= hovLayoutGroup.spacing; layoutDimensions.Preferred -= hovLayoutGroup.spacing; } layoutDimensions.Preferred = Mathf.Max(layoutDimensions.Min, layoutDimensions.Preferred); return(layoutDimensions); }
public static bool IsBreakDimension(this ControlFlags containerFlags, LayoutDimensions dim) { if (dim == LayoutDimensions.X) { return(containerFlags.IsFlagged(ControlFlags.Container_Row)); } else if (dim == LayoutDimensions.Y) { return(containerFlags.IsFlagged(ControlFlags.Container_Column)); } else { throw new ArgumentOutOfRangeException(nameof(dim)); } }
public void SetDimensions(LayoutDimensions dims, LayoutAxis axis) { if (axis == LayoutAxis.Horizontal) { //if (!DimensionsHorizontalSet) //{ SetWidth(dims); DimensionsHorizontalSet = true; //} } else { //if (!DimensionsVerticalSet) //{ SetHeight(dims); DimensionsVerticalSet = true; //} } }
LayoutDimensions GetCellLayoutDimensions(RectTransform cellRtx, LayoutAxis axis) { var layoutDims = new LayoutDimensions(); var rectTransform = (RectTransform)ICellLayout.LayoutGroup.transform; var hovLayoutGroup = (HorizontalOrVerticalLayoutGroup)ICellLayout.LayoutGroup; bool isVertical = hovLayoutGroup is VerticalLayoutGroup; bool layoutChildForceExpand = (axis != 0) ? hovLayoutGroup.childForceExpandHeight : hovLayoutGroup.childForceExpandWidth; float layoutPadding = (axis != 0) ? ICellLayout.LayoutGroup.padding.vertical : ICellLayout.LayoutGroup.padding.horizontal; if (ICellLayout.CellLayout != null && ICellLayout.CellLayout.CellPrefab) { float rectSizeOnCurrAxis = rectTransform.rect.size[(int)axis]; bool initialAxis = isVertical ^ axis == LayoutAxis.Vertical; if (initialAxis) { for (int i = 0; i < ICellLayout.CellLayout.CellRecords.Count; i++) { CellData currRecord = ICellLayout.CellLayout.CellRecords[i]; layoutDims.Min = RecyclerUtil.GetMinSize(cellRtx, (int)axis); layoutDims.Preferred = RecyclerUtil.GetPreferredSize(cellRtx, (int)axis); layoutDims.Flexible = RecyclerUtil.GetFlexibleSize(cellRtx, (int)axis); if (layoutChildForceExpand) { layoutDims.Flexible = Mathf.Max(layoutDims.Flexible, 1f); } float childSize = Mathf.Clamp( layoutPadding, layoutDims.Min, (layoutDims.Flexible <= 0f) ? layoutDims.Preferred : rectSizeOnCurrAxis); float startOffset = RecyclerUtil.GetStartOffset(ICellLayout.LayoutGroup, (int)axis, childSize); currRecord.RectTransformData.SetInsetAndSizeFromParentEdge( (axis != 0) ? RectTransform.Edge.Top : RectTransform.Edge.Left, startOffset, childSize); } } else { float childPos = layoutPadding; float totalLayoutMinSize = RecyclerUtil.GetTotalMinSize(ICellLayout.LayoutGroup, (int)axis); float totalLayoutPreferredSize = RecyclerUtil.GetTotalPreferredSize(ICellLayout.LayoutGroup, (int)axis); float totalLayoutFlexibleSize = RecyclerUtil.GetTotalFlexibleSize(ICellLayout.LayoutGroup, (int)axis); bool layoutRectLargeEnoughForPreferred = totalLayoutPreferredSize < rectSizeOnCurrAxis; if ((totalLayoutFlexibleSize == 0f) && layoutRectLargeEnoughForPreferred) { float requiredSpaceWithoutPadding = totalLayoutPreferredSize - layoutPadding; childPos = RecyclerUtil.GetStartOffset( ICellLayout.LayoutGroup, (int)axis, requiredSpaceWithoutPadding); } float flexibleScalar = 0f; if (!(totalLayoutMinSize == totalLayoutPreferredSize)) { flexibleScalar = Mathf.Clamp01( (rectSizeOnCurrAxis - totalLayoutMinSize) / totalLayoutPreferredSize - totalLayoutMinSize); } float sizeRatio = 0f; if (rectSizeOnCurrAxis > totalLayoutPreferredSize && totalLayoutFlexibleSize > 0f) { sizeRatio = (rectSizeOnCurrAxis - totalLayoutPreferredSize) / totalLayoutFlexibleSize; } for (int j = 0; j < ICellLayout.CellLayout.CellRecords.Count; j++) { CellData currRecord = ICellLayout.CellLayout.CellRecords[j]; RectTransform childRect = (RectTransform)ICellLayout.CellLayout.CellPrefab.transform; layoutDims.Min = RecyclerUtil.GetMinSize(childRect, (int)axis); layoutDims.Preferred = RecyclerUtil.GetPreferredSize(childRect, (int)axis); layoutDims.Flexible = RecyclerUtil.GetFlexibleSize(childRect, (int)axis); if (layoutChildForceExpand) { layoutDims.Flexible = Mathf.Max(layoutDims.Flexible, 1f); } float childSize = Mathf.Lerp(layoutDims.Min, layoutDims.Preferred, flexibleScalar) + (layoutDims.Flexible * sizeRatio); currRecord.RectTransformData.SetInsetAndSizeFromParentEdge( (axis != 0) ? RectTransform.Edge.Top : RectTransform.Edge.Left, childPos, childSize); childPos += childSize + hovLayoutGroup.spacing; } } } return(layoutDims); }