您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
94 行
2.7 KiB
94 行
2.7 KiB
using UnityEngine;
|
|
|
|
namespace UnityEditor.Experimental
|
|
{
|
|
internal class Resizable : IManipulate
|
|
{
|
|
private bool m_Active;
|
|
private Vector2 m_Start;
|
|
private Vector2 m_MinimumScale;
|
|
private GUIStyle style = new GUIStyle("WindowBottomResize");
|
|
|
|
public Resizable()
|
|
{
|
|
m_MinimumScale = new Vector2(0.1f, 0.1f);
|
|
}
|
|
|
|
public Resizable(Vector2 minimumScale)
|
|
{
|
|
m_MinimumScale = minimumScale;
|
|
}
|
|
|
|
public bool GetCaps(ManipulatorCapability cap)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public void AttachTo(CanvasElement element)
|
|
{
|
|
element.MouseDown += OnMouseDown;
|
|
element.MouseDrag += OnMouseDrag;
|
|
element.MouseUp += OnMouseUp;
|
|
element.OnWidget += DrawResizeWidget;
|
|
}
|
|
|
|
private bool OnMouseDown(CanvasElement element, Event e, Canvas2D parent)
|
|
{
|
|
Rect r = element.boundingRect;
|
|
Rect widget = r;
|
|
widget.min = new Vector2(r.max.x - 30.0f, r.max.y - 30.0f);
|
|
|
|
if (widget.Contains(parent.MouseToCanvas(e.mousePosition)))
|
|
{
|
|
parent.StartCapture(this, element);
|
|
parent.ClearSelection();
|
|
m_Active = true;
|
|
m_Start = parent.MouseToCanvas(e.mousePosition);
|
|
e.Use();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private bool OnMouseDrag(CanvasElement element, Event e, Canvas2D parent)
|
|
{
|
|
if (!m_Active || e.type != EventType.MouseDrag)
|
|
return false;
|
|
|
|
Vector2 newPosition = parent.MouseToCanvas(e.mousePosition);
|
|
Vector2 diff = newPosition - m_Start;
|
|
m_Start = newPosition;
|
|
Vector3 newScale = element.scale;
|
|
newScale.x = Mathf.Max(m_MinimumScale.x, newScale.x + diff.x);
|
|
newScale.y = Mathf.Max(m_MinimumScale.y, newScale.y + diff.y);
|
|
|
|
element.scale = newScale;
|
|
|
|
element.DeepInvalidate();
|
|
|
|
e.Use();
|
|
return true;
|
|
}
|
|
|
|
private bool OnMouseUp(CanvasElement element, Event e, Canvas2D parent)
|
|
{
|
|
if (m_Active)
|
|
{
|
|
parent.EndCapture();
|
|
parent.RebuildQuadTree();
|
|
}
|
|
m_Active = false;
|
|
|
|
return true;
|
|
}
|
|
|
|
private bool DrawResizeWidget(CanvasElement element, Event e, Canvas2D parent)
|
|
{
|
|
Rect r = element.boundingRect;
|
|
Rect widget = r;
|
|
widget.min = new Vector2(r.max.x - 10.0f, r.max.y - 7.0f);
|
|
GUI.Label(widget, GUIContent.none, style);
|
|
return true;
|
|
}
|
|
};
|
|
}
|