Imports System.Drawing.Drawing2D Module ConversionFunctions Function ToBrush(ByVal A As Integer, ByVal R As Integer, ByVal G As Integer, ByVal B As Integer) As Brush Return New SolidBrush(Color.FromArgb(A, R, G, B)) End Function Function ToBrush(ByVal R As Integer, ByVal G As Integer, ByVal B As Integer) As Brush Return New SolidBrush(Color.FromArgb(R, G, B)) End Function Function ToBrush(ByVal A As Integer, ByVal C As Color) As Brush Return New SolidBrush(Color.FromArgb(A, C)) End Function Function ToBrush(ByVal Pen As Pen) As Brush Return New SolidBrush(Pen.Color) End Function Function ToBrush(ByVal Color As Color) As Brush Return New SolidBrush(Color) End Function Function ToPen(ByVal A As Integer, ByVal R As Integer, ByVal G As Integer, ByVal B As Integer) As Pen Return New Pen(New SolidBrush(Color.FromArgb(A, R, G, B))) End Function Function ToPen(ByVal R As Integer, ByVal G As Integer, ByVal B As Integer) As Pen Return New Pen(New SolidBrush(Color.FromArgb(R, G, B))) End Function Function ToPen(ByVal A As Integer, ByVal C As Color) As Pen Return New Pen(New SolidBrush(Color.FromArgb(A, C))) End Function Function ToPen(ByVal Brush As SolidBrush) As Pen Return New Pen(Brush) End Function Function ToPen(ByVal Color As Color) As Pen Return New Pen(New SolidBrush(Color)) End Function End Module Module RRM Public Function RoundRect(ByVal Rectangle As Rectangle, ByVal Curve As Integer) As GraphicsPath Dim P As GraphicsPath = New GraphicsPath() Dim ArcRectangleWidth As Integer = Curve * 2 P.AddArc(New Rectangle(Rectangle.X, Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), -180, 90) P.AddArc(New Rectangle(Rectangle.Width - ArcRectangleWidth + Rectangle.X, Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), -90, 90) P.AddArc(New Rectangle(Rectangle.Width - ArcRectangleWidth + Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), 0, 90) P.AddArc(New Rectangle(Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), 90, 90) P.AddLine(New Point(Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y), New Point(Rectangle.X, Curve + Rectangle.Y)) Return P End Function Public Function RoundRect(ByVal X As Integer, ByVal Y As Integer, ByVal Width As Integer, ByVal Height As Integer, ByVal Curve As Integer) As GraphicsPath Dim Rectangle As Rectangle = New Rectangle(X, Y, Width, Height) Dim P As GraphicsPath = New GraphicsPath() Dim ArcRectangleWidth As Integer = Curve * 2 P.AddArc(New Rectangle(Rectangle.X, Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), -180, 90) P.AddArc(New Rectangle(Rectangle.Width - ArcRectangleWidth + Rectangle.X, Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), -90, 90) P.AddArc(New Rectangle(Rectangle.Width - ArcRectangleWidth + Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), 0, 90) P.AddArc(New Rectangle(Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), 90, 90) P.AddLine(New Point(Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y), New Point(Rectangle.X, Curve + Rectangle.Y)) Return P End Function End Module Class GraphiteButton Inherits Control Enum MouseState None = 0 Over = 1 Down = 2 End Enum Private State As MouseState = 0 Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) MyBase.OnPaint(e) Dim G As Graphics = e.Graphics G.FillRectangle(ToBrush(Color.FromArgb(232, 232, 232)), ClientRectangle) G.FillRectangle(ToBrush(120, Color.White), New Rectangle(0, 0, Width, CInt(Height / 2))) Select Case Enabled Case True Select Case State Case MouseState.Over Dim Whit As New GraphicsPath Whit.AddEllipse(New Rectangle(0, 0, Width, Height * 2)) Dim Whity As New PathGradientBrush(Whit) Whity.CenterColor = Color.FromArgb(120, Color.White) Whity.SurroundColors = New Color() {Color.Transparent} G.FillEllipse(Whity, New Rectangle(0, 0, Width, Height * 2)) Case MouseState.Down Dim Whit As New GraphicsPath Whit.AddEllipse(New Rectangle(0, 0, Width, Height * 2)) Dim Whity As New PathGradientBrush(Whit) Whity.CenterColor = Color.FromArgb(120, Color.White) Whity.SurroundColors = New Color() {Color.Transparent} G.FillEllipse(Whity, New Rectangle(0, 0, Width, Height * 2)) G.FillRectangle(ToBrush(20, Color.Black), ClientRectangle) End Select G.DrawString(Text, Font, Brushes.Black, New Point(CInt((Width / 2) - (G.MeasureString(Text, Font).Width / 2)), CInt((Height / 2) - (G.MeasureString(Text, Font).Height / 2)))) Case False G.DrawString(Text, Font, Brushes.White, New Point(CInt((Width / 2) - (G.MeasureString(Text, Font).Width / 2)) + 1, CInt((Height / 2) - (G.MeasureString(Text, Font).Height / 2)) + 1)) G.DrawString(Text, Font, Brushes.Gray, New Point(CInt((Width / 2) - (G.MeasureString(Text, Font).Width / 2)), CInt((Height / 2) - (G.MeasureString(Text, Font).Height / 2)))) End Select G.SmoothingMode = SmoothingMode.HighQuality G.DrawPath(ToPen(157, 157, 157), RoundRect(0, 0, Width - 1, Height - 1, 2)) G.DrawRectangle(ToPen(40, Color.White), New Rectangle(1, 1, Width - 3, Height - 3)) End Sub Protected Overrides Sub OnMouseEnter(ByVal e As System.EventArgs) MyBase.OnMouseEnter(e) : State = MouseState.Over : Invalidate() End Sub Protected Overrides Sub OnMouseLeave(ByVal e As System.EventArgs) MyBase.OnMouseLeave(e) : State = MouseState.None : Invalidate() End Sub Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseDown(e) : State = MouseState.Down : Invalidate() End Sub Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseUp(e) : State = MouseState.Over : Invalidate() End Sub End Class Class GraphiteButtonToggle Inherits Control Private _toggled As Boolean Public Property Toggled() As Boolean Get Return _toggled End Get Set(ByVal value As Boolean) _toggled = value Invalidate() End Set End Property Enum MouseState None = 0 Over = 1 Down = 2 End Enum Private State As MouseState = 0 Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) MyBase.OnPaint(e) Dim G As Graphics = e.Graphics G.FillRectangle(ToBrush(Color.FromArgb(232, 232, 232)), ClientRectangle) G.FillRectangle(ToBrush(120, Color.White), New Rectangle(0, 0, Width, CInt(Height / 2))) Select Case Enabled Case True If Not Toggled Then Select Case State Case MouseState.Over Dim Whit As New GraphicsPath Whit.AddEllipse(New Rectangle(0, 0, Width, Height * 2)) Dim Whity As New PathGradientBrush(Whit) Whity.CenterColor = Color.FromArgb(120, Color.White) Whity.SurroundColors = New Color() {Color.Transparent} G.FillEllipse(Whity, New Rectangle(0, 0, Width, Height * 2)) Case MouseState.Down Dim Whit As New GraphicsPath Whit.AddEllipse(New Rectangle(0, 0, Width, Height * 2)) Dim Whity As New PathGradientBrush(Whit) Whity.CenterColor = Color.FromArgb(120, Color.White) Whity.SurroundColors = New Color() {Color.Transparent} G.FillEllipse(Whity, New Rectangle(0, 0, Width, Height * 2)) G.FillRectangle(ToBrush(20, Color.Black), ClientRectangle) End Select Else Dim Whit As New GraphicsPath Whit.AddEllipse(New Rectangle(0, 0, Width, Height * 2)) Dim Whity As New PathGradientBrush(Whit) Whity.CenterColor = Color.FromArgb(120, Color.White) Whity.SurroundColors = New Color() {Color.Transparent} G.FillEllipse(Whity, New Rectangle(0, 0, Width, Height * 2)) G.FillRectangle(ToBrush(20, Color.Black), ClientRectangle) End If G.DrawString(Text, Font, Brushes.Black, New Point(CInt((Width / 2) - (G.MeasureString(Text, Font).Width / 2)), CInt((Height / 2) - (G.MeasureString(Text, Font).Height / 2)))) Case False G.DrawString(Text, Font, Brushes.White, New Point(CInt((Width / 2) - (G.MeasureString(Text, Font).Width / 2)) + 1, CInt((Height / 2) - (G.MeasureString(Text, Font).Height / 2)) + 1)) G.DrawString(Text, Font, Brushes.Gray, New Point(CInt((Width / 2) - (G.MeasureString(Text, Font).Width / 2)), CInt((Height / 2) - (G.MeasureString(Text, Font).Height / 2)))) End Select G.SmoothingMode = SmoothingMode.HighQuality G.DrawPath(ToPen(157, 157, 157), RoundRect(0, 0, Width - 1, Height - 1, 2)) G.DrawRectangle(ToPen(40, Color.White), New Rectangle(1, 1, Width - 3, Height - 3)) End Sub Protected Overrides Sub OnMouseEnter(ByVal e As System.EventArgs) MyBase.OnMouseEnter(e) : State = MouseState.Over : Invalidate() End Sub Protected Overrides Sub OnMouseLeave(ByVal e As System.EventArgs) MyBase.OnMouseLeave(e) : State = MouseState.None : Invalidate() End Sub Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseDown(e) : State = MouseState.Down : Invalidate() End Sub Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseUp(e) : State = MouseState.Over : Invalidate() End Sub Protected Overrides Sub OnMouseClick(ByVal e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseClick(e) : Toggled = Not Toggled : Invalidate() End Sub End Class Class GraphiteFrame Inherits ContainerControl Enum TAlign Left = 0 Center = 1 Right = 2 End Enum Private TA As TAlign Public Property TextAlignment() As TAlign Get Return TA End Get Set(ByVal value As TAlign) TA = value Invalidate() End Set End Property Sub New() Size = New Size(275, 75) TA = TAlign.Left End Sub Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) Dim G As Graphics = e.Graphics G.Clear(Color.FromArgb(236, 237, 239)) G.DrawRectangle(ToPen(165, 166, 168), New Rectangle(0, CInt(G.MeasureString(Text, Font).Height / 2), Width - 1, Height - 1 - CInt(G.MeasureString(Text, Font).Height / 2))) Dim TOff As Integer = 0 Select Case TA Case TAlign.Left TOff = 6 Case TAlign.Right TOff = Width - 6 - G.MeasureString(Text, Font).Width Case TAlign.Center TOff = CInt((Width / 2) - (G.MeasureString(Text, Font).Width / 2)) End Select G.FillRectangle(ToBrush(236, 237, 239), New Rectangle(New Point(TOff, 0), G.MeasureString(Text, Font).ToSize)) G.DrawString(Text, Font, Brushes.Black, TOff, 0) End Sub End Class Class GraphiteProgress Inherits Control Private Max As Integer Public Property Maximum() As Integer Get Return Max End Get Set(ByVal value As Integer) If value > 0 Then Max = value If Max < Val Then Val = Max Invalidate() End Set End Property Private Val As Integer Public Property Value() As Integer Get Return Val End Get Set(ByVal value As Integer) If value < 0 Then Val = 0 Else If value > Max Then Val = Max Else Val = value Invalidate() End Set End Property Sub New() Max = 100 End Sub Protected Overrides Sub CreateHandle() DoubleBuffered = True MyBase.CreateHandle() Dim Animation As New Timer With {.Interval = 50} AddHandler Animation.Tick, AddressOf AnimationHandle Animation.Start() End Sub Dim Offset As Integer = 0 Sub AnimationHandle() If Offset < 7 Then Offset += 1 Else Offset = 0 Invalidate() End Sub Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) MyBase.OnPaint(e) Dim G As Graphics = e.Graphics G.SmoothingMode = SmoothingMode.HighQuality G.Clear(Color.FromArgb(225, 226, 228)) Dim Fill As Rectangle = New Rectangle(2, 2, CInt((Width - 5) * (Val / Max)), Height - 5) G.FillRectangle(ToBrush(180, Color.Black), Fill) G.RenderingOrigin = New Point(Offset, 0) Dim KP As New HatchBrush(HatchStyle.WideUpwardDiagonal, Color.FromArgb(40, Color.Black), Color.Empty) G.FillRectangle(KP, Fill) 'If Value > 2 Then ' For x = 0 To Math.Floor(Fill.Width / 10) ' Dim points As Point() = {New Point(x * 10, 3), New Point((x * 10) - 5, Height - 3), New Point((x * 10) - 10, Height - 3), New Point((x * 10) - 5, 3)} ' G.FillPolygon(ToBrush(40, Color.Black), points) ' Next 'End If G.DrawRectangle(ToPen(40, Color.Black), Fill) G.FillRectangle(ToBrush(40, Color.White), New Rectangle(0, 0, Width, CInt(Height / 2))) G.DrawPath(ToPen(50, Color.Black), RoundRect(0, 0, Width - 1, Height - 1, 2)) End Sub End Class Class GraphiteRadio Inherits Control Private [Check] As Boolean Public Property Checked() As Boolean Get Return [Check] End Get Set(ByVal value As Boolean) [Check] = value Invalidate() End Set End Property Private aZ As Boolean Public Overrides Property Autosize() As Boolean Get Return aZ End Get Set(ByVal value As Boolean) aZ = value Invalidate() End Set End Property Sub New() SetStyle(ControlStyles.SupportsTransparentBackColor, True) BackColor = Color.Transparent Autosize = True End Sub Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) Dim Ell As Rectangle = New Rectangle(0, 0, 12, 12) Dim G As Graphics = e.Graphics If Autosize Then Size = New Size(Ell.Width + 5 + G.MeasureString(Text, Font).Width, _ Ell.Height + 1) End If G.Clear(Parent.FindForm.BackColor) G.SmoothingMode = SmoothingMode.HighQuality If Enabled Then G.FillEllipse(Brushes.White, Ell) G.DrawEllipse(ToPen(40, Color.Black), Ell) If Checked Then G.FillEllipse(ToBrush(180, Color.Black), New Rectangle(New Point(Ell.X + 3, Ell.Y + 3), New Size(Ell.Width - 6, Ell.Height - 6))) End If G.DrawString(Text, Font, Brushes.Black, New Point(5 + Ell.X + Ell.Width, CInt(((Ell.Y + Ell.Width) / 2) - (G.MeasureString(Text, Font).Height / 2)))) Else G.DrawEllipse(ToPen(40, Color.Black), Ell) If Checked Then G.FillEllipse(ToBrush(80, Color.Black), New Rectangle(New Point(Ell.X + 3, Ell.Y + 3), New Size(Ell.Width - 6, Ell.Height - 6))) End If G.DrawString(Text, Font, Brushes.DimGray, New Point(5 + Ell.X + Ell.Width, CInt(((Ell.Y + Ell.Width) / 2) - (G.MeasureString(Text, Font).Height / 2)))) End If End Sub Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs) MyBase.OnTextChanged(e) Invalidate() End Sub Protected Overrides Sub OnClick(ByVal e As System.EventArgs) MyBase.OnClick(e) If Enabled Then If Not Checked Then Checked = True For Each ctl As Control In Parent.Controls If TypeOf ctl Is GraphiteRadio Then If ctl.Handle = Me.Handle Then Continue For If ctl.Enabled Then DirectCast(ctl, GraphiteRadio).Checked = False End If Next End If End Sub End Class Class GraphiteTabControl Inherits TabControl Sub New() SetStyle(ControlStyles.AllPaintingInWmPaint Or _ ControlStyles.ResizeRedraw Or _ ControlStyles.UserPaint Or _ ControlStyles.DoubleBuffer, True) End Sub Protected Overrides Sub CreateHandle() MyBase.CreateHandle() Select Case Alignment Case TabAlignment.Left SizeMode = TabSizeMode.Fixed ItemSize = New Size(20, 75) Case TabAlignment.Right SizeMode = TabSizeMode.Fixed ItemSize = New Size(20, 75) Case Else SizeMode = TabSizeMode.Normal ItemSize = New Size(77, 21) End Select End Sub Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) Dim G As Graphics = e.Graphics Dim ItemBounds As Rectangle Dim TextBrush As New SolidBrush(Color.Empty) Dim SOFF As Integer = 0 G.Clear(Color.FromArgb(236, 237, 239)) For TabItemIndex As Integer = 0 To Me.TabCount - 1 ItemBounds = Me.GetTabRect(TabItemIndex) If Not TabItemIndex = SelectedIndex Then SOFF = 2 Select Case Alignment Case TabAlignment.Left G.FillPath(ToBrush(216, 217, 219), RoundRect(New Rectangle(New Point(ItemBounds.X + SOFF, ItemBounds.Y), New Size(ItemBounds.Width, ItemBounds.Height)), 2)) G.DrawPath(ToPen(90, Color.Black), RoundRect(New Rectangle(New Point(ItemBounds.X, ItemBounds.Y), New Size(ItemBounds.Width, ItemBounds.Height)), 2)) Dim sf As New StringFormat sf.LineAlignment = StringAlignment.Center sf.Alignment = StringAlignment.Center TextBrush.Color = Color.FromArgb(80, 80, 80) Try G.DrawString(TabPages(TabItemIndex).Text, New Font(Font.Name, Font.Size - 1), TextBrush, New Rectangle(GetTabRect(TabItemIndex).Location, GetTabRect(TabItemIndex).Size), sf) TabPages(TabItemIndex).BackColor = Color.FromArgb(236, 237, 239) Catch : End Try Case TabAlignment.Right G.FillPath(ToBrush(216, 217, 219), RoundRect(New Rectangle(New Point(ItemBounds.X, ItemBounds.Y + SOFF), New Size(ItemBounds.Width, ItemBounds.Height)), 2)) G.DrawPath(ToPen(90, Color.Black), RoundRect(New Rectangle(New Point(ItemBounds.X, ItemBounds.Y + SOFF), New Size(ItemBounds.Width, ItemBounds.Height)), 2)) Dim sf As New StringFormat sf.LineAlignment = StringAlignment.Center sf.Alignment = StringAlignment.Center TextBrush.Color = Color.FromArgb(80, 80, 80) Try G.DrawString(TabPages(TabItemIndex).Text, New Font(Font.Name, Font.Size - 1), TextBrush, New Rectangle(GetTabRect(TabItemIndex).Location, GetTabRect(TabItemIndex).Size), sf) TabPages(TabItemIndex).BackColor = Color.FromArgb(236, 237, 239) Catch : End Try Case TabAlignment.Top G.FillPath(ToBrush(216, 217, 219), RoundRect(New Rectangle(New Point(ItemBounds.X, ItemBounds.Y + SOFF), New Size(ItemBounds.Width, ItemBounds.Height)), 2)) G.DrawPath(ToPen(90, Color.Black), RoundRect(New Rectangle(New Point(ItemBounds.X, ItemBounds.Y + SOFF), New Size(ItemBounds.Width, ItemBounds.Height)), 2)) Dim sf As New StringFormat sf.LineAlignment = StringAlignment.Center sf.Alignment = StringAlignment.Center TextBrush.Color = Color.FromArgb(80, 80, 80) Try G.DrawString(TabPages(TabItemIndex).Text, New Font(Font.Name, Font.Size - 1), TextBrush, New Rectangle(GetTabRect(TabItemIndex).Location, GetTabRect(TabItemIndex).Size), sf) TabPages(TabItemIndex).BackColor = Color.FromArgb(236, 237, 239) Catch : End Try Case TabAlignment.Bottom G.FillPath(ToBrush(216, 217, 219), RoundRect(New Rectangle(New Point(ItemBounds.X, ItemBounds.Y - 6 + SOFF), New Size(ItemBounds.Width, ItemBounds.Height)), 2)) G.DrawPath(ToPen(90, Color.Black), RoundRect(New Rectangle(New Point(ItemBounds.X, ItemBounds.Y - 6 + SOFF), New Size(ItemBounds.Width, ItemBounds.Height)), 2)) Dim sf As New StringFormat sf.LineAlignment = StringAlignment.Center sf.Alignment = StringAlignment.Center TextBrush.Color = Color.FromArgb(80, 80, 80) Try G.DrawString(TabPages(TabItemIndex).Text, New Font(Font.Name, Font.Size - 1), TextBrush, New Rectangle(GetTabRect(TabItemIndex).Location - New Point(0, 2), GetTabRect(TabItemIndex).Size), sf) TabPages(TabItemIndex).BackColor = Color.FromArgb(236, 237, 239) Catch : End Try End Select End If Next Select Case Alignment Case TabAlignment.Top G.FillPath(ToBrush(236, 237, 239), RoundRect(0, 20, Width - 1, Height - 21, 2)) G.DrawPath(ToPen(150, 151, 153), RoundRect(0, 20, Width - 1, Height - 21, 2)) Case TabAlignment.Bottom G.DrawPath(ToPen(150, 151, 153), RoundRect(0, 0, Width - 1, Height - 22, 2)) G.FillPath(ToBrush(236, 237, 239), RoundRect(1, 1, Width - 3, Height - 23, 2)) Case TabAlignment.Right G.FillPath(ToBrush(236, 237, 239), RoundRect(0, 2, Width - 76, Height - 3, 2)) G.DrawPath(ToPen(150, 151, 153), RoundRect(0, 2, Width - 76, Height - 3, 2)) Case TabAlignment.Left G.FillPath(ToBrush(236, 237, 239), RoundRect(75, 2, Width - 76, Height - 3, 2)) G.DrawPath(ToPen(150, 151, 153), RoundRect(75, 2, Width - 76, Height - 3, 2)) End Select For TabItemIndex As Integer = 0 To Me.TabCount - 1 ItemBounds = Me.GetTabRect(TabItemIndex) If TabItemIndex = SelectedIndex Then Select Case Alignment Case TabAlignment.Top G.FillPath(ToBrush(236, 237, 239), RoundRect(New Rectangle(New Point(ItemBounds.X - 2, ItemBounds.Y), New Size(ItemBounds.Width + 3, ItemBounds.Height - 2)), 2)) G.DrawPath(ToPen(150, 151, 153), RoundRect(New Rectangle(New Point(ItemBounds.X - 2, ItemBounds.Y), New Size(ItemBounds.Width + 2, ItemBounds.Height - 2)), 2)) G.FillRectangle(ToBrush(236, 237, 239), New Rectangle(New Point(ItemBounds.X - 1, ItemBounds.Y + 1), New Size(ItemBounds.Width + 1, ItemBounds.Height))) Case TabAlignment.Bottom G.FillPath(ToBrush(236, 237, 239), RoundRect(New Rectangle(New Point(ItemBounds.X - 2, ItemBounds.Y), New Size(ItemBounds.Width + 3, ItemBounds.Height - 2)), 2)) G.DrawPath(ToPen(150, 151, 153), RoundRect(New Rectangle(New Point(ItemBounds.X - 2, ItemBounds.Y), New Size(ItemBounds.Width + 2, ItemBounds.Height - 2)), 2)) G.FillRectangle(ToBrush(236, 237, 239), New Rectangle(New Point(ItemBounds.X - 1, ItemBounds.Y - 2), New Size(ItemBounds.Width + 1, ItemBounds.Height))) Case TabAlignment.Left G.FillPath(ToBrush(236, 237, 239), RoundRect(New Rectangle(New Point(ItemBounds.X - 2, ItemBounds.Y), New Size(ItemBounds.Width + 3, ItemBounds.Height + 2)), 2)) G.DrawPath(ToPen(150, 151, 153), RoundRect(New Rectangle(New Point(ItemBounds.X - 2, ItemBounds.Y), New Size(ItemBounds.Width + 2, ItemBounds.Height + 1)), 2)) G.FillRectangle(ToBrush(236, 237, 239), New Rectangle(New Point(ItemBounds.X + 1, ItemBounds.Y + 1), New Size(ItemBounds.Width + 6, ItemBounds.Height))) Case TabAlignment.Right G.FillPath(ToBrush(236, 237, 239), RoundRect(New Rectangle(New Point(ItemBounds.X - 2, ItemBounds.Y), New Size(ItemBounds.Width + 3, ItemBounds.Height + 1)), 2)) G.DrawPath(ToPen(150, 151, 153), RoundRect(New Rectangle(New Point(ItemBounds.X - 2, ItemBounds.Y), New Size(ItemBounds.Width + 2, ItemBounds.Height + 2)), 2)) G.FillRectangle(ToBrush(236, 237, 239), New Rectangle(New Point(ItemBounds.X - 7, ItemBounds.Y + 1), New Size(ItemBounds.Width + 6, ItemBounds.Height + 1))) End Select SOFF = 0 Dim sf As New StringFormat sf.LineAlignment = StringAlignment.Center sf.Alignment = StringAlignment.Center TextBrush.Color = Color.FromArgb(80, 80, 80) Try G.DrawString(TabPages(TabItemIndex).Text, Font, TextBrush, New Rectangle(GetTabRect(TabItemIndex).Location + New Point(0, SOFF), GetTabRect(TabItemIndex).Size), sf) TabPages(TabItemIndex).BackColor = Color.FromArgb(236, 237, 239) Catch : End Try End If Next End Sub End Class Class GraphiteTheme Inherits ContainerControl Sub New() Dock = DockStyle.Fill BackColor = Color.FromArgb(235, 235, 235) ForeColor = Color.FromArgb(235, 235, 235) End Sub Protected Overrides Sub CreateHandle() MyBase.CreateHandle() : SendToBack() Parent.FindForm.TransparencyKey = Color.Fuchsia Parent.FindForm.FormBorderStyle = FormBorderStyle.None End Sub Private _ico As Icon Public Property Icon() As Icon Get Return _ico End Get Set(ByVal value As Icon) _ico = value Invalidate() End Set End Property #Region " Movement and Control Buttons" Private Cap As Boolean = False Private CapL As Point = Nothing Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseDown(e) If New Rectangle(0, 0, Width, 25).Contains(e.Location) Then Cap = True : CapL = e.Location : End If End Sub Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseUp(e) : Cap = False End Sub Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseMove(e) : If Cap Then Parent.Location = MousePosition - CapL End Sub #End Region Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) MyBase.OnPaint(e) : Dim G As Graphics = e.Graphics G.Clear(BackColor) 'Title G.FillRectangle(ToBrush(78, 78, 78), New Rectangle(0, 0, Width, 19)) G.FillRectangle(ToBrush(73, Color.White), New Rectangle(0, 0, Width, 10)) 'Title Icon Try G.DrawIcon(_ico, New Rectangle(3, 3, 16, 16)) Catch : End Try 'Title Text G.DrawString(Text, Font, ToBrush(120, Color.Black), New Point((Width / 2) - (G.MeasureString(Text, Font).Width / 2), 4)) G.DrawString(Text, Font, ToBrush(ForeColor), New Point((Width / 2) - (G.MeasureString(Text, Font).Width / 2) + 1, 2)) 'Border G.DrawRectangle(Pens.DimGray, New Rectangle(1, 1, Width - 3, Height - 3)) G.DrawPath(Pens.Black, RoundRect(0, 0, Width - 1, Height - 1, 2)) Try G.DrawRectangle(ToPen(Parent.FindForm.TransparencyKey), New Rectangle(0, 0, 1, 1)) G.DrawRectangle(ToPen(Parent.FindForm.TransparencyKey), New Rectangle(Width - 1, 0, 1, 1)) G.DrawRectangle(ToPen(Parent.FindForm.TransparencyKey), New Rectangle(0, Height - 1, 1, 1)) G.DrawRectangle(ToPen(Parent.FindForm.TransparencyKey), New Rectangle(Width - 1, Height - 1, 1, 1)) Catch : End Try End Sub End Class Class GraphiteTrackBar Inherits Control #Region "Properties" Dim _Maximum As Integer = 10 Public Property Maximum() As Integer Get Return _Maximum End Get Set(ByVal value As Integer) If value > 0 Then _Maximum = value If value < _Value Then _Value = value Invalidate() End Set End Property Event ValueChanged() Dim _Value As Integer = 0 Public Property Value() As Integer Get Return _Value End Get Set(ByVal value As Integer) Select Case value Case Is = _Value Exit Property Case Is < 0 _Value = 0 Case Is > _Maximum _Value = _Maximum Case Else _Value = value End Select Invalidate() RaiseEvent ValueChanged() End Set End Property #End Region Sub New() Me.SetStyle(ControlStyles.DoubleBuffer, True) Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True) Me.SetStyle(ControlStyles.ResizeRedraw, True) Me.SetStyle(ControlStyles.UserPaint, True) Me.SetStyle(ControlStyles.Selectable, True) Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True) End Sub Dim CaptureM As Boolean = False Dim Bar As Rectangle = New Rectangle(0, 10, Width - 1, Height - 21) Dim Track As Size = New Size(20, 10) Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) MyBase.OnPaint(e) Dim G As Graphics = e.Graphics Bar = New Rectangle(15, 10, Width - 31, Height - 21) G.Clear(Parent.FindForm.BackColor) G.FillRectangle(ToBrush(20, Color.Black), New Rectangle(0, CInt((Height / 2) - 2), Width - 1, 4)) G.DrawRectangle(ToPen(20, Color.Black), New Rectangle(0, CInt((Height / 2) - 2), Width - 1, 4)) G.FillRectangle(ToBrush(180, Color.Black), New Rectangle(1, CInt((Height / 2) - 2), CInt(Bar.Width * (Value / Maximum)) + CInt(Track.Width / 2), 4)) G.FillRectangle(ToBrush(Parent.FindForm.BackColor), New Rectangle(New Point(Bar.X + CInt(Bar.Width * (Value / Maximum)) - CInt(Track.Width / 2), Bar.Y + CInt((Bar.Height / 2)) - CInt(Track.Height / 2)), New Size(Track.Width, Track.Height))) G.DrawRectangle(ToPen(50, Color.Black), New Rectangle(New Point(Bar.X + CInt(Bar.Width * (Value / Maximum)) - CInt(Track.Width / 2), Bar.Y + CInt((Bar.Height / 2)) - CInt(Track.Height / 2)), New Size(Track.Width, Track.Height))) End Sub Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs) Me.BackColor = Color.Transparent MyBase.OnHandleCreated(e) End Sub Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseDown(e) Dim mp = New Rectangle(New Point(e.Location.X, e.Location.Y), New Size(1, 1)) Dim Bar As Rectangle = New Rectangle(10, 10, Width - 21, Height - 21) If New Rectangle(New Point(Bar.X + CInt(Bar.Width * (Value / Maximum)) - CInt(Track.Width / 2), 0), New Size(Track.Width, Height)).IntersectsWith(mp) Then CaptureM = True End If End Sub Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseUp(e) CaptureM = False End Sub Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseMove(e) If CaptureM Then Dim mp As Point = New Point(e.X, e.Y) Dim Bar As Rectangle = New Rectangle(10, 10, Width - 21, Height - 21) Value = CInt(Maximum * ((mp.X - Bar.X) / Bar.Width)) End If End Sub Protected Overrides Sub OnMouseLeave(ByVal e As System.EventArgs) MyBase.OnMouseLeave(e) : CaptureM = False End Sub End Class Class GraphiteSeperator Inherits Control Enum POrientation Horizonal = 0 Vertical = 1 End Enum Private ori As POrientation Public Property Orientation() As POrientation Get Return ori End Get Set(ByVal value As POrientation) ori = value If ori = POrientation.Horizonal Then If Height > Width Then Size = New Size(Height, Width) If ori = POrientation.Vertical Then If Width > Height Then Size = New Size(Height, Width) Invalidate() End Set End Property Sub New() Size = New Size(100, 10) End Sub Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) MyBase.OnPaint(e) Dim G As Graphics = e.Graphics G.Clear(Parent.BackColor) Select Case ori Case POrientation.Horizonal G.DrawLine(ToPen(40, Color.Black), New Point(0, CInt(Height / 2) - 1), New Point(Width, CInt(Height / 2) - 1)) G.DrawLine(ToPen(20, Color.White), New Point(0, CInt(Height / 2)), New Point(Width, CInt(Height / 2))) Case POrientation.Vertical G.DrawLine(ToPen(40, Color.Black), New Point(CInt(Width / 2) - 1, 0), New Point(CInt(Width / 2) - 1, Height)) G.DrawLine(ToPen(20, Color.White), New Point(CInt(Width / 2), 0), New Point(CInt(Width / 2), Height)) End Select End Sub Protected Overrides Sub OnResize(ByVal e As System.EventArgs) MyBase.OnResize(e) Select Case ori Case POrientation.Horizonal Size = New Size(Width, 10) Case POrientation.Vertical Size = New Size(10, Height) End Select End Sub End Class Class GraphiteComboBox Inherits ComboBox Sub New() MyBase.New() SetStyle(ControlStyles.AllPaintingInWmPaint Or _ ControlStyles.ResizeRedraw Or _ ControlStyles.UserPaint Or _ ControlStyles.DoubleBuffer, True) DrawMode = Windows.Forms.DrawMode.OwnerDrawFixed BackColor = Color.FromArgb(235, 235, 235) ForeColor = Color.FromArgb(31, 31, 31) DropDownStyle = ComboBoxStyle.DropDownList End Sub Private _StartIndex As Integer = 0 Public Property StartIndex As Integer Get Return _StartIndex End Get Set(ByVal value As Integer) _StartIndex = value Try MyBase.SelectedIndex = value Catch End Try Invalidate() End Set End Property Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) If Not DropDownStyle = ComboBoxStyle.DropDownList Then DropDownStyle = ComboBoxStyle.DropDownList MyBase.OnPaint(e) Dim G As Graphics = e.Graphics Dim T As LinearGradientBrush = New LinearGradientBrush(New Rectangle(0, 0, Width, Height), Color.FromArgb(0, Color.Black), Color.FromArgb(22, Color.Black), 90S) Dim DrawCornersBrush As SolidBrush DrawCornersBrush = ToBrush(235, 235, 235) Try With G G.SmoothingMode = SmoothingMode.HighQuality .Clear(Color.FromArgb(235, 235, 235)) .FillRectangle(T, New Rectangle(0, 0, Width, Height)) .DrawLine(ToPen(235, 235, 235), 0, 0, 0, 0) .DrawRectangle(ToPen(235, 235, 235), New Rectangle(1, 1, Width - 3, Height - 3)) .DrawLine(ToPen(80, Color.Black), New Point(Width - 22, 4), New Point(Width - 22, Height - 5)) Dim K As New GraphicsPath K.AddEllipse(-Width \ 2, -Height, Width * 2, CInt(Height * 1.55)) Dim kK As New PathGradientBrush(K) kK.CenterColor = Color.Transparent kK.SurroundColors = New Color() {Color.FromArgb(100, Color.White)} .FillPath(kK, K) Try If .MeasureString(Text, Font).Width > Width - 29 Then .DrawString(Items(SelectedIndex).ToString, Font, ToBrush(71, 71, 71), New RectangleF(3, 3, Width - 35, Height - 7)) .DrawString("...", Font, ToBrush(71, 71, 71), New Point(Width - 38, 3)) Else .DrawString(Items(SelectedIndex).ToString, Font, ToBrush(71, 71, 71), New RectangleF(3, 3, Width - 35, Height - 7)) End If Catch .DrawString("...", Font, ToBrush(71, 71, 71), New Point(3, 3)) End Try DrawTriangle(Color.FromArgb(71, 71, 71), New Point(Width - 15, Height - 10), New Point(Width - 12, Height - 7), New Point(Width - 9, Height - 10), G) DrawTriangle(Color.FromArgb(235, 235, 235), New Point(Width - 15, Height - 12), New Point(Width - 12, Height - 8), New Point(Width - 9, Height - 12), G) DrawTriangle(Color.FromArgb(71, 71, 71), New Point(Width - 15, 9), New Point(Width - 12, 6), New Point(Width - 9, 9), G) DrawTriangle(Color.FromArgb(235, 235, 235), New Point(Width - 15, 11), New Point(Width - 12, 7), New Point(Width - 9, 11), G) .DrawPath(ToPen(120, Color.Black), RoundRect(0, 0, Width - 1, Height - 1, 2)) End With Catch End Try End Sub Sub ReplaceItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles Me.DrawItem e.DrawBackground() Try If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then e.Graphics.FillRectangle(ToBrush(200, 200, 200), e.Bounds) End If e.Graphics.DrawString(MyBase.GetItemText(MyBase.Items(e.Index)), e.Font, ToBrush(71, 71, 71), e.Bounds) Catch : End Try End Sub Protected Sub DrawTriangle(ByVal Clr As Color, ByVal FirstPoint As Point, ByVal SecondPoint As Point, ByVal ThirdPoint As Point, ByVal G As Graphics) Dim points As New List(Of Point)() points.Add(FirstPoint) points.Add(SecondPoint) points.Add(ThirdPoint) G.FillPolygon(New SolidBrush(Clr), points.ToArray) End Sub End Class Class GraphiteCheck Inherits Control Sub New() Check = False Az = True End Sub Private [Check] As Boolean Public Property Checked() As Boolean Get Return [Check] End Get Set(ByVal value As Boolean) [Check] = value Invalidate() End Set End Property Private [Az] As Boolean Public Property AutoResize() As Boolean Get Return [Az] End Get Set(ByVal value As Boolean) [Az] = value OnResize(EventArgs.Empty) End Set End Property Protected Overrides Sub OnResize(ByVal e As System.EventArgs) MyBase.OnResize(e) If Az Then Size = New Size(15 + CreateGraphics().MeasureString(Text, Font).Width, 13) End Sub Protected Overrides Sub OnMouseClick(ByVal e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseClick(e) : Checked = Not Checked : Invalidate() End Sub Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) Dim G As Graphics = e.Graphics G.Clear(BackColor) G.FillPath(Brushes.White, RoundRect(0, 0, Height - 1, Height - 1, 2)) G.DrawPath(ToPen(120, Color.Black), RoundRect(0, 0, Height - 1, Height - 1, 2)) Dim ChkSize As Integer = Height - 1 If Checked Then Dim WWidth As Integer = Height G.SmoothingMode = SmoothingMode.HighQuality Dim OFS As Integer = -2 Dim CP As Point() = {New Point(ChkSize / 4, ChkSize / 2), New Point(ChkSize / 2, ChkSize - (ChkSize / 4)), New Point(ChkSize - (ChkSize / 5), ChkSize / 4), New Point(ChkSize - (ChkSize / 4), (ChkSize / 4) + OFS), New Point(ChkSize / 2, ChkSize - (ChkSize / 4) + OFS), New Point(ChkSize / 4, (ChkSize / 2) + OFS)} G.FillPolygon(Brushes.Black, CP) End If G.DrawString(Text, Font, ToBrush(ForeColor), New Point(ChkSize + 3, CInt(Height / 2) - CInt(G.MeasureString(Text, Font).Height / 2))) End Sub Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs) MyBase.OnTextChanged(e) : OnResize(EventArgs.Empty) : Invalidate() End Sub End Class