Restructured for new direction.
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
using System.Reflection;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AssetUsageDetectorNamespace
|
||||
{
|
||||
public class SearchResultTooltip : EditorWindow
|
||||
{
|
||||
private static SearchResultTooltip mainWindow;
|
||||
private static string tooltip;
|
||||
|
||||
private static GUIStyle m_style;
|
||||
internal static GUIStyle Style
|
||||
{
|
||||
get
|
||||
{
|
||||
if( m_style == null )
|
||||
{
|
||||
m_style = (GUIStyle) typeof( EditorStyles ).GetProperty( "tooltip", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static ).GetValue( null, null );
|
||||
m_style.richText = true;
|
||||
}
|
||||
|
||||
return m_style;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Show( Rect sourcePosition, string tooltip )
|
||||
{
|
||||
// Don't lose focus to the previous window
|
||||
EditorWindow prevFocusedWindow = focusedWindow;
|
||||
|
||||
if (!mainWindow)
|
||||
{
|
||||
mainWindow = CreateInstance<SearchResultTooltip>();
|
||||
mainWindow.ShowPopup();
|
||||
}
|
||||
|
||||
Vector2 preferredSize = Style.CalcSize( new GUIContent( tooltip ) ) + Style.contentOffset + new Vector2( Style.padding.horizontal + Style.margin.horizontal, Style.padding.vertical + Style.margin.vertical );
|
||||
Rect preferredPosition;
|
||||
|
||||
Rect positionLeft = new Rect( sourcePosition.position - new Vector2( preferredSize.x, 0f ), preferredSize );
|
||||
Rect screenFittedPositionLeft = Utilities.GetScreenFittedRect(positionLeft, mainWindow);
|
||||
|
||||
Vector2 positionOffset = positionLeft.position - screenFittedPositionLeft.position;
|
||||
Vector2 sizeOffset = positionLeft.size - screenFittedPositionLeft.size;
|
||||
if( positionOffset.sqrMagnitude <= 400f && sizeOffset.sqrMagnitude <= 400f )
|
||||
preferredPosition = screenFittedPositionLeft;
|
||||
else
|
||||
{
|
||||
Rect positionRight = new Rect( sourcePosition.position + new Vector2( sourcePosition.width, 0f ), preferredSize );
|
||||
Rect screenFittedPositionRight = Utilities.GetScreenFittedRect(positionRight, mainWindow);
|
||||
|
||||
Vector2 positionOffset2 = positionRight.position - screenFittedPositionRight.position;
|
||||
Vector2 sizeOffset2 = positionRight.size - screenFittedPositionRight.size;
|
||||
if( positionOffset2.magnitude + sizeOffset2.magnitude < positionOffset.magnitude + sizeOffset.magnitude )
|
||||
preferredPosition = screenFittedPositionRight;
|
||||
else
|
||||
preferredPosition = screenFittedPositionLeft;
|
||||
}
|
||||
|
||||
SearchResultTooltip.tooltip = tooltip;
|
||||
mainWindow.minSize = preferredPosition.size;
|
||||
mainWindow.position = preferredPosition;
|
||||
mainWindow.Repaint();
|
||||
|
||||
if( prevFocusedWindow )
|
||||
prevFocusedWindow.Focus();
|
||||
}
|
||||
|
||||
public static void Hide()
|
||||
{
|
||||
if( mainWindow )
|
||||
{
|
||||
mainWindow.Close();
|
||||
mainWindow = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
// If somehow the tooltip isn't automatically closed, allow closing it by clicking on it
|
||||
if( Event.current.type == EventType.MouseDown )
|
||||
{
|
||||
Hide();
|
||||
GUIUtility.ExitGUI();
|
||||
}
|
||||
|
||||
GUI.Label( new Rect( Vector2.zero, position.size ), tooltip, Style );
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user