天津23维预案
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

147 lines
3.9 KiB

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
namespace UIWidgets {
/// <summary>
/// Bridge to EasyLayout class.
/// </summary>
public class EasyLayoutBridge : ILayoutBridge {
bool isHorizontal;
/// <summary>
/// Gets or sets a value indicating whether this instance is horizontal.
/// </summary>
/// <value><c>true</c> if this instance is horizontal; otherwise, <c>false</c>.</value>
public bool IsHorizontal {
get {
return isHorizontal;
}
set {
isHorizontal = value;
UpdateDirection();
}
}
/// <summary>
/// Gets or sets a value indicating whether this <see cref="UIWidgets.EasyLayoutBridge"/> update content size fitter.
/// </summary>
/// <value><c>true</c> if update content size fitter; otherwise, <c>false</c>.</value>
public bool UpdateContentSizeFitter {
get; set;
}
EasyLayout.EasyLayout Layout;
RectTransform DefaultItem;
ContentSizeFitter fitter;
/// <summary>
/// Initializes a new instance of the <see cref="UIWidgets.EasyLayoutBridge"/> class.
/// </summary>
/// <param name="layout">Layout.</param>
/// <param name="defaultItem">Default item.</param>
/// <param name="updateContentSizeFitter">Update ContentSizeFitter on direction change.</param>
public EasyLayoutBridge(EasyLayout.EasyLayout layout, RectTransform defaultItem, bool updateContentSizeFitter=true)
{
Layout = layout;
DefaultItem = defaultItem;
UpdateContentSizeFitter = updateContentSizeFitter;
fitter = Layout.GetComponent<ContentSizeFitter>();
}
void UpdateDirection()
{
Layout.Stacking = isHorizontal ? EasyLayout.Stackings.Vertical : EasyLayout.Stackings.Horizontal;
if (UpdateContentSizeFitter)
{
if (fitter!=null)
{
fitter.horizontalFit = (IsHorizontal) ? ContentSizeFitter.FitMode.PreferredSize : ContentSizeFitter.FitMode.Unconstrained;
fitter.verticalFit = (!IsHorizontal) ? ContentSizeFitter.FitMode.PreferredSize : ContentSizeFitter.FitMode.Unconstrained;
}
}
var layout_rect_transform = Layout.transform as RectTransform;
layout_rect_transform.pivot = new Vector2(0, 1);
if (isHorizontal)
{
layout_rect_transform.anchorMin = new Vector2(0, 0);
layout_rect_transform.anchorMax = new Vector2(0, 1);
}
else
{
layout_rect_transform.anchorMin = new Vector2(0, 1);
layout_rect_transform.anchorMax = new Vector2(1, 1);
}
layout_rect_transform.sizeDelta = new Vector2(0, 0);
}
/// <summary>
/// Updates the layout.
/// </summary>
public void UpdateLayout()
{
Layout.UpdateLayout();
if (fitter!=null)
{
fitter.SetLayoutHorizontal();
fitter.SetLayoutVertical();
}
}
/// <summary>
/// Sets the filler.
/// </summary>
/// <param name="first">First.</param>
/// <param name="last">Last.</param>
public void SetFiller(float first, float last)
{
var padding = IsHorizontal
? new EasyLayout.Padding(first, last, 0, 0)
: new EasyLayout.Padding(0, 0, first, last);
Layout.PaddingInner = padding;
}
/// <summary>
/// Gets the size of the item.
/// </summary>
/// <returns>The item size.</returns>
public Vector2 GetItemSize()
{
return new Vector2(DefaultItem.rect.width, DefaultItem.rect.height);
}
/// <summary>
/// Gets the left or top margin.
/// </summary>
/// <returns>The margin.</returns>
public float GetMargin()
{
return IsHorizontal ? Layout.GetMarginLeft() : Layout.GetMarginTop();
}
/// <summary>
/// Gets the full margin.
/// </summary>
/// <returns>The full margin.</returns>
public float GetFullMargin()
{
return IsHorizontal ? Layout.GetMarginLeft() + Layout.GetMarginRight() : Layout.GetMarginTop() + Layout.GetMarginBottom();
}
/// <summary>
/// Gets the spacing between items.
/// </summary>
/// <returns>The spacing.</returns>
public float GetSpacing()
{
return IsHorizontal ? Layout.Spacing.x : Layout.Spacing.y;
}
}
}