Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System
- Imports System.Windows.Forms
- Imports System.Drawing
- Imports System.Drawing.Drawing2D
- Imports System.Drawing.Text
- Imports System.ComponentModel
- Imports System.Collections.Generic
- Imports System.Text
- Imports System.Runtime.InteropServices
- Imports System.Drawing.Imaging
- Imports System.IO
- '------------------
- 'Creator: aeonhack
- 'Site: elitevs.net
- 'Created: 08/02/2011
- 'Changed: 12/06/2011
- 'Version: 1.5.4
- '------------------
- MustInherit Class ThemeContainer154
- Inherits ContainerControl
- #Region " Initialization "
- Protected G As Graphics, B As Bitmap
- Sub New()
- SetStyle(DirectCast(139270, ControlStyles), True)
- _ImageSize = Size.Empty
- Font = New Font("Verdana", 8S)
- MeasureBitmap = New Bitmap(1, 1)
- MeasureGraphics = Graphics.FromImage(MeasureBitmap)
- DrawRadialPath = New GraphicsPath
- InvalidateCustimization()
- End Sub
- Protected NotOverridable Overrides Sub OnHandleCreated(ByVal e As EventArgs)
- If DoneCreation Then InitializeMessages()
- InvalidateCustimization()
- ColorHook()
- If Not _LockWidth = 0 Then Width = _LockWidth
- If Not _LockHeight = 0 Then Height = _LockHeight
- If Not _ControlMode Then MyBase.Dock = DockStyle.Fill
- Transparent = _Transparent
- If _Transparent AndAlso _BackColor Then BackColor = Color.Transparent
- MyBase.OnHandleCreated(e)
- End Sub
- Private DoneCreation As Boolean
- Protected NotOverridable Overrides Sub OnParentChanged(ByVal e As EventArgs)
- MyBase.OnParentChanged(e)
- If Parent Is Nothing Then Return
- _IsParentForm = TypeOf Parent Is Form
- If Not _ControlMode Then
- InitializeMessages()
- If _IsParentForm Then
- ParentForm.FormBorderStyle = _BorderStyle
- ParentForm.TransparencyKey = _TransparencyKey
- If Not DesignMode Then
- AddHandler ParentForm.Shown, AddressOf FormShown
- End If
- End If
- Parent.BackColor = BackColor
- End If
- OnCreation()
- DoneCreation = True
- InvalidateTimer()
- End Sub
- #End Region
- Private Sub DoAnimation(ByVal i As Boolean)
- OnAnimation()
- If i Then Invalidate()
- End Sub
- Protected NotOverridable Overrides Sub OnPaint(ByVal e As PaintEventArgs)
- If Width = 0 OrElse Height = 0 Then Return
- If _Transparent AndAlso _ControlMode Then
- PaintHook()
- e.Graphics.DrawImage(B, 0, 0)
- Else
- G = e.Graphics
- PaintHook()
- End If
- End Sub
- Protected Overrides Sub OnHandleDestroyed(ByVal e As EventArgs)
- RemoveAnimationCallback(AddressOf DoAnimation)
- MyBase.OnHandleDestroyed(e)
- End Sub
- Private HasShown As Boolean
- Private Sub FormShown(ByVal sender As Object, ByVal e As EventArgs)
- If _ControlMode OrElse HasShown Then Return
- If _StartPosition = FormStartPosition.CenterParent OrElse _StartPosition = FormStartPosition.CenterScreen Then
- Dim SB As Rectangle = Screen.PrimaryScreen.Bounds
- Dim CB As Rectangle = ParentForm.Bounds
- ParentForm.Location = New Point(SB.Width \ 2 - CB.Width \ 2, SB.Height \ 2 - CB.Width \ 2)
- End If
- HasShown = True
- End Sub
- #Region " Size Handling "
- Private Frame As Rectangle
- Protected NotOverridable Overrides Sub OnSizeChanged(ByVal e As EventArgs)
- If _Movable AndAlso Not _ControlMode Then
- Frame = New Rectangle(7, 7, Width - 14, _Header - 7)
- End If
- InvalidateBitmap()
- Invalidate()
- MyBase.OnSizeChanged(e)
- End Sub
- Protected Overrides Sub SetBoundsCore(ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal specified As BoundsSpecified)
- If Not _LockWidth = 0 Then width = _LockWidth
- If Not _LockHeight = 0 Then height = _LockHeight
- MyBase.SetBoundsCore(x, y, width, height, specified)
- End Sub
- #End Region
- #Region " State Handling "
- Protected State As MouseState
- Private Sub SetState(ByVal current As MouseState)
- State = current
- Invalidate()
- End Sub
- Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
- If Not (_IsParentForm AndAlso ParentForm.WindowState = FormWindowState.Maximized) Then
- If _Sizable AndAlso Not _ControlMode Then InvalidateMouse()
- End If
- MyBase.OnMouseMove(e)
- End Sub
- Protected Overrides Sub OnEnabledChanged(ByVal e As EventArgs)
- If Enabled Then SetState(MouseState.None) Else SetState(MouseState.Block)
- MyBase.OnEnabledChanged(e)
- End Sub
- Protected Overrides Sub OnMouseEnter(ByVal e As EventArgs)
- SetState(MouseState.Over)
- MyBase.OnMouseEnter(e)
- End Sub
- Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
- SetState(MouseState.Over)
- MyBase.OnMouseUp(e)
- End Sub
- Protected Overrides Sub OnMouseLeave(ByVal e As EventArgs)
- SetState(MouseState.None)
- If GetChildAtPoint(PointToClient(MousePosition)) IsNot Nothing Then
- If _Sizable AndAlso Not _ControlMode Then
- Cursor = Cursors.Default
- Previous = 0
- End If
- End If
- MyBase.OnMouseLeave(e)
- End Sub
- Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
- If e.Button = Windows.Forms.MouseButtons.Left Then SetState(MouseState.Down)
- If Not (_IsParentForm AndAlso ParentForm.WindowState = FormWindowState.Maximized OrElse _ControlMode) Then
- If _Movable AndAlso Frame.Contains(e.Location) Then
- Capture = False
- WM_LMBUTTONDOWN = True
- DefWndProc(Messages(0))
- ElseIf _Sizable AndAlso Not Previous = 0 Then
- Capture = False
- WM_LMBUTTONDOWN = True
- DefWndProc(Messages(Previous))
- End If
- End If
- MyBase.OnMouseDown(e)
- End Sub
- Private WM_LMBUTTONDOWN As Boolean
- Protected Overrides Sub WndProc(ByRef m As Message)
- MyBase.WndProc(m)
- If WM_LMBUTTONDOWN AndAlso m.Msg = 513 Then
- WM_LMBUTTONDOWN = False
- SetState(MouseState.Over)
- If Not _SmartBounds Then Return
- If IsParentMdi Then
- CorrectBounds(New Rectangle(Point.Empty, Parent.Parent.Size))
- Else
- CorrectBounds(Screen.FromControl(Parent).WorkingArea)
- End If
- End If
- End Sub
- Private GetIndexPoint As Point
- Private B1, B2, B3, B4 As Boolean
- Private Function GetIndex() As Integer
- GetIndexPoint = PointToClient(MousePosition)
- B1 = GetIndexPoint.X < 7
- B2 = GetIndexPoint.X > Width - 7
- B3 = GetIndexPoint.Y < 7
- B4 = GetIndexPoint.Y > Height - 7
- If B1 AndAlso B3 Then Return 4
- If B1 AndAlso B4 Then Return 7
- If B2 AndAlso B3 Then Return 5
- If B2 AndAlso B4 Then Return 8
- If B1 Then Return 1
- If B2 Then Return 2
- If B3 Then Return 3
- If B4 Then Return 6
- Return 0
- End Function
- Private Current, Previous As Integer
- Private Sub InvalidateMouse()
- Current = GetIndex()
- If Current = Previous Then Return
- Previous = Current
- Select Case Previous
- Case 0
- Cursor = Cursors.Default
- Case 1, 2
- Cursor = Cursors.SizeWE
- Case 3, 6
- Cursor = Cursors.SizeNS
- Case 4, 8
- Cursor = Cursors.SizeNWSE
- Case 5, 7
- Cursor = Cursors.SizeNESW
- End Select
- End Sub
- Private Messages(8) As Message
- Private Sub InitializeMessages()
- Messages(0) = Message.Create(Parent.Handle, 161, New IntPtr(2), IntPtr.Zero)
- For I As Integer = 1 To 8
- Messages(I) = Message.Create(Parent.Handle, 161, New IntPtr(I + 9), IntPtr.Zero)
- Next
- End Sub
- Private Sub CorrectBounds(ByVal bounds As Rectangle)
- If Parent.Width > bounds.Width Then Parent.Width = bounds.Width
- If Parent.Height > bounds.Height Then Parent.Height = bounds.Height
- Dim X As Integer = Parent.Location.X
- Dim Y As Integer = Parent.Location.Y
- If X < bounds.X Then X = bounds.X
- If Y < bounds.Y Then Y = bounds.Y
- Dim Width As Integer = bounds.X + bounds.Width
- Dim Height As Integer = bounds.Y + bounds.Height
- If X + Parent.Width > Width Then X = Width - Parent.Width
- If Y + Parent.Height > Height Then Y = Height - Parent.Height
- Parent.Location = New Point(X, Y)
- End Sub
- #End Region
- #Region " Base Properties "
- Overrides Property Dock As DockStyle
- Get
- Return MyBase.Dock
- End Get
- Set(ByVal value As DockStyle)
- If Not _ControlMode Then Return
- MyBase.Dock = value
- End Set
- End Property
- Private _BackColor As Boolean
- <Category("Misc")> _
- Overrides Property BackColor() As Color
- Get
- Return MyBase.BackColor
- End Get
- Set(ByVal value As Color)
- If value = MyBase.BackColor Then Return
- If Not IsHandleCreated AndAlso _ControlMode AndAlso value = Color.Transparent Then
- _BackColor = True
- Return
- End If
- MyBase.BackColor = value
- If Parent IsNot Nothing Then
- If Not _ControlMode Then Parent.BackColor = value
- ColorHook()
- End If
- End Set
- End Property
- Overrides Property MinimumSize As Size
- Get
- Return MyBase.MinimumSize
- End Get
- Set(ByVal value As Size)
- MyBase.MinimumSize = value
- If Parent IsNot Nothing Then Parent.MinimumSize = value
- End Set
- End Property
- Overrides Property MaximumSize As Size
- Get
- Return MyBase.MaximumSize
- End Get
- Set(ByVal value As Size)
- MyBase.MaximumSize = value
- If Parent IsNot Nothing Then Parent.MaximumSize = value
- End Set
- End Property
- Overrides Property Text() As String
- Get
- Return MyBase.Text
- End Get
- Set(ByVal value As String)
- MyBase.Text = value
- Invalidate()
- End Set
- End Property
- Overrides Property Font() As Font
- Get
- Return MyBase.Font
- End Get
- Set(ByVal value As Font)
- MyBase.Font = value
- Invalidate()
- End Set
- End Property
- <Browsable(False), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
- Overrides Property ForeColor() As Color
- Get
- Return Color.Empty
- End Get
- Set(ByVal value As Color)
- End Set
- End Property
- <Browsable(False), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
- Overrides Property BackgroundImage() As Image
- Get
- Return Nothing
- End Get
- Set(ByVal value As Image)
- End Set
- End Property
- <Browsable(False), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
- Overrides Property BackgroundImageLayout() As ImageLayout
- Get
- Return ImageLayout.None
- End Get
- Set(ByVal value As ImageLayout)
- End Set
- End Property
- #End Region
- #Region " Public Properties "
- Private _SmartBounds As Boolean = True
- Property SmartBounds() As Boolean
- Get
- Return _SmartBounds
- End Get
- Set(ByVal value As Boolean)
- _SmartBounds = value
- End Set
- End Property
- Private _Movable As Boolean = True
- Property Movable() As Boolean
- Get
- Return _Movable
- End Get
- Set(ByVal value As Boolean)
- _Movable = value
- End Set
- End Property
- Private _Sizable As Boolean = True
- Property Sizable() As Boolean
- Get
- Return _Sizable
- End Get
- Set(ByVal value As Boolean)
- _Sizable = value
- End Set
- End Property
- Private _TransparencyKey As Color
- Property TransparencyKey() As Color
- Get
- If _IsParentForm AndAlso Not _ControlMode Then Return ParentForm.TransparencyKey Else Return _TransparencyKey
- End Get
- Set(ByVal value As Color)
- If value = _TransparencyKey Then Return
- _TransparencyKey = value
- If _IsParentForm AndAlso Not _ControlMode Then
- ParentForm.TransparencyKey = value
- ColorHook()
- End If
- End Set
- End Property
- Private _BorderStyle As FormBorderStyle
- Property BorderStyle() As FormBorderStyle
- Get
- If _IsParentForm AndAlso Not _ControlMode Then Return ParentForm.FormBorderStyle Else Return _BorderStyle
- End Get
- Set(ByVal value As FormBorderStyle)
- _BorderStyle = value
- If _IsParentForm AndAlso Not _ControlMode Then
- ParentForm.FormBorderStyle = value
- If Not value = FormBorderStyle.None Then
- Movable = False
- Sizable = False
- End If
- End If
- End Set
- End Property
- Private _StartPosition As FormStartPosition
- Property StartPosition As FormStartPosition
- Get
- If _IsParentForm AndAlso Not _ControlMode Then Return ParentForm.StartPosition Else Return _StartPosition
- End Get
- Set(ByVal value As FormStartPosition)
- _StartPosition = value
- If _IsParentForm AndAlso Not _ControlMode Then
- ParentForm.StartPosition = value
- End If
- End Set
- End Property
- Private _NoRounding As Boolean
- Property NoRounding() As Boolean
- Get
- Return _NoRounding
- End Get
- Set(ByVal v As Boolean)
- _NoRounding = v
- Invalidate()
- End Set
- End Property
- Private _Image As Image
- Property Image() As Image
- Get
- Return _Image
- End Get
- Set(ByVal value As Image)
- If value Is Nothing Then _ImageSize = Size.Empty Else _ImageSize = value.Size
- _Image = value
- Invalidate()
- End Set
- End Property
- Private Items As New Dictionary(Of String, Color)
- Property Colors() As Bloom()
- Get
- Dim T As New List(Of Bloom)
- Dim E As Dictionary(Of String, Color).Enumerator = Items.GetEnumerator
- While E.MoveNext
- T.Add(New Bloom(E.Current.Key, E.Current.Value))
- End While
- Return T.ToArray
- End Get
- Set(ByVal value As Bloom())
- For Each B As Bloom In value
- If Items.ContainsKey(B.Name) Then Items(B.Name) = B.Value
- Next
- InvalidateCustimization()
- ColorHook()
- Invalidate()
- End Set
- End Property
- Private _Customization As String
- Property Customization() As String
- Get
- Return _Customization
- End Get
- Set(ByVal value As String)
- If value = _Customization Then Return
- Dim Data As Byte()
- Dim Items As Bloom() = Colors
- Try
- Data = Convert.FromBase64String(value)
- For I As Integer = 0 To Items.Length - 1
- Items(I).Value = Color.FromArgb(BitConverter.ToInt32(Data, I * 4))
- Next
- Catch
- Return
- End Try
- _Customization = value
- Colors = Items
- ColorHook()
- Invalidate()
- End Set
- End Property
- Private _Transparent As Boolean
- Property Transparent() As Boolean
- Get
- Return _Transparent
- End Get
- Set(ByVal value As Boolean)
- _Transparent = value
- If Not (IsHandleCreated OrElse _ControlMode) Then Return
- If Not value AndAlso Not BackColor.A = 255 Then
- Throw New Exception("Unable to change value to false while a transparent BackColor is in use.")
- End If
- SetStyle(ControlStyles.Opaque, Not value)
- SetStyle(ControlStyles.SupportsTransparentBackColor, value)
- InvalidateBitmap()
- Invalidate()
- End Set
- End Property
- #End Region
- #Region " Private Properties "
- Private _ImageSize As Size
- Protected ReadOnly Property ImageSize() As Size
- Get
- Return _ImageSize
- End Get
- End Property
- Private _IsParentForm As Boolean
- Protected ReadOnly Property IsParentForm As Boolean
- Get
- Return _IsParentForm
- End Get
- End Property
- Protected ReadOnly Property IsParentMdi As Boolean
- Get
- If Parent Is Nothing Then Return False
- Return Parent.Parent IsNot Nothing
- End Get
- End Property
- Private _LockWidth As Integer
- Protected Property LockWidth() As Integer
- Get
- Return _LockWidth
- End Get
- Set(ByVal value As Integer)
- _LockWidth = value
- If Not LockWidth = 0 AndAlso IsHandleCreated Then Width = LockWidth
- End Set
- End Property
- Private _LockHeight As Integer
- Protected Property LockHeight() As Integer
- Get
- Return _LockHeight
- End Get
- Set(ByVal value As Integer)
- _LockHeight = value
- If Not LockHeight = 0 AndAlso IsHandleCreated Then Height = LockHeight
- End Set
- End Property
- Private _Header As Integer = 24
- Protected Property Header() As Integer
- Get
- Return _Header
- End Get
- Set(ByVal v As Integer)
- _Header = v
- If Not _ControlMode Then
- Frame = New Rectangle(7, 7, Width - 14, v - 7)
- Invalidate()
- End If
- End Set
- End Property
- Private _ControlMode As Boolean
- Protected Property ControlMode() As Boolean
- Get
- Return _ControlMode
- End Get
- Set(ByVal v As Boolean)
- _ControlMode = v
- Transparent = _Transparent
- If _Transparent AndAlso _BackColor Then BackColor = Color.Transparent
- InvalidateBitmap()
- Invalidate()
- End Set
- End Property
- Private _IsAnimated As Boolean
- Protected Property IsAnimated() As Boolean
- Get
- Return _IsAnimated
- End Get
- Set(ByVal value As Boolean)
- _IsAnimated = value
- InvalidateTimer()
- End Set
- End Property
- #End Region
- #Region " Property Helpers "
- Protected Function GetPen(ByVal name As String) As Pen
- Return New Pen(Items(name))
- End Function
- Protected Function GetPen(ByVal name As String, ByVal width As Single) As Pen
- Return New Pen(Items(name), width)
- End Function
- Protected Function GetBrush(ByVal name As String) As SolidBrush
- Return New SolidBrush(Items(name))
- End Function
- Protected Function GetColor(ByVal name As String) As Color
- Return Items(name)
- End Function
- Protected Sub SetColor(ByVal name As String, ByVal value As Color)
- If Items.ContainsKey(name) Then Items(name) = value Else Items.Add(name, value)
- End Sub
- Protected Sub SetColor(ByVal name As String, ByVal r As Byte, ByVal g As Byte, ByVal b As Byte)
- SetColor(name, Color.FromArgb(r, g, b))
- End Sub
- Protected Sub SetColor(ByVal name As String, ByVal a As Byte, ByVal r As Byte, ByVal g As Byte, ByVal b As Byte)
- SetColor(name, Color.FromArgb(a, r, g, b))
- End Sub
- Protected Sub SetColor(ByVal name As String, ByVal a As Byte, ByVal value As Color)
- SetColor(name, Color.FromArgb(a, value))
- End Sub
- Private Sub InvalidateBitmap()
- If _Transparent AndAlso _ControlMode Then
- If Width = 0 OrElse Height = 0 Then Return
- B = New Bitmap(Width, Height, PixelFormat.Format32bppPArgb)
- G = Graphics.FromImage(B)
- Else
- G = Nothing
- B = Nothing
- End If
- End Sub
- Private Sub InvalidateCustimization()
- Dim M As New MemoryStream(Items.Count * 4)
- For Each B As Bloom In Colors
- M.Write(BitConverter.GetBytes(B.Value.ToArgb), 0, 4)
- Next
- M.Close()
- _Customization = Convert.ToBase64String(M.ToArray)
- End Sub
- Private Sub InvalidateTimer()
- If DesignMode OrElse Not DoneCreation Then Return
- If _IsAnimated Then
- AddAnimationCallback(AddressOf DoAnimation)
- Else
- RemoveAnimationCallback(AddressOf DoAnimation)
- End If
- End Sub
- #End Region
- #Region " User Hooks "
- Protected MustOverride Sub ColorHook()
- Protected MustOverride Sub PaintHook()
- Protected Overridable Sub OnCreation()
- End Sub
- Protected Overridable Sub OnAnimation()
- End Sub
- #End Region
- #Region " Offset "
- Private OffsetReturnRectangle As Rectangle
- Protected Function Offset(ByVal r As Rectangle, ByVal amount As Integer) As Rectangle
- OffsetReturnRectangle = New Rectangle(r.X + amount, r.Y + amount, r.Width - (amount * 2), r.Height - (amount * 2))
- Return OffsetReturnRectangle
- End Function
- Private OffsetReturnSize As Size
- Protected Function Offset(ByVal s As Size, ByVal amount As Integer) As Size
- OffsetReturnSize = New Size(s.Width + amount, s.Height + amount)
- Return OffsetReturnSize
- End Function
- Private OffsetReturnPoint As Point
- Protected Function Offset(ByVal p As Point, ByVal amount As Integer) As Point
- OffsetReturnPoint = New Point(p.X + amount, p.Y + amount)
- Return OffsetReturnPoint
- End Function
- #End Region
- #Region " Center "
- Private CenterReturn As Point
- Protected Function Center(ByVal p As Rectangle, ByVal c As Rectangle) As Point
- CenterReturn = New Point((p.Width \ 2 - c.Width \ 2) + p.X + c.X, (p.Height \ 2 - c.Height \ 2) + p.Y + c.Y)
- Return CenterReturn
- End Function
- Protected Function Center(ByVal p As Rectangle, ByVal c As Size) As Point
- CenterReturn = New Point((p.Width \ 2 - c.Width \ 2) + p.X, (p.Height \ 2 - c.Height \ 2) + p.Y)
- Return CenterReturn
- End Function
- Protected Function Center(ByVal child As Rectangle) As Point
- Return Center(Width, Height, child.Width, child.Height)
- End Function
- Protected Function Center(ByVal child As Size) As Point
- Return Center(Width, Height, child.Width, child.Height)
- End Function
- Protected Function Center(ByVal childWidth As Integer, ByVal childHeight As Integer) As Point
- Return Center(Width, Height, childWidth, childHeight)
- End Function
- Protected Function Center(ByVal p As Size, ByVal c As Size) As Point
- Return Center(p.Width, p.Height, c.Width, c.Height)
- End Function
- Protected Function Center(ByVal pWidth As Integer, ByVal pHeight As Integer, ByVal cWidth As Integer, ByVal cHeight As Integer) As Point
- CenterReturn = New Point(pWidth \ 2 - cWidth \ 2, pHeight \ 2 - cHeight \ 2)
- Return CenterReturn
- End Function
- #End Region
- #Region " Measure "
- Private MeasureBitmap As Bitmap
- Private MeasureGraphics As Graphics
- Protected Function Measure() As Size
- SyncLock MeasureGraphics
- Return MeasureGraphics.MeasureString(Text, Font, Width).ToSize
- End SyncLock
- End Function
- Protected Function Measure(ByVal text As String) As Size
- SyncLock MeasureGraphics
- Return MeasureGraphics.MeasureString(text, Font, Width).ToSize
- End SyncLock
- End Function
- #End Region
- #Region " DrawPixel "
- Private DrawPixelBrush As SolidBrush
- Protected Sub DrawPixel(ByVal c1 As Color, ByVal x As Integer, ByVal y As Integer)
- If _Transparent Then
- B.SetPixel(x, y, c1)
- Else
- DrawPixelBrush = New SolidBrush(c1)
- G.FillRectangle(DrawPixelBrush, x, y, 1, 1)
- End If
- End Sub
- #End Region
- #Region " DrawCorners "
- Private DrawCornersBrush As SolidBrush
- Protected Sub DrawCorners(ByVal c1 As Color, ByVal offset As Integer)
- DrawCorners(c1, 0, 0, Width, Height, offset)
- End Sub
- Protected Sub DrawCorners(ByVal c1 As Color, ByVal r1 As Rectangle, ByVal offset As Integer)
- DrawCorners(c1, r1.X, r1.Y, r1.Width, r1.Height, offset)
- End Sub
- Protected Sub DrawCorners(ByVal c1 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal offset As Integer)
- DrawCorners(c1, x + offset, y + offset, width - (offset * 2), height - (offset * 2))
- End Sub
- Protected Sub DrawCorners(ByVal c1 As Color)
- DrawCorners(c1, 0, 0, Width, Height)
- End Sub
- Protected Sub DrawCorners(ByVal c1 As Color, ByVal r1 As Rectangle)
- DrawCorners(c1, r1.X, r1.Y, r1.Width, r1.Height)
- End Sub
- Protected Sub DrawCorners(ByVal c1 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
- If _NoRounding Then Return
- If _Transparent Then
- B.SetPixel(x, y, c1)
- B.SetPixel(x + (width - 1), y, c1)
- B.SetPixel(x, y + (height - 1), c1)
- B.SetPixel(x + (width - 1), y + (height - 1), c1)
- Else
- DrawCornersBrush = New SolidBrush(c1)
- G.FillRectangle(DrawCornersBrush, x, y, 1, 1)
- G.FillRectangle(DrawCornersBrush, x + (width - 1), y, 1, 1)
- G.FillRectangle(DrawCornersBrush, x, y + (height - 1), 1, 1)
- G.FillRectangle(DrawCornersBrush, x + (width - 1), y + (height - 1), 1, 1)
- End If
- End Sub
- #End Region
- #Region " DrawBorders "
- Protected Sub DrawBorders(ByVal p1 As Pen, ByVal offset As Integer)
- DrawBorders(p1, 0, 0, Width, Height, offset)
- End Sub
- Protected Sub DrawBorders(ByVal p1 As Pen, ByVal r As Rectangle, ByVal offset As Integer)
- DrawBorders(p1, r.X, r.Y, r.Width, r.Height, offset)
- End Sub
- Protected Sub DrawBorders(ByVal p1 As Pen, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal offset As Integer)
- DrawBorders(p1, x + offset, y + offset, width - (offset * 2), height - (offset * 2))
- End Sub
- Protected Sub DrawBorders(ByVal p1 As Pen)
- DrawBorders(p1, 0, 0, Width, Height)
- End Sub
- Protected Sub DrawBorders(ByVal p1 As Pen, ByVal r As Rectangle)
- DrawBorders(p1, r.X, r.Y, r.Width, r.Height)
- End Sub
- Protected Sub DrawBorders(ByVal p1 As Pen, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
- G.DrawRectangle(p1, x, y, width - 1, height - 1)
- End Sub
- #End Region
- #Region " DrawText "
- Private DrawTextPoint As Point
- Private DrawTextSize As Size
- Protected Sub DrawText(ByVal b1 As Brush, ByVal a As HorizontalAlignment, ByVal x As Integer, ByVal y As Integer)
- DrawText(b1, Text, a, x, y)
- End Sub
- Protected Sub DrawText(ByVal b1 As Brush, ByVal text As String, ByVal a As HorizontalAlignment, ByVal x As Integer, ByVal y As Integer)
- If text.Length = 0 Then Return
- DrawTextSize = Measure(text)
- DrawTextPoint = New Point(Width \ 2 - DrawTextSize.Width \ 2, Header \ 2 - DrawTextSize.Height \ 2)
- Select Case a
- Case HorizontalAlignment.Left
- G.DrawString(text, Font, b1, x, DrawTextPoint.Y + y)
- Case HorizontalAlignment.Center
- G.DrawString(text, Font, b1, DrawTextPoint.X + x, DrawTextPoint.Y + y)
- Case HorizontalAlignment.Right
- G.DrawString(text, Font, b1, Width - DrawTextSize.Width - x, DrawTextPoint.Y + y)
- End Select
- End Sub
- Protected Sub DrawText(ByVal b1 As Brush, ByVal p1 As Point)
- If Text.Length = 0 Then Return
- G.DrawString(Text, Font, b1, p1)
- End Sub
- Protected Sub DrawText(ByVal b1 As Brush, ByVal x As Integer, ByVal y As Integer)
- If Text.Length = 0 Then Return
- G.DrawString(Text, Font, b1, x, y)
- End Sub
- #End Region
- #Region " DrawImage "
- Private DrawImagePoint As Point
- Protected Sub DrawImage(ByVal a As HorizontalAlignment, ByVal x As Integer, ByVal y As Integer)
- DrawImage(_Image, a, x, y)
- End Sub
- Protected Sub DrawImage(ByVal image As Image, ByVal a As HorizontalAlignment, ByVal x As Integer, ByVal y As Integer)
- If image Is Nothing Then Return
- DrawImagePoint = New Point(Width \ 2 - image.Width \ 2, Header \ 2 - image.Height \ 2)
- Select Case a
- Case HorizontalAlignment.Left
- G.DrawImage(image, x, DrawImagePoint.Y + y, image.Width, image.Height)
- Case HorizontalAlignment.Center
- G.DrawImage(image, DrawImagePoint.X + x, DrawImagePoint.Y + y, image.Width, image.Height)
- Case HorizontalAlignment.Right
- G.DrawImage(image, Width - image.Width - x, DrawImagePoint.Y + y, image.Width, image.Height)
- End Select
- End Sub
- Protected Sub DrawImage(ByVal p1 As Point)
- DrawImage(_Image, p1.X, p1.Y)
- End Sub
- Protected Sub DrawImage(ByVal x As Integer, ByVal y As Integer)
- DrawImage(_Image, x, y)
- End Sub
- Protected Sub DrawImage(ByVal image As Image, ByVal p1 As Point)
- DrawImage(image, p1.X, p1.Y)
- End Sub
- Protected Sub DrawImage(ByVal image As Image, ByVal x As Integer, ByVal y As Integer)
- If image Is Nothing Then Return
- G.DrawImage(image, x, y, image.Width, image.Height)
- End Sub
- #End Region
- #Region " DrawGradient "
- Private DrawGradientBrush As LinearGradientBrush
- Private DrawGradientRectangle As Rectangle
- Protected Sub DrawGradient(ByVal blend As ColorBlend, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
- DrawGradientRectangle = New Rectangle(x, y, width, height)
- DrawGradient(blend, DrawGradientRectangle)
- End Sub
- Protected Sub DrawGradient(ByVal blend As ColorBlend, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal angle As Single)
- DrawGradientRectangle = New Rectangle(x, y, width, height)
- DrawGradient(blend, DrawGradientRectangle, angle)
- End Sub
- Protected Sub DrawGradient(ByVal blend As ColorBlend, ByVal r As Rectangle)
- DrawGradientBrush = New LinearGradientBrush(r, Color.Empty, Color.Empty, 90.0F)
- DrawGradientBrush.InterpolationColors = blend
- G.FillRectangle(DrawGradientBrush, r)
- End Sub
- Protected Sub DrawGradient(ByVal blend As ColorBlend, ByVal r As Rectangle, ByVal angle As Single)
- DrawGradientBrush = New LinearGradientBrush(r, Color.Empty, Color.Empty, angle)
- DrawGradientBrush.InterpolationColors = blend
- G.FillRectangle(DrawGradientBrush, r)
- End Sub
- Protected Sub DrawGradient(ByVal c1 As Color, ByVal c2 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
- DrawGradientRectangle = New Rectangle(x, y, width, height)
- DrawGradient(c1, c2, DrawGradientRectangle)
- End Sub
- Protected Sub DrawGradient(ByVal c1 As Color, ByVal c2 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal angle As Single)
- DrawGradientRectangle = New Rectangle(x, y, width, height)
- DrawGradient(c1, c2, DrawGradientRectangle, angle)
- End Sub
- Protected Sub DrawGradient(ByVal c1 As Color, ByVal c2 As Color, ByVal r As Rectangle)
- DrawGradientBrush = New LinearGradientBrush(r, c1, c2, 90.0F)
- G.FillRectangle(DrawGradientBrush, r)
- End Sub
- Protected Sub DrawGradient(ByVal c1 As Color, ByVal c2 As Color, ByVal r As Rectangle, ByVal angle As Single)
- DrawGradientBrush = New LinearGradientBrush(r, c1, c2, angle)
- G.FillRectangle(DrawGradientBrush, r)
- End Sub
- #End Region
- #Region " DrawRadial "
- Private DrawRadialPath As GraphicsPath
- Private DrawRadialBrush1 As PathGradientBrush
- Private DrawRadialBrush2 As LinearGradientBrush
- Private DrawRadialRectangle As Rectangle
- Sub DrawRadial(ByVal blend As ColorBlend, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
- DrawRadialRectangle = New Rectangle(x, y, width, height)
- DrawRadial(blend, DrawRadialRectangle, width \ 2, height \ 2)
- End Sub
- Sub DrawRadial(ByVal blend As ColorBlend, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal center As Point)
- DrawRadialRectangle = New Rectangle(x, y, width, height)
- DrawRadial(blend, DrawRadialRectangle, center.X, center.Y)
- End Sub
- Sub DrawRadial(ByVal blend As ColorBlend, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal cx As Integer, ByVal cy As Integer)
- DrawRadialRectangle = New Rectangle(x, y, width, height)
- DrawRadial(blend, DrawRadialRectangle, cx, cy)
- End Sub
- Sub DrawRadial(ByVal blend As ColorBlend, ByVal r As Rectangle)
- DrawRadial(blend, r, r.Width \ 2, r.Height \ 2)
- End Sub
- Sub DrawRadial(ByVal blend As ColorBlend, ByVal r As Rectangle, ByVal center As Point)
- DrawRadial(blend, r, center.X, center.Y)
- End Sub
- Sub DrawRadial(ByVal blend As ColorBlend, ByVal r As Rectangle, ByVal cx As Integer, ByVal cy As Integer)
- DrawRadialPath.Reset()
- DrawRadialPath.AddEllipse(r.X, r.Y, r.Width - 1, r.Height - 1)
- DrawRadialBrush1 = New PathGradientBrush(DrawRadialPath)
- DrawRadialBrush1.CenterPoint = New Point(r.X + cx, r.Y + cy)
- DrawRadialBrush1.InterpolationColors = blend
- If G.SmoothingMode = SmoothingMode.AntiAlias Then
- G.FillEllipse(DrawRadialBrush1, r.X + 1, r.Y + 1, r.Width - 3, r.Height - 3)
- Else
- G.FillEllipse(DrawRadialBrush1, r)
- End If
- End Sub
- Protected Sub DrawRadial(ByVal c1 As Color, ByVal c2 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
- DrawRadialRectangle = New Rectangle(x, y, width, height)
- DrawRadial(c1, c2, DrawGradientRectangle)
- End Sub
- Protected Sub DrawRadial(ByVal c1 As Color, ByVal c2 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal angle As Single)
- DrawRadialRectangle = New Rectangle(x, y, width, height)
- DrawRadial(c1, c2, DrawGradientRectangle, angle)
- End Sub
- Protected Sub DrawRadial(ByVal c1 As Color, ByVal c2 As Color, ByVal r As Rectangle)
- DrawRadialBrush2 = New LinearGradientBrush(r, c1, c2, 90.0F)
- G.FillRectangle(DrawGradientBrush, r)
- End Sub
- Protected Sub DrawRadial(ByVal c1 As Color, ByVal c2 As Color, ByVal r As Rectangle, ByVal angle As Single)
- DrawRadialBrush2 = New LinearGradientBrush(r, c1, c2, angle)
- G.FillEllipse(DrawGradientBrush, r)
- End Sub
- #End Region
- #Region " CreateRound "
- Private CreateRoundPath As GraphicsPath
- Private CreateRoundRectangle As Rectangle
- Function CreateRound(ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal slope As Integer) As GraphicsPath
- CreateRoundRectangle = New Rectangle(x, y, width, height)
- Return CreateRound(CreateRoundRectangle, slope)
- End Function
- Function CreateRound(ByVal r As Rectangle, ByVal slope As Integer) As GraphicsPath
- CreateRoundPath = New GraphicsPath(FillMode.Winding)
- CreateRoundPath.AddArc(r.X, r.Y, slope, slope, 180.0F, 90.0F)
- CreateRoundPath.AddArc(r.Right - slope, r.Y, slope, slope, 270.0F, 90.0F)
- CreateRoundPath.AddArc(r.Right - slope, r.Bottom - slope, slope, slope, 0.0F, 90.0F)
- CreateRoundPath.AddArc(r.X, r.Bottom - slope, slope, slope, 90.0F, 90.0F)
- CreateRoundPath.CloseFigure()
- Return CreateRoundPath
- End Function
- #End Region
- End Class
- MustInherit Class ThemeControl154
- Inherits Control
- #Region " Initialization "
- Protected G As Graphics, B As Bitmap
- Sub New()
- SetStyle(DirectCast(139270, ControlStyles), True)
- _ImageSize = Size.Empty
- Font = New Font("Verdana", 8S)
- MeasureBitmap = New Bitmap(1, 1)
- MeasureGraphics = Graphics.FromImage(MeasureBitmap)
- DrawRadialPath = New GraphicsPath
- InvalidateCustimization() 'Remove?
- End Sub
- Protected NotOverridable Overrides Sub OnHandleCreated(ByVal e As EventArgs)
- InvalidateCustimization()
- ColorHook()
- If Not _LockWidth = 0 Then Width = _LockWidth
- If Not _LockHeight = 0 Then Height = _LockHeight
- Transparent = _Transparent
- If _Transparent AndAlso _BackColor Then BackColor = Color.Transparent
- MyBase.OnHandleCreated(e)
- End Sub
- Private DoneCreation As Boolean
- Protected NotOverridable Overrides Sub OnParentChanged(ByVal e As EventArgs)
- If Parent IsNot Nothing Then
- OnCreation()
- DoneCreation = True
- InvalidateTimer()
- End If
- MyBase.OnParentChanged(e)
- End Sub
- #End Region
- Private Sub DoAnimation(ByVal i As Boolean)
- OnAnimation()
- If i Then Invalidate()
- End Sub
- Protected NotOverridable Overrides Sub OnPaint(ByVal e As PaintEventArgs)
- If Width = 0 OrElse Height = 0 Then Return
- If _Transparent Then
- PaintHook()
- e.Graphics.DrawImage(B, 0, 0)
- Else
- G = e.Graphics
- PaintHook()
- End If
- End Sub
- Protected Overrides Sub OnHandleDestroyed(ByVal e As EventArgs)
- RemoveAnimationCallback(AddressOf DoAnimation)
- MyBase.OnHandleDestroyed(e)
- End Sub
- #Region " Size Handling "
- Protected NotOverridable Overrides Sub OnSizeChanged(ByVal e As EventArgs)
- If _Transparent Then
- InvalidateBitmap()
- End If
- Invalidate()
- MyBase.OnSizeChanged(e)
- End Sub
- Protected Overrides Sub SetBoundsCore(ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal specified As BoundsSpecified)
- If Not _LockWidth = 0 Then width = _LockWidth
- If Not _LockHeight = 0 Then height = _LockHeight
- MyBase.SetBoundsCore(x, y, width, height, specified)
- End Sub
- #End Region
- #Region " State Handling "
- Private InPosition As Boolean
- Protected Overrides Sub OnMouseEnter(ByVal e As EventArgs)
- InPosition = True
- SetState(MouseState.Over)
- MyBase.OnMouseEnter(e)
- End Sub
- Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
- If InPosition Then SetState(MouseState.Over)
- MyBase.OnMouseUp(e)
- End Sub
- Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
- If e.Button = Windows.Forms.MouseButtons.Left Then SetState(MouseState.Down)
- MyBase.OnMouseDown(e)
- End Sub
- Protected Overrides Sub OnMouseLeave(ByVal e As EventArgs)
- InPosition = False
- SetState(MouseState.None)
- MyBase.OnMouseLeave(e)
- End Sub
- Protected Overrides Sub OnEnabledChanged(ByVal e As EventArgs)
- If Enabled Then SetState(MouseState.None) Else SetState(MouseState.Block)
- MyBase.OnEnabledChanged(e)
- End Sub
- Protected State As MouseState
- Private Sub SetState(ByVal current As MouseState)
- State = current
- Invalidate()
- End Sub
- #End Region
- #Region " Base Properties "
- <Browsable(False), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
- Overrides Property ForeColor() As Color
- Get
- Return Color.Empty
- End Get
- Set(ByVal value As Color)
- End Set
- End Property
- <Browsable(False), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
- Overrides Property BackgroundImage() As Image
- Get
- Return Nothing
- End Get
- Set(ByVal value As Image)
- End Set
- End Property
- <Browsable(False), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
- Overrides Property BackgroundImageLayout() As ImageLayout
- Get
- Return ImageLayout.None
- End Get
- Set(ByVal value As ImageLayout)
- End Set
- End Property
- Overrides Property Text() As String
- Get
- Return MyBase.Text
- End Get
- Set(ByVal value As String)
- MyBase.Text = value
- Invalidate()
- End Set
- End Property
- Overrides Property Font() As Font
- Get
- Return MyBase.Font
- End Get
- Set(ByVal value As Font)
- MyBase.Font = value
- Invalidate()
- End Set
- End Property
- Private _BackColor As Boolean
- <Category("Misc")> _
- Overrides Property BackColor() As Color
- Get
- Return MyBase.BackColor
- End Get
- Set(ByVal value As Color)
- If Not IsHandleCreated AndAlso value = Color.Transparent Then
- _BackColor = True
- Return
- End If
- MyBase.BackColor = value
- If Parent IsNot Nothing Then ColorHook()
- End Set
- End Property
- #End Region
- #Region " Public Properties "
- Private _NoRounding As Boolean
- Property NoRounding() As Boolean
- Get
- Return _NoRounding
- End Get
- Set(ByVal v As Boolean)
- _NoRounding = v
- Invalidate()
- End Set
- End Property
- Private _Image As Image
- Property Image() As Image
- Get
- Return _Image
- End Get
- Set(ByVal value As Image)
- If value Is Nothing Then
- _ImageSize = Size.Empty
- Else
- _ImageSize = value.Size
- End If
- _Image = value
- Invalidate()
- End Set
- End Property
- Private _Transparent As Boolean
- Property Transparent() As Boolean
- Get
- Return _Transparent
- End Get
- Set(ByVal value As Boolean)
- _Transparent = value
- If Not IsHandleCreated Then Return
- If Not value AndAlso Not BackColor.A = 255 Then
- Throw New Exception("Unable to change value to false while a transparent BackColor is in use.")
- End If
- SetStyle(ControlStyles.Opaque, Not value)
- SetStyle(ControlStyles.SupportsTransparentBackColor, value)
- If value Then InvalidateBitmap() Else B = Nothing
- Invalidate()
- End Set
- End Property
- Private Items As New Dictionary(Of String, Color)
- Property Colors() As Bloom()
- Get
- Dim T As New List(Of Bloom)
- Dim E As Dictionary(Of String, Color).Enumerator = Items.GetEnumerator
- While E.MoveNext
- T.Add(New Bloom(E.Current.Key, E.Current.Value))
- End While
- Return T.ToArray
- End Get
- Set(ByVal value As Bloom())
- For Each B As Bloom In value
- If Items.ContainsKey(B.Name) Then Items(B.Name) = B.Value
- Next
- InvalidateCustimization()
- ColorHook()
- Invalidate()
- End Set
- End Property
- Private _Customization As String
- Property Customization() As String
- Get
- Return _Customization
- End Get
- Set(ByVal value As String)
- If value = _Customization Then Return
- Dim Data As Byte()
- Dim Items As Bloom() = Colors
- Try
- Data = Convert.FromBase64String(value)
- For I As Integer = 0 To Items.Length - 1
- Items(I).Value = Color.FromArgb(BitConverter.ToInt32(Data, I * 4))
- Next
- Catch
- Return
- End Try
- _Customization = value
- Colors = Items
- ColorHook()
- Invalidate()
- End Set
- End Property
- #End Region
- #Region " Private Properties "
- Private _ImageSize As Size
- Protected ReadOnly Property ImageSize() As Size
- Get
- Return _ImageSize
- End Get
- End Property
- Private _LockWidth As Integer
- Protected Property LockWidth() As Integer
- Get
- Return _LockWidth
- End Get
- Set(ByVal value As Integer)
- _LockWidth = value
- If Not LockWidth = 0 AndAlso IsHandleCreated Then Width = LockWidth
- End Set
- End Property
- Private _LockHeight As Integer
- Protected Property LockHeight() As Integer
- Get
- Return _LockHeight
- End Get
- Set(ByVal value As Integer)
- _LockHeight = value
- If Not LockHeight = 0 AndAlso IsHandleCreated Then Height = LockHeight
- End Set
- End Property
- Private _IsAnimated As Boolean
- Protected Property IsAnimated() As Boolean
- Get
- Return _IsAnimated
- End Get
- Set(ByVal value As Boolean)
- _IsAnimated = value
- InvalidateTimer()
- End Set
- End Property
- #End Region
- #Region " Property Helpers "
- Protected Function GetPen(ByVal name As String) As Pen
- Return New Pen(Items(name))
- End Function
- Protected Function GetPen(ByVal name As String, ByVal width As Single) As Pen
- Return New Pen(Items(name), width)
- End Function
- Protected Function GetBrush(ByVal name As String) As SolidBrush
- Return New SolidBrush(Items(name))
- End Function
- Protected Function GetColor(ByVal name As String) As Color
- Return Items(name)
- End Function
- Protected Sub SetColor(ByVal name As String, ByVal value As Color)
- If Items.ContainsKey(name) Then Items(name) = value Else Items.Add(name, value)
- End Sub
- Protected Sub SetColor(ByVal name As String, ByVal r As Byte, ByVal g As Byte, ByVal b As Byte)
- SetColor(name, Color.FromArgb(r, g, b))
- End Sub
- Protected Sub SetColor(ByVal name As String, ByVal a As Byte, ByVal r As Byte, ByVal g As Byte, ByVal b As Byte)
- SetColor(name, Color.FromArgb(a, r, g, b))
- End Sub
- Protected Sub SetColor(ByVal name As String, ByVal a As Byte, ByVal value As Color)
- SetColor(name, Color.FromArgb(a, value))
- End Sub
- Private Sub InvalidateBitmap()
- If Width = 0 OrElse Height = 0 Then Return
- B = New Bitmap(Width, Height, PixelFormat.Format32bppPArgb)
- G = Graphics.FromImage(B)
- End Sub
- Private Sub InvalidateCustimization()
- Dim M As New MemoryStream(Items.Count * 4)
- For Each B As Bloom In Colors
- M.Write(BitConverter.GetBytes(B.Value.ToArgb), 0, 4)
- Next
- M.Close()
- _Customization = Convert.ToBase64String(M.ToArray)
- End Sub
- Private Sub InvalidateTimer()
- If DesignMode OrElse Not DoneCreation Then Return
- If _IsAnimated Then
- AddAnimationCallback(AddressOf DoAnimation)
- Else
- RemoveAnimationCallback(AddressOf DoAnimation)
- End If
- End Sub
- #End Region
- #Region " User Hooks "
- Protected MustOverride Sub ColorHook()
- Protected MustOverride Sub PaintHook()
- Protected Overridable Sub OnCreation()
- End Sub
- Protected Overridable Sub OnAnimation()
- End Sub
- #End Region
- #Region " Offset "
- Private OffsetReturnRectangle As Rectangle
- Protected Function Offset(ByVal r As Rectangle, ByVal amount As Integer) As Rectangle
- OffsetReturnRectangle = New Rectangle(r.X + amount, r.Y + amount, r.Width - (amount * 2), r.Height - (amount * 2))
- Return OffsetReturnRectangle
- End Function
- Private OffsetReturnSize As Size
- Protected Function Offset(ByVal s As Size, ByVal amount As Integer) As Size
- OffsetReturnSize = New Size(s.Width + amount, s.Height + amount)
- Return OffsetReturnSize
- End Function
- Private OffsetReturnPoint As Point
- Protected Function Offset(ByVal p As Point, ByVal amount As Integer) As Point
- OffsetReturnPoint = New Point(p.X + amount, p.Y + amount)
- Return OffsetReturnPoint
- End Function
- #End Region
- #Region " Center "
- Private CenterReturn As Point
- Protected Function Center(ByVal p As Rectangle, ByVal c As Rectangle) As Point
- CenterReturn = New Point((p.Width \ 2 - c.Width \ 2) + p.X + c.X, (p.Height \ 2 - c.Height \ 2) + p.Y + c.Y)
- Return CenterReturn
- End Function
- Protected Function Center(ByVal p As Rectangle, ByVal c As Size) As Point
- CenterReturn = New Point((p.Width \ 2 - c.Width \ 2) + p.X, (p.Height \ 2 - c.Height \ 2) + p.Y)
- Return CenterReturn
- End Function
- Protected Function Center(ByVal child As Rectangle) As Point
- Return Center(Width, Height, child.Width, child.Height)
- End Function
- Protected Function Center(ByVal child As Size) As Point
- Return Center(Width, Height, child.Width, child.Height)
- End Function
- Protected Function Center(ByVal childWidth As Integer, ByVal childHeight As Integer) As Point
- Return Center(Width, Height, childWidth, childHeight)
- End Function
- Protected Function Center(ByVal p As Size, ByVal c As Size) As Point
- Return Center(p.Width, p.Height, c.Width, c.Height)
- End Function
- Protected Function Center(ByVal pWidth As Integer, ByVal pHeight As Integer, ByVal cWidth As Integer, ByVal cHeight As Integer) As Point
- CenterReturn = New Point(pWidth \ 2 - cWidth \ 2, pHeight \ 2 - cHeight \ 2)
- Return CenterReturn
- End Function
- #End Region
- #Region " Measure "
- Private MeasureBitmap As Bitmap
- Private MeasureGraphics As Graphics 'TODO: Potential issues during multi-threading.
- Protected Function Measure() As Size
- Return MeasureGraphics.MeasureString(Text, Font, Width).ToSize
- End Function
- Protected Function Measure(ByVal text As String) As Size
- Return MeasureGraphics.MeasureString(text, Font, Width).ToSize
- End Function
- #End Region
- #Region " DrawPixel "
- Private DrawPixelBrush As SolidBrush
- Protected Sub DrawPixel(ByVal c1 As Color, ByVal x As Integer, ByVal y As Integer)
- If _Transparent Then
- B.SetPixel(x, y, c1)
- Else
- DrawPixelBrush = New SolidBrush(c1)
- G.FillRectangle(DrawPixelBrush, x, y, 1, 1)
- End If
- End Sub
- #End Region
- #Region " DrawCorners "
- Private DrawCornersBrush As SolidBrush
- Protected Sub DrawCorners(ByVal c1 As Color, ByVal offset As Integer)
- DrawCorners(c1, 0, 0, Width, Height, offset)
- End Sub
- Protected Sub DrawCorners(ByVal c1 As Color, ByVal r1 As Rectangle, ByVal offset As Integer)
- DrawCorners(c1, r1.X, r1.Y, r1.Width, r1.Height, offset)
- End Sub
- Protected Sub DrawCorners(ByVal c1 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal offset As Integer)
- DrawCorners(c1, x + offset, y + offset, width - (offset * 2), height - (offset * 2))
- End Sub
- Protected Sub DrawCorners(ByVal c1 As Color)
- DrawCorners(c1, 0, 0, Width, Height)
- End Sub
- Protected Sub DrawCorners(ByVal c1 As Color, ByVal r1 As Rectangle)
- DrawCorners(c1, r1.X, r1.Y, r1.Width, r1.Height)
- End Sub
- Protected Sub DrawCorners(ByVal c1 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
- If _NoRounding Then Return
- If _Transparent Then
- B.SetPixel(x, y, c1)
- B.SetPixel(x + (width - 1), y, c1)
- B.SetPixel(x, y + (height - 1), c1)
- B.SetPixel(x + (width - 1), y + (height - 1), c1)
- Else
- DrawCornersBrush = New SolidBrush(c1)
- G.FillRectangle(DrawCornersBrush, x, y, 1, 1)
- G.FillRectangle(DrawCornersBrush, x + (width - 1), y, 1, 1)
- G.FillRectangle(DrawCornersBrush, x, y + (height - 1), 1, 1)
- G.FillRectangle(DrawCornersBrush, x + (width - 1), y + (height - 1), 1, 1)
- End If
- End Sub
- #End Region
- #Region " DrawBorders "
- Protected Sub DrawBorders(ByVal p1 As Pen, ByVal offset As Integer)
- DrawBorders(p1, 0, 0, Width, Height, offset)
- End Sub
- Protected Sub DrawBorders(ByVal p1 As Pen, ByVal r As Rectangle, ByVal offset As Integer)
- DrawBorders(p1, r.X, r.Y, r.Width, r.Height, offset)
- End Sub
- Protected Sub DrawBorders(ByVal p1 As Pen, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal offset As Integer)
- DrawBorders(p1, x + offset, y + offset, width - (offset * 2), height - (offset * 2))
- End Sub
- Protected Sub DrawBorders(ByVal p1 As Pen)
- DrawBorders(p1, 0, 0, Width, Height)
- End Sub
- Protected Sub DrawBorders(ByVal p1 As Pen, ByVal r As Rectangle)
- DrawBorders(p1, r.X, r.Y, r.Width, r.Height)
- End Sub
- Protected Sub DrawBorders(ByVal p1 As Pen, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
- G.DrawRectangle(p1, x, y, width - 1, height - 1)
- End Sub
- #End Region
- #Region " DrawText "
- Private DrawTextPoint As Point
- Private DrawTextSize As Size
- Protected Sub DrawText(ByVal b1 As Brush, ByVal a As HorizontalAlignment, ByVal x As Integer, ByVal y As Integer)
- DrawText(b1, Text, a, x, y)
- End Sub
- Protected Sub DrawText(ByVal b1 As Brush, ByVal text As String, ByVal a As HorizontalAlignment, ByVal x As Integer, ByVal y As Integer)
- If text.Length = 0 Then Return
- DrawTextSize = Measure(text)
- DrawTextPoint = Center(DrawTextSize)
- Select Case a
- Case HorizontalAlignment.Left
- G.DrawString(text, Font, b1, x, DrawTextPoint.Y + y)
- Case HorizontalAlignment.Center
- G.DrawString(text, Font, b1, DrawTextPoint.X + x, DrawTextPoint.Y + y)
- Case HorizontalAlignment.Right
- G.DrawString(text, Font, b1, Width - DrawTextSize.Width - x, DrawTextPoint.Y + y)
- End Select
- End Sub
- Protected Sub DrawText(ByVal b1 As Brush, ByVal p1 As Point)
- If Text.Length = 0 Then Return
- G.DrawString(Text, Font, b1, p1)
- End Sub
- Protected Sub DrawText(ByVal b1 As Brush, ByVal x As Integer, ByVal y As Integer)
- If Text.Length = 0 Then Return
- G.DrawString(Text, Font, b1, x, y)
- End Sub
- #End Region
- #Region " DrawImage "
- Private DrawImagePoint As Point
- Protected Sub DrawImage(ByVal a As HorizontalAlignment, ByVal x As Integer, ByVal y As Integer)
- DrawImage(_Image, a, x, y)
- End Sub
- Protected Sub DrawImage(ByVal image As Image, ByVal a As HorizontalAlignment, ByVal x As Integer, ByVal y As Integer)
- If image Is Nothing Then Return
- DrawImagePoint = Center(image.Size)
- Select Case a
- Case HorizontalAlignment.Left
- G.DrawImage(image, x, DrawImagePoint.Y + y, image.Width, image.Height)
- Case HorizontalAlignment.Center
- G.DrawImage(image, DrawImagePoint.X + x, DrawImagePoint.Y + y, image.Width, image.Height)
- Case HorizontalAlignment.Right
- G.DrawImage(image, Width - image.Width - x, DrawImagePoint.Y + y, image.Width, image.Height)
- End Select
- End Sub
- Protected Sub DrawImage(ByVal p1 As Point)
- DrawImage(_Image, p1.X, p1.Y)
- End Sub
- Protected Sub DrawImage(ByVal x As Integer, ByVal y As Integer)
- DrawImage(_Image, x, y)
- End Sub
- Protected Sub DrawImage(ByVal image As Image, ByVal p1 As Point)
- DrawImage(image, p1.X, p1.Y)
- End Sub
- Protected Sub DrawImage(ByVal image As Image, ByVal x As Integer, ByVal y As Integer)
- If image Is Nothing Then Return
- G.DrawImage(image, x, y, image.Width, image.Height)
- End Sub
- #End Region
- #Region " DrawGradient "
- Private DrawGradientBrush As LinearGradientBrush
- Private DrawGradientRectangle As Rectangle
- Protected Sub DrawGradient(ByVal blend As ColorBlend, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
- DrawGradientRectangle = New Rectangle(x, y, width, height)
- DrawGradient(blend, DrawGradientRectangle)
- End Sub
- Protected Sub DrawGradient(ByVal blend As ColorBlend, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal angle As Single)
- DrawGradientRectangle = New Rectangle(x, y, width, height)
- DrawGradient(blend, DrawGradientRectangle, angle)
- End Sub
- Protected Sub DrawGradient(ByVal blend As ColorBlend, ByVal r As Rectangle)
- DrawGradientBrush = New LinearGradientBrush(r, Color.Empty, Color.Empty, 90.0F)
- DrawGradientBrush.InterpolationColors = blend
- G.FillRectangle(DrawGradientBrush, r)
- End Sub
- Protected Sub DrawGradient(ByVal blend As ColorBlend, ByVal r As Rectangle, ByVal angle As Single)
- DrawGradientBrush = New LinearGradientBrush(r, Color.Empty, Color.Empty, angle)
- DrawGradientBrush.InterpolationColors = blend
- G.FillRectangle(DrawGradientBrush, r)
- End Sub
- Protected Sub DrawGradient(ByVal c1 As Color, ByVal c2 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
- DrawGradientRectangle = New Rectangle(x, y, width, height)
- DrawGradient(c1, c2, DrawGradientRectangle)
- End Sub
- Protected Sub DrawGradient(ByVal c1 As Color, ByVal c2 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal angle As Single)
- DrawGradientRectangle = New Rectangle(x, y, width, height)
- DrawGradient(c1, c2, DrawGradientRectangle, angle)
- End Sub
- Protected Sub DrawGradient(ByVal c1 As Color, ByVal c2 As Color, ByVal r As Rectangle)
- DrawGradientBrush = New LinearGradientBrush(r, c1, c2, 90.0F)
- G.FillRectangle(DrawGradientBrush, r)
- End Sub
- Protected Sub DrawGradient(ByVal c1 As Color, ByVal c2 As Color, ByVal r As Rectangle, ByVal angle As Single)
- DrawGradientBrush = New LinearGradientBrush(r, c1, c2, angle)
- G.FillRectangle(DrawGradientBrush, r)
- End Sub
- #End Region
- #Region " DrawRadial "
- Private DrawRadialPath As GraphicsPath
- Private DrawRadialBrush1 As PathGradientBrush
- Private DrawRadialBrush2 As LinearGradientBrush
- Private DrawRadialRectangle As Rectangle
- Sub DrawRadial(ByVal blend As ColorBlend, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
- DrawRadialRectangle = New Rectangle(x, y, width, height)
- DrawRadial(blend, DrawRadialRectangle, width \ 2, height \ 2)
- End Sub
- Sub DrawRadial(ByVal blend As ColorBlend, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal center As Point)
- DrawRadialRectangle = New Rectangle(x, y, width, height)
- DrawRadial(blend, DrawRadialRectangle, center.X, center.Y)
- End Sub
- Sub DrawRadial(ByVal blend As ColorBlend, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal cx As Integer, ByVal cy As Integer)
- DrawRadialRectangle = New Rectangle(x, y, width, height)
- DrawRadial(blend, DrawRadialRectangle, cx, cy)
- End Sub
- Sub DrawRadial(ByVal blend As ColorBlend, ByVal r As Rectangle)
- DrawRadial(blend, r, r.Width \ 2, r.Height \ 2)
- End Sub
- Sub DrawRadial(ByVal blend As ColorBlend, ByVal r As Rectangle, ByVal center As Point)
- DrawRadial(blend, r, center.X, center.Y)
- End Sub
- Sub DrawRadial(ByVal blend As ColorBlend, ByVal r As Rectangle, ByVal cx As Integer, ByVal cy As Integer)
- DrawRadialPath.Reset()
- DrawRadialPath.AddEllipse(r.X, r.Y, r.Width - 1, r.Height - 1)
- DrawRadialBrush1 = New PathGradientBrush(DrawRadialPath)
- DrawRadialBrush1.CenterPoint = New Point(r.X + cx, r.Y + cy)
- DrawRadialBrush1.InterpolationColors = blend
- If G.SmoothingMode = SmoothingMode.AntiAlias Then
- G.FillEllipse(DrawRadialBrush1, r.X + 1, r.Y + 1, r.Width - 3, r.Height - 3)
- Else
- G.FillEllipse(DrawRadialBrush1, r)
- End If
- End Sub
- Protected Sub DrawRadial(ByVal c1 As Color, ByVal c2 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
- DrawRadialRectangle = New Rectangle(x, y, width, height)
- DrawRadial(c1, c2, DrawRadialRectangle)
- End Sub
- Protected Sub DrawRadial(ByVal c1 As Color, ByVal c2 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal angle As Single)
- DrawRadialRectangle = New Rectangle(x, y, width, height)
- DrawRadial(c1, c2, DrawRadialRectangle, angle)
- End Sub
- Protected Sub DrawRadial(ByVal c1 As Color, ByVal c2 As Color, ByVal r As Rectangle)
- DrawRadialBrush2 = New LinearGradientBrush(r, c1, c2, 90.0F)
- G.FillEllipse(DrawRadialBrush2, r)
- End Sub
- Protected Sub DrawRadial(ByVal c1 As Color, ByVal c2 As Color, ByVal r As Rectangle, ByVal angle As Single)
- DrawRadialBrush2 = New LinearGradientBrush(r, c1, c2, angle)
- G.FillEllipse(DrawRadialBrush2, r)
- End Sub
- #End Region
- #Region " CreateRound "
- Private CreateRoundPath As GraphicsPath
- Private CreateRoundRectangle As Rectangle
- Function CreateRound(ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal slope As Integer) As GraphicsPath
- CreateRoundRectangle = New Rectangle(x, y, width, height)
- Return CreateRound(CreateRoundRectangle, slope)
- End Function
- Function CreateRound(ByVal r As Rectangle, ByVal slope As Integer) As GraphicsPath
- CreateRoundPath = New GraphicsPath(FillMode.Winding)
- CreateRoundPath.AddArc(r.X, r.Y, slope, slope, 180.0F, 90.0F)
- CreateRoundPath.AddArc(r.Right - slope, r.Y, slope, slope, 270.0F, 90.0F)
- CreateRoundPath.AddArc(r.Right - slope, r.Bottom - slope, slope, slope, 0.0F, 90.0F)
- CreateRoundPath.AddArc(r.X, r.Bottom - slope, slope, slope, 90.0F, 90.0F)
- CreateRoundPath.CloseFigure()
- Return CreateRoundPath
- End Function
- #End Region
- End Class
- Module ThemeShare
- #Region " Animation "
- Private Frames As Integer
- Private Invalidate As Boolean
- Public ThemeTimer As New PrecisionTimer
- Private Const FPS As Integer = 50 '1000 / 50 = 20 FPS
- Private Const Rate As Integer = 10
- Public Delegate Sub AnimationDelegate(ByVal invalidate As Boolean)
- Private Callbacks As New List(Of AnimationDelegate)
- Private Sub HandleCallbacks(ByVal state As IntPtr, ByVal reserve As Boolean)
- Invalidate = (Frames >= FPS)
- If Invalidate Then Frames = 0
- SyncLock Callbacks
- For I As Integer = 0 To Callbacks.Count - 1
- Callbacks(I).Invoke(Invalidate)
- Next
- End SyncLock
- Frames += Rate
- End Sub
- Private Sub InvalidateThemeTimer()
- If Callbacks.Count = 0 Then
- ThemeTimer.Delete()
- Else
- ThemeTimer.Create(0, Rate, AddressOf HandleCallbacks)
- End If
- End Sub
- Sub AddAnimationCallback(ByVal callback As AnimationDelegate)
- SyncLock Callbacks
- If Callbacks.Contains(callback) Then Return
- Callbacks.Add(callback)
- InvalidateThemeTimer()
- End SyncLock
- End Sub
- Sub RemoveAnimationCallback(ByVal callback As AnimationDelegate)
- SyncLock Callbacks
- If Not Callbacks.Contains(callback) Then Return
- Callbacks.Remove(callback)
- InvalidateThemeTimer()
- End SyncLock
- End Sub
- #End Region
- End Module
- Enum MouseState As Byte
- None = 0
- Over = 1
- Down = 2
- Block = 3
- End Enum
- Structure Bloom
- Public _Name As String
- ReadOnly Property Name() As String
- Get
- Return _Name
- End Get
- End Property
- Private _Value As Color
- Property Value() As Color
- Get
- Return _Value
- End Get
- Set(ByVal value As Color)
- _Value = value
- End Set
- End Property
- Property ValueHex() As String
- Get
- Return String.Concat("#", _
- _Value.R.ToString("X2", Nothing), _
- _Value.G.ToString("X2", Nothing), _
- _Value.B.ToString("X2", Nothing))
- End Get
- Set(ByVal value As String)
- Try
- _Value = ColorTranslator.FromHtml(value)
- Catch
- Return
- End Try
- End Set
- End Property
- Sub New(ByVal name As String, ByVal value As Color)
- _Name = name
- _Value = value
- End Sub
- End Structure
- '------------------
- 'Creator: aeonhack
- 'Site: elitevs.net
- 'Created: 11/30/2011
- 'Changed: 11/30/2011
- 'Version: 1.0.0
- '------------------
- Class PrecisionTimer
- Implements IDisposable
- Private _Enabled As Boolean
- ReadOnly Property Enabled() As Boolean
- Get
- Return _Enabled
- End Get
- End Property
- Private Handle As IntPtr
- Private TimerCallback As TimerDelegate
- <DllImport("kernel32.dll", EntryPoint:="CreateTimerQueueTimer")> _
- Private Shared Function CreateTimerQueueTimer( _
- ByRef handle As IntPtr, _
- ByVal queue As IntPtr, _
- ByVal callback As TimerDelegate, _
- ByVal state As IntPtr, _
- ByVal dueTime As UInteger, _
- ByVal period As UInteger, _
- ByVal flags As UInteger) As Boolean
- End Function
- <DllImport("kernel32.dll", EntryPoint:="DeleteTimerQueueTimer")> _
- Private Shared Function DeleteTimerQueueTimer( _
- ByVal queue As IntPtr, _
- ByVal handle As IntPtr, _
- ByVal callback As IntPtr) As Boolean
- End Function
- Delegate Sub TimerDelegate(ByVal r1 As IntPtr, ByVal r2 As Boolean)
- Sub Create(ByVal dueTime As UInteger, ByVal period As UInteger, ByVal callback As TimerDelegate)
- If _Enabled Then Return
- TimerCallback = callback
- Dim Success As Boolean = CreateTimerQueueTimer(Handle, IntPtr.Zero, TimerCallback, IntPtr.Zero, dueTime, period, 0)
- If Not Success Then ThrowNewException("CreateTimerQueueTimer")
- _Enabled = Success
- End Sub
- Sub Delete()
- If Not _Enabled Then Return
- Dim Success As Boolean = DeleteTimerQueueTimer(IntPtr.Zero, Handle, IntPtr.Zero)
- If Not Success AndAlso Not Marshal.GetLastWin32Error = 997 Then
- ThrowNewException("DeleteTimerQueueTimer")
- End If
- _Enabled = Not Success
- End Sub
- Private Sub ThrowNewException(ByVal name As String)
- Throw New Exception(String.Format("{0} failed. Win32Error: {1}", name, Marshal.GetLastWin32Error))
- End Sub
- Public Sub Dispose() Implements IDisposable.Dispose
- Delete()
- End Sub
- End Class
- 'IMPORTANT:
- 'Please leave these comments in place as they help protect intellectual rights and allow
- 'developers to determine the version of the theme they are using. The preffered method
- 'of distributing this theme is through the Nimoru Software home page at nimoru.com.
- 'Name: Net Seal Theme
- 'Created: 6/21/2013
- 'Version: 1.0.0.1 beta
- 'Site: http://nimoru.com/
- 'This work is licensed under a Creative Commons Attribution 3.0 Unported License.
- 'To view a copy of this license, please visit http://creativecommons.org/licenses/by/3.0/
- 'Copyright © 2013 Nimoru Software
- Module ThemeModule
- Friend G As Graphics
- Sub New()
- TextBitmap = New Bitmap(1, 1)
- TextGraphics = Graphics.FromImage(TextBitmap)
- End Sub
- Private TextBitmap As Bitmap
- Private TextGraphics As Graphics
- Friend Function MeasureString(text As String, font As Font) As SizeF
- Return TextGraphics.MeasureString(text, font)
- End Function
- Friend Function MeasureString(text As String, font As Font, width As Integer) As SizeF
- Return TextGraphics.MeasureString(text, font, width, StringFormat.GenericTypographic)
- End Function
- Private CreateRoundPath As GraphicsPath
- Private CreateRoundRectangle As Rectangle
- Friend Function CreateRound(ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal slope As Integer) As GraphicsPath
- CreateRoundRectangle = New Rectangle(x, y, width, height)
- Return CreateRound(CreateRoundRectangle, slope)
- End Function
- Friend Function CreateRound(ByVal r As Rectangle, ByVal slope As Integer) As GraphicsPath
- CreateRoundPath = New GraphicsPath(FillMode.Winding)
- CreateRoundPath.AddArc(r.X, r.Y, slope, slope, 180.0F, 90.0F)
- CreateRoundPath.AddArc(r.Right - slope, r.Y, slope, slope, 270.0F, 90.0F)
- CreateRoundPath.AddArc(r.Right - slope, r.Bottom - slope, slope, slope, 0.0F, 90.0F)
- CreateRoundPath.AddArc(r.X, r.Bottom - slope, slope, slope, 90.0F, 90.0F)
- CreateRoundPath.CloseFigure()
- Return CreateRoundPath
- End Function
- End Module
- Class NSTheme
- Inherits ThemeContainer154
- Private _AccentOffset As Integer = 42
- Public Property AccentOffset() As Integer
- Get
- Return _AccentOffset
- End Get
- Set(ByVal value As Integer)
- _AccentOffset = value
- Invalidate()
- End Set
- End Property
- Sub New()
- Header = 30
- BackColor = Color.FromArgb(50, 50, 50)
- P1 = New Pen(Color.FromArgb(24, 24, 24))
- P2 = New Pen(Color.FromArgb(60, 60, 60))
- B1 = New SolidBrush(Color.FromArgb(50, 50, 50))
- End Sub
- Protected Overrides Sub ColorHook()
- End Sub
- Private R1 As Rectangle
- Private P1, P2 As Pen
- Private B1 As SolidBrush
- Private Pad As Integer
- Protected Overrides Sub PaintHook()
- G.Clear(BackColor)
- DrawBorders(P2, 1)
- G.DrawLine(P1, 0, 26, Width, 26)
- G.DrawLine(P2, 0, 25, Width, 25)
- Pad = Math.Max(Measure().Width + 20, 80)
- R1 = New Rectangle(Pad, 17, Width - (Pad * 2) + _AccentOffset, 8)
- G.DrawRectangle(P2, R1)
- G.DrawRectangle(P1, R1.X + 1, R1.Y + 1, R1.Width - 2, R1.Height)
- G.DrawLine(P1, 0, 29, Width, 29)
- G.DrawLine(P2, 0, 30, Width, 30)
- DrawText(Brushes.Black, HorizontalAlignment.Left, 8, 1)
- DrawText(Brushes.WhiteSmoke, HorizontalAlignment.Left, 7, 0)
- G.FillRectangle(B1, 0, 27, Width, 2)
- DrawBorders(Pens.Black)
- End Sub
- End Class
- Class NSButton
- Inherits Control
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- P1 = New Pen(Color.FromArgb(24, 24, 24))
- P2 = New Pen(Color.FromArgb(65, 65, 65))
- End Sub
- Private IsMouseDown As Boolean
- Private GP1, GP2 As GraphicsPath
- Private SZ1 As SizeF
- Private PT1 As PointF
- Private P1, P2 As Pen
- Private PB1 As PathGradientBrush
- Private GB1 As LinearGradientBrush
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- G.Clear(BackColor)
- G.SmoothingMode = SmoothingMode.AntiAlias
- GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
- GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
- If IsMouseDown Then
- PB1 = New PathGradientBrush(GP1)
- PB1.CenterColor = Color.FromArgb(60, 60, 60)
- PB1.SurroundColors = {Color.FromArgb(55, 55, 55)}
- PB1.FocusScales = New PointF(0.8F, 0.5F)
- G.FillPath(PB1, GP1)
- Else
- GB1 = New LinearGradientBrush(ClientRectangle, Color.FromArgb(60, 60, 60), Color.FromArgb(55, 55, 55), 90.0F)
- G.FillPath(GB1, GP1)
- End If
- G.DrawPath(P1, GP1)
- G.DrawPath(P2, GP2)
- SZ1 = G.MeasureString(Text, Font)
- PT1 = New PointF(5, Height \ 2 - SZ1.Height / 2)
- If IsMouseDown Then
- PT1.X += 1.0F
- PT1.Y += 1.0F
- End If
- G.DrawString(Text, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
- G.DrawString(Text, Font, Brushes.WhiteSmoke, PT1)
- End Sub
- Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
- IsMouseDown = True
- Invalidate()
- End Sub
- Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
- IsMouseDown = False
- Invalidate()
- End Sub
- End Class
- Class NSProgressBar
- Inherits Control
- Private _Minimum As Integer
- Property Minimum() As Integer
- Get
- Return _Minimum
- End Get
- Set(ByVal value As Integer)
- If value < 0 Then
- Throw New Exception("Property value is not valid.")
- End If
- _Minimum = value
- If value > _Value Then _Value = value
- If value > _Maximum Then _Maximum = value
- Invalidate()
- End Set
- End Property
- Private _Maximum As Integer = 100
- Property Maximum() As Integer
- Get
- Return _Maximum
- End Get
- Set(ByVal value As Integer)
- If value < 0 Then
- Throw New Exception("Property value is not valid.")
- End If
- _Maximum = value
- If value < _Value Then _Value = value
- If value < _Minimum Then _Minimum = value
- Invalidate()
- End Set
- End Property
- Private _Value As Integer
- Property Value() As Integer
- Get
- Return _Value
- End Get
- Set(ByVal value As Integer)
- If value > _Maximum OrElse value < _Minimum Then
- Throw New Exception("Property value is not valid.")
- End If
- _Value = value
- Invalidate()
- End Set
- End Property
- Private Sub Increment(ByVal amount As Integer)
- Value += amount
- End Sub
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- P1 = New Pen(Color.FromArgb(24, 24, 24))
- P2 = New Pen(Color.FromArgb(55, 55, 55))
- B1 = New SolidBrush(Color.FromArgb(51, 181, 229))
- End Sub
- Private GP1, GP2, GP3 As GraphicsPath
- Private R1, R2 As Rectangle
- Private P1, P2 As Pen
- Private B1 As SolidBrush
- Private GB1, GB2 As LinearGradientBrush
- Private I1 As Integer
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.Clear(BackColor)
- G.SmoothingMode = SmoothingMode.AntiAlias
- GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
- GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
- R1 = New Rectangle(0, 2, Width - 1, Height - 1)
- GB1 = New LinearGradientBrush(R1, Color.FromArgb(45, 45, 45), Color.FromArgb(50, 50, 50), 90.0F)
- G.SetClip(GP1)
- G.FillRectangle(GB1, R1)
- I1 = CInt((_Value - _Minimum) / (_Maximum - _Minimum) * (Width - 3))
- If I1 > 1 Then
- GP3 = CreateRound(1, 1, I1, Height - 3, 7)
- R2 = New Rectangle(1, 1, I1, Height - 3)
- GB2 = New LinearGradientBrush(R2, Color.FromArgb(51, 181, 229), Color.FromArgb(0, 153, 204), 90.0F)
- G.FillPath(GB2, GP3)
- G.DrawPath(P1, GP3)
- G.SetClip(GP3)
- G.SmoothingMode = SmoothingMode.None
- G.FillRectangle(B1, R2.X, R2.Y + 1, R2.Width, R2.Height \ 2)
- G.SmoothingMode = SmoothingMode.AntiAlias
- G.ResetClip()
- End If
- G.DrawPath(P2, GP1)
- G.DrawPath(P1, GP2)
- End Sub
- End Class
- Class NSLabel
- Inherits Control
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- Font = New Font("Segoe UI", 11.25F, FontStyle.Bold)
- B1 = New SolidBrush(Color.FromArgb(51, 181, 229))
- End Sub
- Private _Value1 As String = "NET"
- Public Property Value1() As String
- Get
- Return _Value1
- End Get
- Set(ByVal value As String)
- _Value1 = value
- Invalidate()
- End Set
- End Property
- Private _Value2 As String = "SEAL"
- Public Property Value2() As String
- Get
- Return _Value2
- End Get
- Set(ByVal value As String)
- _Value2 = value
- Invalidate()
- End Set
- End Property
- Private B1 As SolidBrush
- Private PT1, PT2 As PointF
- Private SZ1, SZ2 As SizeF
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- G.Clear(BackColor)
- SZ1 = G.MeasureString(Value1, Font, Width, StringFormat.GenericTypographic)
- SZ2 = G.MeasureString(Value2, Font, Width, StringFormat.GenericTypographic)
- PT1 = New PointF(0, Height \ 2 - SZ1.Height / 2)
- PT2 = New PointF(SZ1.Width + 1, Height \ 2 - SZ1.Height / 2)
- G.DrawString(Value1, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
- G.DrawString(Value1, Font, Brushes.WhiteSmoke, PT1)
- G.DrawString(Value2, Font, Brushes.Black, PT2.X + 1, PT2.Y + 1)
- G.DrawString(Value2, Font, B1, PT2)
- End Sub
- End Class
- Class KachClazz
- Inherits Control
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- Font = New Font("Segoe UI", 11.25F, FontStyle.Bold)
- B1 = New SolidBrush(Color.FromArgb(51, 181, 229))
- End Sub
- Private _Value1 As String = "Ќąȼh"
- Public Property Value1() As String
- Get
- Return _Value1
- End Get
- Set(ByVal value As String)
- _Value1 = value
- Invalidate()
- End Set
- End Property
- Private _Value2 As String = "ȼℓąƶƶ"
- Public Property Value2() As String
- Get
- Return _Value2
- End Get
- Set(ByVal value As String)
- _Value2 = value
- Invalidate()
- End Set
- End Property
- Private B1 As SolidBrush
- Private PT1, PT2 As PointF
- Private SZ1, SZ2 As SizeF
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- G.Clear(BackColor)
- SZ1 = G.MeasureString(Value1, Font, Width, StringFormat.GenericTypographic)
- SZ2 = G.MeasureString(Value2, Font, Width, StringFormat.GenericTypographic)
- PT1 = New PointF(0, Height \ 2 - SZ1.Height / 2)
- PT2 = New PointF(SZ1.Width + 1, Height \ 2 - SZ1.Height / 2)
- G.DrawString(Value1, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
- G.DrawString(Value1, Font, Brushes.WhiteSmoke, PT1)
- G.DrawString(Value2, Font, Brushes.Black, PT2.X + 1, PT2.Y + 1)
- G.DrawString(Value2, Font, B1, PT2)
- End Sub
- End Class
- <DefaultEvent("TextChanged")> _
- Class NSTextBox
- Inherits Control
- Private _TextAlign As HorizontalAlignment = HorizontalAlignment.Left
- Property TextAlign() As HorizontalAlignment
- Get
- Return _TextAlign
- End Get
- Set(ByVal value As HorizontalAlignment)
- _TextAlign = value
- If Base IsNot Nothing Then
- Base.TextAlign = value
- End If
- End Set
- End Property
- Private _MaxLength As Integer = 32767
- Property MaxLength() As Integer
- Get
- Return _MaxLength
- End Get
- Set(ByVal value As Integer)
- _MaxLength = value
- If Base IsNot Nothing Then
- Base.MaxLength = value
- End If
- End Set
- End Property
- Private _ReadOnly As Boolean
- Property [ReadOnly]() As Boolean
- Get
- Return _ReadOnly
- End Get
- Set(ByVal value As Boolean)
- _ReadOnly = value
- If Base IsNot Nothing Then
- Base.ReadOnly = value
- End If
- End Set
- End Property
- Private _UseSystemPasswordChar As Boolean
- Property UseSystemPasswordChar() As Boolean
- Get
- Return _UseSystemPasswordChar
- End Get
- Set(ByVal value As Boolean)
- _UseSystemPasswordChar = value
- If Base IsNot Nothing Then
- Base.UseSystemPasswordChar = value
- End If
- End Set
- End Property
- Private _Multiline As Boolean
- Property Multiline() As Boolean
- Get
- Return _Multiline
- End Get
- Set(ByVal value As Boolean)
- _Multiline = value
- If Base IsNot Nothing Then
- Base.Multiline = value
- If value Then
- Base.Height = Height - 11
- Else
- Height = Base.Height + 11
- End If
- End If
- End Set
- End Property
- Overrides Property Text As String
- Get
- Return MyBase.Text
- End Get
- Set(ByVal value As String)
- MyBase.Text = value
- If Base IsNot Nothing Then
- Base.Text = value
- End If
- End Set
- End Property
- Overrides Property Font As Font
- Get
- Return MyBase.Font
- End Get
- Set(ByVal value As Font)
- MyBase.Font = value
- If Base IsNot Nothing Then
- Base.Font = value
- Base.Location = New Point(5, 5)
- Base.Width = Width - 8
- If Not _Multiline Then
- Height = Base.Height + 11
- End If
- End If
- End Set
- End Property
- Protected Overrides Sub OnHandleCreated(e As EventArgs)
- If Not Controls.Contains(Base) Then
- Controls.Add(Base)
- End If
- MyBase.OnHandleCreated(e)
- End Sub
- Private Base As TextBox
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, True)
- Cursor = Cursors.IBeam
- Base = New TextBox
- Base.Font = Font
- Base.Text = Text
- Base.MaxLength = _MaxLength
- Base.Multiline = _Multiline
- Base.ReadOnly = _ReadOnly
- Base.UseSystemPasswordChar = _UseSystemPasswordChar
- Base.ForeColor = Color.FromArgb(235, 235, 235)
- Base.BackColor = Color.FromArgb(50, 50, 50)
- Base.BorderStyle = BorderStyle.None
- Base.Location = New Point(5, 5)
- Base.Width = Width - 14
- If _Multiline Then
- Base.Height = Height - 11
- Else
- Height = Base.Height + 11
- End If
- AddHandler Base.TextChanged, AddressOf OnBaseTextChanged
- AddHandler Base.KeyDown, AddressOf OnBaseKeyDown
- P1 = New Pen(Color.FromArgb(24, 24, 24))
- P2 = New Pen(Color.FromArgb(55, 55, 55))
- End Sub
- Private GP1, GP2 As GraphicsPath
- Private P1, P2 As Pen
- Private PB1 As PathGradientBrush
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.Clear(BackColor)
- G.SmoothingMode = SmoothingMode.AntiAlias
- GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
- GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
- PB1 = New PathGradientBrush(GP1)
- PB1.CenterColor = Color.FromArgb(50, 50, 50)
- PB1.SurroundColors = {Color.FromArgb(45, 45, 45)}
- PB1.FocusScales = New PointF(0.9F, 0.5F)
- G.FillPath(PB1, GP1)
- G.DrawPath(P2, GP1)
- G.DrawPath(P1, GP2)
- End Sub
- Private Sub OnBaseTextChanged(ByVal s As Object, ByVal e As EventArgs)
- Text = Base.Text
- End Sub
- Private Sub OnBaseKeyDown(ByVal s As Object, ByVal e As KeyEventArgs)
- If e.Control AndAlso e.KeyCode = Keys.A Then
- Base.SelectAll()
- e.SuppressKeyPress = True
- End If
- End Sub
- Protected Overrides Sub OnResize(ByVal e As EventArgs)
- Base.Location = New Point(5, 5)
- Base.Width = Width - 10
- Base.Height = Height - 11
- MyBase.OnResize(e)
- End Sub
- Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
- Base.Focus()
- MyBase.OnMouseDown(e)
- End Sub
- Protected Overrides Sub OnEnter(e As EventArgs)
- Base.Focus()
- Invalidate()
- MyBase.OnEnter(e)
- End Sub
- Protected Overrides Sub OnLeave(e As EventArgs)
- Invalidate()
- MyBase.OnLeave(e)
- End Sub
- End Class
- <DefaultEvent("CheckedChanged")> _
- Class NSCheckBox
- Inherits Control
- Event CheckedChanged(sender As Object)
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- P11 = New Pen(Color.FromArgb(55, 55, 55))
- P22 = New Pen(Color.FromArgb(24, 24, 24))
- P3 = New Pen(Color.Black, 2.0F)
- P4 = New Pen(Color.FromArgb(235, 235, 235), 2.0F)
- End Sub
- Private _Checked As Boolean
- Public Property Checked() As Boolean
- Get
- Return _Checked
- End Get
- Set(ByVal value As Boolean)
- _Checked = value
- RaiseEvent CheckedChanged(Me)
- Invalidate()
- End Set
- End Property
- Private GP1, GP2 As GraphicsPath
- Private SZ1 As SizeF
- Private PT1 As PointF
- Private P11, P22, P3, P4 As Pen
- Private PB1 As PathGradientBrush
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- G.Clear(BackColor)
- G.SmoothingMode = SmoothingMode.AntiAlias
- GP1 = CreateRound(0, 2, Height - 5, Height - 5, 5)
- GP2 = CreateRound(1, 3, Height - 7, Height - 7, 5)
- PB1 = New PathGradientBrush(GP1)
- PB1.CenterColor = Color.FromArgb(50, 50, 50)
- PB1.SurroundColors = {Color.FromArgb(45, 45, 45)}
- PB1.FocusScales = New PointF(0.3F, 0.3F)
- G.FillPath(PB1, GP1)
- G.DrawPath(P11, GP1)
- G.DrawPath(P22, GP2)
- If _Checked Then
- G.DrawLine(P3, 5, Height - 9, 8, Height - 7)
- G.DrawLine(P3, 7, Height - 7, Height - 8, 7)
- G.DrawLine(P4, 4, Height - 10, 7, Height - 8)
- G.DrawLine(P4, 6, Height - 8, Height - 9, 6)
- End If
- SZ1 = G.MeasureString(Text, Font)
- PT1 = New PointF(Height - 3, Height \ 2 - SZ1.Height / 2)
- G.DrawString(Text, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
- G.DrawString(Text, Font, Brushes.WhiteSmoke, PT1)
- End Sub
- Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
- Checked = Not Checked
- End Sub
- End Class
- <DefaultEvent("CheckedChanged")> _
- Class NSRadioButton
- Inherits Control
- Event CheckedChanged(sender As Object)
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- P1 = New Pen(Color.FromArgb(55, 55, 55))
- P2 = New Pen(Color.FromArgb(24, 24, 24))
- End Sub
- Private _Checked As Boolean
- Public Property Checked() As Boolean
- Get
- Return _Checked
- End Get
- Set(ByVal value As Boolean)
- _Checked = value
- If _Checked Then
- InvalidateParent()
- End If
- RaiseEvent CheckedChanged(Me)
- Invalidate()
- End Set
- End Property
- Private Sub InvalidateParent()
- If Parent Is Nothing Then Return
- For Each C As Control In Parent.Controls
- If Not (C Is Me) AndAlso (TypeOf C Is NSRadioButton) Then
- DirectCast(C, NSRadioButton).Checked = False
- End If
- Next
- End Sub
- Private GP1 As GraphicsPath
- Private SZ1 As SizeF
- Private PT1 As PointF
- Private P1, P2 As Pen
- Private PB1 As PathGradientBrush
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- G.Clear(BackColor)
- G.SmoothingMode = SmoothingMode.AntiAlias
- GP1 = New GraphicsPath
- GP1.AddEllipse(0, 2, Height - 5, Height - 5)
- PB1 = New PathGradientBrush(GP1)
- PB1.CenterColor = Color.FromArgb(50, 50, 50)
- PB1.SurroundColors = {Color.FromArgb(45, 45, 45)}
- PB1.FocusScales = New PointF(0.3F, 0.3F)
- G.FillPath(PB1, GP1)
- G.DrawEllipse(P1, 0, 2, Height - 5, Height - 5)
- G.DrawEllipse(P2, 1, 3, Height - 7, Height - 7)
- If _Checked Then
- G.FillEllipse(Brushes.Black, 6, 8, Height - 15, Height - 15)
- G.FillEllipse(Brushes.WhiteSmoke, 5, 7, Height - 15, Height - 15)
- End If
- SZ1 = G.MeasureString(Text, Font)
- PT1 = New PointF(Height - 3, Height \ 2 - SZ1.Height / 2)
- G.DrawString(Text, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
- G.DrawString(Text, Font, Brushes.WhiteSmoke, PT1)
- End Sub
- Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
- Checked = True
- MyBase.OnMouseDown(e)
- End Sub
- End Class
- Class NSComboBox
- Inherits ComboBox
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- DrawMode = Windows.Forms.DrawMode.OwnerDrawFixed
- DropDownStyle = ComboBoxStyle.DropDownList
- BackColor = Color.FromArgb(50, 50, 50)
- ForeColor = Color.FromArgb(235, 235, 235)
- P1 = New Pen(Color.FromArgb(24, 24, 24))
- P2 = New Pen(Color.FromArgb(235, 235, 235), 2.0F)
- P3 = New Pen(Brushes.Black, 2.0F)
- P4 = New Pen(Color.FromArgb(65, 65, 65))
- B1 = New SolidBrush(Color.FromArgb(65, 65, 65))
- B2 = New SolidBrush(Color.FromArgb(55, 55, 55))
- End Sub
- Private GP1, GP2 As GraphicsPath
- Private SZ1 As SizeF
- Private PT1 As PointF
- Private P1, P2, P3, P4 As Pen
- Private B1, B2 As SolidBrush
- Private GB1 As LinearGradientBrush
- Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
- G = e.Graphics
- G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- G.Clear(BackColor)
- G.SmoothingMode = SmoothingMode.AntiAlias
- GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
- GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
- GB1 = New LinearGradientBrush(ClientRectangle, Color.FromArgb(60, 60, 60), Color.FromArgb(55, 55, 55), 90.0F)
- G.SetClip(GP1)
- G.FillRectangle(GB1, ClientRectangle)
- G.ResetClip()
- G.DrawPath(P1, GP1)
- G.DrawPath(P4, GP2)
- SZ1 = G.MeasureString(Text, Font)
- PT1 = New PointF(5, Height \ 2 - SZ1.Height / 2)
- G.DrawString(Text, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
- G.DrawString(Text, Font, Brushes.WhiteSmoke, PT1)
- G.DrawLine(P3, Width - 15, 10, Width - 11, 13)
- G.DrawLine(P3, Width - 7, 10, Width - 11, 13)
- G.DrawLine(Pens.Black, Width - 11, 13, Width - 11, 14)
- G.DrawLine(P2, Width - 16, 9, Width - 12, 12)
- G.DrawLine(P2, Width - 8, 9, Width - 12, 12)
- G.DrawLine(Pens.WhiteSmoke, Width - 12, 12, Width - 12, 13)
- G.DrawLine(P1, Width - 22, 0, Width - 22, Height)
- G.DrawLine(P4, Width - 23, 1, Width - 23, Height - 2)
- G.DrawLine(P4, Width - 21, 1, Width - 21, Height - 2)
- End Sub
- Protected Overrides Sub OnDrawItem(e As DrawItemEventArgs)
- e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
- e.Graphics.FillRectangle(B1, e.Bounds)
- Else
- e.Graphics.FillRectangle(B2, e.Bounds)
- End If
- If Not e.Index = -1 Then
- e.Graphics.DrawString(GetItemText(Items(e.Index)), e.Font, Brushes.WhiteSmoke, e.Bounds)
- End If
- End Sub
- End Class
- Class NSTabControl
- Inherits TabControl
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- SizeMode = TabSizeMode.Fixed
- Alignment = TabAlignment.Left
- ItemSize = New Size(28, 115)
- DrawMode = TabDrawMode.OwnerDrawFixed
- P1 = New Pen(Color.FromArgb(55, 55, 55))
- P2 = New Pen(Color.FromArgb(24, 24, 24))
- P3 = New Pen(Color.FromArgb(45, 45, 45), 2)
- B1 = New SolidBrush(Color.FromArgb(50, 50, 50))
- B2 = New SolidBrush(Color.FromArgb(24, 24, 24))
- B3 = New SolidBrush(Color.FromArgb(51, 181, 229))
- B4 = New SolidBrush(Color.FromArgb(65, 65, 65))
- SF1 = New StringFormat()
- SF1.LineAlignment = StringAlignment.Center
- End Sub
- Protected Overrides Sub OnControlAdded(e As ControlEventArgs)
- If TypeOf e.Control Is TabPage Then
- e.Control.BackColor = Color.FromArgb(50, 50, 50)
- End If
- MyBase.OnControlAdded(e)
- End Sub
- Private GP1, GP2, GP3, GP4 As GraphicsPath
- Private R1, R2 As Rectangle
- Private P1, P2, P3 As Pen
- Private B1, B2, B3, B4 As SolidBrush
- Private PB1 As PathGradientBrush
- Private TP1 As TabPage
- Private SF1 As StringFormat
- Private Offset As Integer
- Private ItemHeight As Integer
- Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
- G = e.Graphics
- G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- G.Clear(Color.FromArgb(50, 50, 50))
- G.SmoothingMode = SmoothingMode.AntiAlias
- ItemHeight = ItemSize.Height + 2
- GP1 = CreateRound(0, 0, ItemHeight + 3, Height - 1, 7)
- GP2 = CreateRound(1, 1, ItemHeight + 3, Height - 3, 7)
- PB1 = New PathGradientBrush(GP1)
- PB1.CenterColor = Color.FromArgb(50, 50, 50)
- PB1.SurroundColors = {Color.FromArgb(45, 45, 45)}
- PB1.FocusScales = New PointF(0.8F, 0.95F)
- G.FillPath(PB1, GP1)
- G.DrawPath(P1, GP1)
- G.DrawPath(P2, GP2)
- For I As Integer = 0 To TabCount - 1
- R1 = GetTabRect(I)
- R1.Y += 2
- R1.Height -= 3
- R1.Width += 1
- R1.X -= 1
- TP1 = TabPages(I)
- Offset = 0
- If SelectedIndex = I Then
- G.FillRectangle(B1, R1)
- For J As Integer = 0 To 1
- G.FillRectangle(B2, R1.X + 5 + (J * 5), R1.Y + 6, 2, R1.Height - 9)
- G.SmoothingMode = SmoothingMode.None
- G.FillRectangle(B3, R1.X + 5 + (J * 5), R1.Y + 5, 2, R1.Height - 9)
- G.SmoothingMode = SmoothingMode.AntiAlias
- Offset += 5
- Next
- G.DrawRectangle(P3, R1.X + 1, R1.Y - 1, R1.Width, R1.Height + 2)
- G.DrawRectangle(P1, R1.X + 1, R1.Y + 1, R1.Width - 2, R1.Height - 2)
- G.DrawRectangle(P2, R1)
- Else
- For J As Integer = 0 To 1
- G.FillRectangle(B2, R1.X + 5 + (J * 5), R1.Y + 6, 2, R1.Height - 9)
- G.SmoothingMode = SmoothingMode.None
- G.FillRectangle(B4, R1.X + 5 + (J * 5), R1.Y + 5, 2, R1.Height - 9)
- G.SmoothingMode = SmoothingMode.AntiAlias
- Offset += 5
- Next
- End If
- R1.X += 5 + Offset
- R2 = R1
- R2.Y += 1
- R2.X += 1
- G.DrawString(TP1.Text, Font, Brushes.Black, R2, SF1)
- G.DrawString(TP1.Text, Font, Brushes.WhiteSmoke, R1, SF1)
- Next
- GP3 = CreateRound(ItemHeight, 0, Width - ItemHeight - 1, Height - 1, 7)
- GP4 = CreateRound(ItemHeight + 1, 1, Width - ItemHeight - 3, Height - 3, 7)
- G.DrawPath(P2, GP3)
- G.DrawPath(P1, GP4)
- End Sub
- End Class
- <DefaultEvent("CheckedChanged")> _
- Class NSOnOffBox
- Inherits Control
- Event CheckedChanged(sender As Object)
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- P1 = New Pen(Color.FromArgb(55, 55, 55))
- P2 = New Pen(Color.FromArgb(24, 24, 24))
- P3 = New Pen(Color.FromArgb(65, 65, 65))
- B1 = New SolidBrush(Color.FromArgb(24, 24, 24))
- B2 = New SolidBrush(Color.FromArgb(85, 85, 85))
- B3 = New SolidBrush(Color.FromArgb(65, 65, 65))
- B4 = New SolidBrush(Color.FromArgb(51, 181, 229))
- B5 = New SolidBrush(Color.FromArgb(40, 40, 40))
- SF1 = New StringFormat()
- SF1.LineAlignment = StringAlignment.Center
- SF1.Alignment = StringAlignment.Near
- SF2 = New StringFormat()
- SF2.LineAlignment = StringAlignment.Center
- SF2.Alignment = StringAlignment.Far
- Size = New Size(56, 24)
- MinimumSize = Size
- MaximumSize = Size
- End Sub
- Private _Checked As Boolean
- Public Property Checked() As Boolean
- Get
- Return _Checked
- End Get
- Set(ByVal value As Boolean)
- _Checked = value
- RaiseEvent CheckedChanged(Me)
- Invalidate()
- End Set
- End Property
- Private GP1, GP2, GP3, GP4 As GraphicsPath
- Private P1, P2, P3 As Pen
- Private B1, B2, B3, B4, B5 As SolidBrush
- Private PB1 As PathGradientBrush
- Private GB1 As LinearGradientBrush
- Private R1, R2, R3 As Rectangle
- Private SF1, SF2 As StringFormat
- Private Offset As Integer
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- G.Clear(BackColor)
- G.SmoothingMode = SmoothingMode.AntiAlias
- GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
- GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
- PB1 = New PathGradientBrush(GP1)
- PB1.CenterColor = Color.FromArgb(50, 50, 50)
- PB1.SurroundColors = {Color.FromArgb(45, 45, 45)}
- PB1.FocusScales = New PointF(0.3F, 0.3F)
- G.FillPath(PB1, GP1)
- G.DrawPath(P1, GP1)
- G.DrawPath(P2, GP2)
- R1 = New Rectangle(5, 0, Width - 10, Height + 2)
- R2 = New Rectangle(6, 1, Width - 10, Height + 2)
- R3 = New Rectangle(1, 1, (Width \ 2) - 1, Height - 3)
- If _Checked Then
- G.DrawString("On", Font, Brushes.Black, R2, SF1)
- G.DrawString("On", Font, Brushes.WhiteSmoke, R1, SF1)
- R3.X += (Width \ 2) - 1
- Else
- G.DrawString("Off", Font, B1, R2, SF2)
- G.DrawString("Off", Font, B2, R1, SF2)
- End If
- GP3 = CreateRound(R3, 7)
- GP4 = CreateRound(R3.X + 1, R3.Y + 1, R3.Width - 2, R3.Height - 2, 7)
- GB1 = New LinearGradientBrush(ClientRectangle, Color.FromArgb(60, 60, 60), Color.FromArgb(55, 55, 55), 90.0F)
- G.FillPath(GB1, GP3)
- G.DrawPath(P2, GP3)
- G.DrawPath(P3, GP4)
- Offset = R3.X + (R3.Width \ 2) - 3
- For I As Integer = 0 To 1
- If _Checked Then
- G.FillRectangle(B1, Offset + (I * 5), 7, 2, Height - 14)
- Else
- G.FillRectangle(B3, Offset + (I * 5), 7, 2, Height - 14)
- End If
- G.SmoothingMode = SmoothingMode.None
- If _Checked Then
- G.FillRectangle(B4, Offset + (I * 5), 7, 2, Height - 14)
- Else
- G.FillRectangle(B5, Offset + (I * 5), 7, 2, Height - 14)
- End If
- G.SmoothingMode = SmoothingMode.AntiAlias
- Next
- End Sub
- Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
- Checked = Not Checked
- MyBase.OnMouseDown(e)
- End Sub
- End Class
- Class NSControlButton
- Inherits Control
- Enum Button As Byte
- None = 0
- Minimize = 1
- MaximizeRestore = 2
- Close = 3
- End Enum
- Private _ControlButton As Button = Button.Close
- Public Property ControlButton() As Button
- Get
- Return _ControlButton
- End Get
- Set(ByVal value As Button)
- _ControlButton = value
- Invalidate()
- End Set
- End Property
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- Anchor = AnchorStyles.Top Or AnchorStyles.Right
- Width = 18
- Height = 20
- MinimumSize = Size
- MaximumSize = Size
- Margin = New Padding(0)
- End Sub
- Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
- G = e.Graphics
- G.Clear(BackColor)
- Select Case _ControlButton
- Case Button.Minimize
- DrawMinimize(3, 10)
- Case Button.MaximizeRestore
- If FindForm().WindowState = FormWindowState.Normal Then
- DrawMaximize(3, 5)
- Else
- DrawRestore(3, 4)
- End If
- Case Button.Close
- DrawClose(4, 5)
- End Select
- End Sub
- Private Sub DrawMinimize(ByVal x As Integer, ByVal y As Integer)
- G.FillRectangle(Brushes.WhiteSmoke, x, y, 12, 5)
- G.DrawRectangle(Pens.Black, x, y, 11, 4)
- End Sub
- Private Sub DrawMaximize(ByVal x As Integer, ByVal y As Integer)
- G.DrawRectangle(New Pen(Color.FromArgb(235, 235, 235), 2), x + 2, y + 2, 8, 6)
- G.DrawRectangle(Pens.Black, x, y, 11, 9)
- G.DrawRectangle(Pens.Black, x + 3, y + 3, 5, 3)
- End Sub
- Private Sub DrawRestore(ByVal x As Integer, ByVal y As Integer)
- G.FillRectangle(Brushes.WhiteSmoke, x + 3, y + 1, 8, 4)
- G.FillRectangle(Brushes.WhiteSmoke, x + 7, y + 5, 4, 4)
- G.DrawRectangle(Pens.Black, x + 2, y + 0, 9, 9)
- G.FillRectangle(Brushes.WhiteSmoke, x + 1, y + 3, 2, 6)
- G.FillRectangle(Brushes.WhiteSmoke, x + 1, y + 9, 8, 2)
- G.DrawRectangle(Pens.Black, x, y + 2, 9, 9)
- G.DrawRectangle(Pens.Black, x + 3, y + 5, 3, 3)
- End Sub
- Private ClosePath As GraphicsPath
- Private Sub DrawClose(ByVal x As Integer, ByVal y As Integer)
- If ClosePath Is Nothing Then
- ClosePath = New GraphicsPath
- ClosePath.AddLine(x + 1, y, x + 3, y)
- ClosePath.AddLine(x + 5, y + 2, x + 7, y)
- ClosePath.AddLine(x + 9, y, x + 10, y + 1)
- ClosePath.AddLine(x + 7, y + 4, x + 7, y + 5)
- ClosePath.AddLine(x + 10, y + 8, x + 9, y + 9)
- ClosePath.AddLine(x + 7, y + 9, x + 5, y + 7)
- ClosePath.AddLine(x + 3, y + 9, x + 1, y + 9)
- ClosePath.AddLine(x + 0, y + 8, x + 3, y + 5)
- ClosePath.AddLine(x + 3, y + 4, x + 0, y + 1)
- End If
- G.FillPath(Brushes.WhiteSmoke, ClosePath)
- G.DrawPath(Pens.Black, ClosePath)
- End Sub
- Protected Overrides Sub OnMouseClick(ByVal e As MouseEventArgs)
- If e.Button = Windows.Forms.MouseButtons.Left Then
- Dim F As Form = FindForm()
- Select Case _ControlButton
- Case Button.Minimize
- F.WindowState = FormWindowState.Minimized
- Case Button.MaximizeRestore
- If F.WindowState = FormWindowState.Normal Then
- F.WindowState = FormWindowState.Maximized
- Else
- F.WindowState = FormWindowState.Normal
- End If
- Case Button.Close
- F.Close()
- End Select
- End If
- Invalidate()
- MyBase.OnMouseClick(e)
- End Sub
- End Class
- Class NSGroupBox
- Inherits ContainerControl
- Private _DrawSeperator As Boolean
- Public Property DrawSeperator() As Boolean
- Get
- Return _DrawSeperator
- End Get
- Set(ByVal value As Boolean)
- _DrawSeperator = value
- Invalidate()
- End Set
- End Property
- Private _Title As String = "GroupBox"
- Public Property Title() As String
- Get
- Return _Title
- End Get
- Set(ByVal value As String)
- _Title = value
- Invalidate()
- End Set
- End Property
- Private _SubTitle As String = "Details"
- Public Property SubTitle() As String
- Get
- Return _SubTitle
- End Get
- Set(ByVal value As String)
- _SubTitle = value
- Invalidate()
- End Set
- End Property
- Private _TitleFont As Font
- Private _SubTitleFont As Font
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- _TitleFont = New Font("Verdana", 10.0F)
- _SubTitleFont = New Font("Verdana", 6.5F)
- P1 = New Pen(Color.FromArgb(24, 24, 24))
- P2 = New Pen(Color.FromArgb(55, 55, 55))
- B1 = New SolidBrush(Color.FromArgb(51, 181, 229))
- End Sub
- Private GP1, GP2 As GraphicsPath
- Private PT1 As PointF
- Private SZ1, SZ2 As SizeF
- Private P1, P2 As Pen
- Private B1 As SolidBrush
- Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
- G = e.Graphics
- G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- G.Clear(BackColor)
- G.SmoothingMode = SmoothingMode.AntiAlias
- GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
- GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
- G.DrawPath(P1, GP1)
- G.DrawPath(P2, GP2)
- SZ1 = G.MeasureString(_Title, _TitleFont, Width, StringFormat.GenericTypographic)
- SZ2 = G.MeasureString(_SubTitle, _SubTitleFont, Width, StringFormat.GenericTypographic)
- G.DrawString(_Title, _TitleFont, Brushes.Black, 6, 6)
- G.DrawString(_Title, _TitleFont, B1, 5, 5)
- PT1 = New PointF(6.0F, SZ1.Height + 4.0F)
- G.DrawString(_SubTitle, _SubTitleFont, Brushes.Black, PT1.X + 1, PT1.Y + 1)
- G.DrawString(_SubTitle, _SubTitleFont, Brushes.WhiteSmoke, PT1.X, PT1.Y)
- If _DrawSeperator Then
- Dim Y As Integer = CInt(PT1.Y + SZ2.Height) + 8
- G.DrawLine(P1, 4, Y, Width - 5, Y)
- G.DrawLine(P2, 4, Y + 1, Width - 5, Y + 1)
- End If
- End Sub
- End Class
- Class NSSeperator
- Inherits Control
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- Height = 10
- P1 = New Pen(Color.FromArgb(24, 24, 24))
- P2 = New Pen(Color.FromArgb(55, 55, 55))
- End Sub
- Private P1, P2 As Pen
- Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
- G = e.Graphics
- G.Clear(BackColor)
- G.DrawLine(P1, 0, 5, Width, 5)
- G.DrawLine(P2, 0, 6, Width, 6)
- End Sub
- End Class
- <DefaultEvent("Scroll")> _
- Class NSTrackBar
- Inherits Control
- Event Scroll(ByVal sender As Object)
- Private _Minimum As Integer
- Property Minimum() As Integer
- Get
- Return _Minimum
- End Get
- Set(ByVal value As Integer)
- If value < 0 Then
- Throw New Exception("Property value is not valid.")
- End If
- _Minimum = value
- If value > _Value Then _Value = value
- If value > _Maximum Then _Maximum = value
- Invalidate()
- End Set
- End Property
- Private _Maximum As Integer = 10
- Property Maximum() As Integer
- Get
- Return _Maximum
- End Get
- Set(ByVal value As Integer)
- If value < 0 Then
- Throw New Exception("Property value is not valid.")
- End If
- _Maximum = value
- If value < _Value Then _Value = value
- If value < _Minimum Then _Minimum = value
- Invalidate()
- End Set
- End Property
- Private _Value As Integer
- Property Value() As Integer
- Get
- Return _Value
- End Get
- Set(ByVal value As Integer)
- If value = _Value Then Return
- If value > _Maximum OrElse value < _Minimum Then
- Throw New Exception("Property value is not valid.")
- End If
- _Value = value
- Invalidate()
- RaiseEvent Scroll(Me)
- End Set
- End Property
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- Height = 17
- P1 = New Pen(Color.FromArgb(0, 153, 204), 2)
- P2 = New Pen(Color.FromArgb(55, 55, 55))
- P3 = New Pen(Color.FromArgb(24, 24, 24))
- P4 = New Pen(Color.FromArgb(65, 65, 65))
- End Sub
- Private GP1, GP2, GP3, GP4 As GraphicsPath
- Private R1, R2, R3 As Rectangle
- Private I1 As Integer
- Private P1, P2, P3, P4 As Pen
- Private GB1, GB2, GB3 As LinearGradientBrush
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.Clear(BackColor)
- G.SmoothingMode = SmoothingMode.AntiAlias
- GP1 = CreateRound(0, 5, Width - 1, 10, 5)
- GP2 = CreateRound(1, 6, Width - 3, 8, 5)
- R1 = New Rectangle(0, 7, Width - 1, 5)
- GB1 = New LinearGradientBrush(R1, Color.FromArgb(45, 45, 45), Color.FromArgb(50, 50, 50), 90.0F)
- I1 = CInt((_Value - _Minimum) / (_Maximum - _Minimum) * (Width - 11))
- R2 = New Rectangle(I1, 0, 10, 20)
- G.SetClip(GP2)
- G.FillRectangle(GB1, R1)
- R3 = New Rectangle(1, 7, R2.X + R2.Width - 2, 8)
- GB2 = New LinearGradientBrush(R3, Color.FromArgb(51, 181, 229), Color.FromArgb(0, 153, 204), 90.0F)
- G.SmoothingMode = SmoothingMode.None
- G.FillRectangle(GB2, R3)
- G.SmoothingMode = SmoothingMode.AntiAlias
- For I As Integer = 0 To R3.Width - 15 Step 5
- G.DrawLine(P1, I, 0, I + 15, Height)
- Next
- G.ResetClip()
- G.DrawPath(P2, GP1)
- G.DrawPath(P3, GP2)
- GP3 = CreateRound(R2, 5)
- GP4 = CreateRound(R2.X + 1, R2.Y + 1, R2.Width - 2, R2.Height - 2, 5)
- GB3 = New LinearGradientBrush(ClientRectangle, Color.FromArgb(60, 60, 60), Color.FromArgb(55, 55, 55), 90.0F)
- G.FillPath(GB3, GP3)
- G.DrawPath(P3, GP3)
- G.DrawPath(P4, GP4)
- End Sub
- Private TrackDown As Boolean
- Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
- If e.Button = Windows.Forms.MouseButtons.Left Then
- I1 = CInt((_Value - _Minimum) / (_Maximum - _Minimum) * (Width - 11))
- R2 = New Rectangle(I1, 0, 10, 20)
- TrackDown = R2.Contains(e.Location)
- End If
- MyBase.OnMouseDown(e)
- End Sub
- Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
- If TrackDown AndAlso e.X > -1 AndAlso e.X < (Width + 1) Then
- Value = _Minimum + CInt((_Maximum - _Minimum) * (e.X / Width))
- End If
- MyBase.OnMouseMove(e)
- End Sub
- Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
- TrackDown = False
- MyBase.OnMouseUp(e)
- End Sub
- End Class
- <DefaultEvent("ValueChanged")> _
- Class NSRandomPool
- Inherits Control
- Event ValueChanged(ByVal sender As Object)
- Private _Value As New StringBuilder
- ReadOnly Property Value() As String
- Get
- Return _Value.ToString()
- End Get
- End Property
- Private _FullValue As String
- ReadOnly Property FullValue() As String
- Get
- Return BitConverter.ToString(Table).Replace("-", "")
- End Get
- End Property
- Private RNG As New Random()
- Private ItemSize As Integer = 9
- Private DrawSize As Integer = 8
- Private WA As Rectangle
- Private RowSize As Integer
- Private ColumnSize As Integer
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- P1 = New Pen(Color.FromArgb(55, 55, 55))
- P2 = New Pen(Color.FromArgb(24, 24, 24))
- B1 = New SolidBrush(Color.FromArgb(30, 30, 30))
- End Sub
- Protected Overrides Sub OnHandleCreated(e As EventArgs)
- UpdateTable()
- MyBase.OnHandleCreated(e)
- End Sub
- Private Table As Byte()
- Private Sub UpdateTable()
- WA = New Rectangle(5, 5, Width - 10, Height - 10)
- RowSize = WA.Width \ ItemSize
- ColumnSize = WA.Height \ ItemSize
- WA.Width = RowSize * ItemSize
- WA.Height = ColumnSize * ItemSize
- WA.X = (Width \ 2) - (WA.Width \ 2)
- WA.Y = (Height \ 2) - (WA.Height \ 2)
- Table = New Byte((RowSize * ColumnSize) - 1) {}
- For I As Integer = 0 To Table.Length - 1
- Table(I) = CByte(RNG.Next(100))
- Next
- Invalidate()
- End Sub
- Protected Overrides Sub OnSizeChanged(e As EventArgs)
- UpdateTable()
- End Sub
- Private Index1 As Integer = -1
- Private Index2 As Integer
- Private InvertColors As Boolean
- Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
- HandleDraw(e)
- End Sub
- Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
- HandleDraw(e)
- MyBase.OnMouseDown(e)
- End Sub
- Private Sub HandleDraw(e As MouseEventArgs)
- If e.Button = Windows.Forms.MouseButtons.Left OrElse e.Button = Windows.Forms.MouseButtons.Right Then
- If Not WA.Contains(e.Location) Then Return
- InvertColors = (e.Button = Windows.Forms.MouseButtons.Right)
- Index1 = GetIndex(e.X, e.Y)
- If Index1 = Index2 Then Return
- Dim L As Boolean = Not (Index1 Mod RowSize = 0)
- Dim R As Boolean = Not (Index1 Mod RowSize = (RowSize - 1))
- Randomize(Index1 - RowSize)
- If L Then Randomize(Index1 - 1)
- Randomize(Index1)
- If R Then Randomize(Index1 + 1)
- Randomize(Index1 + RowSize)
- _Value.Append(Table(Index1).ToString("X"))
- If _Value.Length > 32 Then _Value.Remove(0, 2)
- RaiseEvent ValueChanged(Me)
- Index2 = Index1
- Invalidate()
- End If
- End Sub
- Private GP1, GP2 As GraphicsPath
- Private P1, P2 As Pen
- Private B1, B2 As SolidBrush
- Private PB1 As PathGradientBrush
- Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
- G = e.Graphics
- G.Clear(BackColor)
- G.SmoothingMode = SmoothingMode.AntiAlias
- GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
- GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
- PB1 = New PathGradientBrush(GP1)
- PB1.CenterColor = Color.FromArgb(50, 50, 50)
- PB1.SurroundColors = {Color.FromArgb(45, 45, 45)}
- PB1.FocusScales = New PointF(0.9F, 0.5F)
- G.FillPath(PB1, GP1)
- G.DrawPath(P1, GP1)
- G.DrawPath(P2, GP2)
- G.SmoothingMode = SmoothingMode.None
- For I As Integer = 0 To Table.Length - 1
- Dim C As Integer = Math.Max(Table(I), 75)
- Dim X As Integer = ((I Mod RowSize) * ItemSize) + WA.X
- Dim Y As Integer = ((I \ RowSize) * ItemSize) + WA.Y
- B2 = New SolidBrush(Color.FromArgb(C, C, C))
- G.FillRectangle(B1, X + 1, Y + 1, DrawSize, DrawSize)
- G.FillRectangle(B2, X, Y, DrawSize, DrawSize)
- B2.Dispose()
- Next
- End Sub
- Private Function GetIndex(ByVal x As Integer, ByVal y As Integer) As Integer
- Return (((y - WA.Y) \ ItemSize) * RowSize) + ((x - WA.X) \ ItemSize)
- End Function
- Private Sub Randomize(ByVal index As Integer)
- If index > -1 AndAlso index < Table.Length Then
- If InvertColors Then
- Table(index) = CByte(RNG.Next(100))
- Else
- Table(index) = CByte(RNG.Next(100, 256))
- End If
- End If
- End Sub
- End Class
- Class NSKeyboard
- Inherits Control
- Private TextBitmap As Bitmap
- Private TextGraphics As Graphics
- Const LowerKeys As String = "1234567890-=qwertyuiop[]asdfghjkl\;'zxcvbnm,./`"
- Const UpperKeys As String = "!@#$%^&*()_+QWERTYUIOP{}ASDFGHJKL|:""ZXCVBNM<>?~"
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- Font = New Font("Verdana", 8.25F)
- TextBitmap = New Bitmap(1, 1)
- TextGraphics = Graphics.FromImage(TextBitmap)
- MinimumSize = New Size(386, 162)
- MaximumSize = New Size(386, 162)
- Lower = LowerKeys.ToCharArray()
- Upper = UpperKeys.ToCharArray()
- PrepareCache()
- P1 = New Pen(Color.FromArgb(45, 45, 45))
- P2 = New Pen(Color.FromArgb(65, 65, 65))
- P3 = New Pen(Color.FromArgb(24, 24, 24))
- B1 = New SolidBrush(Color.FromArgb(100, 100, 100))
- End Sub
- Private _Target As Control
- Public Property Target() As Control
- Get
- Return _Target
- End Get
- Set(ByVal value As Control)
- _Target = value
- End Set
- End Property
- Private Shift As Boolean
- Private Pressed As Integer = -1
- Private Buttons As Rectangle()
- Private Lower As Char()
- Private Upper As Char()
- Private Other As String() = {"Shift", "Space", "Back"}
- Private UpperCache As PointF()
- Private LowerCache As PointF()
- Private Sub PrepareCache()
- Buttons = New Rectangle(50) {}
- UpperCache = New PointF(Upper.Length - 1) {}
- LowerCache = New PointF(Lower.Length - 1) {}
- Dim I As Integer
- Dim S As SizeF
- Dim R As Rectangle
- For Y As Integer = 0 To 3
- For X As Integer = 0 To 11
- I = (Y * 12) + X
- R = New Rectangle(X * 32, Y * 32, 32, 32)
- Buttons(I) = R
- If Not I = 47 AndAlso Not Char.IsLetter(Upper(I)) Then
- S = TextGraphics.MeasureString(Upper(I), Font)
- UpperCache(I) = New PointF(R.X + (R.Width \ 2 - S.Width / 2), R.Y + R.Height - S.Height - 2)
- S = TextGraphics.MeasureString(Lower(I), Font)
- LowerCache(I) = New PointF(R.X + (R.Width \ 2 - S.Width / 2), R.Y + R.Height - S.Height - 2)
- End If
- Next
- Next
- Buttons(48) = New Rectangle(0, 4 * 32, 2 * 32, 32)
- Buttons(49) = New Rectangle(Buttons(48).Right, 4 * 32, 8 * 32, 32)
- Buttons(50) = New Rectangle(Buttons(49).Right, 4 * 32, 2 * 32, 32)
- End Sub
- Private GP1 As GraphicsPath
- Private SZ1 As SizeF
- Private PT1 As PointF
- Private P1, P2, P3 As Pen
- Private B1 As SolidBrush
- Private PB1 As PathGradientBrush
- Private GB1 As LinearGradientBrush
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- G.Clear(BackColor)
- Dim R As Rectangle
- Dim Offset As Integer
- G.DrawRectangle(P1, 0, 0, (12 * 32) + 1, (5 * 32) + 1)
- For I As Integer = 0 To Buttons.Length - 1
- R = Buttons(I)
- Offset = 0
- If I = Pressed Then
- Offset = 1
- GP1 = New GraphicsPath()
- GP1.AddRectangle(R)
- PB1 = New PathGradientBrush(GP1)
- PB1.CenterColor = Color.FromArgb(60, 60, 60)
- PB1.SurroundColors = {Color.FromArgb(55, 55, 55)}
- PB1.FocusScales = New PointF(0.8F, 0.5F)
- G.FillPath(PB1, GP1)
- Else
- GB1 = New LinearGradientBrush(R, Color.FromArgb(60, 60, 60), Color.FromArgb(55, 55, 55), 90.0F)
- G.FillRectangle(GB1, R)
- End If
- Select Case I
- Case 48, 49, 50
- SZ1 = G.MeasureString(Other(I - 48), Font)
- G.DrawString(Other(I - 48), Font, Brushes.Black, R.X + (R.Width \ 2 - SZ1.Width / 2) + Offset + 1, R.Y + (R.Height \ 2 - SZ1.Height / 2) + Offset + 1)
- G.DrawString(Other(I - 48), Font, Brushes.WhiteSmoke, R.X + (R.Width \ 2 - SZ1.Width / 2) + Offset, R.Y + (R.Height \ 2 - SZ1.Height / 2) + Offset)
- Case 47
- DrawArrow(Color.Black, R.X + Offset + 1, R.Y + Offset + 1)
- DrawArrow(Color.FromArgb(235, 235, 235), R.X + Offset, R.Y + Offset)
- Case Else
- If Shift Then
- G.DrawString(Upper(I), Font, Brushes.Black, R.X + 3 + Offset + 1, R.Y + 2 + Offset + 1)
- G.DrawString(Upper(I), Font, Brushes.WhiteSmoke, R.X + 3 + Offset, R.Y + 2 + Offset)
- If Not Char.IsLetter(Lower(I)) Then
- PT1 = LowerCache(I)
- G.DrawString(Lower(I), Font, B1, PT1.X + Offset, PT1.Y + Offset)
- End If
- Else
- G.DrawString(Lower(I), Font, Brushes.Black, R.X + 3 + Offset + 1, R.Y + 2 + Offset + 1)
- G.DrawString(Lower(I), Font, Brushes.WhiteSmoke, R.X + 3 + Offset, R.Y + 2 + Offset)
- If Not Char.IsLetter(Upper(I)) Then
- PT1 = UpperCache(I)
- G.DrawString(Upper(I), Font, B1, PT1.X + Offset, PT1.Y + Offset)
- End If
- End If
- End Select
- G.DrawRectangle(P2, R.X + 1 + Offset, R.Y + 1 + Offset, R.Width - 2, R.Height - 2)
- G.DrawRectangle(P3, R.X + Offset, R.Y + Offset, R.Width, R.Height)
- If I = Pressed Then
- G.DrawLine(P1, R.X, R.Y, R.Right, R.Y)
- G.DrawLine(P1, R.X, R.Y, R.X, R.Bottom)
- End If
- Next
- End Sub
- Private Sub DrawArrow(color As Color, rx As Integer, ry As Integer)
- Dim R As New Rectangle(rx + 8, ry + 8, 16, 16)
- G.SmoothingMode = SmoothingMode.AntiAlias
- Dim P As New Pen(color, 1)
- Dim C As New AdjustableArrowCap(3, 2)
- P.CustomEndCap = C
- G.DrawArc(P, R, 0.0F, 290.0F)
- P.Dispose()
- C.Dispose()
- G.SmoothingMode = SmoothingMode.None
- End Sub
- Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
- Dim Index As Integer = ((e.Y \ 32) * 12) + (e.X \ 32)
- If Index > 47 Then
- For I As Integer = 48 To Buttons.Length - 1
- If Buttons(I).Contains(e.X, e.Y) Then
- Pressed = I
- Exit For
- End If
- Next
- Else
- Pressed = Index
- End If
- HandleKey()
- Invalidate()
- End Sub
- Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
- Pressed = -1
- Invalidate()
- End Sub
- Private Sub HandleKey()
- If _Target Is Nothing Then Return
- If Pressed = -1 Then Return
- Select Case Pressed
- Case 47
- _Target.Text = String.Empty
- Case 48
- Shift = Not Shift
- Case 49
- _Target.Text &= " "
- Case 50
- If Not _Target.Text.Length = 0 Then
- _Target.Text = _Target.Text.Remove(_Target.Text.Length - 1)
- End If
- Case Else
- If Shift Then
- _Target.Text &= Upper(Pressed)
- Else
- _Target.Text &= Lower(Pressed)
- End If
- End Select
- End Sub
- End Class
- <DefaultEvent("SelectedIndexChanged")> _
- Class NSPaginator
- Inherits Control
- Public Event SelectedIndexChanged(sender As Object, e As EventArgs)
- Private TextBitmap As Bitmap
- Private TextGraphics As Graphics
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- Size = New Size(202, 26)
- TextBitmap = New Bitmap(1, 1)
- TextGraphics = Graphics.FromImage(TextBitmap)
- InvalidateItems()
- B1 = New SolidBrush(Color.FromArgb(50, 50, 50))
- B2 = New SolidBrush(Color.FromArgb(55, 55, 55))
- P1 = New Pen(Color.FromArgb(24, 24, 24))
- P2 = New Pen(Color.FromArgb(55, 55, 55))
- P3 = New Pen(Color.FromArgb(65, 65, 65))
- End Sub
- Private _SelectedIndex As Integer
- Public Property SelectedIndex() As Integer
- Get
- Return _SelectedIndex
- End Get
- Set(ByVal value As Integer)
- _SelectedIndex = Math.Max(Math.Min(value, MaximumIndex), 0)
- Invalidate()
- End Set
- End Property
- Private _NumberOfPages As Integer
- Public Property NumberOfPages() As Integer
- Get
- Return _NumberOfPages
- End Get
- Set(ByVal value As Integer)
- _NumberOfPages = value
- _SelectedIndex = Math.Max(Math.Min(_SelectedIndex, MaximumIndex), 0)
- Invalidate()
- End Set
- End Property
- Public ReadOnly Property MaximumIndex As Integer
- Get
- Return NumberOfPages - 1
- End Get
- End Property
- Private ItemWidth As Integer
- Public Overrides Property Font As Font
- Get
- Return MyBase.Font
- End Get
- Set(value As Font)
- MyBase.Font = value
- InvalidateItems()
- Invalidate()
- End Set
- End Property
- Private Sub InvalidateItems()
- Dim S As Size = TextGraphics.MeasureString("000 ..", Font).ToSize()
- ItemWidth = S.Width + 10
- End Sub
- Private GP1, GP2 As GraphicsPath
- Private R1 As Rectangle
- Private SZ1 As Size
- Private PT1 As Point
- Private P1, P2, P3 As Pen
- Private B1, B2 As SolidBrush
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit
- G.Clear(BackColor)
- G.SmoothingMode = SmoothingMode.AntiAlias
- Dim LeftEllipse, RightEllipse As Boolean
- If _SelectedIndex < 4 Then
- For I As Integer = 0 To Math.Min(MaximumIndex, 4)
- RightEllipse = (I = 4) AndAlso (MaximumIndex > 4)
- DrawBox(I * ItemWidth, I, False, RightEllipse)
- Next
- ElseIf _SelectedIndex > 3 AndAlso _SelectedIndex < (MaximumIndex - 3) Then
- For I As Integer = 0 To 4
- LeftEllipse = (I = 0)
- RightEllipse = (I = 4)
- DrawBox(I * ItemWidth, _SelectedIndex + I - 2, LeftEllipse, RightEllipse)
- Next
- Else
- For I As Integer = 0 To 4
- LeftEllipse = (I = 0) AndAlso (MaximumIndex > 4)
- DrawBox(I * ItemWidth, MaximumIndex - (4 - I), LeftEllipse, False)
- Next
- End If
- End Sub
- Private Sub DrawBox(x As Integer, index As Integer, leftEllipse As Boolean, rightEllipse As Boolean)
- R1 = New Rectangle(x, 0, ItemWidth - 4, Height - 1)
- GP1 = CreateRound(R1, 7)
- GP2 = CreateRound(R1.X + 1, R1.Y + 1, R1.Width - 2, R1.Height - 2, 7)
- Dim T As String = CStr(index + 1)
- If leftEllipse Then T = ".. " & T
- If rightEllipse Then T = T & " .."
- SZ1 = G.MeasureString(T, Font).ToSize()
- PT1 = New Point(R1.X + (R1.Width \ 2 - SZ1.Width \ 2), R1.Y + (R1.Height \ 2 - SZ1.Height \ 2))
- If index = _SelectedIndex Then
- G.FillPath(B1, GP1)
- Dim F As New Font(Font, FontStyle.Underline)
- G.DrawString(T, F, Brushes.Black, PT1.X + 1, PT1.Y + 1)
- G.DrawString(T, F, Brushes.WhiteSmoke, PT1)
- F.Dispose()
- G.DrawPath(P1, GP2)
- G.DrawPath(P2, GP1)
- Else
- G.FillPath(B2, GP1)
- G.DrawString(T, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
- G.DrawString(T, Font, Brushes.WhiteSmoke, PT1)
- G.DrawPath(P3, GP2)
- G.DrawPath(P1, GP1)
- End If
- End Sub
- Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
- If e.Button = Windows.Forms.MouseButtons.Left Then
- Dim NewIndex As Integer
- Dim OldIndex As Integer = _SelectedIndex
- If _SelectedIndex < 4 Then
- NewIndex = (e.X \ ItemWidth)
- ElseIf _SelectedIndex > 3 AndAlso _SelectedIndex < (MaximumIndex - 3) Then
- NewIndex = (e.X \ ItemWidth)
- Select Case NewIndex
- Case 2
- NewIndex = OldIndex
- Case Is < 2
- NewIndex = OldIndex - (2 - NewIndex)
- Case Is > 2
- NewIndex = OldIndex + (NewIndex - 2)
- End Select
- Else
- NewIndex = MaximumIndex - (4 - (e.X \ ItemWidth))
- End If
- If (NewIndex < _NumberOfPages) AndAlso (Not NewIndex = OldIndex) Then
- SelectedIndex = NewIndex
- RaiseEvent SelectedIndexChanged(Me, Nothing)
- End If
- End If
- MyBase.OnMouseDown(e)
- End Sub
- End Class
- <DefaultEvent("Scroll")> _
- Class NSVScrollBar
- Inherits Control
- Event Scroll(ByVal sender As Object)
- Private _Minimum As Integer
- Property Minimum() As Integer
- Get
- Return _Minimum
- End Get
- Set(ByVal value As Integer)
- If value < 0 Then
- Throw New Exception("Property value is not valid.")
- End If
- _Minimum = value
- If value > _Value Then _Value = value
- If value > _Maximum Then _Maximum = value
- InvalidateLayout()
- End Set
- End Property
- Private _Maximum As Integer = 100
- Property Maximum() As Integer
- Get
- Return _Maximum
- End Get
- Set(ByVal value As Integer)
- If value < 1 Then value = 1
- _Maximum = value
- If value < _Value Then _Value = value
- If value < _Minimum Then _Minimum = value
- InvalidateLayout()
- End Set
- End Property
- Private _Value As Integer
- Property Value() As Integer
- Get
- If Not ShowThumb Then Return _Minimum
- Return _Value
- End Get
- Set(ByVal value As Integer)
- If value = _Value Then Return
- If value > _Maximum OrElse value < _Minimum Then
- Throw New Exception("Property value is not valid.")
- End If
- _Value = value
- InvalidatePosition()
- RaiseEvent Scroll(Me)
- End Set
- End Property
- Property _Percent As Double
- Public ReadOnly Property Percent As Double
- Get
- If Not ShowThumb Then Return 0
- Return GetProgress()
- End Get
- End Property
- Private _SmallChange As Integer = 1
- Public Property SmallChange() As Integer
- Get
- Return _SmallChange
- End Get
- Set(ByVal value As Integer)
- If value < 1 Then
- Throw New Exception("Property value is not valid.")
- End If
- _SmallChange = value
- End Set
- End Property
- Private _LargeChange As Integer = 10
- Public Property LargeChange() As Integer
- Get
- Return _LargeChange
- End Get
- Set(ByVal value As Integer)
- If value < 1 Then
- Throw New Exception("Property value is not valid.")
- End If
- _LargeChange = value
- End Set
- End Property
- Private ButtonSize As Integer = 16
- Private ThumbSize As Integer = 24 ' 14 minimum
- Private TSA As Rectangle
- Private BSA As Rectangle
- Private Shaft As Rectangle
- Private Thumb As Rectangle
- Private ShowThumb As Boolean
- Private ThumbDown As Boolean
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- Width = 18
- B1 = New SolidBrush(Color.FromArgb(55, 55, 55))
- B2 = New SolidBrush(Color.FromArgb(24, 24, 24))
- P1 = New Pen(Color.FromArgb(24, 24, 24))
- P2 = New Pen(Color.FromArgb(65, 65, 65))
- P3 = New Pen(Color.FromArgb(55, 55, 55))
- P4 = New Pen(Color.FromArgb(40, 40, 40))
- End Sub
- Private GP1, GP2, GP3, GP4 As GraphicsPath
- Private P1, P2, P3, P4 As Pen
- Private B1, B2 As SolidBrush
- Dim I1 As Integer
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.Clear(BackColor)
- GP1 = DrawArrow(4, 6, False)
- GP2 = DrawArrow(5, 7, False)
- G.FillPath(B1, GP2)
- G.FillPath(B2, GP1)
- GP3 = DrawArrow(4, Height - 11, True)
- GP4 = DrawArrow(5, Height - 10, True)
- G.FillPath(B1, GP4)
- G.FillPath(B2, GP3)
- If ShowThumb Then
- G.FillRectangle(B1, Thumb)
- G.DrawRectangle(P1, Thumb)
- G.DrawRectangle(P2, Thumb.X + 1, Thumb.Y + 1, Thumb.Width - 2, Thumb.Height - 2)
- Dim Y As Integer
- Dim LY As Integer = Thumb.Y + (Thumb.Height \ 2) - 3
- For I As Integer = 0 To 2
- Y = LY + (I * 3)
- G.DrawLine(P1, Thumb.X + 5, Y, Thumb.Right - 5, Y)
- G.DrawLine(P2, Thumb.X + 5, Y + 1, Thumb.Right - 5, Y + 1)
- Next
- End If
- G.DrawRectangle(P3, 0, 0, Width - 1, Height - 1)
- G.DrawRectangle(P4, 1, 1, Width - 3, Height - 3)
- End Sub
- Private Function DrawArrow(x As Integer, y As Integer, flip As Boolean) As GraphicsPath
- Dim GP As New GraphicsPath()
- Dim W As Integer = 9
- Dim H As Integer = 5
- If flip Then
- GP.AddLine(x + 1, y, x + W + 1, y)
- GP.AddLine(x + W, y, x + H, y + H - 1)
- Else
- GP.AddLine(x, y + H, x + W, y + H)
- GP.AddLine(x + W, y + H, x + H, y)
- End If
- GP.CloseFigure()
- Return GP
- End Function
- Protected Overrides Sub OnSizeChanged(e As EventArgs)
- InvalidateLayout()
- End Sub
- Private Sub InvalidateLayout()
- TSA = New Rectangle(0, 0, Width, ButtonSize)
- BSA = New Rectangle(0, Height - ButtonSize, Width, ButtonSize)
- Shaft = New Rectangle(0, TSA.Bottom + 1, Width, Height - (ButtonSize * 2) - 1)
- ShowThumb = ((_Maximum - _Minimum) > Shaft.Height)
- If ShowThumb Then
- 'ThumbSize = Math.Max(0, 14) 'TODO: Implement this.
- Thumb = New Rectangle(1, 0, Width - 3, ThumbSize)
- End If
- RaiseEvent Scroll(Me)
- InvalidatePosition()
- End Sub
- Private Sub InvalidatePosition()
- Thumb.Y = CInt(GetProgress() * (Shaft.Height - ThumbSize)) + TSA.Height
- Invalidate()
- End Sub
- Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
- If e.Button = Windows.Forms.MouseButtons.Left AndAlso ShowThumb Then
- If TSA.Contains(e.Location) Then
- I1 = _Value - _SmallChange
- ElseIf BSA.Contains(e.Location) Then
- I1 = _Value + _SmallChange
- Else
- If Thumb.Contains(e.Location) Then
- ThumbDown = True
- MyBase.OnMouseDown(e)
- Return
- Else
- If e.Y < Thumb.Y Then
- I1 = _Value - _LargeChange
- Else
- I1 = _Value + _LargeChange
- End If
- End If
- End If
- Value = Math.Min(Math.Max(I1, _Minimum), _Maximum)
- InvalidatePosition()
- End If
- MyBase.OnMouseDown(e)
- End Sub
- Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
- If ThumbDown AndAlso ShowThumb Then
- Dim ThumbPosition As Integer = e.Y - TSA.Height - (ThumbSize \ 2)
- Dim ThumbBounds As Integer = Shaft.Height - ThumbSize
- I1 = CInt((ThumbPosition / ThumbBounds) * (_Maximum - _Minimum)) + _Minimum
- Value = Math.Min(Math.Max(I1, _Minimum), _Maximum)
- InvalidatePosition()
- End If
- MyBase.OnMouseMove(e)
- End Sub
- Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
- ThumbDown = False
- MyBase.OnMouseUp(e)
- End Sub
- Private Function GetProgress() As Double
- Return (_Value - _Minimum) / (_Maximum - _Minimum)
- End Function
- End Class
- <DefaultEvent("Scroll")> _
- Class NSHScrollBar
- Inherits Control
- Event Scroll(ByVal sender As Object)
- Private _Minimum As Integer
- Property Minimum() As Integer
- Get
- Return _Minimum
- End Get
- Set(ByVal value As Integer)
- If value < 0 Then
- Throw New Exception("Property value is not valid.")
- End If
- _Minimum = value
- If value > _Value Then _Value = value
- If value > _Maximum Then _Maximum = value
- InvalidateLayout()
- End Set
- End Property
- Private _Maximum As Integer = 100
- Property Maximum() As Integer
- Get
- Return _Maximum
- End Get
- Set(ByVal value As Integer)
- If value < 0 Then
- Throw New Exception("Property value is not valid.")
- End If
- _Maximum = value
- If value < _Value Then _Value = value
- If value < _Minimum Then _Minimum = value
- InvalidateLayout()
- End Set
- End Property
- Private _Value As Integer
- Property Value() As Integer
- Get
- If Not ShowThumb Then Return _Minimum
- Return _Value
- End Get
- Set(ByVal value As Integer)
- If value = _Value Then Return
- If value > _Maximum OrElse value < _Minimum Then
- Throw New Exception("Property value is not valid.")
- End If
- _Value = value
- InvalidatePosition()
- RaiseEvent Scroll(Me)
- End Set
- End Property
- Private _SmallChange As Integer = 1
- Public Property SmallChange() As Integer
- Get
- Return _SmallChange
- End Get
- Set(ByVal value As Integer)
- If value < 1 Then
- Throw New Exception("Property value is not valid.")
- End If
- _SmallChange = value
- End Set
- End Property
- Private _LargeChange As Integer = 10
- Public Property LargeChange() As Integer
- Get
- Return _LargeChange
- End Get
- Set(ByVal value As Integer)
- If value < 1 Then
- Throw New Exception("Property value is not valid.")
- End If
- _LargeChange = value
- End Set
- End Property
- Private ButtonSize As Integer = 16
- Private ThumbSize As Integer = 24 ' 14 minimum
- Private LSA As Rectangle
- Private RSA As Rectangle
- Private Shaft As Rectangle
- Private Thumb As Rectangle
- Private ShowThumb As Boolean
- Private ThumbDown As Boolean
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, False)
- Height = 18
- B1 = New SolidBrush(Color.FromArgb(55, 55, 55))
- B2 = New SolidBrush(Color.FromArgb(24, 24, 24))
- P1 = New Pen(Color.FromArgb(24, 24, 24))
- P2 = New Pen(Color.FromArgb(65, 65, 65))
- P3 = New Pen(Color.FromArgb(55, 55, 55))
- P4 = New Pen(Color.FromArgb(40, 40, 40))
- End Sub
- Private GP1, GP2, GP3, GP4 As GraphicsPath
- Private P1, P2, P3, P4 As Pen
- Private B1, B2 As SolidBrush
- Dim I1 As Integer
- Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
- G = e.Graphics
- G.Clear(BackColor)
- GP1 = DrawArrow(6, 4, False)
- GP2 = DrawArrow(7, 5, False)
- G.FillPath(B1, GP2)
- G.FillPath(B2, GP1)
- GP3 = DrawArrow(Width - 11, 4, True)
- GP4 = DrawArrow(Width - 10, 5, True)
- G.FillPath(B1, GP4)
- G.FillPath(B2, GP3)
- If ShowThumb Then
- G.FillRectangle(B1, Thumb)
- G.DrawRectangle(P1, Thumb)
- G.DrawRectangle(P2, Thumb.X + 1, Thumb.Y + 1, Thumb.Width - 2, Thumb.Height - 2)
- Dim X As Integer
- Dim LX As Integer = Thumb.X + (Thumb.Width \ 2) - 3
- For I As Integer = 0 To 2
- X = LX + (I * 3)
- G.DrawLine(P1, X, Thumb.Y + 5, X, Thumb.Bottom - 5)
- G.DrawLine(P2, X + 1, Thumb.Y + 5, X + 1, Thumb.Bottom - 5)
- Next
- End If
- G.DrawRectangle(P3, 0, 0, Width - 1, Height - 1)
- G.DrawRectangle(P4, 1, 1, Width - 3, Height - 3)
- End Sub
- Private Function DrawArrow(x As Integer, y As Integer, flip As Boolean) As GraphicsPath
- Dim GP As New GraphicsPath()
- Dim W As Integer = 5
- Dim H As Integer = 9
- If flip Then
- GP.AddLine(x, y + 1, x, y + H + 1)
- GP.AddLine(x, y + H, x + W - 1, y + W)
- Else
- GP.AddLine(x + W, y, x + W, y + H)
- GP.AddLine(x + W, y + H, x + 1, y + W)
- End If
- GP.CloseFigure()
- Return GP
- End Function
- Protected Overrides Sub OnSizeChanged(e As EventArgs)
- InvalidateLayout()
- End Sub
- Private Sub InvalidateLayout()
- LSA = New Rectangle(0, 0, ButtonSize, Height)
- RSA = New Rectangle(Width - ButtonSize, 0, ButtonSize, Height)
- Shaft = New Rectangle(LSA.Right + 1, 0, Width - (ButtonSize * 2) - 1, Height)
- ShowThumb = ((_Maximum - _Minimum) > Shaft.Width)
- If ShowThumb Then
- 'ThumbSize = Math.Max(0, 14) 'TODO: Implement this.
- Thumb = New Rectangle(0, 1, ThumbSize, Height - 3)
- End If
- RaiseEvent Scroll(Me)
- InvalidatePosition()
- End Sub
- Private Sub InvalidatePosition()
- Thumb.X = CInt(GetProgress() * (Shaft.Width - ThumbSize)) + LSA.Width
- Invalidate()
- End Sub
- Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
- If e.Button = Windows.Forms.MouseButtons.Left AndAlso ShowThumb Then
- If LSA.Contains(e.Location) Then
- I1 = _Value - _SmallChange
- ElseIf RSA.Contains(e.Location) Then
- I1 = _Value + _SmallChange
- Else
- If Thumb.Contains(e.Location) Then
- ThumbDown = True
- MyBase.OnMouseDown(e)
- Return
- Else
- If e.X < Thumb.X Then
- I1 = _Value - _LargeChange
- Else
- I1 = _Value + _LargeChange
- End If
- End If
- End If
- Value = Math.Min(Math.Max(I1, _Minimum), _Maximum)
- InvalidatePosition()
- End If
- MyBase.OnMouseDown(e)
- End Sub
- Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
- If ThumbDown AndAlso ShowThumb Then
- Dim ThumbPosition As Integer = e.X - LSA.Width - (ThumbSize \ 2)
- Dim ThumbBounds As Integer = Shaft.Width - ThumbSize
- I1 = CInt((ThumbPosition / ThumbBounds) * (_Maximum - _Minimum)) + _Minimum
- Value = Math.Min(Math.Max(I1, _Minimum), _Maximum)
- InvalidatePosition()
- End If
- MyBase.OnMouseMove(e)
- End Sub
- Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
- ThumbDown = False
- MyBase.OnMouseUp(e)
- End Sub
- Private Function GetProgress() As Double
- Return (_Value - _Minimum) / (_Maximum - _Minimum)
- End Function
- End Class
- Class NSContextMenu
- Inherits ContextMenuStrip
- Sub New()
- Renderer = New ToolStripProfessionalRenderer(New NSColorTable())
- ForeColor = Color.FromArgb(235, 235, 235)
- End Sub
- Protected Overrides Sub OnPaint(e As PaintEventArgs)
- e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- MyBase.OnPaint(e)
- End Sub
- End Class
- Class NSColorTable
- Inherits ProfessionalColorTable
- Private BackColor As Color = Color.FromArgb(55, 55, 55)
- Public Overrides ReadOnly Property ButtonSelectedBorder() As Color
- Get
- Return BackColor
- End Get
- End Property
- Public Overrides ReadOnly Property CheckBackground() As Color
- Get
- Return BackColor
- End Get
- End Property
- Public Overrides ReadOnly Property CheckPressedBackground() As Color
- Get
- Return BackColor
- End Get
- End Property
- Public Overrides ReadOnly Property CheckSelectedBackground() As Color
- Get
- Return BackColor
- End Get
- End Property
- Public Overrides ReadOnly Property ImageMarginGradientBegin() As Color
- Get
- Return BackColor
- End Get
- End Property
- Public Overrides ReadOnly Property ImageMarginGradientEnd() As Color
- Get
- Return BackColor
- End Get
- End Property
- Public Overrides ReadOnly Property ImageMarginGradientMiddle() As Color
- Get
- Return BackColor
- End Get
- End Property
- Public Overrides ReadOnly Property MenuBorder() As Color
- Get
- Return Color.FromArgb(25, 25, 25)
- End Get
- End Property
- Public Overrides ReadOnly Property MenuItemBorder() As Color
- Get
- Return BackColor
- End Get
- End Property
- Public Overrides ReadOnly Property MenuItemSelected() As Color
- Get
- Return Color.FromArgb(65, 65, 65)
- End Get
- End Property
- Public Overrides ReadOnly Property SeparatorDark() As Color
- Get
- Return Color.FromArgb(24, 24, 24)
- End Get
- End Property
- Public Overrides ReadOnly Property ToolStripDropDownBackground() As Color
- Get
- Return BackColor
- End Get
- End Property
- End Class
- 'If you have made it this far it's not too late to turn back, you must not continue on! If you are trying to fullfill some
- 'sick act of masochism by studying the source of the ListView then, may god have mercy on your soul.
- Class NSListView
- Inherits Control
- Class NSListViewItem
- Property Text As String
- <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
- Property SubItems As New List(Of NSListViewSubItem)
- Protected UniqueId As Guid
- Sub New()
- UniqueId = Guid.NewGuid()
- End Sub
- Public Overrides Function ToString() As String
- Return Text
- End Function
- Public Overrides Function Equals(obj As Object) As Boolean
- If TypeOf obj Is NSListViewItem Then
- Return (DirectCast(obj, NSListViewItem).UniqueId = UniqueId)
- End If
- Return False
- End Function
- End Class
- Class NSListViewSubItem
- Property Text As String
- Public Overrides Function ToString() As String
- Return Text
- End Function
- End Class
- Class NSListViewColumnHeader
- Property Text As String
- Property Width As Integer = 60
- Public Overrides Function ToString() As String
- Return Text
- End Function
- End Class
- Private _Items As New List(Of NSListViewItem)
- <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
- Public Property Items() As NSListViewItem()
- Get
- Return _Items.ToArray()
- End Get
- Set(ByVal value As NSListViewItem())
- _Items = New List(Of NSListViewItem)(value)
- InvalidateScroll()
- End Set
- End Property
- Private _SelectedItems As New List(Of NSListViewItem)
- Public ReadOnly Property SelectedItems() As NSListViewItem()
- Get
- Return _SelectedItems.ToArray()
- End Get
- End Property
- Private _Columns As New List(Of NSListViewColumnHeader)
- <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
- Public Property Columns() As NSListViewColumnHeader()
- Get
- Return _Columns.ToArray()
- End Get
- Set(ByVal value As NSListViewColumnHeader())
- _Columns = New List(Of NSListViewColumnHeader)(value)
- InvalidateColumns()
- End Set
- End Property
- Private _MultiSelect As Boolean = True
- Public Property MultiSelect() As Boolean
- Get
- Return _MultiSelect
- End Get
- Set(ByVal value As Boolean)
- _MultiSelect = value
- If _SelectedItems.Count > 1 Then
- _SelectedItems.RemoveRange(1, _SelectedItems.Count - 1)
- End If
- Invalidate()
- End Set
- End Property
- Private ItemHeight As Integer = 24
- Public Overrides Property Font As Font
- Get
- Return MyBase.Font
- End Get
- Set(value As Font)
- ItemHeight = CInt(Graphics.FromHwnd(Handle).MeasureString("@", Font).Height) + 6
- If VS IsNot Nothing Then
- VS.SmallChange = ItemHeight
- VS.LargeChange = ItemHeight
- End If
- MyBase.Font = value
- InvalidateLayout()
- End Set
- End Property
- #Region " Item Helper Methods "
- 'Ok, you've seen everything of importance at this point; I am begging you to spare yourself. You must not read any further!
- Public Sub AddItem(text As String, ParamArray subItems As String())
- Dim Items As New List(Of NSListViewSubItem)
- For Each I As String In subItems
- Dim SubItem As New NSListViewSubItem()
- SubItem.Text = I
- Items.Add(SubItem)
- Next
- Dim Item As New NSListViewItem()
- Item.Text = text
- Item.SubItems = Items
- _Items.Add(Item)
- InvalidateScroll()
- End Sub
- Public Sub RemoveItemAt(index As Integer)
- _Items.RemoveAt(index)
- InvalidateScroll()
- End Sub
- Public Sub RemoveItem(item As NSListViewItem)
- _Items.Remove(item)
- InvalidateScroll()
- End Sub
- Public Sub RemoveItems(items As NSListViewItem())
- For Each I As NSListViewItem In items
- _Items.Remove(I)
- Next
- InvalidateScroll()
- End Sub
- #End Region
- Private VS As NSVScrollBar
- Sub New()
- SetStyle(DirectCast(139286, ControlStyles), True)
- SetStyle(ControlStyles.Selectable, True)
- P1 = New Pen(Color.FromArgb(55, 55, 55))
- P2 = New Pen(Color.FromArgb(24, 24, 24))
- P3 = New Pen(Color.FromArgb(65, 65, 65))
- B1 = New SolidBrush(Color.FromArgb(62, 62, 62))
- B2 = New SolidBrush(Color.FromArgb(65, 65, 65))
- B3 = New SolidBrush(Color.FromArgb(47, 47, 47))
- B4 = New SolidBrush(Color.FromArgb(50, 50, 50))
- VS = New NSVScrollBar
- VS.SmallChange = ItemHeight
- VS.LargeChange = ItemHeight
- AddHandler VS.Scroll, AddressOf HandleScroll
- AddHandler VS.MouseDown, AddressOf VS_MouseDown
- Controls.Add(VS)
- InvalidateLayout()
- End Sub
- Protected Overrides Sub OnSizeChanged(e As EventArgs)
- InvalidateLayout()
- MyBase.OnSizeChanged(e)
- End Sub
- Private Sub HandleScroll(sender As Object)
- Invalidate()
- End Sub
- Private Sub InvalidateScroll()
- VS.Maximum = (_Items.Count * ItemHeight)
- Invalidate()
- End Sub
- Private Sub InvalidateLayout()
- VS.Location = New Point(Width - VS.Width - 1, 1)
- VS.Size = New Size(18, Height - 2)
- Invalidate()
- End Sub
- Private ColumnOffsets As Integer()
- Private Sub InvalidateColumns()
- Dim Width As Integer = 3
- ColumnOffsets = New Integer(_Columns.Count - 1) {}
- For I As Integer = 0 To _Columns.Count - 1
- ColumnOffsets(I) = Width
- Width += Columns(I).Width
- Next
- Invalidate()
- End Sub
- Private Sub VS_MouseDown(sender As Object, e As MouseEventArgs)
- Focus()
- End Sub
- Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
- Focus()
- If e.Button = Windows.Forms.MouseButtons.Left Then
- Dim Offset As Integer = CInt(VS.Percent * (VS.Maximum - (Height - (ItemHeight * 2))))
- Dim Index As Integer = ((e.Y + Offset - ItemHeight) \ ItemHeight)
- If Index > _Items.Count - 1 Then Index = -1
- If Not Index = -1 Then
- 'TODO: Handle Shift key
- If ModifierKeys = Keys.Control AndAlso _MultiSelect Then
- If _SelectedItems.Contains(_Items(Index)) Then
- _SelectedItems.Remove(_Items(Index))
- Else
- _SelectedItems.Add(_Items(Index))
- End If
- Else
- _SelectedItems.Clear()
- _SelectedItems.Add(_Items(Index))
- End If
- End If
- Invalidate()
- End If
- MyBase.OnMouseDown(e)
- End Sub
- Private P1, P2, P3 As Pen
- Private B1, B2, B3, B4 As SolidBrush
- Private GB1 As LinearGradientBrush
- 'I am so sorry you have to witness this. I tried warning you. ;.;
- Protected Overrides Sub OnPaint(e As PaintEventArgs)
- G = e.Graphics
- G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
- G.Clear(BackColor)
- Dim X, Y As Integer
- Dim H As Single
- G.DrawRectangle(P1, 1, 1, Width - 3, Height - 3)
- Dim R1 As Rectangle
- Dim CI As NSListViewItem
- Dim Offset As Integer = CInt(VS.Percent * (VS.Maximum - (Height - (ItemHeight * 2))))
- Dim StartIndex As Integer
- If Offset = 0 Then StartIndex = 0 Else StartIndex = (Offset \ ItemHeight)
- Dim EndIndex As Integer = Math.Min(StartIndex + (Height \ ItemHeight), _Items.Count - 1)
- For I As Integer = StartIndex To EndIndex
- CI = Items(I)
- R1 = New Rectangle(0, ItemHeight + (I * ItemHeight) + 1 - Offset, Width, ItemHeight - 1)
- H = G.MeasureString(CI.Text, Font).Height
- Y = R1.Y + CInt((ItemHeight / 2) - (H / 2))
- If _SelectedItems.Contains(CI) Then
- If I Mod 2 = 0 Then
- G.FillRectangle(B1, R1)
- Else
- G.FillRectangle(B2, R1)
- End If
- Else
- If I Mod 2 = 0 Then
- G.FillRectangle(B3, R1)
- Else
- G.FillRectangle(B4, R1)
- End If
- End If
- G.DrawLine(P2, 0, R1.Bottom, Width, R1.Bottom)
- If Columns.Length > 0 Then
- R1.Width = Columns(0).Width
- G.SetClip(R1)
- End If
- 'TODO: Ellipse text that overhangs seperators.
- G.DrawString(CI.Text, Font, Brushes.Black, 10, Y + 1)
- G.DrawString(CI.Text, Font, Brushes.WhiteSmoke, 9, Y)
- If CI.SubItems IsNot Nothing Then
- For I2 As Integer = 0 To Math.Min(CI.SubItems.Count, _Columns.Count) - 1
- X = ColumnOffsets(I2 + 1) + 4
- R1.X = X
- R1.Width = Columns(I2).Width
- G.SetClip(R1)
- G.DrawString(CI.SubItems(I2).Text, Font, Brushes.Black, X + 1, Y + 1)
- G.DrawString(CI.SubItems(I2).Text, Font, Brushes.WhiteSmoke, X, Y)
- Next
- End If
- G.ResetClip()
- Next
- R1 = New Rectangle(0, 0, Width, ItemHeight)
- GB1 = New LinearGradientBrush(R1, Color.FromArgb(60, 60, 60), Color.FromArgb(55, 55, 55), 90.0F)
- G.FillRectangle(GB1, R1)
- G.DrawRectangle(P3, 1, 1, Width - 22, ItemHeight - 2)
- Dim LH As Integer = Math.Min(VS.Maximum + ItemHeight - Offset, Height)
- Dim CC As NSListViewColumnHeader
- For I As Integer = 0 To _Columns.Count - 1
- CC = Columns(I)
- H = G.MeasureString(CC.Text, Font).Height
- Y = CInt((ItemHeight / 2) - (H / 2))
- X = ColumnOffsets(I)
- G.DrawString(CC.Text, Font, Brushes.Black, X + 1, Y + 1)
- G.DrawString(CC.Text, Font, Brushes.WhiteSmoke, X, Y)
- G.DrawLine(P2, X - 3, 0, X - 3, LH)
- G.DrawLine(P3, X - 2, 0, X - 2, ItemHeight)
- Next
- G.DrawRectangle(P2, 0, 0, Width - 1, Height - 1)
- G.DrawLine(P2, 0, ItemHeight, Width, ItemHeight)
- G.DrawLine(P2, VS.Location.X - 1, 0, VS.Location.X - 1, Height)
- End Sub
- Protected Overrides Sub OnMouseWheel(e As MouseEventArgs)
- Dim Move As Integer = -((e.Delta * SystemInformation.MouseWheelScrollLines \ 120) * (ItemHeight \ 2))
- Dim Value As Integer = Math.Max(Math.Min(VS.Value + Move, VS.Maximum), VS.Minimum)
- VS.Value = Value
- MyBase.OnMouseWheel(e)
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement