modernaesthetics icon

Anima theme- C#

modernaesthetics | PRO | 09/14/19 07:48:19 AM UTC | 0 ⭐ | 827 👁️ | Never ⏰ | []
C# |

42.97 KB

|

None

|

0 👍

/

0 👎

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualBasic;
using System.Threading;
using System.Drawing;
using System.Windows.Forms;
/*
 * Anima theme by Naywyn - HF
 * Converted to C# by UniveX
 * */
 
internal static class Helpers
{
    public static SizeF Size;
 
    public static Point MiddlePoint(Graphics G, string TargetText, Font TargetFont, Rectangle Rect)
    {
        Size = G.MeasureString(TargetText, TargetFont);
        return new Point((int)Rect.Width / 2 - (int)Size.Width / 2, (int)Rect.Height / 2 - (int)Size.Height / 2);
    }
}
 
public class AnimaExperimentalListView : Control
{
    public string[] Columns { get; set; }
 
    public ListViewItem[] Items { get; set; }
 
    public int ColumnWidth { get; set; } = 120;
 
    public int SelectedIndex { get; set; } = -1;
 
    public List<int> SelectedIndexes { get; set; } = new List<int>();
 
    public bool Multiselect { get; set; }
 
    public int Highlight { get; set; } = -1;
 
    public bool HandleItemsForeColor { get; set; }
 
    public bool Grid { get; set; }
 
    public int ItemSize { get; set; } = 16;
 
    public int SelectedCount
    {
        get
        {
            return SelectedIndexes.Count;
        }
    }
 
    public ListViewItem FocusedItem
    {
        get
        {
            if (SelectedIndexes == null)
                return new ListViewItem();
 
            return Items[SelectedIndexes[0]];
        }
    }
 
    public void Add(ListViewItem Item)
    {
        List<ListViewItem> ItemsList = Items.ToList();
        ItemsList.Add(Item);
        Items = ItemsList.ToArray();
        Invalidate();
    }
 
    private int BorderIndex = -1;
 
    public event SelectedIndexChangedEventHandler SelectedIndexChanged;
 
    public delegate void SelectedIndexChangedEventHandler(object Sender, int Index);
 
    public AnimaExperimentalListView()
    {
        DoubleBuffered = true;
        ForeColor = Color.FromArgb(200, 200, 200);
        Font = new Font("Segoe UI", 9);
        SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
    }
 
    private SolidBrush ReturnForeFromItem(int I, ListViewItem Item)
    {
        if (SelectedIndexes.Contains(I))
            return new SolidBrush(Color.FromArgb(10, 10, 10));
        if (HandleItemsForeColor)
            return new SolidBrush(Item.ForeColor);
        else
            return new SolidBrush(ForeColor);
    }
 
    private SolidBrush ReturnForeFromSubItem(int I, ListViewItem.ListViewSubItem Item)
    {
        if (SelectedIndexes.Contains(I))
            return new SolidBrush(Color.FromArgb(10, 10, 10));
        if (HandleItemsForeColor)
            return new SolidBrush(Item.ForeColor);
        else
            return new SolidBrush(ForeColor);
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.Clear(Color.FromArgb(50, 50, 53));
 
        using (SolidBrush Background = new SolidBrush(Color.FromArgb(55, 55, 58)))
        {
            e.Graphics.FillRectangle(Background, new Rectangle(1, 1, Width - 2, 26));
        }
 
        using (Pen Border = new Pen(Color.FromArgb(42, 42, 45)))
        using (Pen Shadow = new Pen(Color.FromArgb(65, 65, 68))
)
        {
            e.Graphics.DrawRectangle(Border, new Rectangle(0, 0, Width - 1, Height - 1));
            e.Graphics.DrawRectangle(Border, new Rectangle(0, 0, Width - 1, 26));
            e.Graphics.DrawLine(Shadow, 1, 1, Width - 2, 1);
        }
 
        if (Columns != null)
        {
            for (var I = 0; I <= Columns.Count() - 1; I++)
            {
                if (!(I == 0))
                {
                    using (SolidBrush Separator = new SolidBrush(Color.FromArgb(42, 42, 45)))
                    using (SolidBrush Shadow = new SolidBrush(Color.FromArgb(65, 65, 68))
)
                    {
                        e.Graphics.FillRectangle(Separator, new Rectangle(ColumnWidth * I, 1, 1, 26));
                        e.Graphics.FillRectangle(Shadow, new Rectangle(ColumnWidth * I - 1, 1, 1, 25));
 
                        if (Grid && Items != null)
                        {
                            e.Graphics.FillRectangle(Separator, new Rectangle(ColumnWidth * I, 1, 1, 26 + (Items.Count() * ItemSize)));
                            e.Graphics.FillRectangle(Shadow, new Rectangle(ColumnWidth * I - 1, 1, 1, 25 + (Items.Count() * ItemSize)));
                        }
                    }
                }
 
                using (SolidBrush Fore = new SolidBrush(ForeColor))
                {
                    e.Graphics.DrawString(Columns[I], Font, Fore, new Point((ColumnWidth * I) + 6, 4));
                }
            }
        }
 
        if (Items != null)
        {
            if (!(Highlight == -1))
            {
                using (SolidBrush Background = new SolidBrush(Color.FromArgb(66, 66, 69)))
                using (Pen Line = new Pen(Color.FromArgb(45, 45, 48))
)
                {
                    e.Graphics.FillRectangle(Background, new Rectangle(1, 26 + Highlight * ItemSize, Width - 2, ItemSize));
                    e.Graphics.DrawRectangle(Line, new Rectangle(1, 26 + Highlight * ItemSize, Width - 2, ItemSize));
                }
            }
 
            using (SolidBrush Selection = new SolidBrush(Color.FromArgb(41, 130, 232)))
            using (Pen Line = new Pen(Color.FromArgb(40, 40, 40))
)
            {
                if (Multiselect && !(SelectedIndexes.Count == 0))
                {
                    foreach (int Selected in SelectedIndexes)
                    {
                        e.Graphics.FillRectangle(Selection, new Rectangle(1, 26 + Selected * ItemSize, Width - 2, ItemSize));
 
                        if (Selected == 0 && SelectedIndexes.Count == 1)
                            e.Graphics.DrawLine(Line, 1, 26 + ItemSize, Width - 2, 26 + ItemSize);
                        else if (SelectedIndexes.Count == 1)
                            e.Graphics.DrawLine(Line, 1, 26 + ItemSize + Selected * ItemSize, Width - 2, 26 + ItemSize + Selected * ItemSize);
                    }
                }
                else if (!(SelectedIndexes.Count == 0))
                    e.Graphics.FillRectangle(Selection, new Rectangle(1, 26 + SelectedIndex * ItemSize, Width - 2, ItemSize));
            }
 
            if (SelectedIndexes.Count > 0)
                BorderIndex = SelectedIndexes.Max();
 
            for (var I = 0; I <= Items.Count() - 1; I++)
            {
                e.Graphics.DrawString(Items[I].Text, Font, ReturnForeFromItem(I, Items[I]), new Point(6, 26 + I * ItemSize + 2));
 
                if (Items[I].SubItems != null)
                {
                    for (var X = 0; X <= Items[I].SubItems.Count - 1; X++)
                    {
                        if (!(Items[I].SubItems[X].Text == Items[I].Text))
                            e.Graphics.DrawString(Items[I].SubItems[X].Text, Font, ReturnForeFromSubItem(I, Items[I].SubItems[X]), new Rectangle((ColumnWidth * X) + 6, 26 + I * ItemSize + 2, ColumnWidth - 8, 16));
                    }
                }
            }
 
            if (SelectedIndexes.Contains(BorderIndex))
            {
                using (Pen Line = new Pen(Color.FromArgb(40, 40, 40)))
                {
                    e.Graphics.DrawLine(Line, 1, 26 + ItemSize + BorderIndex * ItemSize, Width - 2, 26 + ItemSize + BorderIndex * ItemSize);
                }
            }
        }
 
        base.OnPaint(e);
    }
    public static bool IsControlDown()
    {
        return (Control.ModifierKeys & Keys.Control) != 0;
    }
    protected override void OnMouseUp(MouseEventArgs e)
    {
        int Selection = GetSelectedFromLocation(e.Location);
 
        if (Selection == -1 || !(e.Button == MouseButtons.Left))
            return;
 
        if (Multiselect && IsControlDown())
        {
            if (!SelectedIndexes.Contains(Selection))
                SelectedIndexes.Add(Selection);
            else
                SelectedIndexes.Remove(Selection);
        }
        else if (Multiselect && !IsControlDown())
            SelectedIndexes = new List<int>()
            {
                Selection
            };
        else
        {
            SelectedIndexes = new List<int>()
            {
                Selection
            };
            SelectedIndex = Selection;
        }
 
        if (Selection == -1)
            SelectedIndexes = new List<int>();
 
        Invalidate();
 
        SelectedIndexChanged?.Invoke(this, Selection);
        base.OnMouseUp(e);
    }
 
    private int GetSelectedFromLocation(Point P)
    {
        if (Items != null)
        {
            for (var I = 0; I <= Items.Count() - 1; I++)
            {
                if (new Rectangle(1, 26 + I * ItemSize, Width - 2, ItemSize).Contains(P))
                    return I;
            }
        }
 
        return -1;
    }
}
 
public class AnimaTextBox : Control
{
    private Graphics G;
    private TextBox _T;
 
    private TextBox T
    {
        [MethodImpl(MethodImplOptions.Synchronized)]
        get
        {
            return _T;
        }
 
        [MethodImpl(MethodImplOptions.Synchronized)]
        set
        {
            if (_T != null)
            {
                _T.Enter -= _T_Enter;
                _T.KeyPress -= _T_KeyPress;
                _T.Leave -= _T_Leave;
                _T.TextChanged -= _T_TextChanged;
            }
 
            _T = value;
            if (_T != null)
            {
                _T.Enter += _T_Enter;
                _T.KeyPress += _T_KeyPress;
                _T.Leave += _T_Leave;
                _T.TextChanged += _T_TextChanged;
            }
        }
    }
 
    private void _T_TextChanged(object sender, EventArgs e)
    {
        OnTextChanged(EventArgs.Empty);
    }
 
    private void _T_Leave(object sender, EventArgs e)
    {
        AnimatingT2 = new Thread(UndoAnimation) { IsBackground = true };
        AnimatingT2.Start();
    }
 
    private void _T_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (Numeric)
        {
            if ((int)(e.KeyChar) != 8)
            {
                if ((int)(e.KeyChar) < 48 | (int)(e.KeyChar) > 57)
                    e.Handled = true;
            }
        }
    }
 
    private void _T_Enter(object sender, EventArgs e)
    {
        if (!Block)
        {
            AnimatingT = new Thread(DoAnimation) { IsBackground = true };
            AnimatingT.Start();
        }
    }
 
    private Thread AnimatingT;
    private Thread AnimatingT2;
 
    private int[] RGB = new[] { 45, 45, 48 };
    private int RGB1 = 45;
    private bool Block;
 
    public bool Dark { get; set; }
 
    public bool Numeric { get; set; }
 
    public new string Text
    {
        get
        {
            return T.Text;
        }
        set
        {
            base.Text = value;
            T.Text = value;
            Invalidate();
        }
    }
 
    public int MaxLength
    {
        get
        {
            return T.MaxLength;
        }
        set
        {
            T.MaxLength = value;
            Invalidate();
        }
    }
 
    public bool UseSystemPasswordChar
    {
        get
        {
            return T.UseSystemPasswordChar;
        }
        set
        {
            T.UseSystemPasswordChar = value;
            Invalidate();
        }
    }
 
    public bool MultiLine
    {
        get
        {
            return T.Multiline;
        }
        set
        {
            T.Multiline = value;
            Helpers.Size = new Size(T.Width + 2, T.Height + 2);
            Invalidate();
        }
    }
 
    public bool ReadOnly
    {
        get
        {
            return T.ReadOnly;
        }
        set
        {
            T.ReadOnly = value;
            Invalidate();
        }
    }
 
    public AnimaTextBox()
    {
        DoubleBuffered = true;
 
        T = new TextBox() { BorderStyle = BorderStyle.None, ForeColor = Color.FromArgb(200, 200, 200), BackColor = Color.FromArgb(55, 55, 58), Location = new Point(6, 5), Multiline = false };
 
        Controls.Add(T);
    }
 
    protected override void CreateHandle()
    {
        if (Dark)
        {
            RGB = new[] { 42, 42, 45 };
            RGB1 = 45;
            T.BackColor = Color.FromArgb(45, 45, 48);
        }
        else
        {
            RGB = new[] { 70, 70, 70 };
            RGB1 = 70;
            T.BackColor = Color.FromArgb(55, 55, 58);
        }
        base.CreateHandle();
    }
 
    protected override void OnEnter(EventArgs e)
    {
        T.Select();
        base.OnEnter(e);
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        G = e.Graphics;
 
        if (Enabled)
        {
            if (Dark)
            {
                G.Clear(Color.FromArgb(45, 45, 48));
 
                using (Pen Border = new Pen(Color.FromArgb(RGB[0], RGB[1], RGB[2])))
                {
                    G.DrawRectangle(Border, new Rectangle(0, 0, Width - 1, Height - 1));
                }
            }
            else
            {
                G.Clear(Color.FromArgb(55, 55, 58));
 
                using (Pen Shadow = new Pen(Color.FromArgb(42, 42, 45)))
                using (Pen Border = new Pen(Color.FromArgb(RGB[0], RGB[1], RGB[2]))
)
                {
                    G.DrawRectangle(Border, new Rectangle(1, 1, Width - 3, Height - 3));
                    G.DrawRectangle(Shadow, new Rectangle(0, 0, Width - 1, Height - 1));
                }
            }
        }
        else
        {
            G.Clear(Color.FromArgb(50, 50, 53));
            T.BackColor = Color.FromArgb(50, 50, 53);
 
            using (Pen Border = new Pen(Color.FromArgb(42, 42, 45)))
            using (Pen Shadow = new Pen(Color.FromArgb(66, 66, 69))
)
            {
                e.Graphics.DrawRectangle(Border, new Rectangle(0, 0, Width - 1, Height - 1));
                e.Graphics.DrawRectangle(Shadow, new Rectangle(1, 1, Width - 3, Height - 3));
            }
        }
 
        base.OnPaint(e);
    }
 
 
    protected override void OnResize(EventArgs e)
    {
        if (MultiLine)
        {
            T.Size = new Size(Width - 7, Height - 7); Invalidate();
        }
        else
        {
            T.Size = new Size(Width - 8, Height - 15); Invalidate();
        }
        base.OnResize(e);
    }
 
 
    private void DoAnimation()
    {
        while (RGB[2] < 204 && !Block)
        {
            RGB[1] += 1;
            RGB[2] += 2;
 
            Invalidate();
            Thread.Sleep(5);
        }
    }
 
    private void UndoAnimation()
    {
        Block = true;
 
        while (RGB[2] > RGB1)
        {
            RGB[1] -= 1;
            RGB[2] -= 2;
 
            Invalidate();
            Thread.Sleep(5);
        }
 
        Block = false;
    }
}
 
public class AnimaProgressBar : ProgressBar
{
    private Graphics G;
 
    public AnimaProgressBar()
    {
        SetStyle(ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        G = e.Graphics;
 
        base.OnPaint(e);
 
        G.Clear(Color.FromArgb(37, 37, 40));
 
        using (Pen Border = new Pen(Color.FromArgb(35, 35, 38)))
        {
            G.DrawRectangle(Border, new Rectangle(0, 0, Width - 1, Height - 1));
        }
        int area = Convert.ToInt32((Value * Width) / Maximum);
        using (SolidBrush Background = new SolidBrush(Color.FromArgb(0, 122, 204)))
        {
            G.FillRectangle(Background, new Rectangle(1, 1, area - 2, Height - 2));
        }
    }
}
 
public class AnimaCheckBox : CheckBox
{
    private Graphics G;
 
    private Thread AnimatingT;
    private Thread AnimatingT2;
 
    private int[] RGB = new[] { 36, 36, 39 };
 
    private bool Block;
 
    public bool Radio { get; set; }
 
    public bool Caution { get; set; }
 
    private const string CheckedIcon = "iVBORw0KGgoAAAANSUhEUgAAAAsAAAAKCAMAAABVLlSxAAAASFBMVEUlJSYuLi8oKCmlpaXx8fGioqJoaGjOzs8+Pj/k5OTu7u5LS0zIyMiBgYKFhYXo6OhUVFWVlZW7u7t+fn7h4eE5OTlfX1+YmJn8uq7eAAAAA3RSTlMAAAD6dsTeAAAACXBIWXMAAABIAAAASABGyWs+AAAAO0lEQVQI12NgwAKYWVhhTDYWdkYok4OTixvCYGDiYeEFM/n4BQRZhCDywiz8XCKiDDAOixjcPGFxDCsASakBdDYGvzAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMTItMTRUMTI6MDM6MjktMDY6MDB4J65tAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTEyLTE0VDEyOjAzOjI5LTA2OjAwCXoW0QAAAABJRU5ErkJggg==";
 
    public AnimaCheckBox()
    {
        DoubleBuffered = true;
        Font = new Font("Segoe UI", 9);
        ForeColor = Color.FromArgb(200, 200, 200);
        SetStyle(ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        G = e.Graphics;
        G.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
 
        G.Clear(BackColor);
 
        using (SolidBrush Background = new SolidBrush(Color.FromArgb(38, 38, 41)))
        {
            G.FillRectangle(Background, new Rectangle(0, 0, 16, 16));
        }
 
        using (Pen Border = new Pen(Color.FromArgb(RGB[0], RGB[1], RGB[2])))
        {
            G.DrawRectangle(Border, new Rectangle(0, 0, 16, 16));
        }
 
        using (SolidBrush Fore = new SolidBrush(ForeColor))
        {
            G.DrawString(Text, Font, Fore, new Point(22, 0));
        }
 
        if (Checked)
        {
            using (Image Mark = Image.FromStream(new System.IO.MemoryStream(Convert.FromBase64String(CheckedIcon))))
            {
                G.DrawImage(Mark, new Point(2, 3));
            }
        }
    }
 
    protected override void OnMouseEnter(EventArgs e)
    {
        if (!Block)
        {
            AnimatingT = new Thread(DoAnimation) { IsBackground = true };
            AnimatingT.Start();
        }
 
        base.OnMouseEnter(e);
    }
 
    protected override void OnMouseLeave(EventArgs e)
    {
        AnimatingT2 = new Thread(UndoAnimation) { IsBackground = true };
        AnimatingT2.Start();
 
        base.OnMouseLeave(e);
    }
 
    protected override void OnMouseUp(MouseEventArgs e)
    {
        if (Radio)
        {
            foreach (AnimaCheckBox C in Parent.Controls.OfType<AnimaCheckBox>())
            {
                if (C.Radio)
                    C.Checked = false;
            }
            
        }
 
        base.OnMouseUp(e);
    }
 
    private void DoAnimation()
    {
        if (Caution)
        {
            while (RGB[2] < 130 && !Block)
            {
                RGB[1] += 1;
                RGB[2] += 1;
 
                Invalidate();
                Thread.Sleep(4);
            }
        }
        else
            while (RGB[2] < 204 && !Block)
            {
                RGB[1] += 1;
                RGB[2] += 2;
 
                Invalidate();
                Thread.Sleep(4);
            }
    }
 
    private void UndoAnimation()
    {
        Block = true;
 
        if (Caution)
        {
            while (RGB[2] > 42)
            {
                RGB[1] -= 1;
                RGB[2] -= 1;
 
                Invalidate();
                Thread.Sleep(4);
            }
        }
        else
            while (RGB[2] > 42)
            {
                RGB[1] -= 1;
                RGB[2] -= 2;
 
                Invalidate();
                Thread.Sleep(4);
            }
 
        Block = false;
    }
}
 
public class AnimaHeader : Control
{
    private Graphics G;
 
    public AnimaHeader()
    {
        DoubleBuffered = true;
        Font = new Font("Segoe UI", 9);
        Location = new Point(1, 1);
        Helpers.Size = new Size(Width - 2, 36);
        ForeColor = Color.FromArgb(200, 200, 200);
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        G = e.Graphics;
 
        using (SolidBrush Background = new SolidBrush(Color.FromArgb(55, 55, 58)))
        {
            G.FillRectangle(Background, new Rectangle(0, 0, Width - 1, Height - 1));
        }
 
        using (Pen Line = new Pen(Color.FromArgb(43, 43, 46)))
        {
            G.DrawLine(Line, 0, Height - 1, Width - 1, Height - 1);
        }
 
        using (SolidBrush Fore = new SolidBrush(ForeColor))
        {
            G.DrawString(Text, Font, Fore, new Point(6, 6));
        }
 
        base.OnPaint(e);
    }
}
 
public class AnimaForm : ContainerControl
{
    private Graphics G;
 
    public AnimaForm()
    {
        BackColor = Color.FromArgb(45, 45, 48);
        DoubleBuffered = true;
        Font = new Font("Segoe UI", 9);
        Dock = DockStyle.Fill;
        ForeColor = Color.FromArgb(200, 200, 200);
    }
 
    protected override void OnCreateControl()
    {
        ParentForm.FormBorderStyle = FormBorderStyle.None;
        base.OnCreateControl();
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        G = e.Graphics;
 
        using (SolidBrush Background = new SolidBrush(Color.FromArgb(55, 55, 58)))
        {
            G.FillRectangle(Background, new Rectangle(0, 0, Width - 1, 36));
        }
 
        using (Pen Line = new Pen(Color.FromArgb(43, 43, 46)))
        {
            G.DrawLine(Line, 0, 36, Width - 1, 36);
        }
 
        using (SolidBrush Fore = new SolidBrush(ForeColor))
        {
            G.DrawString(Text, Font, Fore, new Point(10, 10));
        }
 
        using (Pen Border = new Pen(Color.FromArgb(35, 35, 38)))
        {
            e.Graphics.DrawRectangle(Border, new Rectangle(0, 0, Width - 1, Height - 1));
        }
 
        base.OnPaint(e);
    }
 
    private bool Drag;
    private Point MousePoint = new Point(), Temporary = new Point();
 
    protected override void OnMouseDown(MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left && e.Y < 36)
        {
            Drag = true;
            MousePoint.X = e.X;
            MousePoint.Y = e.Y;
        }
 
        base.OnMouseDown(e);
    }
 
    protected override void OnMouseUp(MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
            Drag = false;
 
        base.OnMouseUp(e);
    }
 
    protected override void OnMouseMove(MouseEventArgs e)
    {
        if (Drag)
        {
            Temporary.X = Parent.Location.X + (e.X - MousePoint.X);
            Temporary.Y = Parent.Location.Y + (e.Y - MousePoint.Y);
            Parent.Location = Temporary;
            Temporary = Point.Empty;
        }
 
        base.OnMouseMove(e);
    }
}
 
public class AnimaButton : Button
{
    private Graphics G;
 
    private Thread HoverAnim, CHoverAnim, DownAnimationT;
 
    private int[] RGB = new[] { 42, 42, 45 };
 
    private Point Loc = new Point();
    private Size RSize = new Size();
 
    private bool Block;
 
    private bool Animate;
 
    public Point ImageLocation { get; set; }
 
    public Size ImageSize { get; set; } = new Size(14, 14);
 
    public AnimaButton()
    {
        DoubleBuffered = true;
        Font = new Font("Segoe UI", 9);
        ForeColor = Color.FromArgb(200, 200, 200);
        SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
        ImageLocation = new Point(Width / 2 - 7, 6);
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        G = e.Graphics;
 
        G.Clear(BackColor);
 
        using (SolidBrush Background = new SolidBrush(Color.FromArgb(55, 55, 58)))
        {
            G.FillRectangle(Background, new Rectangle(0, 0, Width - 1, Height - 1));
        }
 
        if (Animate)
        {
            using (SolidBrush Background = new SolidBrush(Color.FromArgb(66, 66, 69)))
            {
                G.FillEllipse(Background, new Rectangle(Loc.X, -30, RSize.Width, 80));
            }
        }
 
        using (Pen Border = new Pen(Color.FromArgb(RGB[0], RGB[1], RGB[2])))
        {
            G.DrawRectangle(Border, new Rectangle(0, 0, Width - 1, Height - 1));
        }
 
        if (Image != null)
            G.DrawImage(Image, new Rectangle(ImageLocation, ImageSize));
        else
            using (SolidBrush Fore = new SolidBrush(ForeColor))
            {
                G.DrawString(Text, Font, Fore, Helpers.MiddlePoint(G, Text, Font, new Rectangle(0, 0, Width - 1, Height - 1)));
            }
    }
 
    protected override void OnMouseEnter(EventArgs e)
    {
        if (!Block)
        {
            HoverAnim = new Thread(DoAnimation) { IsBackground = true };
            HoverAnim.Start();
        }
 
        base.OnMouseEnter(e);
    }
 
    protected override void OnMouseLeave(EventArgs e)
    {
        CHoverAnim = new Thread(UndoAnimation) { IsBackground = true };
        CHoverAnim.Start();
 
        base.OnMouseLeave(e);
    }
 
    protected override void OnMouseDown(MouseEventArgs e)
    {
        DownAnimationT = new Thread(() => DoBackAnimation(e.Location)) { IsBackground = true };
        DownAnimationT.Start();
 
        base.OnMouseDown(e);
    }
 
    private void DoBackAnimation(Point P)
    {
        Loc = P;
        RSize = new Size();
 
        Animate = true; Invalidate();
 
        while (RSize.Width < Width * 3)
        {
            Loc.X -= 1;
            RSize.Width += 2;
            Thread.Sleep(4);
            Invalidate();
        }
 
        Animate = false; Invalidate();
    }
 
    private void DoAnimation()
    {
        while (RGB[2] < 204 && !Block)
        {
            RGB[1] += 1;
            RGB[2] += 2;
 
            Invalidate();
            Thread.Sleep(5);
        }
    }
 
    private void UndoAnimation()
    {
        Block = true;
 
        while (RGB[2] > 45)
        {
            RGB[1] -= 1;
            RGB[2] -= 2;
 
            Invalidate();
            Thread.Sleep(5);
        }
 
        Block = false;
    }
}
 
public class Renderer : ToolStripRenderer
{
    public event PaintMenuBackgroundEventHandler PaintMenuBackground;
 
    public delegate void PaintMenuBackgroundEventHandler(object sender, ToolStripRenderEventArgs e);
 
    public event PaintMenuBorderEventHandler PaintMenuBorder;
 
    public delegate void PaintMenuBorderEventHandler(object sender, ToolStripRenderEventArgs e);
 
    public event PaintMenuImageMarginEventHandler PaintMenuImageMargin;
 
    public delegate void PaintMenuImageMarginEventHandler(object sender, ToolStripRenderEventArgs e);
 
    public event PaintItemCheckEventHandler PaintItemCheck;
 
    public delegate void PaintItemCheckEventHandler(object sender, ToolStripItemImageRenderEventArgs e);
 
    public event PaintItemImageEventHandler PaintItemImage;
 
    public delegate void PaintItemImageEventHandler(object sender, ToolStripItemImageRenderEventArgs e);
 
    public event PaintItemTextEventHandler PaintItemText;
 
    public delegate void PaintItemTextEventHandler(object sender, ToolStripItemTextRenderEventArgs e);
 
    public event PaintItemBackgroundEventHandler PaintItemBackground;
 
    public delegate void PaintItemBackgroundEventHandler(object sender, ToolStripItemRenderEventArgs e);
 
    public event PaintItemArrowEventHandler PaintItemArrow;
 
    public delegate void PaintItemArrowEventHandler(object sender, ToolStripArrowRenderEventArgs e);
 
    public event PaintSeparatorEventHandler PaintSeparator;
 
    public delegate void PaintSeparatorEventHandler(object sender, ToolStripSeparatorRenderEventArgs e);
 
    protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e)
    {
        PaintMenuBackground?.Invoke(this, e);
    }
 
    protected override void OnRenderImageMargin(ToolStripRenderEventArgs e)
    {
        PaintMenuImageMargin?.Invoke(this, e);
    }
 
    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        PaintMenuBorder?.Invoke(this, e);
    }
 
    protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e)
    {
        PaintItemCheck?.Invoke(this, e);
    }
 
    protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e)
    {
        PaintItemImage?.Invoke(this, e);
    }
 
    protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
    {
        PaintItemText?.Invoke(this, e);
    }
 
    protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
    {
        PaintItemBackground?.Invoke(this, e);
    }
 
    protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
    {
        PaintItemArrow?.Invoke(this, e);
    }
 
    protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e)
    {
        PaintSeparator?.Invoke(this, e);
    }
}
 
public class AnimaContextMenuStrip : ContextMenuStrip
{
    private Graphics G;
    private Rectangle Rect;
 
    public AnimaContextMenuStrip()
    {
        Font = new Font("Segoe UI", 9);
        ForeColor = Color.FromArgb(200, 200, 200);
        Renderer Render = new Renderer();
        Render.PaintMenuBackground += Renderer_PaintMenuBackground;
        Render.PaintMenuBorder += Renderer_PaintMenuBorder;
        Render.PaintItemImage += Renderer_PaintItemImage;
        Render.PaintItemText += Renderer_PaintItemText;
        Render.PaintItemBackground += Renderer_PaintItemBackground;
        Render.PaintItemArrow += Rendered_PaintItemArrow;
 
        Renderer = Render;
    }
 
    private void Rendered_PaintItemArrow(object sender, ToolStripArrowRenderEventArgs e)
    {
        G = e.Graphics;
 
        using (Font F = new Font("Marlett", 10))
        using (SolidBrush Fore = new SolidBrush(Color.FromArgb(130, 130, 130))
)
        {
            G.DrawString("4", F, Fore, new Point(e.ArrowRectangle.X, e.ArrowRectangle.Y + 2));
        }
    }
 
    private void Renderer_PaintMenuBackground(object sender, ToolStripRenderEventArgs e)
    {
        G = e.Graphics;
 
        G.Clear(Color.FromArgb(55, 55, 58));
    }
 
    private void Renderer_PaintMenuBorder(object sender, ToolStripRenderEventArgs e)
    {
        G = e.Graphics;
 
        using (Pen Border = new Pen(Color.FromArgb(35, 35, 38)))
        {
            G.DrawRectangle(Border, new Rectangle(e.AffectedBounds.X, e.AffectedBounds.Y, e.AffectedBounds.Width - 1, e.AffectedBounds.Height - 1));
        }
    }
 
    private void Renderer_PaintItemImage(object sender, ToolStripItemImageRenderEventArgs e)
    {
        G = e.Graphics;
 
        G.DrawImage(e.Image, new Point(10, 1));
    }
 
    private void Renderer_PaintItemText(object sender, ToolStripItemTextRenderEventArgs e)
    {
        G = e.Graphics;
 
        using (SolidBrush Fore = new SolidBrush(e.TextColor))
        {
            G.DrawString(e.Text, Font, Fore, new Point(e.TextRectangle.X, e.TextRectangle.Y - 1));
        }
    }
 
    private void Renderer_PaintItemBackground(object sender, ToolStripItemRenderEventArgs e)
    {
        G = e.Graphics;
 
        Rect = e.Item.ContentRectangle;
 
        if (e.Item.Selected)
        {
            using (SolidBrush Background = new SolidBrush(Color.FromArgb(85, 85, 85)))
            {
                G.FillRectangle(Background, new Rectangle(Rect.X - 4, Rect.Y - 1, Rect.Width + 4, Rect.Height - 1));
            }
        }
    }
}
 
public class AnimaStatusBar : Control
{
    private Graphics G;
 
    private Color Body = Color.FromArgb(0, 122, 204);
    private Color Outline = Color.FromArgb(0, 126, 204);
 
    public Types Type { get; set; }
 
    public enum Types : byte
    {
        Basic = 0,
        Warning = 1,
        Wrong = 2,
        Success = 3
    }
 
    public AnimaStatusBar()
    {
        DoubleBuffered = true;
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        G = e.Graphics;
 
        switch (Type)
        {
            case Types.Basic:
                {
                    Body = Color.FromArgb(0, 122, 204);
                    Outline = Color.FromArgb(0, 126, 204);
                    break;
                }
 
            case Types.Warning:
                {
                    Body = Color.FromArgb(210, 143, 75);
                    Outline = Color.FromArgb(214, 147, 75);
                    break;
                }
 
            case Types.Wrong:
                {
                    Body = Color.FromArgb(212, 110, 110);
                    Outline = Color.FromArgb(216, 114, 114);
                    break;
                }
 
            default:
                {
                    Body = Color.FromArgb(45, 193, 90);
                    Outline = Color.FromArgb(45, 197, 90);
                    break;
                }
        }
 
        using (SolidBrush Background = new SolidBrush(Body))
        using (Pen Line = new Pen(Outline)
)
        {
            G.FillRectangle(Background, new Rectangle(0, 0, Width - 1, Height - 1));
            G.DrawLine(Line, 0, 0, Width - 2, 0);
        }
 
        using (SolidBrush Fore = new SolidBrush(Color.FromArgb(255, 255, 255)))
        using (Font Font = new Font("Segoe UI semibold", 8)
)
        {
            G.DrawString(Text, Font, Fore, new Point(4, 2));
        }
 
        base.OnPaint(e);
    }
 
    protected override void OnTextChanged(EventArgs e)
    {
        Invalidate();
        base.OnTextChanged(e);
    }
}
 
public class AnimaTabControl : TabControl
{
    private Graphics G;
    private Rectangle Rect;
 
    protected override void OnControlAdded(ControlEventArgs e)
    {
        e.Control.BackColor = Color.FromArgb(45, 45, 48);
        e.Control.ForeColor = Color.FromArgb(200, 200, 200);
        e.Control.Font = new Font("Segoe UI", 9);
        base.OnControlAdded(e);
    }
 
    public AnimaTabControl()
    {
        DoubleBuffered = true;
        Font = new Font("Segoe UI", 9);
        ForeColor = Color.FromArgb(200, 200, 200);
        ItemSize = new Size(18, 18);
        SizeMode = TabSizeMode.Fixed;
        Alignment = TabAlignment.Top;
        SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque | ControlStyles.OptimizedDoubleBuffer, true);
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        G = e.Graphics;
 
        G.Clear(Parent.BackColor);
 
        for (var I = 0; I <= TabPages.Count - 1; I++)
        {
            Rect = GetTabRect(I);
 
            if (SelectedIndex == I)
            {
                using (SolidBrush Background = new SolidBrush(Color.FromArgb(41, 130, 232)))
                using (Pen Border = new Pen(Color.FromArgb(38, 127, 229))
)
                {
                    G.FillRectangle(Background, new Rectangle(Rect.X + 5, Rect.Y + 2, 12, 12));
                    G.DrawRectangle(Border, new Rectangle(Rect.X + 5, Rect.Y + 2, 12, 12));
                }
            }
            else
                using (SolidBrush Background = new SolidBrush(Color.FromArgb(70, 70, 73)))
                using (Pen Border = new Pen(Color.FromArgb(42, 42, 45))
)
                {
                    G.FillRectangle(Background, new Rectangle(Rect.X + 5, Rect.Y + 2, 12, 12));
                    G.DrawRectangle(Border, new Rectangle(Rect.X + 5, Rect.Y + 2, 12, 12));
                }
        }
 
        base.OnPaint(e);
    }
}
 
public class AnimaGroupBox : Control
{
    public AnimaGroupBox()
    {
        DoubleBuffered = true;
        ForeColor = Color.FromArgb(200, 200, 200);
        BackColor = Color.FromArgb(50, 50, 53);
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.Clear(BackColor);
 
        using (Pen Border = new Pen(Color.FromArgb(42, 42, 45)))
        using (SolidBrush HBackground = new SolidBrush(Color.FromArgb(60, 60, 63)))
        using (Pen Shadow = new Pen(Color.FromArgb(66, 66, 69))
)
        {
            e.Graphics.FillRectangle(HBackground, new Rectangle(1, 0, Width - 2, 26));
            e.Graphics.DrawRectangle(Border, new Rectangle(0, 0, Width - 1, 26));
            e.Graphics.DrawLine(Shadow, 1, 25, Width - 2, 25);
            e.Graphics.DrawRectangle(Border, new Rectangle(0, 0, Width - 1, Height - 1));
        }
 
        using (SolidBrush Fore = new SolidBrush(ForeColor))
        {
            e.Graphics.DrawString(Text, Font, Fore, new Point(4, 4));
        }
 
        base.OnPaint(e);
    }
}
 
public class AnimaExperimentalControlBox : Control
{
    public int TextHeight { get; set; } = 4;
 
    public int ComboHeight { get; set; } = 24;
 
    public string[] Items { get; set; }
 
    public int SelectedIndex { get; set; } = 0;
 
    public int ItemSize { get; set; } = 24;
 
    public string SelectedItem { get; set; }
 
    public AnimaGroupBox AnimaGroupBoxContainer { get; set; }
 
    public Point CurrentLocation { get; set; }
 
    public event SelectedIndexChangedEventHandler SelectedIndexChanged;
 
    public delegate void SelectedIndexChangedEventHandler();
 
    private bool Open;
    private int ItemsHeight = 0;
    private int Hover = -1;
 
    public AnimaExperimentalControlBox()
    {
        DoubleBuffered = true;
        Font = new Font("Segoe UI", 9);
        ForeColor = Color.FromArgb(200, 200, 200);
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.Clear(Parent.BackColor);
 
        if (Enabled)
        {
            if (Items != null)
                ItemsHeight = Items.Count() * ItemSize;
 
            if (!DesignMode)
            {
                if (Open)
                    Height = ItemsHeight + ComboHeight + 5;
                else
                    Height = ComboHeight + 1;
            }
 
            using (SolidBrush Background = new SolidBrush(Color.FromArgb(55, 55, 58)))
            using (Pen Border = new Pen(Color.FromArgb(42, 42, 45)))
            using (Pen Shadow = new Pen(Color.FromArgb(66, 66, 69))
)
            {
                e.Graphics.FillRectangle(Background, new Rectangle(0, 0, Width - 1, ComboHeight - 1));
                e.Graphics.DrawRectangle(Border, new Rectangle(0, 0, Width - 1, ComboHeight - 1));
                e.Graphics.DrawRectangle(Shadow, new Rectangle(1, 1, Width - 3, ComboHeight - 3));
            }
 
            if (Items == null)
                SelectedIndex = -1;
            else if (!(SelectedIndex == -1))
            {
                using (SolidBrush Fore = new SolidBrush(ForeColor))
                {
                    e.Graphics.DrawString(Items[SelectedIndex], Font, Fore, new Point(4, 4));
                }
            }
 
            if (Open)
            {
                using (SolidBrush Background = new SolidBrush(Color.FromArgb(60, 60, 63)))
                using (Pen Border = new Pen(Color.FromArgb(41, 130, 232))
)
                {
                    e.Graphics.FillRectangle(Background, new Rectangle(1, ComboHeight, Width - 3, ItemsHeight));
                    e.Graphics.DrawRectangle(Border, new Rectangle(1, ComboHeight, Width - 3, ItemsHeight));
                }
 
                if (!(Hover == -1))
                {
                    using (SolidBrush Background = new SolidBrush(Color.FromArgb(41, 130, 232)))
                    using (Pen Border = new Pen(Color.FromArgb(40, 40, 40))
)
                    {
                        e.Graphics.FillRectangle(Background, new Rectangle(1, ComboHeight + Hover * ItemSize, Width - 2, ItemSize));
                        e.Graphics.DrawLine(Border, 1, ComboHeight + Hover * ItemSize + ItemSize, Width - 2, ComboHeight + Hover * ItemSize + ItemSize);
                    }
                }
 
                for (var I = 0; I <= Items.Count() - 1; I++)
                {
                    if (Hover == I)
                    {
                        using (SolidBrush Fore = new SolidBrush(Color.FromArgb(15, 15, 15)))
                        {
                            e.Graphics.DrawString(Items[I], Font, Fore, new Point(4, ComboHeight + TextHeight + I * ItemSize));
                        }
                    }
                    else
                        using (SolidBrush Fore = new SolidBrush(ForeColor))
                        {
                            e.Graphics.DrawString(Items[I], Font, Fore, new Point(4, ComboHeight + TextHeight + I * ItemSize));
                        }
                }
            }
        }
        else
        {
            using (SolidBrush Background = new SolidBrush(Color.FromArgb(50, 50, 53)))
            using (Pen Border = new Pen(Color.FromArgb(42, 42, 45)))
            using (Pen Shadow = new Pen(Color.FromArgb(66, 66, 69))
)
            {
                e.Graphics.FillRectangle(Background, new Rectangle(0, 0, Width - 1, ComboHeight - 1));
                e.Graphics.DrawRectangle(Border, new Rectangle(0, 0, Width - 1, ComboHeight - 1));
                e.Graphics.DrawRectangle(Shadow, new Rectangle(1, 1, Width - 3, ComboHeight - 3));
            }
 
            if (Items != null && !(SelectedIndex == -1))
            {
                using (SolidBrush Fore = new SolidBrush(Color.FromArgb(140, 140, 140)))
                {
                    e.Graphics.DrawString(Items[SelectedIndex], Font, Fore, new Point(4, 4));
                }
            }
        }
 
        base.OnPaint(e);
    }
 
    protected override void OnLostFocus(EventArgs e)
    {
        Open = false; Invalidate();
        base.OnLostFocus(e);
    }
 
    protected override void OnMouseDown(MouseEventArgs e)
    {
 
        // If Not Open Then Main.BTab1.SendToBack() : Else : BringToFront()
 
        if (Open && !(ItemsHeight == 0))
        {
            for (var I = 0; I <= Items.Count() - 1; I++)
            {
                if (new Rectangle(0, ComboHeight + I * ItemSize, Width - 1, ItemSize).Contains(e.Location))
                {
                    SelectedIndex = I; Invalidate();
                    SelectedItem = Items[SelectedIndex];
                    break;
                }
            }
        }
 
        if (!new Rectangle(0, 0, Width - 1, ComboHeight + 4).Contains(e.Location))
        {
            if (Open && !(SelectedIndex == -1))
                SelectedIndexChanged?.Invoke();
        }
 
        Open = !Open; Invalidate();
        this.Select();
        base.OnMouseDown(e);
    }
 
    protected override void OnMouseMove(MouseEventArgs e)
    {
        if (Open && !(ItemsHeight == 0))
        {
            for (var I = 0; I <= Items.Count() - 1; I++)
            {
                if (new Rectangle(0, ComboHeight + I * ItemSize, Width - 1, ItemSize).Contains(e.Location))
                {
                    Hover = I; Invalidate();
                    break;
                }
            }
        }
 
        base.OnMouseMove(e);
    }
}

Comments