using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Events;
namespace UIWidgets
{
///
/// Splitter type.
///
public enum SplitterType
{
Horizontal = 0,
Vertical = 1,
}
///
/// Splitter resize event.
///
[SerializeField]
public class SplitterResizeEvent : UnityEvent {
}
///
/// Splitter.
///
[AddComponentMenu("UI/UIWidgets/Splitter")]
public class Splitter : MonoBehaviour,
IInitializePotentialDragHandler, IBeginDragHandler, IEndDragHandler, IDragHandler,
IPointerEnterHandler, IPointerExitHandler
{
///
/// The type.
///
public SplitterType Type = SplitterType.Vertical;
///
/// Is need to update RectTransform on Resize.
///
[SerializeField]
public bool UpdateRectTransforms = true;
///
/// Is need to update LayoutElement on Resize.
///
[SerializeField]
public bool UpdateLayoutElements = true;
///
/// The current camera. For Screen Space - Overlay let it empty.
///
[SerializeField]
public Camera CurrentCamera;
///
/// The cursor texture.
///
[SerializeField]
public Texture2D CursorTexture;
///
/// The cursor hot spot.
///
[SerializeField]
public Vector2 CursorHotSpot = new Vector2(16, 16);
///
/// The default cursor texture.
///
[SerializeField]
public Texture2D DefaultCursorTexture;
///
/// The default cursor hot spot.
///
[SerializeField]
public Vector2 DefaultCursorHotSpot;
///
/// OnStartResize event.
///
public SplitterResizeEvent OnStartResize = new SplitterResizeEvent();
///
/// OnEndResize event.
///
public SplitterResizeEvent OnEndResize = new SplitterResizeEvent();
RectTransform rectTransform;
///
/// Gets the rect transform.
///
/// The rect transform.
public RectTransform RectTransform {
get {
if (rectTransform==null)
{
rectTransform = transform as RectTransform;
}
return rectTransform;
}
}
Canvas canvas;
RectTransform leftTarget;
RectTransform rightTarget;
LayoutElement leftTargetElement;
LayoutElement LeftTargetElement {
get {
if (leftTargetElement==null)
{
leftTargetElement = leftTarget.GetComponent();
if (leftTargetElement==null)
{
leftTargetElement = leftTarget.gameObject.AddComponent();
}
}
return leftTargetElement;
}
}
LayoutElement rightTargetElement;
LayoutElement RightTargetElement {
get {
if (rightTargetElement==null)
{
rightTargetElement = rightTarget.GetComponent();
if (rightTargetElement==null)
{
rightTargetElement = rightTarget.gameObject.AddComponent();
}
}
return rightTargetElement;
}
}
Vector2 summarySize;
bool processDrag;
void Start()
{
Init();
}
///
/// Raises the initialize potential drag event.
///
/// Event data.
public void OnInitializePotentialDrag(PointerEventData eventData)
{
Init();
}
///
/// Init this instance.
///
public void Init()
{
canvas = Utilites.FindTopmostCanvas(transform).GetComponent