using System; using System.Collections.Generic; namespace UnityEngine.UI { // Token: 0x02000064 RID: 100 public class MaskUtilities { // Token: 0x0600036D RID: 877 RVA: 0x00014360 File Offset: 0x00012760 public static void Notify2DMaskStateChanged(Component mask) { List list = ListPool.Get(); mask.GetComponentsInChildren(list); for (int i = 0; i < list.Count; i++) { if (!(list[i] == null) && !(list[i].gameObject == mask.gameObject)) { IClippable clippable = list[i] as IClippable; if (clippable != null) { clippable.RecalculateClipping(); } } } ListPool.Release(list); } // Token: 0x0600036E RID: 878 RVA: 0x000143E8 File Offset: 0x000127E8 public static void NotifyStencilStateChanged(Component mask) { List list = ListPool.Get(); mask.GetComponentsInChildren(list); for (int i = 0; i < list.Count; i++) { if (!(list[i] == null) && !(list[i].gameObject == mask.gameObject)) { IMaskable maskable = list[i] as IMaskable; if (maskable != null) { maskable.RecalculateMasking(); } } } ListPool.Release(list); } // Token: 0x0600036F RID: 879 RVA: 0x00014470 File Offset: 0x00012870 public static Transform FindRootSortOverrideCanvas(Transform start) { List list = ListPool.Get(); start.GetComponentsInParent(false, list); Canvas canvas = null; for (int i = 0; i < list.Count; i++) { canvas = list[i]; if (canvas.overrideSorting) { break; } } ListPool.Release(list); return (!(canvas != null)) ? null : canvas.transform; } // Token: 0x06000370 RID: 880 RVA: 0x000144E4 File Offset: 0x000128E4 public static int GetStencilDepth(Transform transform, Transform stopAfter) { int num = 0; int num2; if (transform == stopAfter) { num2 = num; } else { Transform transform2 = transform.parent; List list = ListPool.Get(); while (transform2 != null) { transform2.GetComponents(list); for (int i = 0; i < list.Count; i++) { if (list[i] != null && list[i].MaskEnabled() && list[i].graphic.IsActive()) { num++; break; } } if (transform2 == stopAfter) { break; } transform2 = transform2.parent; } ListPool.Release(list); num2 = num; } return num2; } // Token: 0x06000371 RID: 881 RVA: 0x000145B8 File Offset: 0x000129B8 public static bool IsDescendantOrSelf(Transform father, Transform child) { bool flag; if (father == null || child == null) { flag = false; } else if (father == child) { flag = true; } else { while (child.parent != null) { if (child.parent == father) { return true; } child = child.parent; } flag = false; } return flag; } // Token: 0x06000372 RID: 882 RVA: 0x00014638 File Offset: 0x00012A38 public static RectMask2D GetRectMaskForClippable(IClippable clippable) { List list = ListPool.Get(); List list2 = ListPool.Get(); RectMask2D rectMask2D = null; clippable.rectTransform.GetComponentsInParent(false, list); if (list.Count > 0) { for (int i = 0; i < list.Count; i++) { rectMask2D = list[i]; if (rectMask2D.gameObject == clippable.gameObject) { rectMask2D = null; } else { if (rectMask2D.isActiveAndEnabled) { clippable.rectTransform.GetComponentsInParent(false, list2); for (int j = list2.Count - 1; j >= 0; j--) { if (!MaskUtilities.IsDescendantOrSelf(list2[j].transform, rectMask2D.transform) && list2[j].overrideSorting) { rectMask2D = null; break; } } return rectMask2D; } rectMask2D = null; } } } ListPool.Release(list); ListPool.Release(list2); return rectMask2D; } // Token: 0x06000373 RID: 883 RVA: 0x00014744 File Offset: 0x00012B44 public static void GetRectMasksForClip(RectMask2D clipper, List masks) { masks.Clear(); List list = ListPool.Get(); List list2 = ListPool.Get(); clipper.transform.GetComponentsInParent(false, list2); if (list2.Count > 0) { clipper.transform.GetComponentsInParent(false, list); for (int i = list2.Count - 1; i >= 0; i--) { if (list2[i].IsActive()) { bool flag = true; for (int j = list.Count - 1; j >= 0; j--) { if (!MaskUtilities.IsDescendantOrSelf(list[j].transform, list2[i].transform) && list[j].overrideSorting) { flag = false; break; } } if (flag) { masks.Add(list2[i]); } } } } ListPool.Release(list2); ListPool.Release(list); } } }