using System; using UnityEngine.Experimental.UIElements.StyleSheets; namespace UnityEngine.Experimental.UIElements { // Token: 0x02000338 RID: 824 internal class Panel : BaseVisualElementPanel { // Token: 0x0600334D RID: 13133 RVA: 0x0004FA6C File Offset: 0x0004DC6C public Panel(int instanceID, ContextType contextType, LoadResourceFunction loadResourceDelegate = null, IDataWatchService dataWatch = null, IDispatcher dispatcher = null) { this.instanceID = instanceID; this.contextType = contextType; LoadResourceFunction loadResourceFunction = loadResourceDelegate; if (loadResourceDelegate == null) { loadResourceFunction = new LoadResourceFunction(Resources.Load); } this.loadResourceFunc = loadResourceFunction; this.dataWatch = dataWatch; this.dispatcher = dispatcher; this.stylePainter = new StylePainter(); this.m_RootContainer = new VisualContainer(); this.m_RootContainer.name = VisualElementUtils.GetUniqueName("PanelContainer"); this.visualTree.ChangePanel(this); this.m_StyleContext = new StyleContext(this.m_RootContainer); this.defaultIMRoot = new IMContainer { name = "DefaultOnGUI", pickingMode = PickingMode.Ignore }; this.defaultIMRoot.StretchToParentSize(); this.visualTree.InsertChild(0, this.defaultIMRoot); this.allowPixelCaching = true; } // Token: 0x17000BA4 RID: 2980 // (get) Token: 0x0600334E RID: 13134 RVA: 0x0004FB54 File Offset: 0x0004DD54 public override VisualContainer visualTree { get { return this.m_RootContainer; } } // Token: 0x17000BA5 RID: 2981 // (get) Token: 0x0600334F RID: 13135 RVA: 0x0004FB70 File Offset: 0x0004DD70 // (set) Token: 0x06003350 RID: 13136 RVA: 0x0004FB8C File Offset: 0x0004DD8C public VisualContainer defaultIMRoot { get; set; } // Token: 0x17000BA6 RID: 2982 // (get) Token: 0x06003351 RID: 13137 RVA: 0x0004FB98 File Offset: 0x0004DD98 // (set) Token: 0x06003352 RID: 13138 RVA: 0x0004FBB4 File Offset: 0x0004DDB4 public override IDispatcher dispatcher { get; protected set; } // Token: 0x17000BA7 RID: 2983 // (get) Token: 0x06003353 RID: 13139 RVA: 0x0004FBC0 File Offset: 0x0004DDC0 // (set) Token: 0x06003354 RID: 13140 RVA: 0x0004FBDC File Offset: 0x0004DDDC public override IDataWatchService dataWatch { get; protected set; } // Token: 0x17000BA8 RID: 2984 // (get) Token: 0x06003355 RID: 13141 RVA: 0x0004FBE8 File Offset: 0x0004DDE8 public TimerEventScheduler timerEventScheduler { get { TimerEventScheduler timerEventScheduler; if ((timerEventScheduler = this.m_Scheduler) == null) { timerEventScheduler = (this.m_Scheduler = new TimerEventScheduler()); } return timerEventScheduler; } } // Token: 0x17000BA9 RID: 2985 // (get) Token: 0x06003356 RID: 13142 RVA: 0x0004FC18 File Offset: 0x0004DE18 public override IScheduler scheduler { get { return this.timerEventScheduler; } } // Token: 0x17000BAA RID: 2986 // (get) Token: 0x06003357 RID: 13143 RVA: 0x0004FC34 File Offset: 0x0004DE34 internal StyleContext styleContext { get { return this.m_StyleContext; } } // Token: 0x17000BAB RID: 2987 // (get) Token: 0x06003358 RID: 13144 RVA: 0x0004FC50 File Offset: 0x0004DE50 // (set) Token: 0x06003359 RID: 13145 RVA: 0x0004FC6C File Offset: 0x0004DE6C public override int instanceID { get; protected set; } // Token: 0x17000BAC RID: 2988 // (get) Token: 0x0600335A RID: 13146 RVA: 0x0004FC78 File Offset: 0x0004DE78 // (set) Token: 0x0600335B RID: 13147 RVA: 0x0004FC94 File Offset: 0x0004DE94 public bool allowPixelCaching { get; set; } // Token: 0x17000BAD RID: 2989 // (get) Token: 0x0600335C RID: 13148 RVA: 0x0004FCA0 File Offset: 0x0004DEA0 // (set) Token: 0x0600335D RID: 13149 RVA: 0x0004FCBC File Offset: 0x0004DEBC public override ContextType contextType { get; protected set; } // Token: 0x17000BAE RID: 2990 // (get) Token: 0x0600335E RID: 13150 RVA: 0x0004FCC8 File Offset: 0x0004DEC8 // (set) Token: 0x0600335F RID: 13151 RVA: 0x0004FCE4 File Offset: 0x0004DEE4 public override EventInterests IMGUIEventInterests { get; set; } // Token: 0x17000BAF RID: 2991 // (get) Token: 0x06003360 RID: 13152 RVA: 0x0004FCF0 File Offset: 0x0004DEF0 // (set) Token: 0x06003361 RID: 13153 RVA: 0x0004FD0C File Offset: 0x0004DF0C public override LoadResourceFunction loadResourceFunc { get; protected set; } // Token: 0x17000BB0 RID: 2992 // (get) Token: 0x06003362 RID: 13154 RVA: 0x0004FD18 File Offset: 0x0004DF18 // (set) Token: 0x06003363 RID: 13155 RVA: 0x0004FD34 File Offset: 0x0004DF34 public override int IMGUIContainersCount { get; set; } // Token: 0x06003364 RID: 13156 RVA: 0x0004FD40 File Offset: 0x0004DF40 private VisualElement Pick(VisualElement root, Vector2 point) { VisualElement visualElement; if ((root.pseudoStates & PseudoStates.Invisible) == PseudoStates.Invisible) { visualElement = null; } else { VisualContainer visualContainer = root as VisualContainer; Vector3 vector = root.transform.inverse.MultiplyPoint3x4(point); bool flag = root.ContainsPoint(vector); if (visualContainer != null) { if (!flag && visualContainer.clipChildren) { return null; } vector -= new Vector3(visualContainer.position.position.x, visualContainer.position.position.y, 0f); for (int i = visualContainer.childrenCount - 1; i >= 0; i--) { VisualElement childAt = visualContainer.GetChildAt(i); VisualElement visualElement2 = this.Pick(childAt, vector); if (visualElement2 != null) { return visualElement2; } } } PickingMode pickingMode = root.pickingMode; if (pickingMode != PickingMode.Position) { if (pickingMode != PickingMode.Ignore) { } } else if (flag) { return root; } visualElement = null; } return visualElement; } // Token: 0x06003365 RID: 13157 RVA: 0x0004FE88 File Offset: 0x0004E088 public override VisualElement Pick(Vector2 point) { this.ValidateLayout(); return this.Pick(this.visualTree, point); } // Token: 0x06003366 RID: 13158 RVA: 0x0004FEB0 File Offset: 0x0004E0B0 private void ValidateStyling() { if (!Mathf.Approximately(this.m_StyleContext.currentPixelsPerPoint, GUIUtility.pixelsPerPoint)) { this.m_RootContainer.Dirty(ChangeType.Styles); this.m_StyleContext.currentPixelsPerPoint = GUIUtility.pixelsPerPoint; } if (this.m_RootContainer.IsDirty(ChangeType.Styles | ChangeType.StylesPath)) { this.m_StyleContext.ApplyStyles(); } } // Token: 0x06003367 RID: 13159 RVA: 0x0004FF18 File Offset: 0x0004E118 public override void ValidateLayout() { this.ValidateStyling(); int num = 0; while (this.visualTree.cssNode.IsDirty) { this.visualTree.cssNode.CalculateLayout(); this.ValidateSubTree(this.visualTree); if (num++ >= 5) { Debug.LogError("ValidateLayout is struggling to process current layout (consider simplifying to avoid recursive layout): " + this.visualTree); break; } } } // Token: 0x06003368 RID: 13160 RVA: 0x0004FF90 File Offset: 0x0004E190 private bool ValidateSubTree(VisualElement root) { if (root.renderData.lastLayout != new Rect(root.cssNode.LayoutX, root.cssNode.LayoutY, root.cssNode.LayoutWidth, root.cssNode.LayoutHeight)) { root.Dirty(ChangeType.Transform); root.renderData.lastLayout = new Rect(root.cssNode.LayoutX, root.cssNode.LayoutY, root.cssNode.LayoutWidth, root.cssNode.LayoutHeight); } bool flag = root.cssNode.HasNewLayout; if (flag) { VisualContainer visualContainer = root as VisualContainer; if (visualContainer != null) { foreach (VisualElement visualElement in visualContainer) { flag |= this.ValidateSubTree(visualElement); } } } root.OnPostLayout(flag); root.ClearDirty(ChangeType.Layout); root.cssNode.MarkLayoutSeen(); return flag; } // Token: 0x06003369 RID: 13161 RVA: 0x000500C0 File Offset: 0x0004E2C0 private Rect ComputeAAAlignedBound(Rect position, Matrix4x4 mat) { Rect rect = position; Vector3 vector = mat.MultiplyPoint3x4(new Vector3(rect.x, rect.y, 0f)); Vector3 vector2 = mat.MultiplyPoint3x4(new Vector3(rect.x + rect.width, rect.y, 0f)); Vector3 vector3 = mat.MultiplyPoint3x4(new Vector3(rect.x, rect.y + rect.height, 0f)); Vector3 vector4 = mat.MultiplyPoint3x4(new Vector3(rect.x + rect.width, rect.y + rect.height, 0f)); return Rect.MinMaxRect(Mathf.Min(vector.x, Mathf.Min(vector2.x, Mathf.Min(vector3.x, vector4.x))), Mathf.Min(vector.y, Mathf.Min(vector2.y, Mathf.Min(vector3.y, vector4.y))), Mathf.Max(vector.x, Mathf.Max(vector2.x, Mathf.Max(vector3.x, vector4.x))), Mathf.Max(vector.y, Mathf.Max(vector2.y, Mathf.Max(vector3.y, vector4.y)))); } // Token: 0x0600336A RID: 13162 RVA: 0x0005022C File Offset: 0x0004E42C public void PaintSubTree(Event e, VisualElement root, Matrix4x4 offset, Rect currentGlobalClip) { if ((root.pseudoStates & PseudoStates.Invisible) != PseudoStates.Invisible) { VisualContainer visualContainer = root as VisualContainer; if (visualContainer != null) { if (visualContainer.clipChildren) { Rect rect = this.ComputeAAAlignedBound(root.position, offset * root.globalTransform); if (!rect.Overlaps(currentGlobalClip)) { return; } float num = Mathf.Max(rect.x, currentGlobalClip.x); float num2 = Mathf.Min(rect.x + rect.width, currentGlobalClip.x + currentGlobalClip.width); float num3 = Mathf.Max(rect.y, currentGlobalClip.y); float num4 = Mathf.Min(rect.y + rect.height, currentGlobalClip.y + currentGlobalClip.height); currentGlobalClip = new Rect(num, num3, num2 - num, num4 - num3); } } else if (!this.ComputeAAAlignedBound(root.globalBound, offset).Overlaps(currentGlobalClip)) { return; } if (root.usePixelCaching && this.allowPixelCaching && root.globalBound.size.magnitude > Mathf.Epsilon) { IStylePainter stylePainter = this.stylePainter; Rect globalBound = root.globalBound; int num5 = (int)globalBound.width; int num6 = (int)globalBound.height; int num7 = (int)(globalBound.width * GUIUtility.pixelsPerPoint); int num8 = (int)(globalBound.height * GUIUtility.pixelsPerPoint); RenderTexture renderTexture = root.renderData.pixelCache; if (renderTexture != null && renderTexture.width != num7 && renderTexture.height != num8) { Object.DestroyImmediate(renderTexture); root.renderData.pixelCache = null; } float opacity = this.stylePainter.opacity; if (root.IsDirty(ChangeType.Repaint) || root.renderData.pixelCache == null) { if (renderTexture == null) { renderTexture = (root.renderData.pixelCache = new RenderTexture(num7, num8, 32, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear)); } RenderTexture active = RenderTexture.active; RenderTexture.active = renderTexture; GL.Clear(true, true, new Color(0f, 0f, 0f, 0f)); offset = Matrix4x4.Translate(new Vector3(-globalBound.x, -globalBound.y, 0f)); Rect rect2 = new Rect(0f, 0f, (float)num5, (float)num6); GUIClip.SetTransform(offset * root.globalTransform, rect2); stylePainter.currentWorldClip = currentGlobalClip; root.DoRepaint(stylePainter); root.ClearDirty(ChangeType.Repaint); if (visualContainer != null) { int childrenCount = visualContainer.childrenCount; for (int i = 0; i < childrenCount; i++) { VisualElement childAt = visualContainer.GetChildAt(i); this.PaintSubTree(e, childAt, offset, rect2); if (childrenCount != visualContainer.childrenCount) { throw new NotImplementedException("Visual tree is read-only during repaint"); } } } RenderTexture.active = active; } stylePainter.currentWorldClip = currentGlobalClip; GUIClip.SetTransform(root.globalTransform, currentGlobalClip); stylePainter.DrawTexture(root.position, root.renderData.pixelCache, Color.white, ScaleMode.ScaleAndCrop, 0f, 0f, 0, 0, 0, 0); } else { GUIClip.SetTransform(offset * root.globalTransform, currentGlobalClip); this.stylePainter.currentWorldClip = currentGlobalClip; this.stylePainter.mousePosition = root.globalTransform.inverse.MultiplyPoint3x4(e.mousePosition); this.stylePainter.opacity = root.styles.opacity.GetSpecifiedValueOrDefault(1f); root.DoRepaint(this.stylePainter); this.stylePainter.opacity = 1f; root.ClearDirty(ChangeType.Repaint); if (visualContainer != null) { int childrenCount2 = visualContainer.childrenCount; for (int j = 0; j < childrenCount2; j++) { VisualElement childAt2 = visualContainer.GetChildAt(j); this.PaintSubTree(e, childAt2, offset, currentGlobalClip); if (childrenCount2 != visualContainer.childrenCount) { throw new NotImplementedException("Visual tree is read-only during repaint"); } } } } } } // Token: 0x0600336B RID: 13163 RVA: 0x00050698 File Offset: 0x0004E898 public override void Repaint(Event e) { this.ValidateLayout(); this.stylePainter.repaintEvent = e; this.PaintSubTree(e, this.visualTree, Matrix4x4.identity, this.visualTree.position); } // Token: 0x04000A86 RID: 2694 private StyleContext m_StyleContext; // Token: 0x04000A87 RID: 2695 private VisualContainer m_RootContainer; // Token: 0x04000A8B RID: 2699 private TimerEventScheduler m_Scheduler; // Token: 0x04000A92 RID: 2706 private const int kMaxValidateLayoutCount = 5; } }