Files
Fishing2/Assets/Scripts/NBC/Asset/Editor/GUI/Commom/Splitter.cs

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;
}
}
}