minesweeper_game/Library/PackageCache/com.unity.2d.tilemap@91afae292a4e/Editor/UI/TilePaletteOverlayUtility.cs
2025-03-15 14:30:26 -04:00

136 lines
5.7 KiB
C#

using UnityEngine.UIElements;
namespace UnityEditor.Tilemaps
{
internal static class TilePaletteOverlayUtility
{
private static readonly string s_TilePaletteOverlayStyleSheetPath = "Packages/com.unity.2d.tilemap/Editor/UI/TilePaletteOverlay.uss";
private static readonly string s_TilePaletteOverlayStyleSheetShiroPath = "Packages/com.unity.2d.tilemap/Editor/UI/TilePaletteOverlayLight.uss";
private static readonly string s_TilePaletteOverlayStyleSheetKuroPath = "Packages/com.unity.2d.tilemap/Editor/UI/TilePaletteOverlayDark.uss";
private static StyleSheet s_TilePaletteOverlayStyleSheet;
private static StyleSheet s_TilePaletteOverlayStyleSheetLight;
private static StyleSheet s_TilePaletteOverlayStyleSheetDark;
private static readonly string buttonStripClassName = "unity-editor-toolbar__button-strip";
private static readonly string stripElementClassName = buttonStripClassName + "-element";
private static readonly string leftStripElementClassName = stripElementClassName + "--left";
private static readonly string middleStripElementClassName = stripElementClassName + "--middle";
private static readonly string rightStripElementClassName = stripElementClassName + "--right";
private static readonly string aloneStripElementClassName = stripElementClassName + "--alone";
private static StyleSheet StyleSheet
{
get
{
if (s_TilePaletteOverlayStyleSheet == null)
s_TilePaletteOverlayStyleSheet = EditorGUIUtility.Load(s_TilePaletteOverlayStyleSheetPath) as StyleSheet;
return s_TilePaletteOverlayStyleSheet;
}
}
private static StyleSheet StyleSheetLight
{
get
{
if (s_TilePaletteOverlayStyleSheetLight == null)
s_TilePaletteOverlayStyleSheetLight = EditorGUIUtility.Load(s_TilePaletteOverlayStyleSheetShiroPath) as StyleSheet;
return s_TilePaletteOverlayStyleSheetLight;
}
}
private static StyleSheet StyleSheetDark
{
get
{
if (s_TilePaletteOverlayStyleSheetDark == null)
s_TilePaletteOverlayStyleSheetDark = EditorGUIUtility.Load(s_TilePaletteOverlayStyleSheetKuroPath) as StyleSheet;
return s_TilePaletteOverlayStyleSheetDark;
}
}
internal static void SetStyleSheet(VisualElement ve)
{
ve.styleSheets.Add(StyleSheet);
if (EditorGUIUtility.isProSkin)
ve.styleSheets.Add(StyleSheetDark);
else
ve.styleSheets.Add(StyleSheetLight);
}
internal static void SetupChildrenAsButtonStripForVisible(VisualElement root, bool[] visibleList)
{
root.AddToClassList(buttonStripClassName);
var count = root.hierarchy.childCount;
if (count != visibleList.Length)
return;
if (count == 1)
{
var element = root.hierarchy.ElementAt(0);
var visible = visibleList[0];
element.EnableInClassList(aloneStripElementClassName, visible);
if (visible)
{
element.style.position = Position.Relative;
element.style.visibility = Visibility.Visible;
}
else
{
element.style.position = Position.Absolute;
element.style.visibility = Visibility.Hidden;
}
}
else
{
int lastVisible = 0;
bool firstVisible = true;
for (var i = 0; i < count; ++i)
{
var element = root.hierarchy.ElementAt(i);
var visible = visibleList[i];
element.AddToClassList(stripElementClassName);
element.RemoveFromClassList(leftStripElementClassName);
element.RemoveFromClassList(middleStripElementClassName);
element.RemoveFromClassList(rightStripElementClassName);
if (firstVisible)
{
element.EnableInClassList(leftStripElementClassName, visible);
firstVisible = false;
}
else
{
element.EnableInClassList(middleStripElementClassName, visible);
element.RemoveFromClassList(rightStripElementClassName);
}
if (visible)
{
lastVisible = i;
element.style.position = Position.Relative;
element.style.visibility = Visibility.Visible;
}
else
{
element.style.position = Position.Absolute;
element.style.visibility = Visibility.Hidden;
}
}
var lastElement = root.hierarchy.ElementAt(lastVisible);
if (lastElement.ClassListContains(leftStripElementClassName))
{
lastElement.RemoveFromClassList(leftStripElementClassName);
lastElement.AddToClassList(aloneStripElementClassName);
}
else
{
lastElement.RemoveFromClassList(middleStripElementClassName);
lastElement.AddToClassList(rightStripElementClassName);
}
}
}
}
}