/// <inheritdoc />
        public override void Paint(Graphics graphics)
        {
            // background
            DrawingTools.SolidBrush.Color = ColorSettings.ForVariableBackground(Variable.VariableType, SelectState);
            graphics.FillPath(DrawingTools.SolidBrush, roundedRectangle);

            // border
            float originalPenWidth = DrawingTools.Pen.Width;

            DrawingTools.Pen.Color = ColorSettings.ForVariable(Variable.VariableType, SelectState);
            DrawingTools.Pen.Width = 2f;
            graphics.DrawPath(DrawingTools.Pen, roundedRectangle);
            DrawingTools.Pen.Width = originalPenWidth;

            // name (value)
            DrawingTools.SolidBrush.Color = ColorSettings.VariableText;
            graphics.DrawString(Name, DrawingTools.Font, DrawingTools.SolidBrush, nameLocation);

            // paint comment text
            if (!String.IsNullOrEmpty(Variable.Comment))
            {
                DrawingTools.SolidBrush.Color = ColorSettings.CommentText;
                graphics.DrawString(Variable.Comment, DrawingTools.Font, DrawingTools.SolidBrush, commentLocation);
            }
        }
        /// <inheritdoc />
        public override void Paint(Graphics graphics)
        {
            // paint variable socket
            if (this.SelectState == Scripting.SelectState.Default)
            {
                DrawingTools.SolidBrush.Color = ColorSettings.ForVariable(VariableNodeSocket.VariableType);
            }
            else if (this.SelectState == Scripting.SelectState.Hover)
            {
                DrawingTools.SolidBrush.Color = ColorSettings.Hover;
            }

            if (Type == NodeSocketType.VariableIn)
            {
                // variable in = rectangle
                graphics.FillRectangle(DrawingTools.SolidBrush, Bounds);
            }
            else
            {
                // variable out = triangle
                PointF[] triangle = new PointF[3];
                triangle[0] = new PointF(Bounds.X, Bounds.Y);
                triangle[1] = new PointF(Bounds.X + Bounds.Width, Bounds.Y);
                triangle[2] = new PointF(Bounds.X + Bounds.Width / 2f, Bounds.Y + Bounds.Height);
                graphics.FillPolygon(DrawingTools.SolidBrush, triangle);
            }

            // paint name text
            DrawingTools.SolidBrush.Color = ColorSettings.NodeSocketText;
            graphics.DrawString(Name, DrawingTools.Font, DrawingTools.SolidBrush, textLocation);

            // paint default value text
            if (VariableNodeSocket.Type == NodeSocketType.VariableIn && VariableNodeSocket.Connections.Count == 0 && !VariableNodeSocket.NodeSocketData.CanBeEmpty)
            {
                DrawingTools.SolidBrush.Color = ColorSettings.NodeVariableSocketValueText;
                graphics.DrawString(VariableNodeSocket.Value.ToString(), DrawingTools.Font, DrawingTools.SolidBrush, valueTextRectangle, valueTextFormat);
            }
        }