0.1.0: Added favorites window
This commit is contained in:
parent
80499f0a7e
commit
dea60c6e4a
37 changed files with 1129 additions and 0 deletions
112
Editor/Favorites/Utilities/FavoritesGUIUtility.cs
Normal file
112
Editor/Favorites/Utilities/FavoritesGUIUtility.cs
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
using UnityEditor;
|
||||
using UnityEditorInternal;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Game.NavigationTool.Editor
|
||||
{
|
||||
internal static class FavoritesGUIUtility
|
||||
{
|
||||
private static readonly int ENTRY_HASH = "DrawEntry".GetHashCode();
|
||||
|
||||
public static Favorites.Entry manipulatingEntry;
|
||||
public static EManipulatingState manipulatingState;
|
||||
public static Favorites.Entry hoverEntry;
|
||||
|
||||
public static void DrawEntry(Rect rect, Favorites.Entry entry, Styles styles, bool ignoreIndentLevel = false)
|
||||
{
|
||||
int id = GUIUtility.GetControlID(ENTRY_HASH, FocusType.Passive, rect);
|
||||
bool on = manipulatingEntry == entry;
|
||||
bool intersects = rect.Contains(Event.current.mousePosition);
|
||||
|
||||
if (intersects)
|
||||
hoverEntry = entry;
|
||||
else if (hoverEntry == entry)
|
||||
hoverEntry = null;
|
||||
|
||||
switch (Event.current.type)
|
||||
{
|
||||
case EventType.MouseDown:
|
||||
if (intersects)
|
||||
{
|
||||
SetManipulating(entry, Event.current.button == 0 ? EManipulatingState.BeginClick : EManipulatingState.BeginContextClick);
|
||||
Event.current.Use();
|
||||
}
|
||||
break;
|
||||
case EventType.MouseUp:
|
||||
if (manipulatingEntry == entry)
|
||||
{
|
||||
if (manipulatingState == EManipulatingState.BeginClick)
|
||||
{
|
||||
if (intersects && Event.current.button == 0)
|
||||
SetManipulating(entry, EManipulatingState.PerformedClick);
|
||||
else
|
||||
SetManipulating(entry, EManipulatingState.EndClick);
|
||||
}
|
||||
else if (manipulatingState == EManipulatingState.BeginContextClick)
|
||||
{
|
||||
if (intersects && Event.current.button == 1)
|
||||
SetManipulating(entry, EManipulatingState.PerformedContextClick);
|
||||
else
|
||||
SetManipulating(entry, EManipulatingState.EndContextClick);
|
||||
}
|
||||
|
||||
Event.current.Use();
|
||||
}
|
||||
break;
|
||||
case EventType.MouseDrag:
|
||||
if (manipulatingEntry == entry)
|
||||
Event.current.Use();
|
||||
break;
|
||||
case EventType.KeyDown:
|
||||
break;
|
||||
case EventType.KeyUp:
|
||||
break;
|
||||
case EventType.Repaint:
|
||||
if (!ignoreIndentLevel)
|
||||
{
|
||||
rect.x += entry.indentLevel * 15.0f;
|
||||
rect.width -= entry.indentLevel * 15.0f;
|
||||
}
|
||||
|
||||
if (!entry.isAsset)
|
||||
entry.content.image = entry.expanded ? styles.foldoutOut : styles.foldoutIn;
|
||||
|
||||
styles.entry.Draw(rect, entry.content, id, on, intersects);
|
||||
break;
|
||||
case EventType.DragUpdated:
|
||||
break;
|
||||
case EventType.DragPerform:
|
||||
break;
|
||||
case EventType.DragExited:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static Texture2D GetIcon(string path)
|
||||
{
|
||||
var texture = AssetDatabase.GetCachedIcon(path) as Texture2D;
|
||||
|
||||
if (texture == null)
|
||||
texture = InternalEditorUtility.GetIconForFile(path);
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
public static Texture2D GetFolderIcon()
|
||||
{
|
||||
return AssetDatabase.GetCachedIcon("Assets") as Texture2D;
|
||||
}
|
||||
|
||||
private static void SetManipulating(Favorites.Entry entry, EManipulatingState state)
|
||||
{
|
||||
manipulatingEntry = entry;
|
||||
manipulatingState = state;
|
||||
}
|
||||
|
||||
public static void ClearManipulating()
|
||||
{
|
||||
SetManipulating(null, EManipulatingState.None);
|
||||
hoverEntry = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue