diff --git a/Pilz.UI/DisplayHelp.vb b/Pilz.UI/DisplayHelp.vb index 46b238d..1f7899e 100644 --- a/Pilz.UI/DisplayHelp.vb +++ b/Pilz.UI/DisplayHelp.vb @@ -149,6 +149,12 @@ Public Class DisplayHelp 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 @@ -160,4 +166,67 @@ Public Class DisplayHelp 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 diff --git a/Pilz.UI/HighlightPanel.vb b/Pilz.UI/HighlightPanel.vb index 9eb7028..eb2a4bf 100644 --- a/Pilz.UI/HighlightPanel.vb +++ b/Pilz.UI/HighlightPanel.vb @@ -160,7 +160,7 @@ Friend Class HighlightPanel If rgb = -1 Then Return Color.Empty Else - Return Color.FromArgb((rgb And &HFF0000) >> 16, (rgb And &HFF00) >> 8, rgb & &HFF) + Return Color.FromArgb((rgb And &HFF0000) >> 16, (rgb And &HFF00) >> 8, rgb And &HFF) End If End Function @@ -168,7 +168,7 @@ Friend Class HighlightPanel If rgb = -1 Then Return Color.Empty Else - Return Color.FromArgb(alpha, (rgb And &HFF0000) >> 16, (rgb And &HFF00) >> 8, rgb & &HFF) + Return Color.FromArgb(alpha, (rgb And &HFF0000) >> 16, (rgb And &HFF00) >> 8, rgb And &HFF) End If End Function @@ -220,9 +220,9 @@ Friend Class HighlightPanel Public HighlightColor As eHighlightColor Public Sub New(ByVal bounds As Rectangle, ByVal backColor As Color, ByVal highlightColor As eHighlightColor) - bounds = bounds - backColor = backColor - highlightColor = highlightColor + Me.Bounds = bounds + Me.BackColor = backColor + Me.HighlightColor = highlightColor End Sub End Structure diff --git a/Pilz.UI/Highlighter.vb b/Pilz.UI/Highlighter.vb index 00d69fd..db56865 100644 --- a/Pilz.UI/Highlighter.vb +++ b/Pilz.UI/Highlighter.vb @@ -320,24 +320,26 @@ Public Class Highlighter Private Sub UpdateHighlightPanelBounds() Dim bounds As Rectangle = New Rectangle(0, 0, _ContainerControl.ClientRectangle.Width, _ContainerControl.ClientRectangle.Height) - If TypeOf _HighlightPanel.Parent Is Form Then - Dim form As Form = TryCast(_HighlightPanel.Parent, Form) + If _HighlightPanel IsNot Nothing Then + If TypeOf _HighlightPanel.Parent Is Form Then + Dim form As Form = TryCast(_HighlightPanel.Parent, Form) - If form.AutoSize Then - bounds.X += form.Padding.Left - bounds.Y += form.Padding.Top - bounds.Width -= form.Padding.Horizontal - bounds.Height -= form.Padding.Vertical + If form.AutoSize Then + bounds.X += form.Padding.Left + bounds.Y += form.Padding.Top + bounds.Width -= form.Padding.Horizontal + bounds.Height -= form.Padding.Vertical + End If End If - End If - If _HighlightPanel.Bounds.Equals(bounds) Then - _HighlightPanel.UpdateRegion() - Else - _HighlightPanel.Bounds = bounds - End If + If _HighlightPanel.Bounds.Equals(bounds) Then + _HighlightPanel.UpdateRegion() + Else + _HighlightPanel.Bounds = bounds + End If - _HighlightPanel.BringToFront() + _HighlightPanel.BringToFront() + End If End Sub Private _DelayTimer As Timer = Nothing @@ -386,17 +388,6 @@ Public Class Highlighter End Set End Property - Public Function CanExtend(ByVal extendee As Object) As Boolean - Return (TypeOf extendee Is Control) - End Function - - Private Sub SetError(ByVal control As Control, ByVal value As String) - Me.SetHighlightColor(control, eHighlightColor.Red) - End Sub - - Private Sub ClearError(ByVal control As Control) - Me.SetHighlightColor(control, eHighlightColor.None) - End Sub End Class Public Enum eHighlightColor