public override void Draw(NVGcontext ctx) { if (Radius == 0) { return; } NanoVG.nvgBeginPath(ctx); NanoVG.nvgCircle(ctx, X, Y, Radius); NanoVG.nvgStroke(ctx); }
private void RenderConnector(Connection connection) { NanoVG.nvgSave(MainWindow.Nvg); var pickedForDeletion = _window.Selection.HoveringConnection == connection && _window.Keyboard[Key.ShiftLeft]; var bound = connection.GetBounds(); var r = bound.Radius; var twor = 2 * r; var halfr = r / 2; const int cxnBorderWidth = 2; NanoVG.nvgFillColor(MainWindow.Nvg, Color.White.ToNvgColor()); NanoVG.nvgSave(MainWindow.Nvg); if (connection != TextBoxHandler.EditingConnection) { switch (connection.Side) { case NodeSide.Input: NanoVG.nvgTranslate(MainWindow.Nvg, bound.X + twor, bound.Y - r); NvgHelper.RenderString(connection.Text); break; case NodeSide.Output: var s = connection.Text; NanoVG.nvgTranslate(MainWindow.Nvg, bound.X - twor - NvgHelper.MeasureString(s).Width, bound.Y - r); NvgHelper.RenderString(s); break; default: throw new ArgumentOutOfRangeException(); } } else { TextBoxHandler.TextBox.RenderBackground(); TextBoxHandler.TextBox.RenderForeground(); } NanoVG.nvgRestore(MainWindow.Nvg); NanoVG.nvgFillColor(MainWindow.Nvg, Color.DarkSlateGray.ToNvgColor()); NanoVG.nvgBeginPath(MainWindow.Nvg); NanoVG.nvgCircle(MainWindow.Nvg, bound.X, bound.Y, r + cxnBorderWidth); NanoVG.nvgFill(MainWindow.Nvg); NanoVG.nvgFillColor(MainWindow.Nvg, connection.Side == NodeSide.Input ? Color.DeepSkyBlue.ToNvgColor() : Color.LimeGreen.ToNvgColor()); NanoVG.nvgBeginPath(MainWindow.Nvg); NanoVG.nvgCircle(MainWindow.Nvg, bound.X, bound.Y, r); NanoVG.nvgFill(MainWindow.Nvg); NanoVG.nvgBeginPath(MainWindow.Nvg); if (_window.Selection.HoveringConnection != null && _window.Selection.DraggingConnection == connection && _window.Selection.HoveringConnection.Side != _window.Selection.DraggingConnection.Side) { NanoVG.nvgFillColor(MainWindow.Nvg, Color.SlateGray.ToNvgColor()); } else if (connection.ConnectedNode != null) { NanoVG.nvgFillColor(MainWindow.Nvg, Color.DarkSlateGray.ToNvgColor()); } NanoVG.nvgCircle(MainWindow.Nvg, bound.X, bound.Y, halfr); NanoVG.nvgFill(MainWindow.Nvg); if (pickedForDeletion) { NanoVG.nvgFillColor(MainWindow.Nvg, Color.Red.ToNvgColor()); NanoVG.nvgBeginPath(MainWindow.Nvg); NanoVG.nvgCircle(MainWindow.Nvg, bound.X, bound.Y, halfr); NanoVG.nvgFill(MainWindow.Nvg); } NanoVG.nvgRestore(MainWindow.Nvg); }