private VisualElement PickAll(VisualElement root, Vector2 point, List <VisualElement> picked = null) { VisualElement result; if ((root.pseudoStates & PseudoStates.Invisible) == PseudoStates.Invisible) { result = null; } else { Vector3 v = root.WorldToLocal(point); bool flag = root.ContainsPoint(v); if (!flag && root.clippingOptions != VisualElement.ClippingOptions.NoClipping) { result = null; } else { if (picked != null && root.enabledInHierarchy && root.pickingMode == PickingMode.Position) { picked.Add(root); } VisualElement visualElement = null; for (int i = root.shadow.childCount - 1; i >= 0; i--) { VisualElement root2 = root.shadow[i]; VisualElement visualElement2 = this.PickAll(root2, point, picked); if (visualElement == null && visualElement2 != null) { visualElement = visualElement2; } } if (visualElement != null) { result = visualElement; } else { PickingMode pickingMode = root.pickingMode; if (pickingMode != PickingMode.Position) { if (pickingMode != PickingMode.Ignore) { } } else if (flag && root.enabledInHierarchy) { result = root; return(result); } result = null; } } } return(result); }
private VisualElement PickAll(VisualElement root, Vector2 point, List <VisualElement> picked = null) { VisualElement result; if ((root.pseudoStates & PseudoStates.Invisible) == PseudoStates.Invisible) { result = null; } else { Vector3 vector = root.transform.matrix.inverse.MultiplyPoint3x4(point); bool flag = root.ContainsPoint(vector); if (!flag && root.clippingOptions != VisualElement.ClippingOptions.NoClipping) { result = null; } else { if (picked != null && root.enabledInHierarchy && root.pickingMode == PickingMode.Position) { picked.Add(root); } vector -= new Vector3(root.layout.position.x, root.layout.position.y, 0f); VisualElement visualElement = null; for (int i = root.shadow.childCount - 1; i >= 0; i--) { VisualElement root2 = root.shadow[i]; VisualElement visualElement2 = this.PickAll(root2, vector, picked); if (visualElement == null && visualElement2 != null) { visualElement = visualElement2; } } if (visualElement != null) { result = visualElement; } else { PickingMode pickingMode = root.pickingMode; if (pickingMode != PickingMode.Position) { if (pickingMode != PickingMode.Ignore) { } } else if (flag && root.enabledInHierarchy) { return(root); } result = null; } } } return(result); }
VisualElement PickAll(VisualElement root, Vector2 point, List <VisualElement> picked = null) { // do not pick invisible if ((root.pseudoStates & PseudoStates.Invisible) == PseudoStates.Invisible) { return(null); } Vector3 localPoint = root.WorldToLocal(point); bool containsPoint = root.ContainsPoint(localPoint); // we only skip children in the case we visually clip them if (!containsPoint && root.clippingOptions != VisualElement.ClippingOptions.NoClipping) { return(null); } if (picked != null && root.enabledInHierarchy && root.pickingMode == PickingMode.Position) { picked.Add(root); } VisualElement returnedChild = null; // Depth first in reverse order, do children for (int i = root.shadow.childCount - 1; i >= 0; i--) { var child = root.shadow[i]; var result = PickAll(child, point, picked); if (returnedChild == null && result != null) { returnedChild = result; } } if (returnedChild != null) { return(returnedChild); } switch (root.pickingMode) { case PickingMode.Position: { if (containsPoint && root.enabledInHierarchy) { return(root); } } break; case PickingMode.Ignore: break; } return(null); }
private VisualElement Pick(VisualElement root, Vector2 point) { VisualElement result; if ((root.pseudoStates & PseudoStates.Invisible) == PseudoStates.Invisible) { result = 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) { result = null; return(result); } 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 visualElement = this.Pick(childAt, vector); if (visualElement != null) { result = visualElement; return(result); } } } PickingMode pickingMode = root.pickingMode; if (pickingMode != PickingMode.Position) { if (pickingMode != PickingMode.Ignore) { } } else if (flag) { result = root; return(result); } result = null; } return(result); }
private static VisualElement PerformPick(VisualElement root, Vector2 point, List <VisualElement> picked = null) { // do not pick invisible if (root.visible == false) { return(null); } if (root.pickingMode == PickingMode.Ignore && root.shadow.childCount == 0) { return(null); } Vector3 localPoint = root.WorldToLocal(point); bool containsPoint = root.ContainsPoint(localPoint); // we only skip children in the case we visually clip them if (!containsPoint && root.ShouldClip()) { return(null); } VisualElement returnedChild = null; // Depth first in reverse order, do children for (int i = root.shadow.childCount - 1; i >= 0; i--) { var child = root.shadow[i]; var result = PerformPick(child, point, picked); if (returnedChild == null && result != null) { returnedChild = result; } } if (picked != null && root.enabledInHierarchy && root.pickingMode == PickingMode.Position && containsPoint) { picked.Add(root); } if (returnedChild != null) { return(returnedChild); } switch (root.pickingMode) { case PickingMode.Position: { if (containsPoint && root.enabledInHierarchy) { return(root); } } break; case PickingMode.Ignore: break; } return(null); }