Guest User

Bootstrap Panel

a guest
Mar 13th, 2016
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 6.65 KB | None | 0 0
  1. ' // BootstrapPanel
  2. ' // 1 Control
  3. ' // Made by AeroRev9 / Naywyn
  4. ' // 03/13.
  5.  
  6. Option Strict On
  7.  
  8. Imports System.Drawing.Text
  9. Imports System.Drawing.Drawing2D
  10.  
  11. Friend Module Helpers
  12.  
  13.     Public G As Graphics
  14.     Private TargetStringMeasure As SizeF
  15.  
  16.     Enum MouseState As Byte
  17.         None = 0
  18.         Over = 1
  19.         Down = 2
  20.     End Enum
  21.  
  22.     Enum RoundingStyle As Byte
  23.         All = 0
  24.         Top = 1
  25.         Bottom = 2
  26.         Left = 3
  27.         Right = 4
  28.         TopRight = 5
  29.         BottomRight = 6
  30.     End Enum
  31.  
  32.     Public Function ColorFromHex(Hex As String) As Color
  33.         Return Color.FromArgb(CInt(Long.Parse(String.Format("FFFFFFFFFF{0}", Hex.Substring(1)), Globalization.NumberStyles.HexNumber)))
  34.     End Function
  35.  
  36.     Public Function MiddlePoint(TargetText As String, TargetFont As Font, Rect As Rectangle) As Point
  37.         TargetStringMeasure = G.MeasureString(TargetText, TargetFont)
  38.         Return New Point(CInt(Rect.Width / 2 - TargetStringMeasure.Width / 2), CInt(Rect.Height / 2 - TargetStringMeasure.Height / 2))
  39.     End Function
  40.  
  41.     Public Function RoundRect(Rect As Rectangle, Rounding As Integer, Optional Style As RoundingStyle = RoundingStyle.All) As GraphicsPath
  42.  
  43.         Dim GP As New GraphicsPath()
  44.         Dim AW As Integer = Rounding * 2
  45.  
  46.         GP.StartFigure()
  47.  
  48.         If Rounding = 0 Then
  49.             GP.AddRectangle(Rect)
  50.             GP.CloseAllFigures()
  51.             Return GP
  52.         End If
  53.  
  54.         Select Case Style
  55.             Case RoundingStyle.All
  56.                 GP.AddArc(New Rectangle(Rect.X, Rect.Y, AW, AW), -180, 90)
  57.                 GP.AddArc(New Rectangle(Rect.Width - AW + Rect.X, Rect.Y, AW, AW), -90, 90)
  58.                 GP.AddArc(New Rectangle(Rect.Width - AW + Rect.X, Rect.Height - AW + Rect.Y, AW, AW), 0, 90)
  59.                 GP.AddArc(New Rectangle(Rect.X, Rect.Height - AW + Rect.Y, AW, AW), 90, 90)
  60.             Case RoundingStyle.Top
  61.                 GP.AddArc(New Rectangle(Rect.X, Rect.Y, AW, AW), -180, 90)
  62.                 GP.AddArc(New Rectangle(Rect.Width - AW + Rect.X, Rect.Y, AW, AW), -90, 90)
  63.                 GP.AddLine(New Point(Rect.X + Rect.Width, Rect.Y + Rect.Height), New Point(Rect.X, Rect.Y + Rect.Height))
  64.             Case RoundingStyle.Bottom
  65.                 GP.AddLine(New Point(Rect.X, Rect.Y), New Point(Rect.X + Rect.Width, Rect.Y))
  66.                 GP.AddArc(New Rectangle(Rect.Width - AW + Rect.X, Rect.Height - AW + Rect.Y, AW, AW), 0, 90)
  67.                 GP.AddArc(New Rectangle(Rect.X, Rect.Height - AW + Rect.Y, AW, AW), 90, 90)
  68.             Case RoundingStyle.Left
  69.                 GP.AddArc(New Rectangle(Rect.X, Rect.Y, AW, AW), -180, 90)
  70.                 GP.AddLine(New Point(Rect.X + Rect.Width, Rect.Y), New Point(Rect.X + Rect.Width, Rect.Y + Rect.Height))
  71.                 GP.AddArc(New Rectangle(Rect.X, Rect.Height - AW + Rect.Y, AW, AW), 90, 90)
  72.             Case RoundingStyle.Right
  73.                 GP.AddLine(New Point(Rect.X, Rect.Y + Rect.Height), New Point(Rect.X, Rect.Y))
  74.                 GP.AddArc(New Rectangle(Rect.Width - AW + Rect.X, Rect.Y, AW, AW), -90, 90)
  75.                 GP.AddArc(New Rectangle(Rect.Width - AW + Rect.X, Rect.Height - AW + Rect.Y, AW, AW), 0, 90)
  76.             Case RoundingStyle.TopRight
  77.                 GP.AddLine(New Point(Rect.X, Rect.Y + 1), New Point(Rect.X, Rect.Y))
  78.                 GP.AddArc(New Rectangle(Rect.Width - AW + Rect.X, Rect.Y, AW, AW), -90, 90)
  79.                 GP.AddLine(New Point(Rect.X + Rect.Width, Rect.Y + Rect.Height - 1), New Point(Rect.X + Rect.Width, Rect.Y + Rect.Height))
  80.                 GP.AddLine(New Point(Rect.X + 1, Rect.Y + Rect.Height), New Point(Rect.X, Rect.Y + Rect.Height))
  81.             Case RoundingStyle.BottomRight
  82.                 GP.AddLine(New Point(Rect.X, Rect.Y + 1), New Point(Rect.X, Rect.Y))
  83.                 GP.AddLine(New Point(Rect.X + Rect.Width - 1, Rect.Y), New Point(Rect.X + Rect.Width, Rect.Y))
  84.                 GP.AddArc(New Rectangle(Rect.Width - AW + Rect.X, Rect.Height - AW + Rect.Y, AW, AW), 0, 90)
  85.                 GP.AddLine(New Point(Rect.X + 1, Rect.Y + Rect.Height), New Point(Rect.X, Rect.Y + Rect.Height))
  86.         End Select
  87.  
  88.         GP.CloseAllFigures()
  89.  
  90.         Return GP
  91.  
  92.     End Function
  93.  
  94. End Module
  95.  
  96. Public Class BootstrapPanel
  97.     Inherits GroupBox
  98.  
  99.     Public Property Scheme As Schemes = Schemes.Classic
  100.  
  101.     Private SchemeColor As Color = ColorFromHex("#337AB7")
  102.     Private SchemeBorder As Color = ColorFromHex("#337AB7")
  103.     Private SchemeTextColor As Color = ColorFromHex("#FFFFFF")
  104.  
  105.     Public Enum Schemes As Byte
  106.         Classic = 0
  107.         Green = 1
  108.         Blue = 2
  109.         Yellow = 3
  110.         Red = 4
  111.     End Enum
  112.  
  113.     Sub New()
  114.         DoubleBuffered = True
  115.         SetStyle(ControlStyles.UserPaint Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.Opaque Or ControlStyles.OptimizedDoubleBuffer, True)
  116.     End Sub
  117.  
  118.     Protected Overrides Sub OnPaint(e As PaintEventArgs)
  119.  
  120.         G = e.Graphics
  121.         G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
  122.  
  123.         MyBase.OnPaint(e)
  124.  
  125.         G.Clear(Parent.BackColor)
  126.  
  127.         Select Case Scheme
  128.  
  129.             Case Schemes.Classic
  130.  
  131.                 SchemeColor = ColorFromHex("#337AB7")
  132.                 SchemeBorder = ColorFromHex("#337AB7")
  133.                 SchemeTextColor = ColorFromHex("#FFFFFF")
  134.  
  135.             Case Schemes.Green
  136.  
  137.                 SchemeColor = ColorFromHex("#DFF0D8")
  138.                 SchemeBorder = ColorFromHex("#D6E9C6")
  139.                 SchemeTextColor = ColorFromHex("#688460")
  140.  
  141.             Case Schemes.Blue
  142.  
  143.                 SchemeColor = ColorFromHex("#D9EDF7")
  144.                 SchemeBorder = ColorFromHex("#BCE8F1")
  145.                 SchemeTextColor = ColorFromHex("#637984")
  146.  
  147.             Case Schemes.Yellow
  148.  
  149.                 SchemeColor = ColorFromHex("#FCF8E3")
  150.                 SchemeBorder = ColorFromHex("#FAEBCC")
  151.                 SchemeTextColor = ColorFromHex("#7F7858")
  152.  
  153.             Case Schemes.Red
  154.  
  155.                 SchemeColor = ColorFromHex("#F2DEDE")
  156.                 SchemeBorder = ColorFromHex("#EBCCD1")
  157.                 SchemeTextColor = ColorFromHex("#7C5454")
  158.  
  159.         End Select
  160.  
  161.         Using Fill As New SolidBrush(SchemeColor), Border As New Pen(SchemeBorder), TextFont As New Font("Segoe UI", 9), TextBrush As New SolidBrush(SchemeTextColor)
  162.             G.FillRectangle(Fill, New Rectangle(1, 1, Width - 1, 30))
  163.             G.SmoothingMode = SmoothingMode.HighQuality
  164.             G.DrawPath(Border, RoundRect(New Rectangle(0, 0, Width - 1, Height - 1), 2))
  165.             G.DrawString(Text, TextFont, TextBrush, New Point(7, 7))
  166.             G.DrawLine(Border, 0, 30, Width, 30)
  167.         End Using
  168.  
  169.     End Sub
  170.  
  171. End Class
Advertisement
Add Comment
Please, Sign In to add comment