lib_unity_purchase/Editor/RichEditorWindow.cs

50 lines
1.7 KiB
C#
Raw Normal View History

2024-01-29 18:49:33 +08:00
using UnityEngine;
namespace UnityEditor.Purchasing
{
internal class RichEditorWindow : EditorWindow
{
private const string kLightLinkIconPath = "Packages/com.unity.purchasing/Icons/LinkWhite.png";
private const string kDarkLinkIconPath = "Packages/com.unity.purchasing/Icons/LinkBlack.png";
private GUIStyle m_LinkStyle;
private Texture m_LightLinkIcon;
private Texture m_DarkLinkIcon;
internal RichEditorWindow()
{
}
internal void GUILink(string linkText, string url)
{
m_LightLinkIcon ??= AssetDatabase.LoadAssetAtPath<Texture>(kLightLinkIconPath);
m_DarkLinkIcon ??= AssetDatabase.LoadAssetAtPath<Texture>(kDarkLinkIconPath);
m_LinkStyle ??= new GUIStyle();
m_LinkStyle.normal.textColor = EditorGUIUtility.isProSkin ? Color.cyan : Color.blue;
m_LinkStyle.contentOffset = new Vector2(6, 0); // Indent like other labels
var linkIcon = EditorGUIUtility.isProSkin ? m_LightLinkIcon : m_DarkLinkIcon;
var linkSize = m_LinkStyle.CalcSize(new GUIContent(linkText));
GUILayout.Label(linkText, m_LinkStyle);
var linkRect = GUILayoutUtility.GetLastRect();
if (linkIcon != null)
{
GUI.Label(new Rect(linkSize.x, linkRect.y, linkRect.height, linkRect.height), linkIcon);
}
else
{
Debug.LogWarning("Cannot get icon: " + kLightLinkIconPath);
}
if (Event.current.type == EventType.MouseUp && linkRect.Contains(Event.current.mousePosition))
{
Application.OpenURL(url);
}
}
}
}