public Connection PickConnectionWithText(float x, float y) { var pickedNode = Graph.PickNode(x, y); if (pickedNode == null) { return(null); } foreach (var output in pickedNode.Outputs) { var s = NvgHelper.MeasureString(output.Text); var bound = output.GetBounds(); var r = bound.Radius; var twor = 2 * r; var outputRect = new Rectangle(bound.X - twor - s.Width, bound.Y - r, s.Width, s.Height); if (!outputRect.Pick(x, y)) { continue; } return(output); } return(null); }
private bool ScreenContains(Node node) { var nodeRect = node.GetBounds(); var nodeRectOthers = node.Outputs.Select(connection => connection?.ConnectedNode?.ParentNode?.GetBounds()) .Where(rectangle => rectangle != null); var screenTopLeft = _window.ScreenToCanvasSpace(Vector2.Zero); var screenBotRight = _window.ScreenToCanvasSpace(new Vector2(_window.Width, _window.Height)); var screen = new Rectangle(screenTopLeft.X, screenTopLeft.Y, screenBotRight.X - screenTopLeft.X, screenBotRight.Y - screenTopLeft.Y); return(nodeRect.Intersects(screen) || nodeRectOthers.Any(node1 => node1.Intersects(screen))); }