현재 켜짐, 맥동 및 모서리 상태에 맞게 LED 광택과 링을 그립니다.
276 {
277 var g = e.Graphics;
278 g.SmoothingMode = SmoothingMode.AntiAlias;
279
280 float d = _diameter;
281 float x, y;
282
283 switch (_corner)
284 {
285 case LedCorner.TopLeft: x = 0; y = 0;
break;
286 case LedCorner.TopRight: x = Width - d; y = 0;
break;
287 case LedCorner.BottomLeft: x = 0; y = Height - d;
break;
288 case LedCorner.BottomRight: x = Width - d; y = Height - d;
break;
289 default: x = (Width - d)/2; y = (Height - d)/2; break;
290 }
291
292 var ledRect = new RectangleF(x, y, d, d);
293
294 if (_isOn)
295 {
296 float alpha = _isPulse ? _pulseAlpha : 1f;
297
298
299 float glowD = d + 4;
300 var glowRect = new RectangleF(x - 2, y - 2, glowD, glowD);
301 using var glowBrush = new PathGradientBrush(DreamineDrawHelper.RoundedRect(glowRect, glowD / 2))
302 {
303 CenterColor = Color.FromArgb((int)(80 * alpha), DreamineTheme.LedOnOuter),
304 SurroundColors = new[] { Color.FromArgb(0, DreamineTheme.LedOnOuter) }
305 };
306 g.FillEllipse(glowBrush, glowRect);
307
308
309 using var outerBrush = new PathGradientBrush(DreamineDrawHelper.RoundedRect(ledRect, d / 2))
310 {
311 CenterColor = Color.FromArgb((int)(220 * alpha), DreamineTheme.LedOnInner),
312 SurroundColors = new[] { Color.FromArgb((int)(160 * alpha), DreamineTheme.LedOnOuter) }
313 };
314 g.FillEllipse(outerBrush, ledRect);
315
316
317 float innerD = d * 0.45f;
318 float innerX = x + (d - innerD) / 2, innerY = y + (d - innerD) / 2;
319 using var innerBrush = new SolidBrush(Color.FromArgb((int)(120 * alpha), Color.White));
320 g.FillEllipse(innerBrush, innerX, innerY, innerD, innerD);
321 }
322 else
323 {
324
325 using var ringPen = new Pen(Color.FromArgb(80, DreamineTheme.LedOnOuter), 1.5f);
326 g.DrawEllipse(ringPen, ledRect.X, ledRect.Y, ledRect.Width - 1, ledRect.Height - 1);
327 using var centerBrush = new SolidBrush(Color.FromArgb(30, DreamineTheme.CardBackground));
328 g.FillEllipse(centerBrush, ledRect);
329 }
330 }