Files
2026-06-04 11:42:34 +02:00

203 lines
7.3 KiB
C#

using System;
using System.Collections.Generic;
namespace UnityEngine.Experimental.UIElements
{
// Token: 0x0200033D RID: 829
internal class UIElementsUtility
{
// Token: 0x06003377 RID: 13175 RVA: 0x0005085C File Offset: 0x0004EA5C
static UIElementsUtility()
{
GUIUtility.takeCapture = (Action)Delegate.Combine(GUIUtility.takeCapture, new Action(UIElementsUtility.TakeCapture));
GUIUtility.releaseCapture = (Action)Delegate.Combine(GUIUtility.releaseCapture, new Action(UIElementsUtility.ReleaseCapture));
GUIUtility.processEvent = (Func<int, IntPtr, bool>)Delegate.Combine(GUIUtility.processEvent, new Func<int, IntPtr, bool>(UIElementsUtility.ProcessEvent));
GUIUtility.cleanupRoots = (Action)Delegate.Combine(GUIUtility.cleanupRoots, new Action(UIElementsUtility.CleanupRoots));
GUIUtility.endContainerGUIFromException = (Func<Exception, bool>)Delegate.Combine(GUIUtility.endContainerGUIFromException, new Func<Exception, bool>(UIElementsUtility.EndContainerGUIFromException));
}
// Token: 0x17000BB3 RID: 2995
// (get) Token: 0x06003379 RID: 13177 RVA: 0x00050988 File Offset: 0x0004EB88
internal static IDispatcher eventDispatcher
{
get
{
if (UIElementsUtility.s_EventDispatcher == null)
{
UIElementsUtility.s_EventDispatcher = new EventDispatcher();
}
return UIElementsUtility.s_EventDispatcher;
}
}
// Token: 0x0600337A RID: 13178 RVA: 0x000509B8 File Offset: 0x0004EBB8
private static void TakeCapture()
{
if (UIElementsUtility.s_ContainerStack.Count > 0)
{
IMGUIContainer imguicontainer = UIElementsUtility.s_ContainerStack.Peek();
if (imguicontainer.GUIDepth == GUIUtility.Internal_GetGUIDepth())
{
if (UIElementsUtility.eventDispatcher.capture != null && UIElementsUtility.eventDispatcher.capture != imguicontainer)
{
Debug.Log(string.Format("Should not grab hot control with an active capture (current={0} new={1}", UIElementsUtility.eventDispatcher.capture, imguicontainer));
}
UIElementsUtility.eventDispatcher.TakeCapture(imguicontainer);
}
}
}
// Token: 0x0600337B RID: 13179 RVA: 0x00050A40 File Offset: 0x0004EC40
private static void ReleaseCapture()
{
UIElementsUtility.eventDispatcher.RemoveCapture();
}
// Token: 0x0600337C RID: 13180 RVA: 0x00050A50 File Offset: 0x0004EC50
private static bool ProcessEvent(int instanceID, IntPtr nativeEventPtr)
{
Panel panel;
bool flag;
if (nativeEventPtr != IntPtr.Zero && UIElementsUtility.s_UIElementsCache.TryGetValue(instanceID, out panel))
{
UIElementsUtility.s_EventInstance.CopyFromPtr(nativeEventPtr);
flag = UIElementsUtility.DoDispatch(panel);
}
else
{
flag = false;
}
return flag;
}
// Token: 0x0600337D RID: 13181 RVA: 0x00050AA0 File Offset: 0x0004ECA0
private static void CleanupRoots()
{
UIElementsUtility.s_EventInstance = null;
UIElementsUtility.s_EventDispatcher = null;
UIElementsUtility.s_UIElementsCache = null;
UIElementsUtility.s_ContainerStack = null;
}
// Token: 0x0600337E RID: 13182 RVA: 0x00050ABC File Offset: 0x0004ECBC
private static bool EndContainerGUIFromException(Exception exception)
{
if (UIElementsUtility.s_ContainerStack.Count > 0)
{
GUIUtility.EndContainer();
UIElementsUtility.s_ContainerStack.Pop();
}
return GUIUtility.ShouldRethrowException(exception);
}
// Token: 0x0600337F RID: 13183 RVA: 0x00050AFC File Offset: 0x0004ECFC
internal static void BeginContainerGUI(GUILayoutUtility.LayoutCache cache, int instanceID, Event evt, IMGUIContainer container)
{
GUIUtility.BeginContainer(instanceID);
UIElementsUtility.s_ContainerStack.Push(container);
GUIUtility.s_SkinMode = (int)container.contextType;
GUIUtility.s_OriginalID = instanceID;
Event.current = evt;
GUILayoutUtility.BeginContainer(cache);
GUIUtility.ResetGlobalState();
Rect rect = container.lastWorldClip;
if (rect.width == 0f || rect.height == 0f)
{
rect = container.globalBound;
}
Matrix4x4 matrix4x = Matrix4x4.TRS(new Vector3(container.position.x, container.position.y, 0f), Quaternion.identity, Vector3.one);
GUIClip.SetTransform(container.globalTransform * matrix4x, rect);
}
// Token: 0x06003380 RID: 13184 RVA: 0x00050BB8 File Offset: 0x0004EDB8
internal static void EndContainerGUI()
{
if (Event.current.type == EventType.Layout && UIElementsUtility.s_ContainerStack.Count > 0)
{
Rect globalBound = UIElementsUtility.s_ContainerStack.Peek().globalBound;
GUILayoutUtility.LayoutFromContainer(globalBound.width, globalBound.height);
}
GUILayoutUtility.SelectIDList(GUIUtility.s_OriginalID, false);
GUIContent.ClearStaticCache();
if (UIElementsUtility.s_ContainerStack.Count > 0)
{
GUIUtility.EndContainer();
UIElementsUtility.s_ContainerStack.Pop();
}
}
// Token: 0x06003381 RID: 13185 RVA: 0x00050C40 File Offset: 0x0004EE40
internal static ContextType GetGUIContextType()
{
return (GUIUtility.s_SkinMode != 0) ? ContextType.Editor : ContextType.Player;
}
// Token: 0x06003382 RID: 13186 RVA: 0x00050C68 File Offset: 0x0004EE68
private static bool DoDispatch(BaseVisualElementPanel panel)
{
bool flag;
if (UIElementsUtility.s_EventInstance.type == EventType.Repaint)
{
panel.Repaint(UIElementsUtility.s_EventInstance);
flag = panel.IMGUIContainersCount > 0;
}
else
{
panel.ValidateLayout();
EventPropagation eventPropagation = UIElementsUtility.s_EventDispatcher.DispatchEvent(UIElementsUtility.s_EventInstance, panel);
if (eventPropagation == EventPropagation.Stop)
{
panel.visualTree.Dirty(ChangeType.Repaint);
}
flag = eventPropagation == EventPropagation.Stop;
}
return flag;
}
// Token: 0x06003383 RID: 13187 RVA: 0x00050CE0 File Offset: 0x0004EEE0
internal static Dictionary<int, Panel>.Enumerator GetPanelsIterator()
{
return UIElementsUtility.s_UIElementsCache.GetEnumerator();
}
// Token: 0x06003384 RID: 13188 RVA: 0x00050D00 File Offset: 0x0004EF00
internal static Panel FindOrCreatePanel(int instanceId, ContextType contextType, IDataWatchService dataWatch = null, LoadResourceFunction loadResourceFunction = null)
{
Panel panel;
if (!UIElementsUtility.s_UIElementsCache.TryGetValue(instanceId, out panel))
{
panel = new Panel(instanceId, contextType, loadResourceFunction, dataWatch, UIElementsUtility.eventDispatcher);
UIElementsUtility.s_UIElementsCache.Add(instanceId, panel);
}
else
{
Debug.Assert(contextType == panel.contextType, "Context type mismatch");
}
return panel;
}
// Token: 0x06003385 RID: 13189 RVA: 0x00050D60 File Offset: 0x0004EF60
internal static Panel FindOrCreatePanel(int instanceId)
{
return UIElementsUtility.FindOrCreatePanel(instanceId, UIElementsUtility.GetGUIContextType(), null, null);
}
// Token: 0x06003386 RID: 13190 RVA: 0x00050D84 File Offset: 0x0004EF84
internal static void BeginBuilder(VisualContainer w)
{
}
// Token: 0x04000A99 RID: 2713
private static Stack<IMGUIContainer> s_ContainerStack = new Stack<IMGUIContainer>();
// Token: 0x04000A9A RID: 2714
private static Dictionary<int, Panel> s_UIElementsCache = new Dictionary<int, Panel>();
// Token: 0x04000A9B RID: 2715
private static Event s_EventInstance = new Event();
// Token: 0x04000A9C RID: 2716
private static EventDispatcher s_EventDispatcher;
}
}