Imports System.Drawing
Imports System.Windows.Forms
Public Class Animator
Private Const DEFAULT_POPUP_OPACITY = 0.5
Private Const DEFAULT_POPUP_SIZE = 30
Private Const DEFAULT_POPUP_FADE_SPEED = 10
Private Const DEFAULT_POPUP_FADE_INTERVAL = 250
'''
''' Time the popup stays visible between the animations
'''
Public Property AnimationInterval As Integer
'''
''' Basevalue for calculating the time the popup takes to animate
'''
Public Property AnimationSpeed As Integer
'''
''' Opacity the popup animates to (From 0.0 to .., back to 0.0)
'''
Public Property PopupOpacity As Double
'''
''' Color of the popup
'''
'''
Public Property PopupColor As Color
'''
''' Size of the popup in width and height
'''
Public Property PopupSize As Size
Public Sub New()
_PopupSize = New Size(DEFAULT_POPUP_SIZE, DEFAULT_POPUP_SIZE)
_AnimationSpeed = DEFAULT_POPUP_FADE_SPEED
_AnimationInterval = DEFAULT_POPUP_FADE_INTERVAL
_PopupOpacity = DEFAULT_POPUP_OPACITY
_PopupColor = Color.FromArgb(255, 214, 49)
End Sub
Public Async Sub Highlight(Position As Point)
Dim oForm = GetPopup(Position, PopupSize)
oForm.Show()
FadeIn(oForm, _PopupOpacity, _AnimationSpeed / 2)
Await Task.Delay(_AnimationInterval)
FadeOut(oForm, _AnimationSpeed * 2)
End Sub
Private Function GetPopup(CursorPosition As Point, PopupSize As Size) As frmPopup
Dim oFormLocation = New Point(
CursorPosition.X - (PopupSize.Width / 2),
CursorPosition.Y - (PopupSize.Height / 2))
Return New frmPopup() With {
.Location = oFormLocation,
.StartPosition = FormStartPosition.Manual,
.Size = PopupSize,
.MaximumSize = PopupSize,
.MinimumSize = PopupSize,
.Opacity = 0,
.ShowInTaskbar = False,
.BackColor = _PopupColor,
.TopMost = True
}
End Function
Private Async Sub FadeIn(ByVal o As Form, finalOpacity As Double, ByVal Optional interval As Integer = 80)
While o.Opacity < finalOpacity
Await Task.Delay(interval)
o.Opacity += 0.05
End While
o.Opacity = finalOpacity
End Sub
Private Async Sub FadeOut(ByVal o As Form, ByVal Optional interval As Integer = 80)
While o.Opacity > 0.0
Await Task.Delay(interval)
o.Opacity -= 0.05
End While
o.Opacity = 0
End Sub
End Class