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); }
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 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); }
public static Rect ChangeCoordinatesTo(this VisualElement src, VisualElement dest, Rect rect) { return(dest.WorldToLocal(src.LocalToWorld(rect))); }
public static Vector2 ChangeCoordinatesTo(this VisualElement src, VisualElement dest, Vector2 point) { return(dest.WorldToLocal(src.LocalToWorld(point))); }