102 public void Draw(ICanvas canvas, RectF dirtyRect)
104 var d = (float)Math.Max(32,
Diameter);
105 var cx = dirtyRect.Center.X;
106 var top = dirtyRect.Top + 2f;
107 var glassFill =
IsOn ? Color.FromArgb(
"#FFD666") : Color.FromRgba(100, 116, 139, 42);
108 var glassStroke =
IsOn ? Color.FromArgb(
"#FFC400") : Color.FromArgb(
"#66758B");
109 var filament =
IsOn ? Color.FromArgb(
"#7A4B00") : Color.FromArgb(
"#64748B");
110 var baseFill = Color.FromArgb(
"#708098");
113 canvas.Antialias =
true;
117 canvas.FillColor = Color.FromRgba(255, 214, 102, 72);
118 canvas.FillEllipse(cx - d * .62f, top + d * .50f - d * .62f, d * 1.24f, d * 1.24f);
122 canvas.FillColor = glassFill;
123 canvas.StrokeColor = glassStroke;
124 canvas.StrokeSize = 4;
125 canvas.FillPath(glass);
126 canvas.DrawPath(glass);
128 var filamentPath =
new PathF();
129 filamentPath.MoveTo(cx - d * .22f, top + d * .56f);
130 filamentPath.CurveTo(cx - d * .12f, top + d * .38f, cx - d * .02f, top + d * .72f, cx + d * .10f, top + d * .53f);
131 filamentPath.CurveTo(cx + d * .16f, top + d * .44f, cx + d * .21f, top + d * .49f, cx + d * .25f, top + d * .55f);
132 canvas.StrokeColor = filament;
133 canvas.StrokeSize = 4;
134 canvas.StrokeLineCap = LineCap.Round;
135 canvas.DrawPath(filamentPath);
137 var neckTop = top + d * .92f;
138 var neck =
new PathF();
139 neck.MoveTo(cx - d * .30f, neckTop);
140 neck.LineTo(cx + d * .30f, neckTop);
141 neck.LineTo(cx + d * .20f, neckTop + d * .26f);
142 neck.LineTo(cx - d * .20f, neckTop + d * .26f);
145 canvas.FillColor = baseFill;
146 canvas.FillPath(neck);
147 FillRib(canvas, cx, neckTop + d * .10f, d * .44f);
148 FillRib(canvas, cx, neckTop + d * .22f, d * .36f);
149 FillRib(canvas, cx, neckTop + d * .34f, d * .27f);
151 canvas.RestoreState();
196 var path =
new PathF();
197 path.MoveTo(cx, top + d * .02f);
198 path.CurveTo(cx - d * .36f, top + d * .02f, cx - d * .52f, top + d * .27f, cx - d * .52f, top + d * .54f);
199 path.CurveTo(cx - d * .52f, top + d * .74f, cx - d * .35f, top + d * .87f, cx - d * .25f, top + d * .96f);
200 path.LineTo(cx + d * .25f, top + d * .96f);
201 path.CurveTo(cx + d * .35f, top + d * .87f, cx + d * .52f, top + d * .74f, cx + d * .52f, top + d * .54f);
202 path.CurveTo(cx + d * .52f, top + d * .27f, cx + d * .36f, top + d * .02f, cx, top + d * .02f);