49 lines
1.4 KiB
C#
49 lines
1.4 KiB
C#
|
using UnityEngine;
|
||
|
using UnityEngine.EventSystems;
|
||
|
using UnityEngine.UI;
|
||
|
|
||
|
namespace RoR2.UI;
|
||
|
|
||
|
[RequireComponent(typeof(RectTransform))]
|
||
|
public class DragResize : MonoBehaviour, IBeginDragHandler, IEventSystemHandler, IDragHandler
|
||
|
{
|
||
|
public RectTransform targetTransform;
|
||
|
|
||
|
public Vector2 minSize;
|
||
|
|
||
|
private Vector2 grabPoint;
|
||
|
|
||
|
private RectTransform rectTransform;
|
||
|
|
||
|
private void Awake()
|
||
|
{
|
||
|
rectTransform = (RectTransform)base.transform;
|
||
|
}
|
||
|
|
||
|
public void OnDrag(PointerEventData eventData)
|
||
|
{
|
||
|
UpdateDrag(eventData);
|
||
|
}
|
||
|
|
||
|
public void OnBeginDrag(PointerEventData eventData)
|
||
|
{
|
||
|
if ((bool)targetTransform)
|
||
|
{
|
||
|
RectTransformUtility.ScreenPointToLocalPointInRectangle(targetTransform, eventData.position, eventData.pressEventCamera, out grabPoint);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void UpdateDrag(PointerEventData eventData)
|
||
|
{
|
||
|
if (eventData.button == PointerEventData.InputButton.Left && (bool)targetTransform)
|
||
|
{
|
||
|
RectTransformUtility.ScreenPointToLocalPointInRectangle(targetTransform, eventData.position, eventData.pressEventCamera, out var localPoint);
|
||
|
Vector2 vector = localPoint - grabPoint;
|
||
|
grabPoint = localPoint;
|
||
|
vector.y = 0f - vector.y;
|
||
|
minSize = Vector2.Max(rhs: new Vector2(LayoutUtility.GetMinSize(targetTransform, 0), LayoutUtility.GetMinSize(targetTransform, 1)), lhs: minSize);
|
||
|
targetTransform.sizeDelta = Vector2.Max(targetTransform.sizeDelta + vector, minSize);
|
||
|
}
|
||
|
}
|
||
|
}
|