103 lines
3.7 KiB
C#
103 lines
3.7 KiB
C#
using System;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.Serialization;
|
|
|
|
namespace NBC.Asset.Editor
|
|
{
|
|
[Serializable]
|
|
public class VerticalSplitter
|
|
{
|
|
[NonSerialized] Rect m_Rect = new Rect(0, 0, 0, 3);
|
|
public Rect SplitterRect => m_Rect;
|
|
|
|
[FormerlySerializedAs("m_currentPercent")] [SerializeField]
|
|
float m_CurrentPercent;
|
|
|
|
bool m_Resizing;
|
|
float m_MinPercent;
|
|
float m_MaxPercent;
|
|
|
|
public VerticalSplitter(float percent = .6f, float minPer = .4f, float maxPer = .9f)
|
|
{
|
|
m_CurrentPercent = percent;
|
|
m_MinPercent = minPer;
|
|
m_MaxPercent = maxPer;
|
|
}
|
|
|
|
public bool OnGUI(Rect content, out Rect top, out Rect bot)
|
|
{
|
|
m_Rect.x = content.x;
|
|
m_Rect.y = (int)(content.y + content.height * m_CurrentPercent);
|
|
m_Rect.width = content.width;
|
|
|
|
EditorGUIUtility.AddCursorRect(m_Rect, MouseCursor.ResizeVertical);
|
|
if (Event.current.type == EventType.MouseDown && m_Rect.Contains(Event.current.mousePosition))
|
|
m_Resizing = true;
|
|
|
|
if (m_Resizing)
|
|
{
|
|
EditorGUIUtility.AddCursorRect(content, MouseCursor.ResizeVertical);
|
|
|
|
var mousePosInRect = Event.current.mousePosition.y - content.y;
|
|
m_CurrentPercent = Mathf.Clamp(mousePosInRect / content.height, m_MinPercent, m_MaxPercent);
|
|
m_Rect.y = Mathf.Min((int)(content.y + content.height * m_CurrentPercent),
|
|
content.yMax - m_Rect.height);
|
|
if (Event.current.type == EventType.MouseUp)
|
|
m_Resizing = false;
|
|
}
|
|
|
|
top = new Rect(content.x, content.y, content.width, m_Rect.yMin - content.yMin);
|
|
bot = new Rect(content.x, m_Rect.yMax, content.width, content.yMax - m_Rect.yMax);
|
|
return m_Resizing;
|
|
}
|
|
}
|
|
|
|
|
|
[Serializable]
|
|
public class HorizontalSplitter
|
|
{
|
|
[NonSerialized] Rect m_Rect = new Rect(0, 0, 3, 0);
|
|
|
|
public Rect SplitterRect => m_Rect;
|
|
|
|
[FormerlySerializedAs("m_currentPercent")] [SerializeField]
|
|
float m_CurrentPercent;
|
|
|
|
bool m_Resizing;
|
|
float m_MinPercent;
|
|
float m_MaxPercent;
|
|
|
|
public HorizontalSplitter(float percent = .6f, float minPer = .4f, float maxPer = .9f)
|
|
{
|
|
m_CurrentPercent = percent;
|
|
m_MinPercent = minPer;
|
|
m_MaxPercent = maxPer;
|
|
}
|
|
|
|
public bool OnGUI(Rect content, out Rect left, out Rect right)
|
|
{
|
|
m_Rect.y = content.y;
|
|
m_Rect.x = (int)(content.x + content.width * m_CurrentPercent);
|
|
m_Rect.height = content.height;
|
|
|
|
EditorGUIUtility.AddCursorRect(m_Rect, MouseCursor.ResizeHorizontal);
|
|
if (Event.current.type == EventType.MouseDown && m_Rect.Contains(Event.current.mousePosition))
|
|
m_Resizing = true;
|
|
|
|
if (m_Resizing)
|
|
{
|
|
EditorGUIUtility.AddCursorRect(content, MouseCursor.ResizeHorizontal);
|
|
|
|
var mousePosInRect = Event.current.mousePosition.x - content.x;
|
|
m_CurrentPercent = Mathf.Clamp(mousePosInRect / content.width, m_MinPercent, m_MaxPercent);
|
|
m_Rect.x = Mathf.Min((int)(content.x + content.width * m_CurrentPercent), content.xMax - m_Rect.width);
|
|
if (Event.current.type == EventType.MouseUp)
|
|
m_Resizing = false;
|
|
}
|
|
left = new Rect(content.x, content.y, content.width * m_CurrentPercent, content.height);
|
|
right = new Rect(m_Rect.xMax, content.y, content.width - content.width * m_CurrentPercent, content.height);
|
|
return m_Resizing;
|
|
}
|
|
}
|
|
} |