233 lines
9.6 KiB
VB.net
233 lines
9.6 KiB
VB.net
Imports System.Drawing
|
|
Imports System.Drawing.Drawing2D
|
|
|
|
Public Class DisplayHelp
|
|
|
|
Public Shared Sub FillRectangle(ByVal g As Graphics, ByVal bounds As Rectangle, ByVal color1 As Color)
|
|
FillRectangle(g, bounds, color1, Color.Empty, 90)
|
|
End Sub
|
|
|
|
Public Shared Sub FillRectangle(ByVal g As Graphics, ByVal bounds As Rectangle, ByVal color1 As Color, ByVal color2 As Color)
|
|
FillRectangle(g, bounds, color1, color2, 90)
|
|
End Sub
|
|
|
|
Public Shared Sub FillRectangle(ByVal g As Graphics, ByVal r As Rectangle, ByVal color1 As Color, ByVal color2 As Color, ByVal gradientAngle As Integer)
|
|
If r.Width = 0 OrElse r.Height = 0 Then Return
|
|
|
|
If color2.IsEmpty Then
|
|
|
|
If Not color1.IsEmpty Then
|
|
Dim sm As SmoothingMode = g.SmoothingMode
|
|
g.SmoothingMode = SmoothingMode.None
|
|
|
|
Using brush As SolidBrush = New SolidBrush(color1)
|
|
g.FillRectangle(brush, r)
|
|
End Using
|
|
|
|
g.SmoothingMode = sm
|
|
End If
|
|
Else
|
|
|
|
Using brush As LinearGradientBrush = CreateLinearGradientBrush(r, color1, color2, gradientAngle)
|
|
g.FillRectangle(brush, r)
|
|
End Using
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Sub FillRectangle(ByVal g As Graphics, ByVal r As Rectangle, ByVal color1 As Color, ByVal color2 As Color, ByVal gradientAngle As Integer, ByVal factors As Single(), ByVal positions As Single())
|
|
If r.Width = 0 OrElse r.Height = 0 Then Return
|
|
|
|
If color2.IsEmpty Then
|
|
|
|
If Not color1.IsEmpty Then
|
|
Dim sm As SmoothingMode = g.SmoothingMode
|
|
g.SmoothingMode = SmoothingMode.None
|
|
|
|
Using brush As SolidBrush = New SolidBrush(color1)
|
|
g.FillRectangle(brush, r)
|
|
End Using
|
|
|
|
g.SmoothingMode = sm
|
|
End If
|
|
Else
|
|
|
|
Using brush As LinearGradientBrush = CreateLinearGradientBrush(r, color1, color2, gradientAngle)
|
|
Dim blend As Blend = New Blend(factors.Length)
|
|
blend.Factors = factors
|
|
blend.Positions = positions
|
|
brush.Blend = blend
|
|
g.FillRectangle(brush, r)
|
|
End Using
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Sub FillRoundedRectangle(ByVal g As Graphics, ByVal bounds As Rectangle, ByVal cornerSize As Integer, ByVal color1 As Color, ByVal color2 As Color, ByVal gradientAngle As Integer)
|
|
If color2.IsEmpty Then
|
|
|
|
If Not color1.IsEmpty Then
|
|
|
|
Using brush As SolidBrush = New SolidBrush(color1)
|
|
FillRoundedRectangle(g, brush, bounds, cornerSize)
|
|
End Using
|
|
End If
|
|
Else
|
|
|
|
Using brush As LinearGradientBrush = CreateLinearGradientBrush(bounds, color1, color2, gradientAngle)
|
|
FillRoundedRectangle(g, brush, bounds, cornerSize)
|
|
End Using
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Sub FillRoundedRectangle(ByVal g As Graphics, ByVal bounds As Rectangle, ByVal cornerSize As Integer, ByVal color1 As Color, ByVal color2 As Color)
|
|
FillRoundedRectangle(g, bounds, cornerSize, color1, color2, 90)
|
|
End Sub
|
|
|
|
Public Shared Sub FillRoundedRectangle(ByVal g As Graphics, ByVal bounds As Rectangle, ByVal cornerSize As Integer, ByVal color1 As Color)
|
|
Using brush As SolidBrush = New SolidBrush(color1)
|
|
FillRoundedRectangle(g, brush, bounds, cornerSize)
|
|
End Using
|
|
End Sub
|
|
|
|
Public Shared Sub FillRoundedRectangle(ByVal g As Graphics, ByVal brush As Brush, ByVal bounds As Rectangle, ByVal cornerSize As Integer)
|
|
If cornerSize <= 0 Then
|
|
Dim sm As SmoothingMode = g.SmoothingMode
|
|
g.SmoothingMode = SmoothingMode.None
|
|
g.FillRectangle(brush, bounds)
|
|
g.SmoothingMode = sm
|
|
Else
|
|
bounds.Width -= 1
|
|
bounds.Height -= 1
|
|
|
|
Using path As GraphicsPath = GetRoundedRectanglePath(bounds, cornerSize)
|
|
g.FillPath(brush, path)
|
|
End Using
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Sub DrawRectangle(ByVal g As System.Drawing.Graphics, ByVal color As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
|
|
Using pen As Pen = New Pen(color, 1)
|
|
DrawRectangle(g, pen, x, y, width, height)
|
|
End Using
|
|
End Sub
|
|
|
|
Public Shared Sub DrawRectangle(ByVal g As System.Drawing.Graphics, ByVal color As Color, ByVal r As System.Drawing.Rectangle)
|
|
DrawRectangle(g, color, r.X, r.Y, r.Width, r.Height)
|
|
End Sub
|
|
|
|
Public Shared Sub DrawRectangle(ByVal g As System.Drawing.Graphics, ByVal pen As System.Drawing.Pen, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
|
|
width -= 1
|
|
height -= 1
|
|
g.DrawRectangle(pen, x, y, width, height)
|
|
End Sub
|
|
|
|
Public Shared Sub DrawRoundedRectangle(ByVal g As System.Drawing.Graphics, ByVal color As Color, ByVal bounds As Rectangle, ByVal cornerSize As Integer)
|
|
If Not color.IsEmpty Then
|
|
|
|
Using pen As Pen = New Pen(color)
|
|
DrawRoundedRectangle(g, pen, bounds.X, bounds.Y, bounds.Width, bounds.Height, cornerSize)
|
|
End Using
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Sub DrawRoundedRectangle(ByVal g As System.Drawing.Graphics, ByVal pen As System.Drawing.Pen, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal cornerSize As Integer)
|
|
DrawRoundedRectangle(g, pen, Nothing, x, y, width, height, cornerSize)
|
|
End Sub
|
|
|
|
Public Shared Sub DrawRoundedRectangle(ByVal g As System.Drawing.Graphics, ByVal pen As System.Drawing.Pen, ByVal fill As Brush, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal cornerSize As Integer)
|
|
width -= 1
|
|
height -= 1
|
|
Dim r As Rectangle = New Rectangle(x, y, width, height)
|
|
|
|
Using path As GraphicsPath = GetRoundedRectanglePath(r, cornerSize)
|
|
If fill IsNot Nothing Then g.FillPath(fill, path)
|
|
g.DrawPath(pen, path)
|
|
End Using
|
|
End Sub
|
|
|
|
Public Shared Function GetRoundedRectanglePath(ByVal r As Rectangle, ByVal cornerSize As Integer) As GraphicsPath
|
|
Dim path As GraphicsPath = New GraphicsPath()
|
|
|
|
If cornerSize = 0 Then
|
|
path.AddRectangle(r)
|
|
Else
|
|
AddCornerArc(path, r, cornerSize, eCornerArc.TopLeft)
|
|
AddCornerArc(path, r, cornerSize, eCornerArc.TopRight)
|
|
AddCornerArc(path, r, cornerSize, eCornerArc.BottomRight)
|
|
AddCornerArc(path, r, cornerSize, eCornerArc.BottomLeft)
|
|
path.CloseAllFigures()
|
|
End If
|
|
|
|
Return path
|
|
End Function
|
|
|
|
Public Shared Function CreateLinearGradientBrush(ByVal r As Rectangle, ByVal color1 As Color, ByVal color2 As Color, ByVal gradientAngle As Single) As LinearGradientBrush
|
|
If r.Width <= 0 Then r.Width = 1
|
|
If r.Height <= 0 Then r.Height = 1
|
|
Return New LinearGradientBrush(New Rectangle(r.X, r.Y - 1, r.Width, r.Height + 1), color1, color2, gradientAngle)
|
|
End Function
|
|
|
|
Public Shared Sub AddCornerArc(ByVal path As GraphicsPath, ByVal bounds As Rectangle, ByVal cornerDiameter As Integer, ByVal corner As eCornerArc)
|
|
If cornerDiameter > 0 Then
|
|
Dim a As ArcData = GetCornerArc(bounds, cornerDiameter, corner)
|
|
path.AddArc(a.X, a.Y, a.Width, a.Height, a.StartAngle, a.SweepAngle)
|
|
Else
|
|
|
|
If corner = eCornerArc.TopLeft Then
|
|
path.AddLine(bounds.X, bounds.Y + 2, bounds.X, bounds.Y)
|
|
ElseIf corner = eCornerArc.BottomLeft Then
|
|
path.AddLine(bounds.X + 2, bounds.Bottom, bounds.X, bounds.Bottom)
|
|
ElseIf corner = eCornerArc.TopRight Then
|
|
path.AddLine(bounds.Right - 2, bounds.Y, bounds.Right, bounds.Y)
|
|
ElseIf corner = eCornerArc.BottomRight Then
|
|
path.AddLine(bounds.Right, bounds.Bottom - 2, bounds.Right, bounds.Bottom)
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Friend Shared Function GetCornerArc(ByVal bounds As Rectangle, ByVal cornerDiameter As Integer, ByVal corner As eCornerArc) As ArcData
|
|
Dim a As ArcData
|
|
If cornerDiameter = 0 Then cornerDiameter = 1
|
|
Dim diameter As Integer = cornerDiameter * 2
|
|
|
|
Select Case corner
|
|
Case eCornerArc.TopLeft
|
|
a = New ArcData(bounds.X, bounds.Y, diameter, diameter, 180, 90)
|
|
Case eCornerArc.TopRight
|
|
a = New ArcData(bounds.Right - diameter, bounds.Y, diameter, diameter, 270, 90)
|
|
Case eCornerArc.BottomLeft
|
|
a = New ArcData(bounds.X, bounds.Bottom - diameter, diameter, diameter, 90, 90)
|
|
Case Else
|
|
a = New ArcData(bounds.Right - diameter, bounds.Bottom - diameter, diameter, diameter, 0, 90)
|
|
End Select
|
|
|
|
Return a
|
|
End Function
|
|
|
|
Public Enum eCornerArc
|
|
TopLeft
|
|
TopRight
|
|
BottomLeft
|
|
BottomRight
|
|
End Enum
|
|
|
|
|
|
Friend Structure ArcData
|
|
Public X As Integer
|
|
Public Y As Integer
|
|
Public Width As Integer
|
|
Public Height As Integer
|
|
Public StartAngle As Single
|
|
Public SweepAngle As Single
|
|
|
|
Public Sub New(ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal startAngle As Single, ByVal sweepAngle As Single)
|
|
Me.X = x
|
|
Me.Y = y
|
|
Me.Width = width
|
|
Me.Height = height
|
|
Me.StartAngle = startAngle
|
|
Me.SweepAngle = sweepAngle
|
|
End Sub
|
|
End Structure
|
|
|
|
End Class
|