首次提交
This commit is contained in:
103
Assets/Scripts/NBC/Asset/Editor/GUI/Commom/Splitter.cs
Normal file
103
Assets/Scripts/NBC/Asset/Editor/GUI/Commom/Splitter.cs
Normal file
@@ -0,0 +1,103 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5ff764a382104fe1970089f4ae39dd83
|
||||
timeCreated: 1679805403
|
||||
Reference in New Issue
Block a user