namespace UIWidgets { using System; using System.Collections.Generic; using EasyLayoutNS; using UnityEngine; using UnityEngine.UI; /// /// Layout utilities. /// public static class LayoutUtilities { /// /// Updates the layout. /// /// Layout. public static void UpdateLayout(LayoutGroup layout) { if (layout == null) { return; } layout.CalculateLayoutInputHorizontal(); layout.SetLayoutHorizontal(); layout.CalculateLayoutInputVertical(); layout.SetLayoutVertical(); } static List layouts = new List(); /// /// Updates the layouts for component and all children components. /// /// Component. [Obsolete("Use LayoutRebuilder.ForceRebuildLayoutImmediate().")] public static void UpdateLayoutsRecursive(Component component) { if (component == null) { return; } component.GetComponentsInChildren(layouts); layouts.Reverse(); foreach (var l in layouts) { UpdateLayout(l); } layouts.Clear(); } /// /// Set padding left. /// /// Layout. /// New padding. public static void SetPaddingLeft(LayoutGroup layout, float size) { var hv = layout as HorizontalOrVerticalLayoutGroup; if (hv != null) { hv.padding.left = Mathf.RoundToInt(size); LayoutRebuilder.MarkLayoutForRebuild(layout.transform as RectTransform); return; } var el = layout as EasyLayout; if (el != null) { var p = el.PaddingInner; p.Left = size; el.PaddingInner = p; LayoutRebuilder.MarkLayoutForRebuild(layout.transform as RectTransform); return; } throw new ArgumentException("Unsupported layout type."); } /// /// Set padding right. /// /// Layout. /// New padding. public static void SetPaddingRight(LayoutGroup layout, float size) { var hv = layout as HorizontalOrVerticalLayoutGroup; if (hv != null) { hv.padding.right = Mathf.RoundToInt(size); LayoutRebuilder.MarkLayoutForRebuild(layout.transform as RectTransform); return; } var el = layout as EasyLayout; if (el != null) { var p = el.PaddingInner; p.Right = size; el.PaddingInner = p; LayoutRebuilder.MarkLayoutForRebuild(layout.transform as RectTransform); return; } throw new ArgumentException("Unsupported layout type."); } /// /// Set padding top. /// /// Layout. /// New padding. public static void SetPaddingTop(LayoutGroup layout, float size) { var hv = layout as HorizontalOrVerticalLayoutGroup; if (hv != null) { hv.padding.top = Mathf.RoundToInt(size); LayoutRebuilder.MarkLayoutForRebuild(layout.transform as RectTransform); return; } var el = layout as EasyLayout; if (el != null) { var p = el.PaddingInner; p.Top = size; el.PaddingInner = p; LayoutRebuilder.MarkLayoutForRebuild(layout.transform as RectTransform); return; } throw new ArgumentException("Unsupported layout type."); } /// /// Set padding bottom. /// /// Layout. /// New padding. public static void SetPaddingBottom(LayoutGroup layout, float size) { var hv = layout as HorizontalOrVerticalLayoutGroup; if (hv != null) { hv.padding.bottom = Mathf.RoundToInt(size); LayoutRebuilder.MarkLayoutForRebuild(layout.transform as RectTransform); return; } var el = layout as EasyLayout; if (el != null) { var p = el.PaddingInner; p.Bottom = size; el.PaddingInner = p; LayoutRebuilder.MarkLayoutForRebuild(layout.transform as RectTransform); return; } throw new ArgumentException("Unsupported layout type."); } /// /// Get padding left. /// /// Layout. /// Padding. public static float GetPaddingLeft(LayoutGroup layout) { var hv = layout as HorizontalOrVerticalLayoutGroup; if (hv != null) { return hv.padding.left; } var el = layout as EasyLayout; if (el != null) { return el.PaddingInner.Left; } throw new ArgumentException("Unsupported layout type."); } /// /// Get padding right. /// /// Layout. /// Padding. public static float GetPaddingRight(LayoutGroup layout) { var hv = layout as HorizontalOrVerticalLayoutGroup; if (hv != null) { return hv.padding.right; } var el = layout as EasyLayout; if (el != null) { return el.PaddingInner.Right; } throw new ArgumentException("Unsupported layout type."); } /// /// Get padding top. /// /// Layout. /// Padding. public static float GetPaddingTop(LayoutGroup layout) { var hv = layout as HorizontalOrVerticalLayoutGroup; if (hv != null) { return hv.padding.top; } var el = layout as EasyLayout; if (el != null) { return el.PaddingInner.Top; } throw new ArgumentException("Unsupported layout type."); } /// /// Get padding bottom. /// /// Layout. /// Padding. public static float GetPaddingBottom(LayoutGroup layout) { var hv = layout as HorizontalOrVerticalLayoutGroup; if (hv != null) { return hv.padding.bottom; } var el = layout as EasyLayout; if (el != null) { return el.PaddingInner.Bottom; } throw new ArgumentException("Unsupported layout type."); } /// /// Is target width under layout group or fitter control? /// /// Target. /// true if target width under layout group or fitter control; otherwise false. public static bool IsWidthControlled(RectTransform target) { var ignorer = Compatibility.GetComponent(target); if (ignorer != null && ignorer.ignoreLayout) { return false; } var fitter = target.GetComponent(); if ((fitter != null) && (fitter.horizontalFit != ContentSizeFitter.FitMode.Unconstrained)) { return true; } var parent = target.transform.parent as RectTransform; if (parent != null) { var layout_group = parent.GetComponent(); if (layout_group == null) { return false; } var g_layout_group = layout_group as GridLayoutGroup; if ((g_layout_group != null) && g_layout_group.enabled) { return true; } var hv_layout_group = layout_group as HorizontalOrVerticalLayoutGroup; if ((hv_layout_group != null) && hv_layout_group.enabled) { return Compatibility.GetLayoutChildControlWidth(hv_layout_group); } var e_layout_group = layout_group as EasyLayout; if ((e_layout_group != null) && e_layout_group.enabled) { return e_layout_group.ChildrenWidth != ChildrenSize.DoNothing; } } return false; } /// /// Is target height under layout group or fitter control? /// /// Target. /// true if target height under layout group or fitter control; otherwise false. public static bool IsHeightControlled(RectTransform target) { var ignorer = Compatibility.GetComponent(target); if ((ignorer != null) && ignorer.ignoreLayout) { return false; } var fitter = target.GetComponent(); if ((fitter != null) && (fitter.verticalFit != ContentSizeFitter.FitMode.Unconstrained)) { return true; } var parent = target.transform.parent as RectTransform; if (parent != null) { var layout_group = parent.GetComponent(); if (layout_group == null) { return false; } var g_layout_group = layout_group as GridLayoutGroup; if ((g_layout_group != null) && g_layout_group.enabled) { return true; } var hv_layout_group = layout_group as HorizontalOrVerticalLayoutGroup; if ((hv_layout_group != null) && hv_layout_group.enabled) { return Compatibility.GetLayoutChildControlHeight(hv_layout_group); } var e_layout_group = layout_group as EasyLayout; if ((e_layout_group != null) && e_layout_group.enabled) { return e_layout_group.ChildrenHeight != ChildrenSize.DoNothing; } } return false; } } }