99 protected override void OnPaint(PaintEventArgs e)
104 g.SmoothingMode = SmoothingMode.AntiAlias;
106 var d = Math.Min(
_diameter, Math.Min(Width * .85f, Height * .62f));
110 var glassFill =
_isOn ? Color.FromArgb(255, 214, 102) : Color.FromArgb(42, 100, 116, 139);
111 var glassStroke =
_isOn ? Color.FromArgb(255, 196, 0) : Color.FromArgb(102, 117, 139);
112 var filament =
_isOn ? Color.FromArgb(122, 75, 0) : Color.FromArgb(100, 116, 139);
113 var baseFill = Color.FromArgb(112, 128, 152);
118 using var glow =
new SolidBrush(Color.FromArgb(70, 255, 214, 102));
119 g.FillEllipse(glow, cx - d * .62f, top + d * .50f - d * .62f, d * 1.24f, d * 1.24f);
122 using var fill =
new SolidBrush(glassFill);
123 using var stroke =
new Pen(glassStroke, 4);
124 g.FillPath(fill, glassPath);
125 g.DrawPath(stroke, glassPath);
127 using var filamentPen =
new Pen(filament, 4)
129 StartCap = LineCap.Round,
130 EndCap = LineCap.Round
132 g.DrawBezier(filamentPen, cx - d * .22f, top + d * .56f, cx - d * .12f, top + d * .38f, cx - d * .02f, top + d * .72f, cx + d * .10f, top + d * .53f);
133 g.DrawBezier(filamentPen, cx + d * .10f, top + d * .53f, cx + d * .16f, top + d * .44f, cx + d * .21f, top + d * .49f, cx + d * .25f, top + d * .55f);
135 var neckTop = top + d * .92f;
136 using var baseBrush =
new SolidBrush(baseFill);
137 g.FillPolygon(baseBrush,
new[]
139 new PointF(cx - d * .30f, neckTop),
140 new PointF(cx + d * .30f, neckTop),
141 new PointF(cx + d * .20f, neckTop + d * .26f),
142 new PointF(cx - d * .20f, neckTop + d * .26f)
144 FillRib(g, baseBrush, cx, neckTop + d * .10f, d * .44f);
145 FillRib(g, baseBrush, cx, neckTop + d * .22f, d * .36f);
146 FillRib(g, baseBrush, cx, neckTop + d * .34f, d * .27f);
191 var path =
new GraphicsPath();
193 path.AddBezier(cx, top + d * .02f, cx - d * .36f, top + d * .02f, cx - d * .52f, top + d * .27f, cx - d * .52f, top + d * .54f);
194 path.AddBezier(cx - d * .52f, top + d * .54f, cx - d * .52f, top + d * .74f, cx - d * .35f, top + d * .87f, cx - d * .25f, top + d * .96f);
195 path.AddLine(cx - d * .25f, top + d * .96f, cx + d * .25f, top + d * .96f);
196 path.AddBezier(cx + d * .25f, top + d * .96f, cx + d * .35f, top + d * .87f, cx + d * .52f, top + d * .74f, cx + d * .52f, top + d * .54f);
197 path.AddBezier(cx + d * .52f, top + d * .54f, cx + d * .52f, top + d * .27f, cx + d * .36f, top + d * .02f, cx, top + d * .02f);