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;
}
}
}