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

267 lines
7.4 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine.Events;
namespace UnityEngine.UI
{
// Token: 0x0200009C RID: 156
public class LayoutRebuilder : ICanvasElement
{
// Token: 0x060005A0 RID: 1440 RVA: 0x0001CC61 File Offset: 0x0001B061
static LayoutRebuilder()
{
RectTransform.reapplyDrivenProperties += LayoutRebuilder.ReapplyDrivenProperties;
}
// Token: 0x060005A2 RID: 1442 RVA: 0x0001CCA5 File Offset: 0x0001B0A5
private void Initialize(RectTransform controller)
{
this.m_ToRebuild = controller;
this.m_CachedHashFromTransform = controller.GetHashCode();
}
// Token: 0x060005A3 RID: 1443 RVA: 0x0001CCBB File Offset: 0x0001B0BB
private void Clear()
{
this.m_ToRebuild = null;
this.m_CachedHashFromTransform = 0;
}
// Token: 0x060005A4 RID: 1444 RVA: 0x0001CCCC File Offset: 0x0001B0CC
private static void ReapplyDrivenProperties(RectTransform driven)
{
LayoutRebuilder.MarkLayoutForRebuild(driven);
}
// Token: 0x17000191 RID: 401
// (get) Token: 0x060005A5 RID: 1445 RVA: 0x0001CCD8 File Offset: 0x0001B0D8
public Transform transform
{
get
{
return this.m_ToRebuild;
}
}
// Token: 0x060005A6 RID: 1446 RVA: 0x0001CCF4 File Offset: 0x0001B0F4
public bool IsDestroyed()
{
return this.m_ToRebuild == null;
}
// Token: 0x060005A7 RID: 1447 RVA: 0x0001CD15 File Offset: 0x0001B115
private static void StripDisabledBehavioursFromList(List<Component> components)
{
components.RemoveAll((Component e) => e is Behaviour && !((Behaviour)e).isActiveAndEnabled);
}
// Token: 0x060005A8 RID: 1448 RVA: 0x0001CD3C File Offset: 0x0001B13C
public static void ForceRebuildLayoutImmediate(RectTransform layoutRoot)
{
LayoutRebuilder layoutRebuilder = LayoutRebuilder.s_Rebuilders.Get();
layoutRebuilder.Initialize(layoutRoot);
layoutRebuilder.Rebuild(CanvasUpdate.Layout);
LayoutRebuilder.s_Rebuilders.Release(layoutRebuilder);
}
// Token: 0x060005A9 RID: 1449 RVA: 0x0001CD70 File Offset: 0x0001B170
public void Rebuild(CanvasUpdate executing)
{
if (executing == CanvasUpdate.Layout)
{
this.PerformLayoutCalculation(this.m_ToRebuild, delegate(Component e)
{
(e as ILayoutElement).CalculateLayoutInputHorizontal();
});
this.PerformLayoutControl(this.m_ToRebuild, delegate(Component e)
{
(e as ILayoutController).SetLayoutHorizontal();
});
this.PerformLayoutCalculation(this.m_ToRebuild, delegate(Component e)
{
(e as ILayoutElement).CalculateLayoutInputVertical();
});
this.PerformLayoutControl(this.m_ToRebuild, delegate(Component e)
{
(e as ILayoutController).SetLayoutVertical();
});
}
}
// Token: 0x060005AA RID: 1450 RVA: 0x0001CE34 File Offset: 0x0001B234
private void PerformLayoutControl(RectTransform rect, UnityAction<Component> action)
{
if (!(rect == null))
{
List<Component> list = ListPool<Component>.Get();
rect.GetComponents(typeof(ILayoutController), list);
LayoutRebuilder.StripDisabledBehavioursFromList(list);
if (list.Count > 0)
{
for (int i = 0; i < list.Count; i++)
{
if (list[i] is ILayoutSelfController)
{
action(list[i]);
}
}
for (int j = 0; j < list.Count; j++)
{
if (!(list[j] is ILayoutSelfController))
{
action(list[j]);
}
}
for (int k = 0; k < rect.childCount; k++)
{
this.PerformLayoutControl(rect.GetChild(k) as RectTransform, action);
}
}
ListPool<Component>.Release(list);
}
}
// Token: 0x060005AB RID: 1451 RVA: 0x0001CF18 File Offset: 0x0001B318
private void PerformLayoutCalculation(RectTransform rect, UnityAction<Component> action)
{
if (!(rect == null))
{
List<Component> list = ListPool<Component>.Get();
rect.GetComponents(typeof(ILayoutElement), list);
LayoutRebuilder.StripDisabledBehavioursFromList(list);
if (list.Count > 0 || rect.GetComponent(typeof(ILayoutGroup)))
{
for (int i = 0; i < rect.childCount; i++)
{
this.PerformLayoutCalculation(rect.GetChild(i) as RectTransform, action);
}
for (int j = 0; j < list.Count; j++)
{
action(list[j]);
}
}
ListPool<Component>.Release(list);
}
}
// Token: 0x060005AC RID: 1452 RVA: 0x0001CFD0 File Offset: 0x0001B3D0
public static void MarkLayoutForRebuild(RectTransform rect)
{
if (!(rect == null))
{
List<Component> list = ListPool<Component>.Get();
RectTransform rectTransform = rect;
for (;;)
{
RectTransform rectTransform2 = rectTransform.parent as RectTransform;
if (!LayoutRebuilder.ValidLayoutGroup(rectTransform2, list))
{
break;
}
rectTransform = rectTransform2;
}
if (rectTransform == rect && !LayoutRebuilder.ValidController(rectTransform, list))
{
ListPool<Component>.Release(list);
}
else
{
LayoutRebuilder.MarkLayoutRootForRebuild(rectTransform);
ListPool<Component>.Release(list);
}
}
}
// Token: 0x060005AD RID: 1453 RVA: 0x0001D050 File Offset: 0x0001B450
private static bool ValidLayoutGroup(RectTransform parent, List<Component> comps)
{
bool flag;
if (parent == null)
{
flag = false;
}
else
{
parent.GetComponents(typeof(ILayoutGroup), comps);
LayoutRebuilder.StripDisabledBehavioursFromList(comps);
bool flag2 = comps.Count > 0;
flag = flag2;
}
return flag;
}
// Token: 0x060005AE RID: 1454 RVA: 0x0001D09C File Offset: 0x0001B49C
private static bool ValidController(RectTransform layoutRoot, List<Component> comps)
{
bool flag;
if (layoutRoot == null)
{
flag = false;
}
else
{
layoutRoot.GetComponents(typeof(ILayoutController), comps);
LayoutRebuilder.StripDisabledBehavioursFromList(comps);
bool flag2 = comps.Count > 0;
flag = flag2;
}
return flag;
}
// Token: 0x060005AF RID: 1455 RVA: 0x0001D0E8 File Offset: 0x0001B4E8
private static void MarkLayoutRootForRebuild(RectTransform controller)
{
if (!(controller == null))
{
LayoutRebuilder layoutRebuilder = LayoutRebuilder.s_Rebuilders.Get();
layoutRebuilder.Initialize(controller);
if (!CanvasUpdateRegistry.TryRegisterCanvasElementForLayoutRebuild(layoutRebuilder))
{
LayoutRebuilder.s_Rebuilders.Release(layoutRebuilder);
}
}
}
// Token: 0x060005B0 RID: 1456 RVA: 0x0001D12F File Offset: 0x0001B52F
public void LayoutComplete()
{
LayoutRebuilder.s_Rebuilders.Release(this);
}
// Token: 0x060005B1 RID: 1457 RVA: 0x0001D13D File Offset: 0x0001B53D
public void GraphicUpdateComplete()
{
}
// Token: 0x060005B2 RID: 1458 RVA: 0x0001D140 File Offset: 0x0001B540
public override int GetHashCode()
{
return this.m_CachedHashFromTransform;
}
// Token: 0x060005B3 RID: 1459 RVA: 0x0001D15C File Offset: 0x0001B55C
public override bool Equals(object obj)
{
return obj.GetHashCode() == this.GetHashCode();
}
// Token: 0x060005B4 RID: 1460 RVA: 0x0001D180 File Offset: 0x0001B580
public override string ToString()
{
return "(Layout Rebuilder for) " + this.m_ToRebuild;
}
// Token: 0x040002AE RID: 686
private RectTransform m_ToRebuild;
// Token: 0x040002AF RID: 687
private int m_CachedHashFromTransform;
// Token: 0x040002B0 RID: 688
private static ObjectPool<LayoutRebuilder> s_Rebuilders = new ObjectPool<LayoutRebuilder>(null, delegate(LayoutRebuilder x)
{
x.Clear();
});
}
}