├── .gitignore ├── Dio ├── Dio.csproj ├── DioButton.cs ├── DioCheckBox.cs ├── DioDefaults.cs ├── DioGroupBox.cs ├── DioLabel.cs ├── DioMarqueeProgressBar.cs ├── DioRadioButton.cs ├── DioTextBox.cs ├── GlobalHelpers.cs └── Properties │ └── AssemblyInfo.cs ├── LICENSE ├── MentQ ├── GlobalHelpers.cs ├── MentQ.csproj ├── MentQButton.cs ├── MentQCheckBox.cs ├── MentQDefaults.cs ├── MentQEllipticalProgress.cs ├── MentQGroupBox.cs ├── MentQInfoBox.cs ├── MentQNotification.cs ├── MentQNumericUpDown.cs ├── MentQProgressBar.cs ├── MentQRadioButton.cs ├── MentQTabControl.cs ├── Properties │ └── AssemblyInfo.cs └── Styles.cs ├── README.md ├── WinformThemes.sln ├── WinformThemes ├── App.config ├── GlobalHelpers.cs ├── MainForm.Designer.cs ├── MainForm.cs ├── MainForm.resx ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings └── WinformThemes.csproj ├── builds ├── Dio.dll └── MentQ.dll ├── preview-dio.png └── preview-mentq.png /.gitignore: -------------------------------------------------------------------------------- 1 | .vs/ 2 | **bin/ 3 | **obj/ -------------------------------------------------------------------------------- /Dio/Dio.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {D8AFFCD4-5D23-49B0-930A-9D88D5937BDA} 8 | Library 9 | Properties 10 | Dio 11 | Dio 12 | v4.6.1 13 | 512 14 | 15 | 16 | true 17 | full 18 | false 19 | bin\Debug\ 20 | DEBUG;TRACE 21 | prompt 22 | 4 23 | 24 | 25 | pdbonly 26 | true 27 | bin\Release\ 28 | TRACE 29 | prompt 30 | 4 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | Component 48 | 49 | 50 | Component 51 | 52 | 53 | Component 54 | 55 | 56 | Component 57 | 58 | 59 | Component 60 | 61 | 62 | Component 63 | 64 | 65 | Component 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /Dio/DioButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.Windows.Forms; 6 | 7 | namespace Dio 8 | { 9 | public class DioButton : Button 10 | { 11 | private readonly Color _downOverlay = Color.FromArgb(70, 0, 0, 0); 12 | private readonly Color _hoverOverlay = Color.FromArgb(45, 35, 35, 35); 13 | private Color _overlapColor = Color.FromArgb(0, 0, 0, 0); 14 | 15 | public DioButton() 16 | { 17 | SetStyle( 18 | ControlStyles.AllPaintingInWmPaint | ControlStyles.CacheText | ControlStyles.DoubleBuffer | 19 | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true); 20 | ShadowSize = 4; 21 | ShadowColor = DioDefaults.DioDefaultshadowColor; 22 | BackColor = DioDefaults.DefaultBackColor; 23 | ForeColor = DioDefaults.DefaultForeColor; 24 | Font = DioDefaults.DefaultFont; 25 | HandleCreated += (sender, args) => { DoubleBuffered = true; }; 26 | } 27 | 28 | [Category("Appearance")] 29 | [Browsable(true)] 30 | [EditorBrowsable(EditorBrowsableState.Always)] 31 | [Bindable(false)] 32 | public int ShadowSize { get; set; } 33 | 34 | [Category("Appearance")] 35 | [Browsable(true)] 36 | [EditorBrowsable(EditorBrowsableState.Always)] 37 | [Bindable(false)] 38 | public Color ShadowColor { get; set; } 39 | 40 | [Category("Appearance")] 41 | [Browsable(true)] 42 | [EditorBrowsable(EditorBrowsableState.Always)] 43 | [Bindable(false)] 44 | public Color BorderColor { get; set; } 45 | 46 | protected override void OnPaint(PaintEventArgs pevent) 47 | { 48 | Graphics g = pevent.Graphics; 49 | g.Clear(Parent.BackColor); 50 | g.SmoothingMode = SmoothingMode.HighQuality; 51 | g.InterpolationMode = InterpolationMode.HighQualityBicubic; 52 | if (ShadowSize > 0) 53 | GlobalHelpers.DrawDownFade(g, new Rectangle(-1, Height - ShadowSize, Width + 1, ShadowSize), 54 | ShadowColor); 55 | using ( 56 | SolidBrush backColorBrush = new SolidBrush(BackColor), 57 | foreColorBrush = new SolidBrush(ForeColor), 58 | overlayBrush = new SolidBrush(_overlapColor)) 59 | using (Pen borderPen = new Pen(BorderColor)) 60 | { 61 | Rectangle clippedBounds = new Rectangle(-1, -1, Width + 2, Height + 2 - ShadowSize); 62 | g.SetClip(new Rectangle(0, 0, Width, Height - ShadowSize + 1)); 63 | g.FillRectangle(backColorBrush, clippedBounds); 64 | g.DrawRectangle(borderPen, 0, 0, Width - 1, Height - ShadowSize); 65 | g.FillRectangle(overlayBrush, clippedBounds); 66 | SizeF stringSize = g.MeasureString(Text, Font); 67 | PointF textPosition = new PointF(0, 0); 68 | if (TextAlign == ContentAlignment.MiddleCenter) 69 | textPosition = new PointF((Width - stringSize.Width) / 2, 70 | (Height - stringSize.Height - ShadowSize) / 2); 71 | else if (TextAlign == ContentAlignment.MiddleLeft) 72 | textPosition = new PointF(3, (Height - stringSize.Height - ShadowSize) / 2); 73 | else if (TextAlign == ContentAlignment.MiddleRight) 74 | textPosition = new PointF(Width - 4 - stringSize.Width, 75 | (Height - stringSize.Height - ShadowSize) / 2); 76 | else 77 | throw new NotImplementedException(); 78 | g.DrawString(Text, Font, foreColorBrush, textPosition); 79 | } 80 | } 81 | 82 | protected override void OnMouseEnter(EventArgs e) 83 | { 84 | _overlapColor = _hoverOverlay; 85 | Invalidate(); 86 | base.OnMouseEnter(e); 87 | } 88 | 89 | protected override void OnMouseUp(MouseEventArgs e) 90 | { 91 | _overlapColor = _hoverOverlay; 92 | Invalidate(); 93 | base.OnMouseUp(e); 94 | } 95 | 96 | protected override void OnMouseLeave(EventArgs e) 97 | { 98 | _overlapColor = Color.FromArgb(0, 0, 0, 0); 99 | Invalidate(); 100 | base.OnMouseLeave(e); 101 | } 102 | 103 | protected override void OnMouseDown(MouseEventArgs e) 104 | { 105 | _overlapColor = _downOverlay; 106 | Invalidate(); 107 | base.OnMouseDown(e); 108 | } 109 | 110 | protected override void OnGotFocus(EventArgs e) 111 | { 112 | _overlapColor = _hoverOverlay; 113 | Invalidate(); 114 | base.OnGotFocus(e); 115 | } 116 | 117 | protected override void OnLostFocus(EventArgs e) 118 | { 119 | _overlapColor = Color.FromArgb(0, 0, 0, 0); 120 | Invalidate(); 121 | base.OnLostFocus(e); 122 | } 123 | 124 | protected override void OnKeyDown(KeyEventArgs kevent) 125 | { 126 | //Enter does not fire keydown 127 | if (kevent.KeyCode == Keys.Space) 128 | _overlapColor = _downOverlay; 129 | Invalidate(); 130 | base.OnKeyDown(kevent); 131 | } 132 | 133 | protected override void OnKeyUp(KeyEventArgs kevent) 134 | { 135 | if (kevent.KeyCode == Keys.Space) 136 | _overlapColor = _hoverOverlay; 137 | base.OnKeyUp(kevent); 138 | } 139 | } 140 | } -------------------------------------------------------------------------------- /Dio/DioCheckBox.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.Windows.Forms; 6 | 7 | namespace Dio 8 | { 9 | public class DioCheckBox : CheckBox 10 | { 11 | private readonly Color _downOverlay = Color.FromArgb(70, 0, 0, 0); 12 | private readonly Color _hoverOverlay = Color.FromArgb(45, 35, 35, 35); 13 | private Color _overlapColor = Color.FromArgb(0, 0, 0, 0); 14 | 15 | public DioCheckBox() 16 | { 17 | SetStyle( 18 | ControlStyles.AllPaintingInWmPaint | ControlStyles.CacheText | ControlStyles.DoubleBuffer | 19 | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true); 20 | BackColor = DioDefaults.DefaultBackColor; 21 | ForeColor = DioDefaults.DefaultDarkForeColor; 22 | Font = DioDefaults.DefaultFont; 23 | HandleCreated += (sender, args) => { DoubleBuffered = true; }; 24 | AutoSize = true; 25 | } 26 | 27 | [Category("Appearance")] 28 | [Browsable(true)] 29 | [EditorBrowsable(EditorBrowsableState.Always)] 30 | [Bindable(false)] 31 | public Color BorderColor { get; set; } 32 | 33 | public override Size GetPreferredSize(Size proposedSize) 34 | { 35 | return new Size(18 + Convert.ToInt32(Graphics.FromHwnd(Handle).MeasureString(Text, Font).Width), 15); 36 | } 37 | 38 | protected override void OnPaint(PaintEventArgs pevent) 39 | { 40 | Graphics g = pevent.Graphics; 41 | g.Clear(Parent.BackColor); 42 | g.SmoothingMode = SmoothingMode.HighQuality; 43 | g.InterpolationMode = InterpolationMode.HighQualityBicubic; 44 | using ( 45 | SolidBrush backColorBrush = new SolidBrush(BackColor), 46 | foreColorBrush = new SolidBrush(ForeColor)) 47 | using (Pen foreColorPen = new Pen(Color.FromArgb(100, ForeColor)), overlayPen = new Pen(_overlapColor)) 48 | { 49 | g.DrawRectangle(foreColorPen, 0, 0, 14, 14); 50 | g.DrawRectangle(overlayPen, 0, 0, 14, 14); 51 | if (Checked) 52 | { 53 | g.SetClip(new Rectangle(3, 3, 9, 9)); 54 | g.FillRectangle(backColorBrush, 2, 2, 10, 10); 55 | using (GraphicsPath path = new GraphicsPath()) 56 | { 57 | path.AddPolygon(new[] {new Point(2, 12), new Point(11, 11), new Point(11, 2)}); 58 | using (SolidBrush brush = new SolidBrush(Color.FromArgb(50, 20, 20, 20))) 59 | { 60 | g.FillPath(brush, path); 61 | } 62 | } 63 | 64 | g.ResetClip(); 65 | } 66 | 67 | g.DrawString(Text, Font, foreColorBrush, 18, (Height - g.MeasureString(Text, Font).Height) / 2); 68 | } 69 | } 70 | 71 | protected override void OnMouseEnter(EventArgs e) 72 | { 73 | _overlapColor = _hoverOverlay; 74 | Invalidate(); 75 | base.OnMouseEnter(e); 76 | } 77 | 78 | protected override void OnMouseUp(MouseEventArgs e) 79 | { 80 | _overlapColor = _hoverOverlay; 81 | Invalidate(); 82 | base.OnMouseUp(e); 83 | } 84 | 85 | protected override void OnMouseLeave(EventArgs e) 86 | { 87 | _overlapColor = Color.FromArgb(0, 0, 0, 0); 88 | Invalidate(); 89 | base.OnMouseLeave(e); 90 | } 91 | 92 | protected override void OnMouseDown(MouseEventArgs e) 93 | { 94 | _overlapColor = _downOverlay; 95 | Invalidate(); 96 | base.OnMouseDown(e); 97 | } 98 | 99 | protected override void OnGotFocus(EventArgs e) 100 | { 101 | _overlapColor = _hoverOverlay; 102 | Invalidate(); 103 | base.OnGotFocus(e); 104 | } 105 | 106 | protected override void OnLostFocus(EventArgs e) 107 | { 108 | _overlapColor = Color.FromArgb(0, 0, 0, 0); 109 | Invalidate(); 110 | base.OnLostFocus(e); 111 | } 112 | 113 | protected override void OnKeyDown(KeyEventArgs kevent) 114 | { 115 | //Enter does not fire keydown 116 | if (kevent.KeyCode == Keys.Space) 117 | _overlapColor = _downOverlay; 118 | Invalidate(); 119 | base.OnKeyDown(kevent); 120 | } 121 | 122 | protected override void OnKeyUp(KeyEventArgs kevent) 123 | { 124 | if (kevent.KeyCode == Keys.Space) 125 | _overlapColor = _hoverOverlay; 126 | base.OnKeyUp(kevent); 127 | } 128 | } 129 | } -------------------------------------------------------------------------------- /Dio/DioDefaults.cs: -------------------------------------------------------------------------------- 1 | #region 2 | 3 | using System.Drawing; 4 | 5 | #endregion 6 | 7 | namespace Dio 8 | { 9 | internal struct DioDefaults 10 | { 11 | public static Color DefaultBackColor { get; } = Color.CornflowerBlue; 12 | public static Color DefaultForeColor { get; } = Color.White; 13 | public static Font DefaultFont { get; } = new Font(new FontFamily("Segoe UI"), 8.25f); 14 | public static Color DioDefaultshadowColor { get; } = Color.FromArgb(200, 50, 50, 50); 15 | public static Color DefaultBorderColor { get; } = Color.FromArgb(100, 70, 70, 70); 16 | public static Color DefaultDarkForeColor { get; } = Color.FromArgb(200, 45, 45, 45); 17 | } 18 | } -------------------------------------------------------------------------------- /Dio/DioGroupBox.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Drawing; 3 | using System.Drawing.Drawing2D; 4 | using System.Windows.Forms; 5 | 6 | namespace Dio 7 | { 8 | public class DioGroupBox : GroupBox 9 | { 10 | private readonly Color _overlapColor = Color.FromArgb(0, 0, 0, 0); 11 | 12 | public DioGroupBox() 13 | { 14 | SetStyle( 15 | ControlStyles.AllPaintingInWmPaint | ControlStyles.CacheText | ControlStyles.DoubleBuffer | 16 | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true); 17 | ShadowSize = 4; 18 | BackColor = Color.White; 19 | ForeColor = DioDefaults.DefaultDarkForeColor; 20 | ShadowColor = DioDefaults.DioDefaultshadowColor; 21 | Font = DioDefaults.DefaultFont; 22 | HandleCreated += (sender, args) => { DoubleBuffered = true; }; 23 | } 24 | 25 | [Category("Appearance")] 26 | [Browsable(true)] 27 | [EditorBrowsable(EditorBrowsableState.Always)] 28 | [Bindable(false)] 29 | public int ShadowSize { get; set; } 30 | 31 | [Category("Appearance")] 32 | [Browsable(true)] 33 | [EditorBrowsable(EditorBrowsableState.Always)] 34 | [Bindable(false)] 35 | public Color ShadowColor { get; set; } 36 | 37 | [Category("Appearance")] 38 | [Browsable(true)] 39 | [EditorBrowsable(EditorBrowsableState.Always)] 40 | [Bindable(false)] 41 | public Color BorderColor { get; set; } 42 | 43 | protected override void OnPaint(PaintEventArgs pevent) 44 | { 45 | Graphics g = pevent.Graphics; 46 | g.Clear(Parent.BackColor); 47 | g.SmoothingMode = SmoothingMode.HighQuality; 48 | g.InterpolationMode = InterpolationMode.HighQualityBicubic; 49 | if (ShadowSize > 0) 50 | GlobalHelpers.DrawDownFade(g, new Rectangle(-1, Height - ShadowSize, Width + 1, ShadowSize), 51 | ShadowColor); 52 | using ( 53 | SolidBrush backColorBrush = new SolidBrush(BackColor), 54 | foreColorBrush = new SolidBrush(ForeColor), 55 | overlayBrush = new SolidBrush(_overlapColor)) 56 | using (Pen borderPen = new Pen(BorderColor), foreColorPen = new Pen(ForeColor)) 57 | { 58 | Rectangle clippedBounds = new Rectangle(-1, -1, Width + 2, Height + 2 - ShadowSize); 59 | g.SetClip(new Rectangle(0, 0, Width, Height - ShadowSize + 1)); 60 | g.FillRectangle(backColorBrush, clippedBounds); 61 | g.DrawRectangle(borderPen, 0, 0, Width - 1, Height - ShadowSize); 62 | g.FillRectangle(overlayBrush, clippedBounds); 63 | g.DrawString(Text, Font, foreColorBrush, 10, 7); 64 | SizeF stringSize = g.MeasureString(Text, Font); 65 | g.DrawLine(foreColorPen, 10, stringSize.Height + 9, stringSize.Width + 10, stringSize.Height + 9); 66 | } 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /Dio/DioLabel.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Drawing; 3 | using System.Drawing.Drawing2D; 4 | using System.Windows.Forms; 5 | 6 | namespace Dio 7 | { 8 | public class DioLabel : Label 9 | { 10 | 11 | public DioLabel() 12 | { 13 | SetStyle( 14 | ControlStyles.AllPaintingInWmPaint | ControlStyles.CacheText | ControlStyles.DoubleBuffer | 15 | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true); 16 | Font = new Font(DioDefaults.DefaultFont.FontFamily, 14); 17 | BackColor = DioDefaults.DefaultBackColor; 18 | ForeColor = DioDefaults.DefaultDarkForeColor; 19 | TitleFont = DioDefaults.DefaultFont; 20 | DrawSide = true; 21 | HandleCreated += (sender, args) => { DoubleBuffered = true; }; 22 | } 23 | 24 | [Category("Appearance")] 25 | [Browsable(true)] 26 | [EditorBrowsable(EditorBrowsableState.Always)] 27 | [Bindable(false)] 28 | public string Title { get; set; } 29 | 30 | [Category("Appearance")] 31 | [Browsable(true)] 32 | [EditorBrowsable(EditorBrowsableState.Always)] 33 | [Bindable(false)] 34 | public Font TitleFont { get; set; } 35 | 36 | [Category("Appearance")] 37 | [Browsable(true)] 38 | [EditorBrowsable(EditorBrowsableState.Always)] 39 | [Bindable(false)] 40 | public bool DrawSide { get; set; } 41 | 42 | public override bool AutoSize 43 | { 44 | get { return false; } 45 | } 46 | 47 | protected override void OnPaint(PaintEventArgs pevent) 48 | { 49 | Graphics g = pevent.Graphics; 50 | g.Clear(Parent.BackColor); 51 | g.InterpolationMode = InterpolationMode.HighQualityBicubic; 52 | using ( 53 | SolidBrush backColorBrush = new SolidBrush(BackColor), 54 | foreColorBrush = new SolidBrush(ForeColor)) 55 | { 56 | int decal = 0; 57 | if (DrawSide) 58 | { 59 | g.FillRectangle(backColorBrush, 0, 0, 4, Height); 60 | decal = 8; 61 | } 62 | else 63 | { 64 | decal = 0; 65 | } 66 | 67 | SizeF titleSize = new SizeF(0, 0); 68 | if (!string.IsNullOrEmpty(Title)) 69 | { 70 | titleSize = g.MeasureString(Title, TitleFont); 71 | g.DrawString(Title, TitleFont, foreColorBrush, decal, 0); 72 | } 73 | 74 | SizeF textSize = g.MeasureString(Text, Font); 75 | g.DrawString(Text, Font, foreColorBrush, decal, 76 | (Height - textSize.Height - titleSize.Height) / 2 + titleSize.Height); 77 | } 78 | } 79 | } 80 | } -------------------------------------------------------------------------------- /Dio/DioMarqueeProgressBar.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Drawing; 3 | using System.Drawing.Drawing2D; 4 | using System.Windows.Forms; 5 | using Timer = System.Timers.Timer; 6 | 7 | namespace Dio 8 | { 9 | public class DioMarqueeProgressBar : Control 10 | { 11 | private readonly int _increment = 1; 12 | private readonly Timer timer; 13 | private int _marqueePos; 14 | 15 | private int _marqueeWidth; 16 | private int _marqueeWidthConst; 17 | private Color _overlapColor = Color.FromArgb(0, 0, 0, 0); 18 | 19 | public DioMarqueeProgressBar() 20 | { 21 | timer = new Timer(); 22 | timer.Interval = 12; 23 | timer.Elapsed += (sender, args) => Callback(); 24 | Size = new Size(150, 14); 25 | BorderColor = DioDefaults.DefaultBorderColor; 26 | Font = DioDefaults.DefaultFont; 27 | HandleCreated += (sender, args) => { DoubleBuffered = true; }; 28 | SetStyle( 29 | ControlStyles.AllPaintingInWmPaint | ControlStyles.CacheText | ControlStyles.DoubleBuffer | 30 | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true); 31 | BackColor = Color.White; 32 | ForeColor = DioDefaults.DefaultBackColor; 33 | 34 | MarqueeWidth = 50; 35 | MarqueeXPos = 20; 36 | MarqueeVisible = true; 37 | _marqueeWidth = MarqueeWidth; 38 | _marqueePos = MarqueeXPos; 39 | } 40 | 41 | [Category("Appearance")] 42 | [Browsable(true)] 43 | [EditorBrowsable(EditorBrowsableState.Always)] 44 | [Bindable(false)] 45 | public Color BorderColor { get; set; } 46 | 47 | [Category("Appearance")] 48 | [Browsable(true)] 49 | [EditorBrowsable(EditorBrowsableState.Always)] 50 | [Bindable(false)] 51 | public bool MarqueeVisible { get; set; } 52 | 53 | [Category("Appearance")] 54 | [Browsable(true)] 55 | [EditorBrowsable(EditorBrowsableState.Always)] 56 | [Bindable(false)] 57 | public int MarqueeWidth 58 | { 59 | get { return _marqueeWidthConst; } 60 | set 61 | { 62 | _marqueeWidthConst = value; 63 | _marqueeWidth = value; 64 | } 65 | } 66 | 67 | [Category("Appearance")] 68 | [Browsable(true)] 69 | [EditorBrowsable(EditorBrowsableState.Always)] 70 | [Bindable(false)] 71 | public int MarqueeXPos { get; set; } 72 | 73 | protected override void OnPaint(PaintEventArgs pevent) 74 | { 75 | Graphics g = pevent.Graphics; 76 | g.Clear(Parent.BackColor); 77 | g.SmoothingMode = SmoothingMode.HighQuality; 78 | g.InterpolationMode = InterpolationMode.HighQualityBicubic; 79 | using (Pen borderPen = new Pen(BorderColor)) 80 | using (SolidBrush backColorBrush = new SolidBrush(BackColor), foreColorBrush = new SolidBrush(ForeColor)) 81 | { 82 | g.FillRectangle(backColorBrush, 0, 0, Width - 1, Height - 1); 83 | if (MarqueeVisible) 84 | g.FillRectangle(foreColorBrush, MarqueeXPos, 0, _marqueeWidth, Height - 1); 85 | g.DrawRectangle(borderPen, 0, 0, Width - 1, Height - 1); 86 | } 87 | } 88 | 89 | public void Start() 90 | { 91 | MarqueeVisible = true; 92 | timer.Start(); 93 | } 94 | 95 | public void Stop() 96 | { 97 | timer.Stop(); 98 | } 99 | 100 | private void Callback() 101 | { 102 | if (MarqueeXPos + MarqueeWidth >= Width) 103 | _marqueeWidth = Width - MarqueeXPos - 2; 104 | if (_marqueePos < 0) 105 | { 106 | MarqueeXPos = 0; 107 | _marqueeWidth += _increment; 108 | _marqueePos += _increment; 109 | } 110 | else if (MarqueeXPos >= Width) 111 | { 112 | _marqueePos = -MarqueeWidth; 113 | } 114 | else 115 | { 116 | MarqueeXPos += _increment; 117 | } 118 | 119 | Invalidate(); 120 | } 121 | } 122 | } -------------------------------------------------------------------------------- /Dio/DioRadioButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.Windows.Forms; 6 | 7 | namespace Dio 8 | { 9 | public class DioRadioButton : RadioButton 10 | { 11 | private readonly Color _downOverlay = Color.FromArgb(70, 0, 0, 0); 12 | private readonly Color _hoverOverlay = Color.FromArgb(45, 35, 35, 35); 13 | private Color _overlapColor = Color.FromArgb(0, 0, 0, 0); 14 | 15 | public DioRadioButton() 16 | { 17 | SetStyle( 18 | ControlStyles.AllPaintingInWmPaint | ControlStyles.CacheText | ControlStyles.DoubleBuffer | 19 | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true); 20 | BackColor = DioDefaults.DefaultBackColor; 21 | ForeColor = DioDefaults.DefaultDarkForeColor; 22 | Font = DioDefaults.DefaultFont; 23 | HandleCreated += (sender, args) => { DoubleBuffered = true; }; 24 | AutoSize = true; 25 | } 26 | 27 | [Category("Appearance")] 28 | [Browsable(true)] 29 | [EditorBrowsable(EditorBrowsableState.Always)] 30 | [Bindable(false)] 31 | public Color BorderColor { get; set; } 32 | 33 | public override Size GetPreferredSize(Size proposedSize) 34 | { 35 | return new Size(18 + Convert.ToInt32(Graphics.FromHwnd(Handle).MeasureString(Text, Font).Width), 15); 36 | } 37 | 38 | protected override void OnPaint(PaintEventArgs pevent) 39 | { 40 | Graphics g = pevent.Graphics; 41 | g.Clear(Parent.BackColor); 42 | g.SmoothingMode = SmoothingMode.HighQuality; 43 | g.InterpolationMode = InterpolationMode.HighQualityBicubic; 44 | using ( 45 | SolidBrush backColorBrush = new SolidBrush(BackColor), 46 | foreColorBrush = new SolidBrush(ForeColor)) 47 | using (Pen foreColorPen = new Pen(Color.FromArgb(100, ForeColor)), overlayPen = new Pen(_overlapColor)) 48 | { 49 | g.DrawEllipse(foreColorPen, 0, 0, 14, 14); 50 | g.DrawEllipse(overlayPen, 0, 0, 14, 14); 51 | if (Checked) 52 | { 53 | g.FillEllipse(backColorBrush, 3, 3, 8, 8); 54 | using (GraphicsPath path = new GraphicsPath()) 55 | { 56 | using (GraphicsPath clipPath = new GraphicsPath()) 57 | { 58 | path.AddPolygon(new[] {new Point(2, 12), new Point(11, 11), new Point(11, 2)}); 59 | clipPath.AddEllipse(3, 3, 8, 8); 60 | g.SetClip(clipPath); 61 | using (SolidBrush brush = new SolidBrush(Color.FromArgb(50, 20, 20, 20))) 62 | { 63 | g.FillPath(brush, path); 64 | } 65 | 66 | g.ResetClip(); 67 | } 68 | } 69 | } 70 | 71 | g.DrawString(Text, Font, foreColorBrush, 18, (Height - g.MeasureString(Text, Font).Height) / 2); 72 | } 73 | } 74 | 75 | protected override void OnMouseEnter(EventArgs e) 76 | { 77 | _overlapColor = _hoverOverlay; 78 | Invalidate(); 79 | base.OnMouseEnter(e); 80 | } 81 | 82 | protected override void OnMouseUp(MouseEventArgs e) 83 | { 84 | _overlapColor = _hoverOverlay; 85 | Invalidate(); 86 | base.OnMouseUp(e); 87 | } 88 | 89 | protected override void OnMouseLeave(EventArgs e) 90 | { 91 | _overlapColor = Color.FromArgb(0, 0, 0, 0); 92 | Invalidate(); 93 | base.OnMouseLeave(e); 94 | } 95 | 96 | protected override void OnMouseDown(MouseEventArgs e) 97 | { 98 | _overlapColor = _downOverlay; 99 | Invalidate(); 100 | base.OnMouseDown(e); 101 | } 102 | 103 | protected override void OnGotFocus(EventArgs e) 104 | { 105 | _overlapColor = _hoverOverlay; 106 | Invalidate(); 107 | base.OnGotFocus(e); 108 | } 109 | 110 | protected override void OnLostFocus(EventArgs e) 111 | { 112 | _overlapColor = Color.FromArgb(0, 0, 0, 0); 113 | Invalidate(); 114 | base.OnLostFocus(e); 115 | } 116 | 117 | protected override void OnKeyDown(KeyEventArgs kevent) 118 | { 119 | //Enter does not fire keydown 120 | if (kevent.KeyCode == Keys.Space) 121 | _overlapColor = _downOverlay; 122 | Invalidate(); 123 | base.OnKeyDown(kevent); 124 | } 125 | 126 | protected override void OnKeyUp(KeyEventArgs kevent) 127 | { 128 | if (kevent.KeyCode == Keys.Space) 129 | _overlapColor = _hoverOverlay; 130 | base.OnKeyUp(kevent); 131 | } 132 | } 133 | } -------------------------------------------------------------------------------- /Dio/DioTextBox.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.Windows.Forms; 6 | 7 | namespace Dio 8 | { 9 | public class DioTextBox : Control 10 | { 11 | private Color _overlapColor = Color.FromArgb(0, 0, 0, 0); 12 | 13 | public DioTextBox() 14 | { 15 | Size = new Size(150, 22); 16 | SetStyle( 17 | ControlStyles.AllPaintingInWmPaint | ControlStyles.CacheText | ControlStyles.DoubleBuffer | 18 | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true); 19 | BackColor = Color.White; 20 | ForeColor = DioDefaults.DefaultDarkForeColor; 21 | BorderColor = DioDefaults.DefaultBackColor; 22 | Font = DioDefaults.DefaultFont; 23 | InitialBorderColor = DioDefaults.DefaultBorderColor; 24 | _overlapColor = InitialBorderColor; 25 | if (this.InlineTextBox == null) 26 | this.InlineTextBox = new TextBox(); 27 | 28 | this.InlineTextBox.BorderStyle = BorderStyle.None; 29 | this.InlineTextBox.Location = new Point(3, 4); 30 | this.InlineTextBox.GotFocus += (sender, args) => OnGotFocus(args); 31 | this.InlineTextBox.LostFocus += (sender, args) => OnLostFocus(args); 32 | this.InlineTextBox.MouseDown += (sender, args) => OnMouseDown(args); 33 | this.InlineTextBox.MouseLeave += (sender, args) => OnMouseLeave(args); 34 | this.InlineTextBox.MouseEnter += (sender, args) => OnMouseEnter(args); 35 | this.InlineTextBox.Multiline = Multiline; 36 | this.InlineTextBox.MultilineChanged += (sender, args) => 37 | { 38 | OnSizeChanged(args); 39 | Multiline = this.InlineTextBox.Multiline; 40 | }; 41 | this.InlineTextBox.TextChanged += (sender, args) => Text = this.InlineTextBox.Text; 42 | this.InlineTextBox.BackColor = BackColor; 43 | this.InlineTextBox.ForeColor = ForeColor; 44 | HandleCreated += (sender, args) => { DoubleBuffered = true; }; 45 | Controls.Add(this.InlineTextBox); 46 | BackColorChanged += (sender, args) => this.InlineTextBox.BackColor = BackColor; 47 | ForeColorChanged += (sender, args) => this.InlineTextBox.ForeColor = ForeColor; 48 | } 49 | 50 | //[Browsable(false)] 51 | //[EditorBrowsable(EditorBrowsableState.Never)] 52 | //[Bindable(true)] 53 | public TextBox InlineTextBox { get; set; } 54 | 55 | [Category("Appearance")] 56 | [Browsable(true)] 57 | [EditorBrowsable(EditorBrowsableState.Always)] 58 | [Bindable(false)] 59 | public Color BorderColor { get; set; } 60 | 61 | [Category("Appearance")] 62 | [Browsable(true)] 63 | [EditorBrowsable(EditorBrowsableState.Always)] 64 | [Bindable(false)] 65 | public Color InitialBorderColor { get; set; } 66 | 67 | public bool Multiline { get; set; } 68 | 69 | public new Size Size 70 | { 71 | get { return base.Size; } 72 | set 73 | { 74 | base.Size = value; 75 | if (this.InlineTextBox != null) this.InlineTextBox.Size = new Size(base.Size.Width - 6, base.Size.Height - 6); 76 | } 77 | } 78 | 79 | protected override void OnPaint(PaintEventArgs pevent) 80 | { 81 | Graphics g = pevent.Graphics; 82 | g.Clear(Parent.BackColor); 83 | g.SmoothingMode = SmoothingMode.HighQuality; 84 | g.InterpolationMode = InterpolationMode.HighQualityBicubic; 85 | using (SolidBrush backColorBrush = new SolidBrush(BackColor)) 86 | using (Pen borderPen = new Pen(_overlapColor)) 87 | { 88 | g.FillRectangle(backColorBrush, -1, -1, Width + 1, Height + 1); 89 | g.DrawRectangle(borderPen, 0, 0, Width - 1, Height - 1); 90 | } 91 | } 92 | 93 | protected override void OnMouseEnter(EventArgs e) 94 | { 95 | if (!this.InlineTextBox.Focused) 96 | { 97 | _overlapColor = Color.FromArgb(175, BorderColor); 98 | Invalidate(); 99 | base.OnMouseEnter(e); 100 | } 101 | } 102 | 103 | protected override void OnMouseLeave(EventArgs e) 104 | { 105 | if (!this.InlineTextBox.Focused) 106 | { 107 | _overlapColor = InitialBorderColor; 108 | Invalidate(); 109 | base.OnMouseLeave(e); 110 | } 111 | } 112 | 113 | protected override void OnMouseDown(MouseEventArgs e) 114 | { 115 | _overlapColor = BorderColor; 116 | Invalidate(); 117 | if (!this.InlineTextBox.Focused) 118 | this.InlineTextBox.Focus(); 119 | base.OnMouseDown(e); 120 | } 121 | 122 | protected override void OnHandleCreated(EventArgs e) 123 | { 124 | if (this.InlineTextBox.Multiline) 125 | { 126 | this.InlineTextBox.Size = new Size(Size.Width - 6, Size.Height - 6); 127 | this.InlineTextBox.Text = Text; 128 | } 129 | 130 | base.OnHandleCreated(e); 131 | } 132 | 133 | protected override void OnGotFocus(EventArgs e) 134 | { 135 | _overlapColor = BorderColor; 136 | Invalidate(); 137 | if (!this.InlineTextBox.Focused) 138 | this.InlineTextBox.Focus(); 139 | base.OnGotFocus(e); 140 | } 141 | 142 | protected override void OnLostFocus(EventArgs e) 143 | { 144 | _overlapColor = InitialBorderColor; 145 | Invalidate(); 146 | base.OnLostFocus(e); 147 | } 148 | 149 | protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) 150 | { 151 | if (Multiline) 152 | base.SetBoundsCore(x, y, width, height, specified); 153 | else 154 | base.SetBoundsCore(x, y, width, 22, specified); 155 | } 156 | 157 | protected override void OnSizeChanged(EventArgs e) 158 | { 159 | if (this.InlineTextBox != null) 160 | if (this.InlineTextBox.Multiline) 161 | this.InlineTextBox.Size = new Size(Size.Width - 6, Size.Height - 6); 162 | else 163 | this.InlineTextBox.Size = new Size(Size.Width - 6, this.InlineTextBox.Height); 164 | base.OnSizeChanged(e); 165 | } 166 | 167 | protected override void OnTextChanged(EventArgs e) 168 | { 169 | this.InlineTextBox.Text = Text; 170 | Invalidate(); 171 | base.OnTextChanged(e); 172 | } 173 | } 174 | } -------------------------------------------------------------------------------- /Dio/GlobalHelpers.cs: -------------------------------------------------------------------------------- 1 | #region 2 | 3 | using System; 4 | using System.Drawing; 5 | using System.Drawing.Drawing2D; 6 | using System.IO; 7 | 8 | #endregion 9 | 10 | namespace Dio 11 | { 12 | internal static class GlobalHelpers 13 | { 14 | public static readonly string DownArrowBase64String = 15 | "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAh0lEQVQ4T93TMQrCUAzG8V9x8QziiYSuXdzFC7h4AcELOPQAdXYovZCHEATlgQV5GFTe1ozJlz/kS1IpjKqw3wQBVyy++JI0y1GTe7DCBbMAckeNIQKk/BanALBB+16LtnDELoMcsM/BESDlz2heDR3WePwKSLo5eoxz3z6NNcFD+vu3ij14Aqz/DxGbKB7CAAAAAElFTkSuQmCC"; 16 | 17 | 18 | public static GraphicsPath GetRoundedRect(Rectangle baseRect, 19 | int radius) 20 | { 21 | int corner = radius * 2; 22 | GraphicsPath gp = new GraphicsPath(); 23 | gp.AddArc(new Rectangle(baseRect.X, baseRect.Y, corner, corner), -180, 90); 24 | gp.AddArc(new Rectangle(baseRect.Width - corner + baseRect.X, baseRect.Y, corner, corner), -90, 90); 25 | gp.AddArc( 26 | new Rectangle(baseRect.Width - corner + baseRect.X, baseRect.Height - corner + baseRect.Y, corner, 27 | corner), 0, 90); 28 | gp.AddArc(new Rectangle(baseRect.X, baseRect.Height - corner + baseRect.Y, corner, corner), 90, 90); 29 | gp.CloseAllFigures(); 30 | return gp; 31 | } 32 | 33 | public static GraphicsPath GetRoundedRect(RectangleF baseRect, 34 | float radius) 35 | { 36 | float corner = radius * 2; 37 | GraphicsPath GP = new GraphicsPath(); 38 | GP.AddArc(new RectangleF(baseRect.X, baseRect.Y, corner, corner), -180, 90); 39 | GP.AddArc(new RectangleF(baseRect.Width - corner + baseRect.X, baseRect.Y, corner, corner), -90, 90); 40 | GP.AddArc( 41 | new RectangleF(baseRect.Width - corner + baseRect.X, baseRect.Height - corner + baseRect.Y, corner, 42 | corner), 0, 90); 43 | GP.AddArc(new RectangleF(baseRect.X, baseRect.Height - corner + baseRect.Y, corner, corner), 90, 90); 44 | GP.CloseAllFigures(); 45 | return GP; 46 | } 47 | 48 | public static void DrawDownFade(Graphics g, Rectangle area, Color finalColor) 49 | { 50 | using (LinearGradientBrush brush = new LinearGradientBrush(area, Color.Transparent, finalColor, 270)) 51 | { 52 | g.FillRectangle(brush, area); 53 | } 54 | 55 | /* 56 | int floorIncrements = finalColor.A / area.Height; 57 | for (int i = 0; i < area.Height; i++) 58 | { 59 | using (Pen pen = new Pen(Color.FromArgb(finalColor.A - (floorIncrements * (i + 1)), finalColor))) 60 | g.DrawLine(pen, area.X, area.Y + i, area.Width, area.Y + i); 61 | } 62 | */ 63 | } 64 | 65 | /// 66 | /// Changes the overall transparency of an image 67 | /// 68 | /// The input image to be tuned 69 | /// the desired alpha value. It is based on the 255 alpha pixels 70 | /// To conserve the antialiasing on the image 71 | /// 72 | public static Image TuneTransparency(Image originalImage, int alpha, bool antialias) 73 | { 74 | //Cast & clone image to bitmap 75 | Bitmap bitmap = new Bitmap(originalImage); 76 | //Cycle through all pixels 77 | Color pixel; 78 | 79 | //ratio between a max byte and desired alpha byte, this achieves the conservation of antialiasing 80 | int ratio = 255 / alpha; 81 | for (int i = 0; i < originalImage.Width; i++) 82 | for (int j = 0; j < originalImage.Height; j++) 83 | { 84 | //Get pixel color 85 | pixel = bitmap.GetPixel(i, j); 86 | 87 | //If pixel is not already transparent 88 | if (pixel.A != 0) 89 | bitmap.SetPixel(i, j, Color.FromArgb( 90 | //If antialiasing is enabled use the pixel alpha/ratio else just use the set alpha 91 | antialias ? pixel.A / ratio : alpha, 92 | pixel)); 93 | } 94 | 95 | return bitmap; 96 | } 97 | 98 | /// 99 | /// Lightens a color 100 | /// 101 | /// Original color 102 | /// The amount of bytes to lighten the color 103 | /// 104 | public static Color ChangeColor(Color originalColor, int difference) 105 | { 106 | return 107 | Color.FromArgb(originalColor.R + difference > 255 ? 255 : originalColor.R + difference, 108 | originalColor.G + difference > 255 ? 255 : originalColor.G + difference, 109 | originalColor.B + difference > 255 ? 255 : originalColor.B + difference); 110 | } 111 | 112 | /// 113 | /// Transforms a base64 string to an image 114 | /// 115 | /// Base64 image string 116 | /// 117 | public static Image Base64ToImage(string base64string) 118 | { 119 | MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64string)); 120 | return Image.FromStream(stream); 121 | } 122 | } 123 | } -------------------------------------------------------------------------------- /Dio/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Dio")] 9 | [assembly: AssemblyDescription("Control library")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("uint32labs")] 12 | [assembly: AssemblyProduct("Dio")] 13 | [assembly: AssemblyCopyright("Copyright © 2018")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("d8affcd4-5d23-49b0-930a-9d88d5937bda")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /MentQ/GlobalHelpers.cs: -------------------------------------------------------------------------------- 1 | #region 2 | 3 | using System; 4 | using System.Drawing; 5 | using System.Drawing.Drawing2D; 6 | using System.IO; 7 | 8 | #endregion 9 | 10 | namespace MentQ 11 | { 12 | internal static class GlobalHelpers 13 | { 14 | public static readonly string DownArrowBase64String = 15 | "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAh0lEQVQ4T93TMQrCUAzG8V9x8QziiYSuXdzFC7h4AcELOPQAdXYovZCHEATlgQV5GFTe1ozJlz/kS1IpjKqw3wQBVyy++JI0y1GTe7DCBbMAckeNIQKk/BanALBB+16LtnDELoMcsM/BESDlz2heDR3WePwKSLo5eoxz3z6NNcFD+vu3ij14Aqz/DxGbKB7CAAAAAElFTkSuQmCC"; 16 | 17 | 18 | public static GraphicsPath GetRoundedRect(Rectangle baseRect, 19 | int radius) 20 | { 21 | int corner = radius * 2; 22 | GraphicsPath gp = new GraphicsPath(); 23 | gp.AddArc(new Rectangle(baseRect.X, baseRect.Y, corner, corner), -180, 90); 24 | gp.AddArc(new Rectangle(baseRect.Width - corner + baseRect.X, baseRect.Y, corner, corner), -90, 90); 25 | gp.AddArc( 26 | new Rectangle(baseRect.Width - corner + baseRect.X, baseRect.Height - corner + baseRect.Y, corner, 27 | corner), 0, 90); 28 | gp.AddArc(new Rectangle(baseRect.X, baseRect.Height - corner + baseRect.Y, corner, corner), 90, 90); 29 | gp.CloseAllFigures(); 30 | return gp; 31 | } 32 | 33 | public static GraphicsPath GetRoundedRect(RectangleF baseRect, 34 | float radius) 35 | { 36 | float corner = radius * 2; 37 | GraphicsPath GP = new GraphicsPath(); 38 | GP.AddArc(new RectangleF(baseRect.X, baseRect.Y, corner, corner), -180, 90); 39 | GP.AddArc(new RectangleF(baseRect.Width - corner + baseRect.X, baseRect.Y, corner, corner), -90, 90); 40 | GP.AddArc( 41 | new RectangleF(baseRect.Width - corner + baseRect.X, baseRect.Height - corner + baseRect.Y, corner, 42 | corner), 0, 90); 43 | GP.AddArc(new RectangleF(baseRect.X, baseRect.Height - corner + baseRect.Y, corner, corner), 90, 90); 44 | GP.CloseAllFigures(); 45 | return GP; 46 | } 47 | 48 | public static void DrawDownFade(Graphics g, Rectangle area, Color finalColor) 49 | { 50 | using (LinearGradientBrush brush = new LinearGradientBrush(area, Color.Transparent, finalColor, 270)) 51 | { 52 | g.FillRectangle(brush, area); 53 | } 54 | 55 | /* 56 | int floorIncrements = finalColor.A / area.Height; 57 | for (int i = 0; i < area.Height; i++) 58 | { 59 | using (Pen pen = new Pen(Color.FromArgb(finalColor.A - (floorIncrements * (i + 1)), finalColor))) 60 | g.DrawLine(pen, area.X, area.Y + i, area.Width, area.Y + i); 61 | } 62 | */ 63 | } 64 | 65 | /// 66 | /// Changes the overall transparency of an image 67 | /// 68 | /// The input image to be tuned 69 | /// the desired alpha value. It is based on the 255 alpha pixels 70 | /// To conserve the antialiasing on the image 71 | /// 72 | public static Image TuneTransparency(Image originalImage, int alpha, bool antialias) 73 | { 74 | //Cast & clone image to bitmap 75 | Bitmap bitmap = new Bitmap(originalImage); 76 | //Cycle through all pixels 77 | Color pixel; 78 | 79 | //ratio between a max byte and desired alpha byte, this achieves the conservation of antialiasing 80 | int ratio = 255 / alpha; 81 | for (int i = 0; i < originalImage.Width; i++) 82 | for (int j = 0; j < originalImage.Height; j++) 83 | { 84 | //Get pixel color 85 | pixel = bitmap.GetPixel(i, j); 86 | 87 | //If pixel is not already transparent 88 | if (pixel.A != 0) 89 | bitmap.SetPixel(i, j, Color.FromArgb( 90 | //If antialiasing is enabled use the pixel alpha/ratio else just use the set alpha 91 | antialias ? pixel.A / ratio : alpha, 92 | pixel)); 93 | } 94 | 95 | return bitmap; 96 | } 97 | 98 | /// 99 | /// Lightens a color 100 | /// 101 | /// Original color 102 | /// The amount of bytes to lighten the color 103 | /// 104 | public static Color ChangeColor(Color originalColor, int difference) 105 | { 106 | return 107 | Color.FromArgb(originalColor.R + difference > 255 ? 255 : originalColor.R + difference, 108 | originalColor.G + difference > 255 ? 255 : originalColor.G + difference, 109 | originalColor.B + difference > 255 ? 255 : originalColor.B + difference); 110 | } 111 | 112 | /// 113 | /// Transforms a base64 string to an image 114 | /// 115 | /// Base64 image string 116 | /// 117 | public static Image Base64ToImage(string base64string) 118 | { 119 | MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64string)); 120 | return Image.FromStream(stream); 121 | } 122 | } 123 | } -------------------------------------------------------------------------------- /MentQ/MentQ.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {9C4EAB90-4F39-411D-85DA-8B00E1291B6E} 8 | Library 9 | Properties 10 | MentQ 11 | MentQ 12 | v4.6.1 13 | 512 14 | 15 | 16 | true 17 | full 18 | false 19 | bin\Debug\ 20 | DEBUG;TRACE 21 | prompt 22 | 4 23 | 24 | 25 | pdbonly 26 | true 27 | bin\Release\ 28 | TRACE 29 | prompt 30 | 4 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | Component 49 | 50 | 51 | Component 52 | 53 | 54 | Component 55 | 56 | 57 | Component 58 | 59 | 60 | Component 61 | 62 | 63 | Component 64 | 65 | 66 | Component 67 | 68 | 69 | Component 70 | 71 | 72 | Component 73 | 74 | 75 | Component 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /MentQ/MentQButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.Windows.Forms; 6 | 7 | namespace MentQ 8 | { 9 | [Category("MentQ")] 10 | public class MentQButton : Button 11 | { 12 | private Color _overlapColor; 13 | private bool _underline; 14 | private Color _underlineColor; 15 | private int _underlineSize; 16 | 17 | public MentQButton() 18 | { 19 | Font = new Font("Verdana", 7); 20 | ForeColor = Color.White; 21 | SetStyle( 22 | ControlStyles.CacheText | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | 23 | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true); 24 | DoubleBuffered = true; 25 | BackColor = MentQDefaults.MentQBlue; 26 | UnderlineSize = 2; 27 | UnderlineColor = Color.FromArgb(100, 70, 70, 70); 28 | } 29 | 30 | [Category("Appearance")] 31 | public override string Text 32 | { 33 | get { return base.Text; } 34 | set 35 | { 36 | base.Text = value; 37 | Invalidate(); 38 | } 39 | } 40 | 41 | [Category("Appearance")] 42 | public bool Underline 43 | { 44 | get { return _underline; } 45 | set 46 | { 47 | _underline = value; 48 | Invalidate(); 49 | } 50 | } 51 | 52 | [Category("Appearance")] 53 | public int UnderlineSize 54 | { 55 | get { return _underlineSize; } 56 | set 57 | { 58 | _underlineSize = value; 59 | Invalidate(); 60 | } 61 | } 62 | 63 | [Category("Appearance")] 64 | public Color UnderlineColor 65 | { 66 | get { return _underlineColor; } 67 | set 68 | { 69 | _underlineColor = value; 70 | Invalidate(); 71 | } 72 | } 73 | 74 | protected override void OnPaint(PaintEventArgs pevent) 75 | { 76 | Graphics G = pevent.Graphics; 77 | G.Clear(Parent.BackColor); 78 | G.SmoothingMode = SmoothingMode.HighQuality; 79 | G.InterpolationMode = InterpolationMode.HighQualityBicubic; 80 | using (SolidBrush backColorBrush = new SolidBrush(BackColor)) 81 | { 82 | G.FillPath(backColorBrush, 83 | GlobalHelpers.GetRoundedRect(new RectangleF(-1, -1, Width + 1, Height + 1), 5)); 84 | } 85 | 86 | using (SolidBrush overlapBrush = new SolidBrush(_overlapColor)) 87 | { 88 | G.FillPath(overlapBrush, 89 | GlobalHelpers.GetRoundedRect(new RectangleF(-1, -1, Width + 1, Height + 1), 5)); 90 | } 91 | 92 | using (SolidBrush textBrush = new SolidBrush(ForeColor)) 93 | { 94 | PointF textPosition = new PointF((Width - G.MeasureString(Text, Font).Width) / 2, 95 | (Height - G.MeasureString(Text, Font).Height) / 2); 96 | if (ImageList != null) 97 | { 98 | int index = ImageIndex; 99 | if (!string.IsNullOrEmpty(ImageKey) && index != -1) 100 | index = ImageList.Images.IndexOfKey(ImageKey); 101 | if (index != -1) 102 | ImageList.Draw(G, Convert.ToInt32(textPosition.X) - ImageList.ImageSize.Width - 5, 103 | (Height - ImageList.ImageSize.Height) / 2, ImageIndex); 104 | } 105 | else if (Image != null) 106 | { 107 | G.DrawImage(Image, 108 | new Point(Convert.ToInt32(textPosition.X) - Image.Width - 5, (Height - Image.Height) / 2)); 109 | } 110 | 111 | G.DrawString(Text, Font, textBrush, textPosition); 112 | } 113 | 114 | if (Underline) 115 | using (SolidBrush underlineBrush = new SolidBrush(UnderlineColor)) 116 | { 117 | G.SetClip(new Rectangle(0, Height - UnderlineSize, Width, UnderlineSize)); 118 | G.FillPath(underlineBrush, 119 | GlobalHelpers.GetRoundedRect(new RectangleF(-1, -1, Width + 1, Height + 1), 5)); 120 | } 121 | 122 | if (Enabled == false) 123 | using (SolidBrush disabledBrush = new SolidBrush(Color.FromArgb(100, 222, 222, 222))) 124 | { 125 | G.FillPath(disabledBrush, 126 | GlobalHelpers.GetRoundedRect(new RectangleF(-1, -1, Width + 1, Height + 1), 5)); 127 | } 128 | } 129 | 130 | protected override void OnMouseEnter(EventArgs e) 131 | { 132 | _overlapColor = Color.FromArgb(40, 50, 50, 50); 133 | Invalidate(); 134 | base.OnMouseEnter(e); 135 | } 136 | 137 | protected override void OnMouseUp(MouseEventArgs e) 138 | { 139 | _overlapColor = Color.FromArgb(40, 50, 50, 50); 140 | Invalidate(); 141 | base.OnMouseUp(e); 142 | } 143 | 144 | protected override void OnMouseLeave(EventArgs e) 145 | { 146 | _overlapColor = Color.FromArgb(0, 0, 0, 0); 147 | Invalidate(); 148 | base.OnMouseLeave(e); 149 | } 150 | 151 | protected override void OnMouseDown(MouseEventArgs e) 152 | { 153 | _overlapColor = Color.FromArgb(60, 0, 0, 0); 154 | Invalidate(); 155 | base.OnMouseDown(e); 156 | } 157 | 158 | protected override void OnGotFocus(EventArgs e) 159 | { 160 | _overlapColor = Color.FromArgb(40, 50, 50, 50); 161 | Invalidate(); 162 | base.OnGotFocus(e); 163 | } 164 | 165 | protected override void OnLostFocus(EventArgs e) 166 | { 167 | _overlapColor = Color.FromArgb(0, 0, 0, 0); 168 | Invalidate(); 169 | base.OnLostFocus(e); 170 | } 171 | } 172 | } -------------------------------------------------------------------------------- /MentQ/MentQCheckBox.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.Windows.Forms; 6 | 7 | namespace MentQ 8 | { 9 | [Category("MentQ")] 10 | public class MentQCheckBox : CheckBox 11 | { 12 | public MentQCheckBox() 13 | { 14 | Font = new Font("Verdana", 7); 15 | ForeColor = Color.Black; 16 | BackColor = MentQDefaults.MentQBlue; 17 | SetStyle( 18 | ControlStyles.CacheText | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | 19 | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true); 20 | AutoSize = true; 21 | } 22 | 23 | [Category("Appearance")] 24 | public override string Text 25 | { 26 | get { return base.Text; } 27 | set 28 | { 29 | base.Text = value; 30 | Invalidate(); 31 | } 32 | } 33 | 34 | public override Size GetPreferredSize(Size proposedSize) 35 | { 36 | return new Size(17 + Convert.ToInt32(Graphics.FromHwnd(Handle).MeasureString(Text, Font).Width), 14); 37 | } 38 | 39 | protected override void OnCreateControl() 40 | { 41 | DoubleBuffered = true; 42 | base.OnCreateControl(); 43 | } 44 | 45 | protected override void OnPaint(PaintEventArgs e) 46 | { 47 | base.OnPaint(e); 48 | Graphics G = e.Graphics; 49 | G.SmoothingMode = SmoothingMode.HighQuality; 50 | G.Clear(Parent.BackColor); 51 | using (SolidBrush backBrush = new SolidBrush(Color.FromArgb(5, 30, 30, 30))) 52 | { 53 | G.FillPath(backBrush, GlobalHelpers.GetRoundedRect(new Rectangle(0, 0, 13, 13), 3)); 54 | } 55 | 56 | G.SetClip(new Rectangle(3, 3, 8, 8)); 57 | if (Checked) 58 | using (SolidBrush backColorBrush = new SolidBrush(BackColor)) 59 | { 60 | G.FillPath(backColorBrush, GlobalHelpers.GetRoundedRect(new RectangleF(2, 2, 9, 9), 4.3F)); 61 | } 62 | 63 | G.ResetClip(); 64 | using (Pen pen = new Pen(Color.FromArgb(85, 13, 13, 13))) 65 | { 66 | G.DrawPath(pen, GlobalHelpers.GetRoundedRect(new Rectangle(0, 0, 13, 13), 2)); 67 | } 68 | 69 | using (SolidBrush foreColorBrush = new SolidBrush(ForeColor)) 70 | { 71 | G.DrawString(Text, Font, foreColorBrush, 15, (Height - G.MeasureString(Text, Font).Height) / 2); 72 | } 73 | 74 | if (Enabled == false) 75 | using (SolidBrush disabledBrush = new SolidBrush(Color.FromArgb(100, 222, 222, 222))) 76 | { 77 | G.FillPath(disabledBrush, GlobalHelpers.GetRoundedRect(new Rectangle(0, 0, 13, 13), 3)); 78 | G.DrawString(Text, Font, disabledBrush, 15, (Height - G.MeasureString(Text, Font).Height) / 2); 79 | } 80 | } 81 | } 82 | } -------------------------------------------------------------------------------- /MentQ/MentQDefaults.cs: -------------------------------------------------------------------------------- 1 | #region 2 | 3 | using System.Drawing; 4 | 5 | #endregion 6 | 7 | namespace MentQ 8 | { 9 | internal struct MentQDefaults 10 | { 11 | public static readonly Color MentQBlue = Color.FromArgb(25, 105, 205); 12 | } 13 | } -------------------------------------------------------------------------------- /MentQ/MentQEllipticalProgress.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Drawing; 3 | using System.Drawing.Drawing2D; 4 | using System.Windows.Forms; 5 | 6 | namespace MentQ 7 | { 8 | [Category("MentQ")] 9 | public class MentQEllipticalProgress : ProgressBar 10 | { 11 | private Color _hatchBrushColor; 12 | private HatchStyle _hatchBrushStyle; 13 | private bool _useHatchBrush; 14 | 15 | 16 | public MentQEllipticalProgress() 17 | { 18 | Size = new Size(70, 70); 19 | BackColor = MentQDefaults.MentQBlue; 20 | ForeColor = Color.Black; 21 | DoubleBuffered = true; 22 | SetStyle( 23 | ControlStyles.CacheText | ControlStyles.AllPaintingInWmPaint | 24 | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true); 25 | Font = new Font("Verdana", 8); 26 | HatchBrushStyle = HatchStyle.DarkDownwardDiagonal; 27 | HatchBrushSecondaryColor = Color.FromArgb(30, 200, 200, 200); 28 | UseHatchBrush = false; 29 | Text = "Percent"; 30 | } 31 | 32 | [Browsable(true)] 33 | [EditorBrowsable(EditorBrowsableState.Always)] 34 | [Bindable(false)] 35 | [Category("Appearance")] 36 | public override string Text 37 | { 38 | get { return base.Text; } 39 | set 40 | { 41 | base.Text = value; 42 | Invalidate(); 43 | } 44 | } 45 | 46 | [Browsable(true)] 47 | [EditorBrowsable(EditorBrowsableState.Always)] 48 | [Bindable(false)] 49 | [Category("Appearance")] 50 | public override Font Font 51 | { 52 | get { return base.Font; } 53 | set { base.Font = value; } 54 | } 55 | 56 | [Category("Appearance")] 57 | public HatchStyle HatchBrushStyle 58 | { 59 | get { return _hatchBrushStyle; } 60 | set 61 | { 62 | _hatchBrushStyle = value; 63 | Invalidate(); 64 | } 65 | } 66 | 67 | [Category("Appearance")] 68 | public Color HatchBrushSecondaryColor 69 | { 70 | get { return _hatchBrushColor; } 71 | set 72 | { 73 | _hatchBrushColor = value; 74 | Invalidate(); 75 | } 76 | } 77 | 78 | [Category("Appearance")] 79 | public bool UseHatchBrush 80 | { 81 | get { return _useHatchBrush; } 82 | set 83 | { 84 | _useHatchBrush = value; 85 | Invalidate(); 86 | } 87 | } 88 | 89 | protected override void OnPaint(PaintEventArgs e) 90 | { 91 | Graphics G = e.Graphics; 92 | G.SmoothingMode = SmoothingMode.HighQuality; 93 | G.Clear(Parent.BackColor); 94 | if (UseHatchBrush) 95 | using (HatchBrush backColorBrush = new HatchBrush(HatchBrushStyle, HatchBrushSecondaryColor, BackColor)) 96 | { 97 | G.FillPie(backColorBrush, 0, 0, Width - 1, Height - 1, 270, (int) (360 / (float) Maximum * Value)); 98 | } 99 | else 100 | using (SolidBrush backColorBrush = new SolidBrush(BackColor)) 101 | { 102 | G.FillPie(backColorBrush, 0, 0, Width - 1, Height - 1, 270, (int) (360 / (float) Maximum * Value)); 103 | } 104 | 105 | using (SolidBrush backBrush = new SolidBrush(Color.FromArgb(25, 45, 45, 54))) 106 | { 107 | G.FillEllipse(backBrush, 0, 0, Width - 1, Height - 1); 108 | } 109 | 110 | using (SolidBrush parentBrush = new SolidBrush(Parent.BackColor)) 111 | { 112 | G.FillEllipse(parentBrush, 4, 4, Width - 9, Height - 9); 113 | } 114 | 115 | using (SolidBrush foreColorBrush = new SolidBrush(ForeColor)) 116 | { 117 | G.DrawString(Value.ToString(), Font, foreColorBrush, 118 | (Width - G.MeasureString(Value.ToString(), Font).Width) / 2, 119 | (Height - G.MeasureString(Value.ToString(), Font).Height) / 2 - 120 | (string.IsNullOrEmpty(Text) ? 0 : 2)); 121 | if (!string.IsNullOrEmpty(Text)) 122 | using (SolidBrush titleBrush = new SolidBrush(Color.FromArgb(150, ForeColor))) 123 | using (Font titleFont = new Font("Segoe UI", 6, FontStyle.Bold)) 124 | { 125 | G.DrawString(Text.ToUpper(), titleFont, titleBrush, 126 | (Width - G.MeasureString(Text.ToUpper(), titleFont).Width) / 2, 127 | (Height - G.MeasureString(Text.ToUpper(), titleFont).Height) / 2 + 10); 128 | } 129 | } 130 | 131 | base.OnPaint(e); 132 | } 133 | } 134 | } -------------------------------------------------------------------------------- /MentQ/MentQGroupBox.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Drawing; 5 | using System.Windows.Forms; 6 | 7 | namespace MentQ 8 | { 9 | [Category("MentQ")] 10 | public class MentQGroupBox : ContainerControl 11 | { 12 | public delegate void CloseChangedEventHandler(object sender, EventArgs e); 13 | 14 | private readonly Image downArrow = 15 | GlobalHelpers.TuneTransparency(GlobalHelpers.Base64ToImage(GlobalHelpers.DownArrowBase64String), 80, true); 16 | 17 | private readonly List invisibleControls = new List(); 18 | 19 | private readonly Image upArrow = 20 | GlobalHelpers.TuneTransparency(GlobalHelpers.Base64ToImage(GlobalHelpers.DownArrowBase64String), 80, true); 21 | 22 | private bool _closed; 23 | 24 | private int lastHeight; 25 | 26 | public MentQGroupBox() 27 | { 28 | BackColor = Color.FromArgb(255, 255, 255); 29 | ForeColor = Color.FromArgb(20, 20, 20); 30 | BorderColor = Color.FromArgb(180, 180, 180); 31 | Font = new Font("Segoe UI", 8.25F); 32 | SetStyle( 33 | ControlStyles.AllPaintingInWmPaint | ControlStyles.CacheText | ControlStyles.OptimizedDoubleBuffer | 34 | ControlStyles.ResizeRedraw, true); 35 | Size = new Size(150, 100); 36 | Closable = false; 37 | upArrow.RotateFlip(RotateFlipType.RotateNoneFlipY); 38 | } 39 | 40 | private Color _borderColor { get; set; } 41 | 42 | [Category("Appearance")] 43 | public Color BorderColor 44 | { 45 | get { return _borderColor; } 46 | set 47 | { 48 | _borderColor = value; 49 | Invalidate(); 50 | } 51 | } 52 | 53 | [Category("Appearance")] 54 | public override string Text 55 | { 56 | get { return base.Text; } 57 | set 58 | { 59 | base.Text = value; 60 | Invalidate(); 61 | } 62 | } 63 | 64 | [Category("Appearance")] 65 | public bool Closed 66 | { 67 | get { return _closed; } 68 | set 69 | { 70 | _closed = value; 71 | OnCloseChanged(); 72 | Invalidate(); 73 | } 74 | } 75 | 76 | [Category("Appearance")] public bool Closable { get; set; } 77 | 78 | [Category("Appearance")] public Color UpperColor { get; set; } 79 | 80 | [Category("Appearance")] public Image Icon { get; set; } 81 | 82 | public event CloseChangedEventHandler ClosedChanged; 83 | 84 | protected override void OnPaint(PaintEventArgs e) 85 | { 86 | Graphics G = e.Graphics; 87 | G.Clear(Parent.BackColor); 88 | using (SolidBrush brush = new SolidBrush(BackColor)) 89 | { 90 | G.FillRectangle(brush, 0, 0, Width, Height); 91 | } 92 | 93 | using (SolidBrush upperBrush = new SolidBrush(UpperColor)) 94 | { 95 | G.FillRectangle(upperBrush, 0, 0, Width, 26); 96 | } 97 | 98 | using (Pen borderPen = new Pen(BorderColor)) 99 | { 100 | G.DrawRectangle(borderPen, 0, 0, Width - 1, Height - 1); 101 | G.DrawLine(borderPen, 0, 26, Width - 1, 26); 102 | } 103 | 104 | using (SolidBrush textBrush = new SolidBrush(ForeColor)) 105 | { 106 | G.DrawString(Text, Font, textBrush, Icon == null ? 7 : 28, 107 | (26 - G.MeasureString(Text, Font).Height) / 2); 108 | } 109 | 110 | if (Icon != null) 111 | G.DrawImage(Icon, new Rectangle(8, 5, 16, 16)); 112 | if (Closable) 113 | if (Closed) 114 | G.DrawImage(upArrow, Width - downArrow.Width - 8, (26 - downArrow.Height) / 2); 115 | else 116 | G.DrawImage(downArrow, Width - downArrow.Width - 8, (26 - downArrow.Height) / 2); 117 | } 118 | 119 | 120 | protected override void OnMouseDown(MouseEventArgs e) 121 | { 122 | if (Closable) 123 | if (e.X > Width - downArrow.Width - 8 && e.X < Width - 8 && e.Y > (26 - downArrow.Height) / 2 && 124 | e.Y < (26 - downArrow.Height) / 2 + downArrow.Height) 125 | Closed = !Closed; 126 | 127 | base.OnMouseDown(e); 128 | } 129 | 130 | public void OnCloseChanged() 131 | { 132 | if (Closed) 133 | { 134 | lastHeight = Size.Height; 135 | foreach (Control control in Controls) 136 | if (control.Location.Y > 27) 137 | if (control.Visible) 138 | control.Visible = false; 139 | else 140 | invisibleControls.Add(control); 141 | 142 | Size = new Size(Width, 27); 143 | } 144 | else 145 | { 146 | foreach (Control control in Controls) 147 | if (!invisibleControls.Contains(control)) 148 | control.Visible = true; 149 | Size = new Size(Width, lastHeight); 150 | invisibleControls.Clear(); 151 | } 152 | 153 | if (ClosedChanged != null) 154 | ClosedChanged(this, new EventArgs()); 155 | } 156 | } 157 | } -------------------------------------------------------------------------------- /MentQ/MentQInfoBox.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.Windows.Forms; 6 | 7 | namespace MentQ 8 | { 9 | [Category("MentQ")] 10 | public class MentQInfoBox : Control 11 | { 12 | public enum Iconlayout 13 | { 14 | None, 15 | Scaled 16 | } 17 | 18 | public enum UnderlineStyle 19 | { 20 | ImageOnly, 21 | Full, 22 | None, 23 | ExcludeImage 24 | } 25 | 26 | private bool _antialias; 27 | private Image _backgroundImage; 28 | private Image _cachedTransparentImage; 29 | private Iconlayout _iconLayout; 30 | private bool _imageContainer; 31 | private Color _imageContainerColor; 32 | private int _imageTransparency; 33 | private string _title; 34 | private UnderlineStyle _underline; 35 | private Color _underlineColor; 36 | private int _underlineSize; 37 | 38 | 39 | public MentQInfoBox() 40 | { 41 | ImageContainerColor = Color.FromArgb(100, 30, 30, 30); 42 | ImageContainer = false; 43 | UnderlineSize = 4; 44 | Underline = UnderlineStyle.Full; 45 | UnderlineColor = Color.FromArgb(100, 70, 70, 70); 46 | AntiAliasImage = true; 47 | Size = new Size(220, 65); 48 | BackColor = MentQDefaults.MentQBlue; 49 | Font = new Font("Verdana", (float) 11.25, FontStyle.Regular); 50 | ForeColor = Color.White; 51 | DoubleBuffered = true; 52 | ImageTransparency = 255; 53 | Title = "Title"; 54 | SetStyle( 55 | ControlStyles.CacheText | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | 56 | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true); 57 | } 58 | 59 | [Category("Appearance")] 60 | public override string Text 61 | { 62 | get { return base.Text; } 63 | set 64 | { 65 | base.Text = value; 66 | Invalidate(); 67 | } 68 | } 69 | 70 | [Category("Appearance")] 71 | public string Title 72 | { 73 | get { return _title; } 74 | set 75 | { 76 | _title = value; 77 | Invalidate(); 78 | } 79 | } 80 | 81 | [Category("Appearance")] 82 | public int ImageTransparency 83 | { 84 | get { return _imageTransparency; } 85 | set 86 | { 87 | _imageTransparency = value; 88 | if (BackgroundImage != null) 89 | if (ImageTransparency > 0) 90 | _cachedTransparentImage = EditBackgroundImage(BackgroundImage); 91 | else 92 | _cachedTransparentImage = null; 93 | Invalidate(); 94 | } 95 | } 96 | 97 | [Category("Appearance")] 98 | public new Iconlayout BackgroundImageLayout 99 | { 100 | get { return _iconLayout; } 101 | set 102 | { 103 | if (BackgroundImage != null) 104 | if (ImageTransparency > 0) 105 | _cachedTransparentImage = EditBackgroundImage(BackgroundImage); 106 | _iconLayout = value; 107 | Invalidate(); 108 | } 109 | } 110 | 111 | [Category("Appearance")] 112 | public bool AntiAliasImage 113 | { 114 | get { return _antialias; } 115 | set 116 | { 117 | _antialias = value; 118 | if (BackgroundImage != null) 119 | if (ImageTransparency > 0) 120 | 121 | _cachedTransparentImage = EditBackgroundImage(BackgroundImage); 122 | Invalidate(); 123 | } 124 | } 125 | 126 | [Category("Appearance")] 127 | public UnderlineStyle Underline 128 | { 129 | get { return _underline; } 130 | set 131 | { 132 | if ((value == UnderlineStyle.Full) | (value == UnderlineStyle.None)) 133 | _underline = value; 134 | if ((value == UnderlineStyle.ImageOnly) | (value == UnderlineStyle.ExcludeImage)) 135 | if (BackgroundImage != null) 136 | _underline = value; 137 | Invalidate(); 138 | } 139 | } 140 | 141 | [Category("Appearance")] 142 | public int UnderlineSize 143 | { 144 | get { return _underlineSize; } 145 | set 146 | { 147 | _underlineSize = value; 148 | Invalidate(); 149 | } 150 | } 151 | 152 | [Category("Appearance")] 153 | public Color UnderlineColor 154 | { 155 | get { return _underlineColor; } 156 | set 157 | { 158 | _underlineColor = value; 159 | Invalidate(); 160 | } 161 | } 162 | 163 | [Category("Appearance")] 164 | public bool ImageContainer 165 | { 166 | get { return _imageContainer; } 167 | set 168 | { 169 | _imageContainer = BackgroundImage == null ? false : value; 170 | 171 | Invalidate(); 172 | } 173 | } 174 | 175 | [Category("Appearance")] 176 | public Color ImageContainerColor 177 | { 178 | get { return _imageContainerColor; } 179 | set 180 | { 181 | _imageContainerColor = value; 182 | Invalidate(); 183 | } 184 | } 185 | 186 | public override Image BackgroundImage 187 | { 188 | get { return _backgroundImage; } 189 | set 190 | { 191 | _backgroundImage = value; 192 | if (ImageTransparency > 0) 193 | _cachedTransparentImage = EditBackgroundImage(BackgroundImage); 194 | Invalidate(); 195 | } 196 | } 197 | 198 | protected override void OnPaint(PaintEventArgs e) 199 | { 200 | Graphics G = e.Graphics; 201 | 202 | G.Clear(Parent.BackColor); 203 | 204 | G.SmoothingMode = SmoothingMode.HighQuality; 205 | 206 | using ( 207 | SolidBrush backColorBrush = new SolidBrush(BackColor), 208 | foreColorBrush = new SolidBrush(ForeColor), 209 | titleColorBrush = new SolidBrush(Color.FromArgb(180, ForeColor))) 210 | { 211 | G.FillPath(backColorBrush, 212 | GlobalHelpers.GetRoundedRect(new Rectangle(-1, -1, Width + 1, Height + 1), 5)); 213 | DrawImage(G); 214 | if (BackgroundImage != null) 215 | DrawUnderline(G, CalculateImageSize(BackgroundImage)); 216 | else 217 | DrawUnderline(G, new SizeF()); 218 | 219 | if (!string.IsNullOrEmpty(Title)) 220 | G.DrawString(Title.ToUpper(), new Font("Verdana", 8), 221 | titleColorBrush, 222 | 12, (Height - G.MeasureString(Text, Font).Height) / 2 - 7); 223 | 224 | G.DrawString(Text, Font, foreColorBrush, 12, 225 | (Height - G.MeasureString(Text, Font).Height) / 2 + (string.IsNullOrEmpty(Title) ? 0 : 8)); 226 | } 227 | 228 | if (!Enabled) 229 | using (SolidBrush disabledBrush = new SolidBrush(Color.FromArgb(100, 222, 222, 222))) 230 | { 231 | G.FillPath(disabledBrush, 232 | GlobalHelpers.GetRoundedRect(new Rectangle(-1, -1, Width + 1, Height + 1), 4)); 233 | } 234 | 235 | base.OnPaint(e); 236 | } 237 | 238 | private void DrawImage(Graphics G) 239 | { 240 | #region "Background Image" 241 | 242 | if (BackgroundImage != null) 243 | { 244 | SizeF destinationSize = CalculateImageSize(BackgroundImage); 245 | 246 | #region "Image Container" 247 | 248 | if (ImageContainer) 249 | { 250 | G.SetClip(CalculateContainerPosition(destinationSize)); 251 | 252 | using (SolidBrush brush = new SolidBrush(ImageContainerColor)) 253 | { 254 | G.FillPath(brush, 255 | GlobalHelpers.GetRoundedRect(new RectangleF(-1, -1, Width + 1, Height + 1), 5)); 256 | } 257 | 258 | G.ResetClip(); 259 | } 260 | 261 | #endregion 262 | 263 | 264 | #region "Draw Image" 265 | 266 | if (_cachedTransparentImage != null) 267 | if (BackgroundImageLayout == Iconlayout.Scaled) 268 | G.DrawImage(_cachedTransparentImage, 269 | new RectangleF( 270 | Width - destinationSize.Width - 5, (Height - destinationSize.Height) / 2, 271 | destinationSize.Width, destinationSize.Height)); 272 | else 273 | G.DrawImage(_cachedTransparentImage, Width - BackgroundImage.Width - 5, 274 | (Height - BackgroundImage.Height) / 2); 275 | 276 | #endregion 277 | } 278 | 279 | #endregion 280 | } 281 | 282 | private void DrawUnderline(Graphics G, SizeF imageSizeF) 283 | { 284 | using ( 285 | SolidBrush underlineBrush = new SolidBrush(UnderlineColor), backColorBrush = new SolidBrush(BackColor)) 286 | { 287 | if (Underline != UnderlineStyle.None) 288 | { 289 | Rectangle clipping = new Rectangle(0, Height - UnderlineSize, Width, UnderlineSize); 290 | if (BackgroundImage != null) 291 | { 292 | Rectangle imageContainerPosition = CalculateContainerPosition(imageSizeF); 293 | switch (Underline) 294 | { 295 | case UnderlineStyle.ImageOnly: 296 | if (BackgroundImage != null) 297 | clipping = new Rectangle(imageContainerPosition.X, Height - UnderlineSize, 298 | imageContainerPosition.Width, UnderlineSize); 299 | break; 300 | case UnderlineStyle.ExcludeImage: 301 | if (BackgroundImage != null) 302 | clipping = new Rectangle(0, Height - UnderlineSize, 303 | Width - imageContainerPosition.Width + 5, UnderlineSize); 304 | break; 305 | } 306 | } 307 | 308 | G.SetClip(clipping); 309 | G.FillPath(underlineBrush, 310 | GlobalHelpers.GetRoundedRect(new Rectangle(-1, -1, Width + 1, Height + 1), 5)); 311 | G.ResetClip(); 312 | //DrawImage(G); 313 | //G.FillPath(underlineBrush, 314 | // GlobalHelpers.GetRoundedRect(new Rectangle(-1, -1, Width + 1, Height + 1), 5)); 315 | 316 | //G.SetClip(new Rectangle(-1, -1, Width + 1, Height - UnderlineSize)); 317 | //G.FillPath(backColorBrush, 318 | // GlobalHelpers.GetRoundedRect(new Rectangle(-1, -1, Width + 1, Height - UnderlineSize), 5)); 319 | //DrawImage(G); 320 | //G.ResetClip(); 321 | } 322 | } 323 | } 324 | 325 | private Image EditBackgroundImage(Image value) 326 | { 327 | return GlobalHelpers.TuneTransparency(value, ImageTransparency, 328 | AntiAliasImage); 329 | } 330 | 331 | private SizeF CalculateImageSize(Image value) 332 | { 333 | if (BackgroundImageLayout == Iconlayout.Scaled) 334 | { 335 | float ratio = (float) value.Height / Height; 336 | return new SizeF(value.Width / ratio - 15, 337 | value.Height / ratio - 15); 338 | } 339 | 340 | return new SizeF(value.Width, value.Height); 341 | } 342 | 343 | private Rectangle CalculateContainerPosition(SizeF imageSize) 344 | { 345 | return new Rectangle(Width - Convert.ToInt32(imageSize.Width) - 10, 0, 346 | Convert.ToInt32(imageSize.Width) + 15, 347 | Height); 348 | } 349 | } 350 | } -------------------------------------------------------------------------------- /MentQ/MentQNotification.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Drawing; 3 | using System.Drawing.Drawing2D; 4 | using System.Windows.Forms; 5 | 6 | namespace MentQ 7 | { 8 | [Category("MentQ")] 9 | public class MentQNotification : Control 10 | { 11 | public enum TextAlign 12 | { 13 | Left, 14 | Center 15 | } 16 | 17 | private Color _effectColor; 18 | private Styles _style; 19 | 20 | public MentQNotification() 21 | { 22 | UnderlineSize = 2; 23 | BackColor = MentQDefaults.MentQBlue; 24 | Font = new Font("Verdana", 7); 25 | ForeColor = Color.White; 26 | Size = new Size(60, 15); 27 | Style = Styles.None; 28 | EffectColor = Color.FromArgb(120, 65, 65, 65); 29 | SetStyle( 30 | ControlStyles.AllPaintingInWmPaint | ControlStyles.CacheText | ControlStyles.OptimizedDoubleBuffer | 31 | ControlStyles.ResizeRedraw, true); 32 | TextAlignment = TextAlign.Center; 33 | } 34 | 35 | [Category("Appearance")] 36 | public override string Text 37 | { 38 | get { return base.Text; } 39 | set 40 | { 41 | base.Text = value; 42 | Invalidate(); 43 | } 44 | } 45 | 46 | [Category("Appearance")] 47 | public Styles Style 48 | { 49 | get { return _style; } 50 | set 51 | { 52 | _style = value; 53 | Invalidate(); 54 | } 55 | } 56 | 57 | [Category("Appearance")] 58 | public Color EffectColor 59 | { 60 | get { return _effectColor; } 61 | set 62 | { 63 | _effectColor = value; 64 | Invalidate(); 65 | } 66 | } 67 | 68 | [Category("Appearance")] public int UnderlineSize { get; set; } 69 | 70 | [Category("Appearance")] public TextAlign TextAlignment { get; set; } 71 | 72 | 73 | protected override void OnPaint(PaintEventArgs e) 74 | { 75 | int y = Style == Styles.Underlined ? -UnderlineSize + 1 : 0; 76 | Graphics G = e.Graphics; 77 | G.SmoothingMode = SmoothingMode.HighQuality; 78 | G.Clear(Parent.BackColor); 79 | using (SolidBrush brush = new SolidBrush(BackColor)) 80 | { 81 | if (Style == Styles.Outlined) 82 | { 83 | G.FillPath(brush, GlobalHelpers.GetRoundedRect(new Rectangle(0, 0, Width - 1, Height - 1), 5)); 84 | using (Pen outlinePen = new Pen(EffectColor)) 85 | { 86 | G.DrawPath(outlinePen, 87 | GlobalHelpers.GetRoundedRect(new Rectangle(0, 0, Width - 1, Height - 1), 5)); 88 | } 89 | } 90 | else if (Style == Styles.Underlined) 91 | { 92 | using (SolidBrush darkBrush = new SolidBrush(EffectColor)) 93 | { 94 | G.FillPath(darkBrush, 95 | GlobalHelpers.GetRoundedRect(new Rectangle(-1, -1, Width + 1, Height + 1), 5)); 96 | } 97 | 98 | G.SetClip(new Rectangle(0, 0, Width, Height - UnderlineSize)); 99 | G.FillPath(brush, 100 | GlobalHelpers.GetRoundedRect(new Rectangle(-1, -1, Width + 1, Height - UnderlineSize + 1), 5)); 101 | } 102 | else 103 | { 104 | G.FillPath(brush, GlobalHelpers.GetRoundedRect(new Rectangle(-1, -1, Width + 1, Height + 1), 5)); 105 | } 106 | } 107 | 108 | if (!string.IsNullOrEmpty(Text)) 109 | 110 | using (SolidBrush textBrush = new SolidBrush(ForeColor)) 111 | { 112 | if (TextAlignment == TextAlign.Center) 113 | G.DrawString(Text, Font, textBrush, (Width - G.MeasureString(Text, Font).Width) / 2, 114 | (Height - G.MeasureString(Text, Font).Height) / 2 + y); 115 | if (TextAlignment == TextAlign.Left) 116 | G.DrawString(Text, Font, textBrush, 4, (Height - G.MeasureString(Text, Font).Height) / 2 + y); 117 | } 118 | 119 | base.OnPaint(e); 120 | } 121 | } 122 | } -------------------------------------------------------------------------------- /MentQ/MentQNumericUpDown.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.Windows.Forms; 6 | 7 | namespace MentQ 8 | { 9 | [Category("MentQ")] 10 | public class MentQNumericUpDown : Control 11 | { 12 | public MentQNumericUpDown() 13 | { 14 | BackColor = Color.White; 15 | SelectedColor = MentQDefaults.MentQBlue; 16 | DoubleBuffered = true; 17 | SetStyle( 18 | ControlStyles.AllPaintingInWmPaint | ControlStyles.CacheText | ControlStyles.OptimizedDoubleBuffer | 19 | ControlStyles.UserPaint, true); 20 | Padding = new Padding(3); 21 | Size = new Size(90, 24); 22 | Size buttonSize = CalculateButtonSize(); 23 | MentQButton upButton = new MentQButton 24 | { 25 | Anchor = AnchorStyles.Right | AnchorStyles.Top, 26 | Size = buttonSize, 27 | Location = new Point(Width - Padding.Right - buttonSize.Width, Padding.Top), 28 | Font = new Font("Segoe UI Symbol", 6), 29 | Text = "\uE010" 30 | }; 31 | MentQButton downButton = new MentQButton 32 | { 33 | Anchor = AnchorStyles.Right | AnchorStyles.Top, 34 | Size = buttonSize, 35 | Location = new Point(Width - Padding.Right - buttonSize.Width, 36 | Height - Padding.Bottom - buttonSize.Height), 37 | Font = new Font("Segoe UI Symbol", 6), 38 | Text = "\uE011" 39 | }; 40 | InternalNumericUpDown = new NumericUpDown(); 41 | InternalNumericUpDown.BackColor = BackColor; 42 | InternalNumericUpDown.BorderStyle = BorderStyle.None; 43 | 44 | // Remove the default numeric up down buttons 45 | InternalNumericUpDown.Controls.RemoveAt(0); 46 | UpButton = upButton; 47 | DownButton = downButton; 48 | UpButton.Click += (sender, args) => InternalNumericUpDown.UpButton(); 49 | DownButton.Click += (sender, args) => InternalNumericUpDown.DownButton(); 50 | Controls.Add(InternalNumericUpDown); 51 | InternalNumericUpDown.SendToBack(); 52 | Controls.Add(UpButton); 53 | UpButton.BringToFront(); 54 | Controls.Add(DownButton); 55 | DownButton.BringToFront(); 56 | 57 | 58 | } 59 | 60 | public NumericUpDown InternalNumericUpDown { get; } 61 | private MentQButton UpButton { get; } 62 | private MentQButton DownButton { get; } 63 | public Color SelectedColor { get; set; } 64 | [Category("Appearance")] 65 | public decimal Value 66 | { 67 | get { return InternalNumericUpDown.Value; } 68 | set { InternalNumericUpDown.Value = value; } 69 | } 70 | protected override void OnHandleCreated(EventArgs e) 71 | { 72 | AdjustSize(); 73 | base.OnHandleCreated(e); 74 | 75 | } 76 | 77 | protected override void OnCreateControl() 78 | { 79 | base.OnCreateControl(); 80 | MaximumSize = new Size(Int16.MaxValue, 24); 81 | MinimumSize = new Size(0, 24); 82 | } 83 | 84 | protected override void OnPaddingChanged(EventArgs e) 85 | { 86 | AdjustSize(); 87 | base.OnPaddingChanged(e); 88 | } 89 | 90 | protected override void OnSizeChanged(EventArgs e) 91 | { 92 | base.OnSizeChanged(e); 93 | AdjustSize(); 94 | } 95 | 96 | private void AdjustSize() 97 | { 98 | if (InternalNumericUpDown != null) 99 | { 100 | InternalNumericUpDown.Width = Width - Padding.Horizontal - 5; 101 | InternalNumericUpDown.Location = new Point(Padding.Left, 102 | Padding.Top + (Height - Padding.Vertical - InternalNumericUpDown.Height) / 2 + 1); 103 | } 104 | 105 | if (UpButton != null && DownButton != null) 106 | { 107 | Size buttonSize = CalculateButtonSize(); 108 | UpButton.Size = buttonSize; 109 | DownButton.Size = buttonSize; 110 | DownButton.Location = new Point(Width - Padding.Right - buttonSize.Width, 111 | Height - Padding.Bottom - buttonSize.Height); 112 | } 113 | } 114 | 115 | private Size CalculateButtonSize() 116 | { 117 | return new Size(20, (Height - Padding.Top - Padding.Bottom) / 2 - 1); 118 | } 119 | 120 | protected override void OnPaint(PaintEventArgs e) 121 | { 122 | Graphics G = e.Graphics; 123 | G.SmoothingMode = SmoothingMode.HighQuality; 124 | G.Clear(BackColor); 125 | using (SolidBrush brush = new SolidBrush(BackColor)) 126 | { 127 | G.FillPath(brush, GlobalHelpers.GetRoundedRect(new Rectangle(0, 0, Width - 1, Height - 1), 4)); 128 | } 129 | 130 | using (Pen pen = new Pen(Color.Gray)) 131 | { 132 | G.DrawPath(pen, GlobalHelpers.GetRoundedRect(new Rectangle(0, 0, Width - 1, Height - 1), 4)); 133 | } 134 | } 135 | } 136 | } -------------------------------------------------------------------------------- /MentQ/MentQProgressBar.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.Windows.Forms; 6 | 7 | namespace MentQ 8 | { 9 | [Category("MentQ")] 10 | public class MentQProgressBar : ProgressBar 11 | { 12 | private Color _alternateForeColor; 13 | private bool _underline; 14 | private Color _underlineColor; 15 | private int _underlineSize; 16 | 17 | 18 | public MentQProgressBar() 19 | { 20 | InactiveBackColor = Color.FromArgb(150, 200, 200, 200); 21 | CornerRounding = 5; 22 | Size = new Size(170, 20); 23 | UnderlineSize = 2; 24 | UnderlineColor = Color.FromArgb(100, 70, 70, 70); 25 | BackColor = MentQDefaults.MentQBlue; 26 | ForeColor = Color.White; 27 | DoubleBuffered = true; 28 | SetStyle( 29 | ControlStyles.CacheText | ControlStyles.AllPaintingInWmPaint | 30 | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true); 31 | Font = new Font("Segoe UI", 7); 32 | AlternateForeColor = Color.FromArgb(40, 40, 40); 33 | } 34 | 35 | 36 | [Category("Appearance")] public bool DiagonalLines { get; set; } 37 | 38 | [Browsable(true)] 39 | [EditorBrowsable(EditorBrowsableState.Always)] 40 | [Bindable(false)] 41 | [Category("Appearance")] 42 | public override string Text 43 | { 44 | get { return base.Text; } 45 | set 46 | { 47 | base.Text = value; 48 | Invalidate(); 49 | } 50 | } 51 | 52 | [Category("Appearance")] 53 | public Color AlternateForeColor 54 | { 55 | get { return _alternateForeColor; } 56 | set 57 | { 58 | _alternateForeColor = value; 59 | Invalidate(); 60 | } 61 | } 62 | 63 | [Category("Appearance")] 64 | public bool Underline 65 | { 66 | get { return _underline; } 67 | set 68 | { 69 | _underline = value; 70 | Invalidate(); 71 | } 72 | } 73 | 74 | [Category("Appearance")] 75 | public int UnderlineSize 76 | { 77 | get { return _underlineSize; } 78 | set 79 | { 80 | _underlineSize = value; 81 | Invalidate(); 82 | } 83 | } 84 | 85 | [Category("Appearance")] 86 | public Color UnderlineColor 87 | { 88 | get { return _underlineColor; } 89 | set 90 | { 91 | _underlineColor = value; 92 | Invalidate(); 93 | } 94 | } 95 | 96 | [Category("Appearance")] public int CornerRounding { get; set; } 97 | 98 | [Category("Appearance")] public Color InactiveBackColor { get; set; } 99 | 100 | [Browsable(true)] 101 | [EditorBrowsable(EditorBrowsableState.Always)] 102 | [Bindable(false)] 103 | [Category("Appearance")] 104 | public override Font Font 105 | { 106 | get { return base.Font; } 107 | set { base.Font = value; } 108 | } 109 | 110 | protected override void OnPaint(PaintEventArgs e) 111 | { 112 | Graphics G = e.Graphics; 113 | 114 | //Get the region of the colored part 115 | float percent = (float) Width / Maximum * Value; 116 | 117 | //Transparent background effect 118 | G.Clear(Parent.BackColor); 119 | G.SmoothingMode = SmoothingMode.HighQuality; 120 | 121 | //Set clipping to reduce anti aliasing 122 | G.SetClip(new RectangleF(0, 0, Width, Height)); 123 | 124 | //Create the background brush 125 | using (SolidBrush inactiveBackColorBrush = new SolidBrush(InactiveBackColor)) 126 | 127 | //Draw the background 128 | { 129 | G.FillPath(inactiveBackColorBrush, 130 | GlobalHelpers.GetRoundedRect(new RectangleF(-1, -1, Width + 1, Height + 1), CornerRounding)); 131 | G.SetClip(new Rectangle(0, 0, Convert.ToInt32(percent), Height)); 132 | using (SolidBrush backColorBrush = new SolidBrush(BackColor)) 133 | { 134 | G.FillPath(backColorBrush, 135 | GlobalHelpers.GetRoundedRect(new RectangleF(-1, -1, percent + 1, Height + 1), CornerRounding)); 136 | } 137 | 138 | if (Underline) 139 | using (SolidBrush underlineBrush = new SolidBrush(UnderlineColor)) 140 | { 141 | G.SetClip(new Rectangle(0, Height - UnderlineSize, Convert.ToInt32(percent), UnderlineSize)); 142 | G.FillPath(underlineBrush, 143 | GlobalHelpers.GetRoundedRect(new RectangleF(-1, -1, percent + 1, Height + 1), 144 | CornerRounding)); 145 | } 146 | } 147 | 148 | 149 | using (SolidBrush foreColorBrush = new SolidBrush(ForeColor)) 150 | using (SolidBrush alternateForeColorBrush = new SolidBrush(AlternateForeColor)) 151 | { 152 | G.SetClip(new Rectangle(0, 0, Convert.ToInt32(percent), Height)); 153 | 154 | G.DrawString(Text, Font, foreColorBrush, 5, 155 | (Height - G.MeasureString(Text, Font).Height) / 2); 156 | G.SetClip(new Rectangle(Convert.ToInt32(percent), 0, Width, Height)); 157 | G.DrawString(Text, Font, alternateForeColorBrush, 5, 158 | (Height - G.MeasureString(Text, Font).Height) / 2); 159 | } 160 | 161 | 162 | if (!Enabled) 163 | using (SolidBrush disabledBrush = new SolidBrush(Color.FromArgb(100, 222, 222, 222))) 164 | { 165 | G.FillPath(disabledBrush, 166 | GlobalHelpers.GetRoundedRect(new RectangleF(-1, -1, Width + 1, Height + 1), CornerRounding)); 167 | } 168 | 169 | G.ResetClip(); 170 | base.OnPaint(e); 171 | } 172 | } 173 | } -------------------------------------------------------------------------------- /MentQ/MentQRadioButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Drawing; 4 | using System.Drawing.Drawing2D; 5 | using System.Windows.Forms; 6 | 7 | namespace MentQ 8 | { 9 | [Category("MentQ")] 10 | public class MentQRadioButton : RadioButton 11 | { 12 | public MentQRadioButton() 13 | { 14 | Font = new Font("Verdana", 7); 15 | ForeColor = Color.Black; 16 | BackColor = MentQDefaults.MentQBlue; 17 | SetStyle( 18 | ControlStyles.CacheText | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | 19 | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true); 20 | AutoSize = true; 21 | } 22 | 23 | [Category("Appearance")] 24 | public override string Text 25 | { 26 | get { return base.Text; } 27 | set 28 | { 29 | base.Text = value; 30 | Invalidate(); 31 | } 32 | } 33 | 34 | public override Size GetPreferredSize(Size proposedSize) 35 | { 36 | return new Size(17 + Convert.ToInt32(Graphics.FromHwnd(Handle).MeasureString(Text, Font).Width), 14); 37 | } 38 | 39 | 40 | protected override void OnCreateControl() 41 | { 42 | DoubleBuffered = true; 43 | base.OnCreateControl(); 44 | } 45 | 46 | protected override void OnPaint(PaintEventArgs e) 47 | { 48 | base.OnPaint(e); 49 | Graphics G = e.Graphics; 50 | G.SmoothingMode = SmoothingMode.HighQuality; 51 | G.Clear(Parent.BackColor); 52 | using (SolidBrush backBrush = new SolidBrush(Color.FromArgb(5, 30, 30, 30))) 53 | { 54 | G.FillEllipse(backBrush, 0, 0, 13, 13); 55 | } 56 | 57 | if (Checked) 58 | using (SolidBrush backColorBrush = new SolidBrush(BackColor)) 59 | { 60 | G.FillEllipse(backColorBrush, 3, 3, 7, 7); 61 | } 62 | 63 | using (Pen pen = new Pen(Color.FromArgb(85, 13, 13, 13))) 64 | { 65 | G.DrawEllipse(pen, 0, 0, 13, 13); 66 | } 67 | 68 | using (SolidBrush foreColorBrush = new SolidBrush(ForeColor)) 69 | { 70 | G.DrawString(Text, Font, foreColorBrush, 15, (Height - G.MeasureString(Text, Font).Height) / 2); 71 | } 72 | 73 | if (Enabled == false) 74 | using (SolidBrush disabledBrush = new SolidBrush(Color.FromArgb(100, 222, 222, 222))) 75 | { 76 | G.FillEllipse(disabledBrush, 2, 2, 9, 19); 77 | G.DrawString(Text, Font, disabledBrush, 15, (Height - G.MeasureString(Text, Font).Height) / 2); 78 | } 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /MentQ/MentQTabControl.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Drawing; 3 | using System.Drawing.Drawing2D; 4 | using System.Windows.Forms; 5 | 6 | namespace MentQ 7 | { 8 | [Category("MentQ")] 9 | public class MentQTabControl : TabControl 10 | { 11 | private Color _backColor; 12 | 13 | public MentQTabControl() 14 | { 15 | Alignment = TabAlignment.Left; 16 | SizeMode = TabSizeMode.Fixed; 17 | ItemSize = new Size(35, 175); 18 | SetStyle( 19 | ControlStyles.AllPaintingInWmPaint | ControlStyles.CacheText | ControlStyles.OptimizedDoubleBuffer | 20 | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true); 21 | BackColor = Color.FromArgb(55, 55, 55); 22 | ForeColor = Color.FromArgb(240, 240, 240, 240); 23 | Font = new Font("Segoe UI", 9); 24 | DrawMode = TabDrawMode.OwnerDrawFixed; 25 | SelectedColor = Color.FromArgb(200, 80, 20); 26 | } 27 | 28 | [Browsable(true)] 29 | [EditorBrowsable(EditorBrowsableState.Always)] 30 | [Bindable(false)] 31 | [Category("Appearance")] 32 | public new Color ForeColor 33 | { 34 | get { return base.ForeColor; } 35 | set 36 | { 37 | base.ForeColor = value; 38 | Invalidate(); 39 | } 40 | } 41 | 42 | [Browsable(true)] 43 | [EditorBrowsable(EditorBrowsableState.Always)] 44 | [Bindable(false)] 45 | [Category("Appearance")] 46 | public new Color BackColor 47 | { 48 | get { return _backColor; } 49 | set 50 | { 51 | _backColor = value; 52 | Invalidate(); 53 | } 54 | } 55 | 56 | 57 | [Category("Appearance")] public Color SelectedColor { get; set; } 58 | 59 | [Category("Appearance")] 60 | public override string Text 61 | { 62 | get { return base.Text; } 63 | set 64 | { 65 | base.Text = value; 66 | Invalidate(); 67 | } 68 | } 69 | 70 | protected override void OnControlAdded(ControlEventArgs e) 71 | { 72 | if (e.Control.GetType() == typeof(TabPage)) 73 | ((TabPage) e.Control).BackColor = SystemColors.Control; 74 | base.OnControlAdded(e); 75 | } 76 | 77 | 78 | protected override void OnPaint(PaintEventArgs e) 79 | { 80 | base.OnPaint(e); 81 | 82 | Graphics G = e.Graphics; 83 | G.InterpolationMode = InterpolationMode.HighQualityBicubic; 84 | //G.SmoothingMode = SmoothingMode.HighQuality; 85 | //G.InterpolationMode = InterpolationMode.High; 86 | //G.PixelOffsetMode = PixelOffsetMode.HighQuality; 87 | G.Clear(BackColor); 88 | int index = 0; 89 | using (SolidBrush unselectedForeColorBrush = new SolidBrush(Color.FromArgb(100, ForeColor))) 90 | using (SolidBrush foreColorBrush = new SolidBrush(ForeColor)) 91 | using (SolidBrush selectedTabPageBrush = new SolidBrush(Color.FromArgb(40, 20, 20, 20))) 92 | { 93 | foreach (TabPage tabPage in TabPages) 94 | { 95 | if (index == SelectedIndex) 96 | { 97 | G.FillRectangle(selectedTabPageBrush, 0, index * ItemSize.Width, ItemSize.Height + 4, 98 | ItemSize.Width); 99 | G.DrawString(tabPage.Text, Font, foreColorBrush, 34, 100 | index * ItemSize.Width + (ItemSize.Width - G.MeasureString(tabPage.Text, Font).Height) / 2); 101 | using (SolidBrush solidBrush = new SolidBrush(SelectedColor)) 102 | { 103 | G.FillRectangle(solidBrush, 0, ItemSize.Width * index, 3, ItemSize.Width); 104 | } 105 | } 106 | 107 | G.DrawString(tabPage.Text, Font, unselectedForeColorBrush, 34, 108 | index * ItemSize.Width + (ItemSize.Width - G.MeasureString(tabPage.Text, Font).Height) / 2); 109 | if (ImageList != null) 110 | { 111 | //if (tabPage.ImageIndex >= 0) 112 | // if (ImageList.Images.Count - 1 >= tabPage.ImageIndex) 113 | // G.DrawImage( 114 | // GlobalHelpers.TuneTransparency(ImageList.Images[tabPage.ImageIndex], 115 | // index == SelectedIndex ? 255 : 100, false), 12, 116 | // index * ItemSize.Width + (ItemSize.Width - ImageList.ImageSize.Height) / 2); 117 | //if (ImageList.Images.ContainsKey(tabPage.ImageKey)) 118 | // G.DrawImage( 119 | // ImageList.Images[tabPage.ImageKey], 12, 120 | // index * ItemSize.Width + (ItemSize.Width - ImageList.ImageSize.Height) / 2); 121 | int imageIndex = tabPage.ImageIndex; 122 | if (!string.IsNullOrEmpty(tabPage.ImageKey)) 123 | imageIndex = ImageList.Images.IndexOfKey(tabPage.ImageKey); 124 | if (imageIndex > -1) 125 | ImageList.Draw(G, 12, 126 | index * ItemSize.Width + (ItemSize.Width - ImageList.ImageSize.Height) / 2, imageIndex); 127 | } 128 | 129 | index++; 130 | } 131 | } 132 | } 133 | } 134 | } -------------------------------------------------------------------------------- /MentQ/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("MentQ")] 9 | [assembly: AssemblyDescription("Control library")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("uint32labs")] 12 | [assembly: AssemblyProduct("MentQ")] 13 | [assembly: AssemblyCopyright("Copyright © 2018")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("9c4eab90-4f39-411d-85da-8b00e1291b6e")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /MentQ/Styles.cs: -------------------------------------------------------------------------------- 1 | namespace MentQ 2 | { 3 | public enum Styles 4 | { 5 | Outlined, 6 | Underlined, 7 | None 8 | } 9 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Winform Controls 2 | Basically some of my old winform themes/controls. Not all controls are perfectly designed nor are they bug free (although I tested them a bit and couldn't find any major issues). 3 | 4 | I have no interest in supporting this project so do not expect any additions, although I may fix bugs if there are any (if I feel like it). 5 | 6 | Also, sorry for the lack of comments. 7 | 8 | If you ever use this, please leave credits! 9 | 10 | Licensed under the Apache License 2.0. 11 | 12 | ### [Builds](builds) 13 | 14 | # MentQ 15 | ### Preview 16 | ![MentQ control preview](preview-mentq.png) 17 | 18 | ### Control list 19 | * __MentQButton:__ Functions like a regular button. 20 | * __MentQCheckbox:__ Implements only the basic functionality of a checkbox. 21 | * __MentQEllipticalProgress:__ Elliptical progress bar, doesn't implement full progressbar functionality. 22 | * __MentQGroupBox:__ Doesn't inherit from groupbox, rather from container control but if you don't need groupbox specific properties it shouldn't matter. You can put controls in the header and they won't dissapear when the groupbox is closed. 23 | * __MentQInfoBox:__ Awesome control, has tons of custom properties that explain themsleves so you shouldn't be too lost. Remember to use the alpha in your colors. 24 | * __MentQNotification:__ Literally a label in rounded box. 25 | * __MentQNumericUpDown:__ Use the InternalNumericUpDown property to access all of the base NumericUpDown properties. This control can sometimes look buggy design time although it should return to normal in runtime. 26 | * __MentQProgressBar:__ Regular value progressbar. Doesn't implement marquee/other modes. 27 | * __MentQRadioButton:__ Implements only the basic functionality of a radiobox. 28 | * __MentQTabControl:__ Vertical tabcontrol. Works with images/imagelists. 29 | 30 | # Dio 31 | ### Preview 32 | ![Dio control preview](preview-dio.png) 33 | 34 | ### Control list 35 | * __DioButton:__ Functions like a regular button. 36 | * __DioCheckbox:__ Implements only the basic functionality of a checkbox. 37 | * __DioGroupBox:__ Inherits from containercontrol, can change shadow. 38 | * __DioMarqueeProgressBar:__ Doesn't inherit from progressbar, just a start/stop marquee progress bar. Use `Start();` and `Stop();`. 39 | * __DioRadioButton:__ Implements only the basic functionality of a radiobox. 40 | * __DioTextBox:__ I don't recommend you use this control since it lacks the textbox functionality but looks almost similar to it. If you do use it, you can access all of the base textbox properties through the InternalTextBox property. 41 | 42 | # How to use 43 | __Note:__ Both of these methods work for c# and vb.net 44 | 45 | ### Cloning project (preferred way) 46 | 1. Download the controls project source for the controls you need (Dio and/or MentQ) 47 | 2. Add the project(s) to your solution. 48 | 3. On the project you want to use the controls: Add a reference to the controls project 49 | 4. The controls should now be available in your toolbox! 50 | 51 | ### Referencing a Dynamic Link Library (.dll) 52 | 1. Download the build. 53 | 2. Add it as a reference to your project. 54 | 3. In your toolbox, right click and select 'Add Tab'. 55 | 4. Once you've added the tab, right click on it and select 'Choose Items'. 56 | 5. Browse for the library. 57 | 6. Add all the controls. 58 | 7. They should now appear in your toolbox and be ready to use normally. 59 | -------------------------------------------------------------------------------- /WinformThemes.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27428.2037 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinformThemes", "WinformThemes\WinformThemes.csproj", "{58CA487F-8C48-4D14-927E-06AEB04088F9}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dio", "Dio\Dio.csproj", "{D8AFFCD4-5D23-49B0-930A-9D88D5937BDA}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MentQ", "MentQ\MentQ.csproj", "{9C4EAB90-4F39-411D-85DA-8B00E1291B6E}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Release|Any CPU = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {58CA487F-8C48-4D14-927E-06AEB04088F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 19 | {58CA487F-8C48-4D14-927E-06AEB04088F9}.Debug|Any CPU.Build.0 = Debug|Any CPU 20 | {58CA487F-8C48-4D14-927E-06AEB04088F9}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {58CA487F-8C48-4D14-927E-06AEB04088F9}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {D8AFFCD4-5D23-49B0-930A-9D88D5937BDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 23 | {D8AFFCD4-5D23-49B0-930A-9D88D5937BDA}.Debug|Any CPU.Build.0 = Debug|Any CPU 24 | {D8AFFCD4-5D23-49B0-930A-9D88D5937BDA}.Release|Any CPU.ActiveCfg = Release|Any CPU 25 | {D8AFFCD4-5D23-49B0-930A-9D88D5937BDA}.Release|Any CPU.Build.0 = Release|Any CPU 26 | {9C4EAB90-4F39-411D-85DA-8B00E1291B6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {9C4EAB90-4F39-411D-85DA-8B00E1291B6E}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {9C4EAB90-4F39-411D-85DA-8B00E1291B6E}.Release|Any CPU.ActiveCfg = Release|Any CPU 29 | {9C4EAB90-4F39-411D-85DA-8B00E1291B6E}.Release|Any CPU.Build.0 = Release|Any CPU 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | GlobalSection(ExtensibilityGlobals) = postSolution 35 | SolutionGuid = {AEDCF814-5EB1-44AF-B02A-8675563649FB} 36 | EndGlobalSection 37 | EndGlobal 38 | -------------------------------------------------------------------------------- /WinformThemes/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /WinformThemes/GlobalHelpers.cs: -------------------------------------------------------------------------------- 1 | #region 2 | 3 | using System; 4 | using System.Drawing; 5 | using System.Drawing.Drawing2D; 6 | using System.IO; 7 | 8 | #endregion 9 | 10 | namespace WinformThemes 11 | { 12 | internal static class GlobalHelpers 13 | { 14 | public static readonly string DownArrowBase64String = 15 | "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAh0lEQVQ4T93TMQrCUAzG8V9x8QziiYSuXdzFC7h4AcELOPQAdXYovZCHEATlgQV5GFTe1ozJlz/kS1IpjKqw3wQBVyy++JI0y1GTe7DCBbMAckeNIQKk/BanALBB+16LtnDELoMcsM/BESDlz2heDR3WePwKSLo5eoxz3z6NNcFD+vu3ij14Aqz/DxGbKB7CAAAAAElFTkSuQmCC"; 16 | 17 | 18 | public static GraphicsPath GetRoundedRect(Rectangle baseRect, 19 | int radius) 20 | { 21 | int corner = radius * 2; 22 | GraphicsPath gp = new GraphicsPath(); 23 | gp.AddArc(new Rectangle(baseRect.X, baseRect.Y, corner, corner), -180, 90); 24 | gp.AddArc(new Rectangle(baseRect.Width - corner + baseRect.X, baseRect.Y, corner, corner), -90, 90); 25 | gp.AddArc( 26 | new Rectangle(baseRect.Width - corner + baseRect.X, baseRect.Height - corner + baseRect.Y, corner, 27 | corner), 0, 90); 28 | gp.AddArc(new Rectangle(baseRect.X, baseRect.Height - corner + baseRect.Y, corner, corner), 90, 90); 29 | gp.CloseAllFigures(); 30 | return gp; 31 | } 32 | 33 | public static GraphicsPath GetRoundedRect(RectangleF baseRect, 34 | float radius) 35 | { 36 | float corner = radius * 2; 37 | GraphicsPath GP = new GraphicsPath(); 38 | GP.AddArc(new RectangleF(baseRect.X, baseRect.Y, corner, corner), -180, 90); 39 | GP.AddArc(new RectangleF(baseRect.Width - corner + baseRect.X, baseRect.Y, corner, corner), -90, 90); 40 | GP.AddArc( 41 | new RectangleF(baseRect.Width - corner + baseRect.X, baseRect.Height - corner + baseRect.Y, corner, 42 | corner), 0, 90); 43 | GP.AddArc(new RectangleF(baseRect.X, baseRect.Height - corner + baseRect.Y, corner, corner), 90, 90); 44 | GP.CloseAllFigures(); 45 | return GP; 46 | } 47 | 48 | public static void DrawDownFade(Graphics g, Rectangle area, Color finalColor) 49 | { 50 | using (LinearGradientBrush brush = new LinearGradientBrush(area, Color.Transparent, finalColor, 270)) 51 | { 52 | g.FillRectangle(brush, area); 53 | } 54 | 55 | /* 56 | int floorIncrements = finalColor.A / area.Height; 57 | for (int i = 0; i < area.Height; i++) 58 | { 59 | using (Pen pen = new Pen(Color.FromArgb(finalColor.A - (floorIncrements * (i + 1)), finalColor))) 60 | g.DrawLine(pen, area.X, area.Y + i, area.Width, area.Y + i); 61 | } 62 | */ 63 | } 64 | 65 | /// 66 | /// Changes the overall transparency of an image 67 | /// 68 | /// The input image to be tuned 69 | /// the desired alpha value. It is based on the 255 alpha pixels 70 | /// To conserve the antialiasing on the image 71 | /// 72 | public static Image TuneTransparency(Image originalImage, int alpha, bool antialias) 73 | { 74 | //Cast & clone image to bitmap 75 | Bitmap bitmap = new Bitmap(originalImage); 76 | //Cycle through all pixels 77 | Color pixel; 78 | 79 | //ratio between a max byte and desired alpha byte, this achieves the conservation of antialiasing 80 | int ratio = 255 / alpha; 81 | for (int i = 0; i < originalImage.Width; i++) 82 | for (int j = 0; j < originalImage.Height; j++) 83 | { 84 | //Get pixel color 85 | pixel = bitmap.GetPixel(i, j); 86 | 87 | //If pixel is not already transparent 88 | if (pixel.A != 0) 89 | bitmap.SetPixel(i, j, Color.FromArgb( 90 | //If antialiasing is enabled use the pixel alpha/ratio else just use the set alpha 91 | antialias ? pixel.A / ratio : alpha, 92 | pixel)); 93 | } 94 | 95 | return bitmap; 96 | } 97 | 98 | /// 99 | /// Lightens a color 100 | /// 101 | /// Original color 102 | /// The amount of bytes to lighten the color 103 | /// 104 | public static Color ChangeColor(Color originalColor, int difference) 105 | { 106 | return 107 | Color.FromArgb(originalColor.R + difference > 255 ? 255 : originalColor.R + difference, 108 | originalColor.G + difference > 255 ? 255 : originalColor.G + difference, 109 | originalColor.B + difference > 255 ? 255 : originalColor.B + difference); 110 | } 111 | 112 | /// 113 | /// Transforms a base64 string to an image 114 | /// 115 | /// Base64 image string 116 | /// 117 | public static Image Base64ToImage(string base64string) 118 | { 119 | MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64string)); 120 | return Image.FromStream(stream); 121 | } 122 | } 123 | } -------------------------------------------------------------------------------- /WinformThemes/MainForm.cs: -------------------------------------------------------------------------------- 1 | #region 2 | 3 | using System.Windows.Forms; 4 | 5 | #endregion 6 | 7 | namespace WinformThemes 8 | { 9 | public partial class MainForm : Form 10 | { 11 | public MainForm() 12 | { 13 | InitializeComponent(); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /WinformThemes/MainForm.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 125 | AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w 126 | LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 127 | ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABA 128 | BQAAAk1TRnQBSQFMAgEBAgEAAYgBAAGIAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA 129 | AwABEAMAAQEBAAEgBgABEBoAA2EB5ANUAawDVAGsA1QBrANTAagIAANUAawDVAGsA1QBrANUAawDZQHl 130 | GwABAQMVAR0DKgFAAzIBUAMyAVADKQE/AxQBHAMAAQGYAANTAagMAANTAagIAANUAawMAANUAawQAAMT 131 | ARoDSwGOA1YBtgNPAZcDQAFxAzgBXQM4AV0DQAFxA04BmANWAbYDSgGMAxIBGJAAA1MBqAwAA1MBqAgA 132 | A1QBrAwAA1QBrAwAAyIBMQNVAbIDIAEuIAADIQEwA1YBsQMfAS2MAANTAagMAANTAagIAANUAawMAANU 133 | AawMAANSAaMDDAEQBwABAQMVAR0DKgFAAzIBUAMyAVADKQE/AxQBHAMAAQEEAAMNAREDUAGejAADUwGo 134 | DAADYQHiA1MBqANTAagDYQHkDAADVAGsDAADVAGsAxMBGgNLAY4DVgG2A08BlwNAAXEDOAFdAzgBXQNA 135 | AXEDTgGYA1YBtgNKAYwDEgEYA1MBqIwAA1MBqCgAA1QBrAwAA1gBvANVAbIDIAEuIAADIQEwA1YBsQNX 136 | AbeMAANTAagoAANSAaEMAANeAd0DDAEQBwABAQMVAR0DKgFAAzIBUAMyAVADKQE/AxQBHAMAAQEEAAMN 137 | AREDYQHahAADVQGyAxcEIAEuLAADGAEiA1UBsAQAA1QBrAMTARoDSwGOA1YBtgNPAZcDQAFxAzgBXQM4 138 | AV0DQAFxA04BmANWAbYDSgGMAxIBGANTAaiEAAMUARsDVwG6AxsBJigAAxwBKANXAboDEgEZBAADWAG8 139 | A1UBsgMgAS4gAAMhATADVgGxA1cBt4gAAxABFgNXAbgDHwEsIAADIAEuA1cBuAMQARUIAANeAd0DDAEQ 140 | AwEBAgMkATYDQAFvA0wBkgNRAaIDUgGkA0wBkwNAAXADJAE2AwEBAgMNAREDYQHajAADDQESA1YBtgMi 141 | ATIYAAMjATQDVgG0Aw0BEQwAA1QBrAM2AVkDVgG0A0UBfAMpAT8DEgEZAwQBBQMEAQUDEgEZAyoBQANF 142 | AX0DVQG1AzYBWANTAaiQAAMKAQ4DVQGyAycBOhAAAycBOwNWAbEDNwFbAzEBTQwAA1sBywNFAXwDAQEC 143 | IAADAQECA0YBfgNZAceUAAMHAQoDVQGtAyoBQQgAAysBQgNUAawDBwEKAzYBWAM0AVQMAANZAccDDwEU 144 | KAADDQESA1sBxJgAAwYBCANTAagDLwFJAy8BSgNSAacDPgFqA1MBqANZAccDNAFUDAADIwE0A1YBswMe 145 | ASsgAAMdASoDVAGvAyEBMJwAAwQBBQNSAaEDUgGhAwQBBSAAAxYBHgNMAZMDVwG3A0wBkgM/AWwDNgFZ 146 | AzYBWAM+AWsDTQGRA1YBtANMAZADFAEbpAADAgEDAwIBAy8AAQEDGAEiAy0BRQM1AVYDNQFWAy0BRQMY 147 | ASIDAAEBkAABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAcEBgwHwAQ8EAAHd 148 | AbsBwAEDBAAB3QG7AY8B8QQAAd0BuwGQAQkEAAHcATsBgAEBBAAB3wH7AY8B8QQAAd8B+wGQAQkEAAEf 149 | AfwBgAEBBAABHwH4AY8B8QQAAY8B8QGAAQEEAAHHAeMBgAEBBAAB4wHDAY8B8QQAAfEBgwGfAfkEAAH4 150 | AQMBjwHxBAAB/AE/AcABAwQAAf4BfwHwAQ8EAAs= 151 | 152 | 153 | 154 | 155 | 156 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL 157 | EwAACxMBAJqcGAAAAjFJREFUOE+FU01o1EAYjX8IHgQRb3qW3hQPelA86MwELHqwa9VWqxQrWorXSiYz 158 | 0gq2IlQP1pvgUUEP1YMXKYKglRXUzWSyqXZl69+hFlu7K4I4vsmm3U2r9MEjyeS9N1++L+P8D7F01weS 159 | bFPc3f6298CGdHl5hJJQ5ZNRzUlFCxJozgpasDnwhfbp4VS2FEbKlVrQm4qTUiTcTiVIJ0xDoaA3Ao+d 160 | VZK028BQkLtxj7s2tdVhhdpnTwNJj8M4BZpGInAWFXRhkwfQ3kttNSif7cHOk+oSbVWC/Zk3jV89auLB 161 | 1kxQUdAz9rMizo6kdgQINhJ6pBslfm4UV8vKVCZeZwJg/qFrVeYT86jcu7rWMNqWEYLvr58274Y6MmuW 162 | kWDdqHgmvuhucgoe3YKAL6FgfqNo/FqbqXwomErpTcZsiUbewjUfSneXnfdmPHxFA3mjyHJ67KGpTurM 163 | mmXos2Fs+grj3umYXG4VFudQwbHFwumxkX8GKI+es1MJe/dtTPqgfXIfLy6A5XlR1NdsZsNn5te3Tya+ 164 | 0lI3C/a9wOlJjPR5Yrawpdg+gC1I/m2Fxf6DpjR8PmE8kFsIwBROaU6Lkc8OpfYa0IMBNOclAnJK0I8L 165 | hjqn0P0TePcY93dSWx3GcVZglIPJv+DRHhyidpTZh4ZdRnBHgL8Q5U+EnN3Od+1Yk9qWIpLuboQ8wk5V 166 | 7FS2Z0Nx9hNBTyJJ3VS2POyBwfduLfL9TXnZvC5dXgTH+QvlaMqFsARl6AAAAABJRU5ErkJggg== 167 | 168 | 169 | 170 | 171 | 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 256 | 257 | 258 | 259 | 260 | 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 345 | 346 | 347 | 348 | 349 | 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 434 | 435 | 436 | 437 | 438 | iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 439 | JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJ 440 | TUUH4AkSEiEghcMOcgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAABMhSURBVHhe 441 | 7Z0L1DVVWceR8IKXxBsCXkuXipr3gAzKRAoRL6Eoalh5RSWTRIE0E9PlwiSVAF1eUkIoTSGzLNJUDK1M 442 | CyWLKCArK5dd7GLZlX6/Oc95v3POe2Zmz8yeOTPf9/7W+q/ve2f23s8z8847l72f/ey9dlduuOGGvdFB 443 | 6FD0JPRidDZ6H/od9Nfof9C/o2vQx9GF6HXoZPQE9DB0INo7mt1hjPALugU6Ap2CLkb+Qv8b5cK2rke/ 444 | hF6CDkf7hvkdhoaTfzN0LHob+iP0v2hovCg+i85F+nLTcG+HPuAE3xadiD6A/g2NjX9F70VPQbcKt3fo 445 | AifyRuh70a8in9dT4RvoQ+jxaOf9oSmcNJ/pz0d/jKbOtch3k1vH4e1QBifpDuj16J/Q7oaPiJ9F94zD 446 | 3WEOJ8W/+J9A/4J2d3x5PA/dIQ5/z4WTsA86Cf0t2tP4Z3Q6ulmcjj0LDvwo9KdoKP4P/Q367dBY+BJ6 447 | epyW3R8O1tv9+R55T3wd+dVwDvpR9Fh0P7TUccPPD0djuvP8Gjog3Ns94QC/C/lW3Bd+Kh4W5rZg28Ho 448 | g+iv0CWx2e13QX+IUvhH9CvoVHRC6Az0ZygXX0XHhXu7DxzUTdHPoCF67I4Ms9q9DXozWu0WfkwUsYx3 449 | pPcXW9fzC+gB6EZRZQm3I8cacr7AXoC+OUxMGw7kAOTgy1B4W7d72L/2/3DDGo4P97Zg24OQjyZfzhZ5 450 | QBSphHLeZXLeDf4CJdkeLRzAQ5C/iLFxdLi4DfZ5R7DL+RXolbE5Ccp7x7kM5cK7SqmvowbHn4x8IRsb 451 | v46+KdzMjm0jh51z4XvN86P5aYDDP1m4Pj4+gXp/tmLD94LVR0lXvKjGP66Ak2cV7o6LL6LHhou9g62b 452 | oP/ScGZ+EfV29+oMzv104eZ4MOrnmWjQk4a979N4T7wHje9OgFM5n3td+Rqym3UjUTvY/Xmd6JGfQ2s/ 453 | SzcCzviNPxa8TW6sRw3bjm8MMaj11jC5WXDEGLkxcB3a+CcTPvgpOBRvCrObAQfsZ99EPN4qBoLePNza 454 | OPjy+4VXw/CCMDssGLZ71CCHTXMVKn3Ws++70SXo3bFpLey/I3oo6vyCRRveBQwvvxS9C9md/HeoD/za 455 | +M4wPQwYtHvXYcwx8PZwawm274teixbvUM+I3Vuw7cbIcvOYw0a9f6nQrh1EfXWM2f19UJjqFwx5IJ/S 456 | 6kj4NNp6I+b/t0QvQ+v+4uxfv00UtewD0R+4Y4H/RHePIlmh3SZjIt7Z/nL23yQ8DzcJU/2BkZcX5sbF 457 | Z9CPoXeif3BDBY5NvAN9tPhpPafH4WaFdv18S8HglXsjO5ScsZTKW8JUP2DgwaiPHq6x4ReFdxGHeZ+B 458 | zkR2wPxUnIpWUP/HUQpfiirWuTXybpDKo6NqXmjYMX2HWfdkjo3T0Rra8N3kdugQZOj7uoCU10XxAn6+ 459 | M7JXMwXfzW4ZVfNBo2Pr5h2ay+JUZIV2/cN6DZq/IF6Ntr3Qse3bkD2cKZwT1fJAg9+OxvC9vwkc1TsN 460 | 9Tr3j/adE+FnaOm0MvY9EvmSWoe/q++Iat2hsSuKZtPwk8Tn5dRxetfo4vfx52nIl8Q6HAHt/lVAIwZ2 461 | pKJjjoS9qPhpmlyJfgTdNk7BqMAv5xumXADyqqjWDhrw+eS8+FTOjnqPm/04OfzCsQfvxsUJGBn45WOi 462 | yUCTj4t7R/XmUNkh1VTsUCluOfzrC8sU8dl5ERplRC5+meWkKRdE9WZQ0fn4qVebb7BbVxr/v1WxdVr4 463 | mfXgOIRRgn9OLm2KIfF3jSbSoVJqp4WcHNW2YFtdj9zYuFf47UDO8eiM4kBGBD69AbWh2WchFeyCTJ02 464 | 5Uyfbc9Mtq32sY8d5ws6VjD/3H1OHMpowCf7C9pgIqz0rxkK/3BRLY0To9oSbB/TBMym2P8+uhdBfHpV 465 | 4V07XhPNVENBQ5pTu3z91lw7fs723ypKTI/L0X5xGKMCv7pcACbdqM9dRKGji+JpPDGqbYN9vzErMhns 466 | 8TNXwXiCLVfAty4XgJwaTZVDoaqJkot8DpWeLPY5k3YqeLHeKVwfLfjY9iVwzuejqfVQwGAKXxhSOCaq 467 | rYX9pnMbO3b82Gs52r/6RfAzx+TT8hxF7Hz6rEwtBlVUnjT2G549dp4Z7o4efDVtbQ5Oiya3w05z26Xw 468 | hqhSCmX6nhzRlXPD1UmAv7nmXnwmmlyGHXaApAw1ykOjWimUMTxrzEwmXRu+OiZj9pBcbO8ZZOMPzvbV 469 | ck1UqYRyqfFvm+CKcHMS4G/qozmVU6LpXbDx3bN9tbw6qlRCuY/NimfBkG2jXp12/gJk8gYzd6e+sK4y 470 | ul6+KvA3d6fa9j8ANv75bF8tB0eVSiiXY96AmbPsl98K5V6E7WbzcOy+aWbRyaRtxdf7z1zOivEEuzqF 471 | +MGJHilUf0cGlPOZ1SWEzNi3bZM4yqDs/uiXrZjIZJIz4qvp6PtgV8gYPzxxtq2WN0eVSihnwqS2mGPn 472 | ztFUMtRxwkrqY2yU0T6r4KfrIuTONDJn12OQH94421bL2oGfVSjnpNE2dJrtSn3HMUyxVsfoe/0EP525 473 | 1Be7hoj5IXXK0n2iSiWUW41ccXStLkGkiRg7P5tp4+aoLgVt+zCpAcHP42bu9sLHw0xhyJNfh7eipC5T 474 | yq0+t7zDGGFUNUJo+0VQRldoxzD21eSQi/QyATQ3+Hmfmbu98NW5EX8xKXysqJAAZVdHAotPR/410KQq 475 | j54LRNyvaKQjtGP6+TLsVBlNPoEq8NPp5X1xgAacopTCWeFTLZRdTZDw4tjlPm/RVfMM/HpwPv3hUaUV 476 | 1Pel0L6DMl4URUcPvj4VfRjlnpd5lI070SCFJ4U/tVD2k7MqWyylaONnJzymhIz9CTIFTavJGdT7VlSW 477 | xMIBrVtE0UmAv543J6yunt+2PNdGXzn7fy3JL06UNRvnItteHtlmjLu/4BQco3DBRxeQajR0S/kfQmUs 478 | TcKcCvjt144p8bvyUhtLHbTZP+zXQtnFWABv6WunKLH9bqjpd649lk+NJpKgfNn8Bm+pSV82YwO/Xauw 479 | K6+1Ide6SyF5ciRlnR427wk8Lzavhf3Ow2/D90cTSVC+7CI4P4pMCvx2EYyunGtDKaFb3wi7yVDnvshF 480 | FCuzdEa5Jjhp09vfHaOJZKiz7iKY1MjgHPw2eit1jmAZF9rQR2b/r+QrYTc7tO3zrGowx1VC7Uhyzt5j 481 | UKfPN+qvXgTbh0YnAr53HXD7kI2kTP1OigFoC+2vuwjfhOwKzZ7nlzadu2h2DlcIn+zKnvjup2EXPmkj 482 | KZ9j68OIMkH7x8zMbFEfvryD5+05s9PVmi/YiJM76vhI2OwNbMzjEV3mZWcl7gQ4T/asNkklt8qVNmKK 483 | tTo+HDZ7AxtmHp2/1FSGnO+wC86VvYRtucIGfnP2/0p6fQTMwY4pXeXv0bQXTBoQzlXbT+nLrGxsXR3X 484 | h61ewc5hM3MFxgEaWn6P2F0KZfZGBk462vjc2LxHwXE7BN80RvIDVnz77P+VfD3s9A62VmMT/Qx8Vuze 485 | Bvtc7u13LRg4DPzI2N0I6t0D3RWNd1mWCsL/lDv6nAuslDrfbJCBE+y8emZuG96pFvP8moXEOIN5kudF 486 | TE5RG/dPGe8cLiHrOkeLQSTmGW7U0zgm8N1ZRIbHVcVEyHkWNsQ6hV4SKK+CnaowKNO4uB7wW5ELQVfh 487 | QNO2CCO22fF0OHJF0S+jKh4V1SYJ/teNs5xlIYcXUzgk2u0dbOVabNKMH4aNPwo57d3OpdSUq3J1uDQ5 488 | 8N11kes4zYKOmaewtd5u32DLzN9jYZA7X27w+9Ez9yt5wrxwSkzg84rCA4CtXOPdOZjkat74/dKZ+5XM 489 | Yjz4T1Xu/Dnt8s21BHtOLnFWkBdC3ctMn8z+SiYGfteFxxsLsc+8cMpqn9cVhTcAtk2v/jyUOns5J51i 490 | EzcFfn925n4pX4yiReHUfMCNZ+zkBPuGhQ2JU9RGM40MX1wAq3buBGX8vK3rFHp/FC8q2IGQwtOiyqBg 491 | 10EPl6Ifel3ifpdgaQC+zLOEfjo2lUKZe86KVrK8+gkbUmbYDnpCsOet/0JkFNDQmI8n6yxi2jMQ9u7o 492 | drEpCcq7TsAilY8l9hvnUMdTovgMNqTk9dv13BgA7Dk/YBPY/Xz/cCMLtPcs5FC32HtpL2bS0i6UW43Z 493 | qHwhZ7/L4FXhqOtyqD0bXl/sqsaKja7eLmCrbQKIrpwQLmSB9lwnyBHOVfzFVs5UZv+6qfsm516b9JHt 494 | Pv/rQsW2j+6y0QDOFEqTQ+YEO06N3gTZ5w3SpkvYl1F5EbDPVcvW8ewosgTbj5rtruTMKL4LNroyVUqU 495 | ae/BIXOwlbpIUi4uCtNZod26x6sXwdp5F2wvy7b2qSiyBNtT0vMdFsWXYUfKNHEvkkEybGHn84XFYfC2 496 | elCYzgrt1g1cieMWS+8d/GyPaNXYxdJsLX52om/dC7OPovWBsOw4pShSzxujSq9gJzVvYQ4uDrNZoV3j 497 | 91NxgQ6X23Fiq7/881EVS+sm8/PJs82VlB8nOx1BSnkMeGvuPT4AG04MHYqXhdms0K6rrTbFru+U9Rr8 498 | mlhcqWXdIpSrVL/gUiB1YeiTokpvYMO5g0PR1wWQ+nLdlveFnZQL7Suoeik5CqQu+XZVVOkV7KRELefg 499 | XWEyK7SbGnDTFu/YLjiZsp5Q/drHFHIOeupiUY+Iar2Bjb7/gub0EvlMu0N0X5uUs25I38dKWnIsCqZm 500 | DbskqvQKdqoyfeTCr4Ds08RocyxrLr83XKqHwvZXrwu2XMf3RLXewMahKOXltCu3D5PZoM2uizzk4ohw 501 | KQ0qpA69XoN6HzLFRt9fBF8LU1mh3Vxp3rtwZbiTDpX8q0ul/uUiA9g5Z2auFz4aZrJCuwaibprk/E5L 502 | UDF13R/Di7Kkd6sCGw509DVCeGSYyQrt9nnRpnB5uNIcKpuoMDUezzwDva+9gw0vgrdoMCOXRvPZoe02 503 | y73mwjQ9DwlX2kEDrqGfypCRw21X0VzFlGv7RrPZoe0m5y837ww32kMjRrGkZvKyi/jAqNo72Or6je3j 504 | pH4xxQ7Qfu67VSrmRzwg3OgGDZ1WNJnGrmDDnsGWjwMXlWiK3/ylE05zgp0zC4vDk2/xaxrbB62mf63i 505 | FVG1d7Blvp8mXIXuG9V7B1snFlaH5WqUN8sKDfpC2CREa7A1+bCVmu7eSaW9Pe/Xgb3FnAdDYDzAA8N8 506 | XmjYiZap+PUwyHxC7KSsFHJ6FB8U7N5+Zn4wXhim80PjBik0SUDgs/bQqN4b2Kj71u5lpC8V7A8V2tb/ 507 | 2AxG7oQcV07F3PxZFoIog/arllUzT0D1GHjPYL9umlYOjAReu7padjBkVo0mkzWuQ3k+SVagXaOHq95N 508 | nhxFNwY+mIyiT3zcPjzMDQMGf6AwnY7hStlX66JNY+jKuBJtfGVwfDDvUO7FHhZ5SZgaFgzXzUBZxTtB 509 | 1jdU2qtapPpxUWzj4EtfaynXLuTdGxj3pXBxbYAUfDHMMsmUdpw0WvaCZaKn0eQBxhcnbKbGWKTi+syb 510 | vcPhgM/g1UWiUnCcfJagoCXUN+9PGaNbBwCfnB+YOrhWx6VoHOnscKTtRWAsW6v1gIS6Vesd9R6p1Ab8 511 | cupW01VSVjF9/rjyKeNQ24vAZMcPi2YaQb2yJW89waNN9ohvB6IzkO9ETfGTstcBrNbgWNuLwGnTp6JG 512 | VzXly9bNuTaKjBL8cxDr2Shl8sciDl0PNju7FThocieTOrTBv4gTUOoKpeb/W8cXosjowLcjkZ+nTXkH 513 | 2miHViNw1qVZ2kby/h6qjWKljBMi1vG5KDIa8OleKDXEbhG/HKa5rA2OPx6VLdyYgm+6pd3I7DNf8Dq+ 514 | HEU2Dr44Y9eewDYdQX7iHh1NTRMOwIUgnPrcFj+bXIz6LtHkEmxfl++39xVO6sAHM3uYxz8lCec6zFF0 515 | cDQ3bTiQ/VFKDqIqfJx8ArlOzmLW8IvRIo5RHBu7BwW7TqszG4iJN+frJrbBz+Ps3eYbhQOy1/CFyARM 516 | XTFhpI8HE127gOLZyIkjdgz1MuhUBvb88tEPVzvJkc3MGMJOHWSjhoMzObUdGbnwm98uUdcVHmQ4FDv7 517 | IVdHNRCla6fOHGdYLS2yvdvCgXo3MJtFjrvBKqZUcfFqJ2WaYMl5862mrlHPX7RD3z52nDBrMEzdGgNN 518 | 8QLy7jWdT7xccNDeDZoOJrXBTykDJX1sGArue8NF6D3IPgtHFJUJlv2r7uMXvYrvCG9DyYty77ZwEg5B 519 | XV8Sp8Tl6EFx+DvM4aQ4UDJE+NSmuB4dH4e7wzo4Qb4f+FZdFec3Jfx89S/e94jRZB6fBJywg5GfeOvS 520 | rI4dl+R1xO9ucTg7tIWT6ACTg0R2sOSOqsmJo3sGunSbkbtDOZxcP82OQ87yuRZtGuMZ/IKwH2KSC05O 521 | Gk66n5InIT/pzLlrzGEfmDnNZFVeePZoHoH2Czd2GAv8UnyJ/BZ0DDLIxHH0DyL7153gan+A3/j+Qn2c 522 | OFrprdueOC8gX9hcqMoL6uXIsHPb23h4eX722uv/AZTMkXvlJ7xRAAAAAElFTkSuQmCC 523 | 524 | 525 | 526 | 527 | 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 612 | 613 | 614 | 615 | 616 | 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 701 | 702 | 703 | 704 | 705 | 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 790 | 791 | 792 | 793 | 794 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m 795 | dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFkSURBVDhPdZNJSgNREEDjAOKIegkheAIXulNEEDyA 796 | iFMWujGIETyRC8c43UD0VO17n6qmW+PipevX8Gv4lU5VVf9xDffwAJeh+0PzsACHsBjnu/jKbXyX4Ajm 797 | 4lxfYPALHMAbmP0T0q58Be+gzxDKJelwAhqUu7ANY3EW5R1YifMx7Cung2W/gsGpM4MXGTgfOlkFfa26 798 | NQNLNEB5Ayy3B6fwAeugbRf6IZcLbsCB2aelmtngKShOIXvJLIyDvg52oNGnSkexCjM3dXIGW790T/48 799 | wiRMhNKeLbvpKOewGbK+xgw9uCSWky04MMtttjAduhmwhW8wpp8O4hDNruzADLBsMyuvgbY9uAi5foVl 800 | cHD5zuLA7NmyzZx6n9plKxubSoeWi+Q7+1SWmnZlM+eeuEjFPx18OtdTgyttiV+QdntWZ2Z9nsEKW4vk 801 | Ja5n2TAY9WeybH1KsKTDKAZgJqk3r03V+QFTdzU4zm+CPgAAAABJRU5ErkJggg== 802 | 803 | 804 | -------------------------------------------------------------------------------- /WinformThemes/Program.cs: -------------------------------------------------------------------------------- 1 | #region 2 | 3 | using System; 4 | using System.Windows.Forms; 5 | 6 | #endregion 7 | 8 | namespace WinformThemes 9 | { 10 | internal static class Program 11 | { 12 | /// 13 | /// The main entry point for the application. 14 | /// 15 | [STAThread] 16 | private static void Main() 17 | { 18 | Application.EnableVisualStyles(); 19 | Application.SetCompatibleTextRenderingDefault(false); 20 | Application.Run(new MainForm()); 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /WinformThemes/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | #region 2 | 3 | using System.Reflection; 4 | using System.Runtime.InteropServices; 5 | 6 | #endregion 7 | 8 | // General Information about an assembly is controlled through the following 9 | // set of attributes. Change these attribute values to modify the information 10 | // associated with an assembly. 11 | [assembly: AssemblyTitle("WinformThemes")] 12 | [assembly: AssemblyDescription("Control library demo")] 13 | [assembly: AssemblyConfiguration("uint32labs")] 14 | [assembly: AssemblyCompany("")] 15 | [assembly: AssemblyProduct("WinformThemes")] 16 | [assembly: AssemblyCopyright("Copyright © 2018")] 17 | [assembly: AssemblyTrademark("")] 18 | [assembly: AssemblyCulture("")] 19 | 20 | // Setting ComVisible to false makes the types in this assembly not visible 21 | // to COM components. If you need to access a type in this assembly from 22 | // COM, set the ComVisible attribute to true on that type. 23 | [assembly: ComVisible(false)] 24 | 25 | // The following GUID is for the ID of the typelib if this project is exposed to COM 26 | [assembly: Guid("58ca487f-8c48-4d14-927e-06aeb04088f9")] 27 | 28 | // Version information for an assembly consists of the following four values: 29 | // 30 | // Major Version 31 | // Minor Version 32 | // Build Number 33 | // Revision 34 | // 35 | // You can specify all the values or you can default the Build and Revision Numbers 36 | // by using the '*' as shown below: 37 | // [assembly: AssemblyVersion("1.0.*")] 38 | [assembly: AssemblyVersion("1.0.0.0")] 39 | [assembly: AssemblyFileVersion("1.0.0.0")] -------------------------------------------------------------------------------- /WinformThemes/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace WinformThemes.Properties 12 | { 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources 26 | { 27 | 28 | private static global::System.Resources.ResourceManager resourceMan; 29 | 30 | private static global::System.Globalization.CultureInfo resourceCulture; 31 | 32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 33 | internal Resources() 34 | { 35 | } 36 | 37 | /// 38 | /// Returns the cached ResourceManager instance used by this class. 39 | /// 40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 41 | internal static global::System.Resources.ResourceManager ResourceManager 42 | { 43 | get 44 | { 45 | if ((resourceMan == null)) 46 | { 47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WinformThemes.Properties.Resources", typeof(Resources).Assembly); 48 | resourceMan = temp; 49 | } 50 | return resourceMan; 51 | } 52 | } 53 | 54 | /// 55 | /// Overrides the current thread's CurrentUICulture property for all 56 | /// resource lookups using this strongly typed resource class. 57 | /// 58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 59 | internal static global::System.Globalization.CultureInfo Culture 60 | { 61 | get 62 | { 63 | return resourceCulture; 64 | } 65 | set 66 | { 67 | resourceCulture = value; 68 | } 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /WinformThemes/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /WinformThemes/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace WinformThemes.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /WinformThemes/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /WinformThemes/WinformThemes.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {58CA487F-8C48-4D14-927E-06AEB04088F9} 8 | WinExe 9 | WinformThemes 10 | WinformThemes 11 | v4.6.1 12 | 512 13 | true 14 | publish\ 15 | true 16 | Disk 17 | false 18 | Foreground 19 | 7 20 | Days 21 | false 22 | false 23 | true 24 | 0 25 | 1.0.0.%2a 26 | false 27 | false 28 | true 29 | 30 | 31 | AnyCPU 32 | true 33 | full 34 | false 35 | bin\Debug\ 36 | DEBUG;TRACE 37 | prompt 38 | 4 39 | 40 | 41 | AnyCPU 42 | pdbonly 43 | true 44 | bin\Release\ 45 | TRACE 46 | prompt 47 | 4 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | Form 66 | 67 | 68 | MainForm.cs 69 | 70 | 71 | 72 | 73 | MainForm.cs 74 | 75 | 76 | ResXFileCodeGenerator 77 | Resources.Designer.cs 78 | Designer 79 | 80 | 81 | True 82 | Resources.resx 83 | 84 | 85 | SettingsSingleFileGenerator 86 | Settings.Designer.cs 87 | 88 | 89 | True 90 | Settings.settings 91 | True 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | {d8affcd4-5d23-49b0-930a-9d88d5937bda} 100 | Dio 101 | 102 | 103 | {9c4eab90-4f39-411d-85da-8b00e1291b6e} 104 | MentQ 105 | 106 | 107 | 108 | 109 | False 110 | Microsoft .NET Framework 4.6.1 %28x86 and x64%29 111 | true 112 | 113 | 114 | False 115 | .NET Framework 3.5 SP1 116 | false 117 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /builds/Dio.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uint32labs/Winform-controls/78f522dfec938739ab79ba396a6ffb6abc89328b/builds/Dio.dll -------------------------------------------------------------------------------- /builds/MentQ.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uint32labs/Winform-controls/78f522dfec938739ab79ba396a6ffb6abc89328b/builds/MentQ.dll -------------------------------------------------------------------------------- /preview-dio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uint32labs/Winform-controls/78f522dfec938739ab79ba396a6ffb6abc89328b/preview-dio.png -------------------------------------------------------------------------------- /preview-mentq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uint32labs/Winform-controls/78f522dfec938739ab79ba396a6ffb6abc89328b/preview-mentq.png --------------------------------------------------------------------------------