| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | using System;using System.Drawing;using System.Drawing.Drawing2D;using System.Windows.Forms;namespace Optimizer{    public sealed class MoonToggle : CheckBox    {        private readonly Timer AnimationTimer = new Timer();        private int CirclePos = 3;        private int CircleColorR = 255;        private int CircleColorG = 255;        private int CircleColorB = 255;        private int Alpha = 0;        public MoonToggle()        {            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer, true);            DoubleBuffered = true;            Height = 22; Width = 46;            AnimationTimer.Interval = 1;            AnimationTimer.Tick += new EventHandler(AnimationTick);        }        protected override void OnHandleCreated(EventArgs e)        {            base.OnHandleCreated(e);            AnimationTimer.Start();        }        protected override void OnResize(EventArgs e)        {            Height = 22; Width = 44;            Invalidate();        }        protected override void OnPaint(PaintEventArgs pevent)        {            pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;            pevent.Graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;            pevent.Graphics.InterpolationMode = InterpolationMode.High;            pevent.Graphics.Clear(Parent.BackColor);            GraphicsPath backRect = new GraphicsPath();            backRect.AddArc(new RectangleF(0.5f, 0.5f, Height - 1, Height - 1), 90, 180);            backRect.AddArc(new RectangleF(Width - Height + 0.5f, 0.5f, Height - 1, Height - 1), 270, 180);            backRect.CloseAllFigures();            pevent.Graphics.FillPath(new SolidBrush(Options.BackAccentColor), backRect);            pevent.Graphics.FillPath(new SolidBrush(Color.FromArgb(Alpha, Options.ForegroundColor.R, Options.ForegroundColor.G, Options.ForegroundColor.B)), backRect);            pevent.Graphics.FillEllipse(new SolidBrush(Color.FromArgb(CircleColorR, CircleColorG, CircleColorB)), new RectangleF(CirclePos, 3, 16, 16));        }        private void AnimationTick(object sender, EventArgs e)        {            if (Checked)            {                if (Options.TextColor == Color.Black)                {                    if (CircleColorR != 0 && CircleColorG != 0 && CircleColorB != 0)                    {                        CircleColorR -= 15;                        CircleColorG -= 15;                        CircleColorB -= 15;                        Invalidate();                    }                }                else                {                    if (CircleColorR != 255 && CircleColorG != 255 && CircleColorB != 255)                    {                        CircleColorR += 15;                        CircleColorG += 15;                        CircleColorB += 15;                        Invalidate();                    }                }                if (CirclePos < 26)                {                    CirclePos += 2;                    Invalidate();                }                if (Alpha < 255)                {                    Alpha += 15;                    Invalidate();                }            }            else            {                if (CircleColorR != 255 && CircleColorG != 255 && CircleColorB != 255)                {                    CircleColorR += 15;                    CircleColorG += 15;                    CircleColorB += 15;                    Invalidate();                }                if (CirclePos > 3)                {                    CirclePos -= 2;                    Invalidate();                }                if (Alpha > 0)                {                    Alpha -= 15;                    Invalidate();                }            }        }    }}
 |