using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace friction { public static class Theme { public static Color Backcolor = Color.FromArgb(255, 45, 45, 48); public static Color BackColorTrans = Color.FromArgb(230, 45, 45, 48); public static Color Forecolor = Color.FromArgb(255, 235, 235, 235); public static Color Green = Color.LimeGreen; public static Color Yellow = Color.FromArgb(255, 255, 165, 0); public static Color Red = Color.OrangeRed; public static Color Gray = Color.DarkGray; public static Color White = Color.Snow; public static Color Orange = Color.Orange; public static void Apply(Control ctrl) { ctrl.BackColor = Backcolor; ctrl.ForeColor = Forecolor; //ctrl.Font = new Font(ctrl.Font.FontFamily, 11.0f); } public static void Apply(DataGridView ctrl) { ctrl.BackgroundColor = Backcolor; ctrl.DefaultCellStyle.BackColor = Backcolor; ctrl.DefaultCellStyle.ForeColor = Forecolor; ctrl.EnableHeadersVisualStyles = false; ctrl.ColumnHeadersDefaultCellStyle.BackColor = Backcolor; ctrl.ColumnHeadersDefaultCellStyle.ForeColor = Forecolor; ctrl.RowHeadersDefaultCellStyle.BackColor = Backcolor; ctrl.RowHeadersDefaultCellStyle.ForeColor = Forecolor; ctrl.Font = new Font(ctrl.Font.FontFamily, 11.0f); typeof(DataGridView).InvokeMember("DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty, null, ctrl, new object[] { true }); } public static void Apply(ListView ctrl) { ctrl.BackColor = Backcolor; ctrl.ForeColor = Forecolor; ctrl.Font = new Font(ctrl.Font.FontFamily, 11.0f); ctrl.OwnerDraw = true; ctrl.DrawColumnHeader += new DrawListViewColumnHeaderEventHandler ( (sender, e) => ListViewHeaderDraw(sender, e, Backcolor, Forecolor) ); ctrl.DrawItem += new DrawListViewItemEventHandler(ListViewBodyDraw); typeof(ListView).InvokeMember("DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty, null, ctrl, new object[] { true }); } private static void ListViewHeaderDraw(object sender, DrawListViewColumnHeaderEventArgs e, Color backColor, Color foreColor) { e.Graphics.FillRectangle(new SolidBrush(backColor), e.Bounds); e.Graphics.DrawString(e.Header.Text, e.Font, new SolidBrush(foreColor), e.Bounds); } private static void ListViewBodyDraw(object sender, DrawListViewItemEventArgs e) { e.DrawDefault = true; } public static void ResizeFullColumn(ListView view) { bool bScrollbarPresented = false; foreach (var scroll in view.Controls.OfType()) { bScrollbarPresented = true; break; } int iWidth = view.Width; if (bScrollbarPresented == true) iWidth -= SystemInformation.VerticalScrollBarWidth; switch (view.BorderStyle) { case BorderStyle.Fixed3D: iWidth -= 4; break; case BorderStyle.FixedSingle: iWidth -= 2; break; } for (int i = 0; i < view.Columns.Count; i++) { if (view.Columns[i].Width < iWidth) { iWidth -= view.Columns[i].Width; } else { view.Columns[i].Width = iWidth; // Hide columns that can't fit for (int jx = i + 1; jx < view.Columns.Count; ++jx) view.Columns[jx].Width = 0; return; } } view.Columns[view.Columns.Count - 1].Width += iWidth; } public class MenustripColor : ProfessionalColorTable { public override Color MenuItemSelected { get { return BackColorTrans; } } public override Color MenuItemSelectedGradientBegin { get { return BackColorTrans; } } public override Color MenuItemSelectedGradientEnd { get { return BackColorTrans; } } public override Color MenuItemPressedGradientBegin { get { return Backcolor; } } public override Color MenuItemPressedGradientEnd { get { return Backcolor; } } public override Color MenuItemBorder { get { return BackColorTrans; } } public override Color MenuBorder { get { return Backcolor; } } } class MenustripRenderer : ToolStripProfessionalRenderer { public MenustripRenderer() : base(new MenustripColor()) { } protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) { if (e.Item.Enabled) base.OnRenderMenuItemBackground(e); else { e.Item.BackColor = Backcolor; base.OnRenderMenuItemBackground(e); if (e.Item.Selected == true) { e.Item.ImageTransparentColor = Backcolor; base.OnRenderMenuItemBackground(e); } } } protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) { if (e.Item.Enabled) base.OnRenderMenuItemBackground(e); } } public static void Apply(MenuStrip ctrl) { ctrl.BackColor = Backcolor; ctrl.ForeColor = Forecolor; foreach (ToolStripMenuItem item in ctrl.Items) { foreach (ToolStripItem subitem in item.DropDownItems) { if(subitem.GetType() == typeof(ToolStripMenuItem)) { foreach (ToolStripItem subsubitem in ((ToolStripMenuItem)subitem).DropDownItems) { subsubitem.BackColor = Backcolor; subsubitem.ForeColor = Forecolor; subsubitem.MouseEnter += Ctrl_MouseEnter; subsubitem.MouseLeave += Ctrl_MouseLeave; } } else if(subitem.GetType() == typeof(ToolStripSeparator)) { ((ToolStripSeparator)subitem).BackColor = Backcolor; ((ToolStripSeparator)subitem).ForeColor = Forecolor; } subitem.BackColor = Backcolor; subitem.ForeColor = Forecolor; subitem.MouseEnter += Ctrl_MouseEnter; subitem.MouseLeave += Ctrl_MouseLeave; } item.BackColor = Backcolor; item.ForeColor = Forecolor; item.MouseEnter += Ctrl_MouseEnter; item.MouseLeave += Ctrl_MouseLeave; } ctrl.Renderer = new MenustripRenderer(); } private static void Ctrl_MouseEnter(object sender, EventArgs e) { if(sender is ToolStripMenuItem) { ((ToolStripMenuItem)sender).ForeColor = Orange; } } private static void Ctrl_MouseLeave(object sender, EventArgs e) { if (sender is ToolStripMenuItem) { ((ToolStripMenuItem)sender).ForeColor = Forecolor; } } } public class ExtendedToolStripSeparator : ToolStripSeparator { public ExtendedToolStripSeparator() { this.Paint += ExtendedToolStripSeparator_Paint; } private void ExtendedToolStripSeparator_Paint(object sender, PaintEventArgs e) { // Get the separator's width and height. ToolStripSeparator toolStripSeparator = (ToolStripSeparator)sender; int width = toolStripSeparator.Width; int height = toolStripSeparator.Height; // Choose the colors for drawing. // I've used Color.White as the foreColor. Color foreColor = Theme.Forecolor; // Color.Teal as the backColor. Color backColor = Theme.Backcolor; // Fill the background. e.Graphics.FillRectangle(new SolidBrush(backColor), 0, 0, width, height); // Draw the line. e.Graphics.DrawLine(new Pen(foreColor), 4, height / 2, width - 4, height / 2); } } }