with WaitWindowEvent(), I found out that while moving the mouse a
-1 event is reported. Consequently I was able to simplify my above
code example by removing the EventHandler and repaint the cursor on
every event with -1:
Code: Select all
EnableExplicit
ImportC ""
SetAnimatedThemeCursor(CursorType.L, AnimationStep.L)
SetThemeCursor(CursorType.L)
EndImport
#kEventClassMouse = 'mous'
#kEventMouseMoved = 5
#kThemeArrowCursor = 0
#kThemeWatchCursor = 7
#kThemeSpinningCursor = 14
Define AnimationStep.L
Define CursorID.L
Define CursorIsAnimated.L
Define NumAnimationSteps.L
Define WindowEvent.L
OpenWindow(0, 200, 100, 250, 120, "Display animated wait cursor")
ButtonGadget(0, 10, 20, 230, 20, "Change cursor to spinning wheel")
ButtonGadget(1, 10, 50, 230, 20, "Change cursor to running watch")
ButtonGadget(2, 10, 80, 230, 20, "Restore default cursor")
DisableGadget(2, #True)
Repeat
WindowEvent = WaitWindowEvent()
Select WindowEvent
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case 0
CursorID = #kThemeSpinningCursor
NumAnimationSteps = 4
CursorIsAnimated = #True
AddWindowTimer(0, 0, 150)
DisableGadget(0, #True)
DisableGadget(1, #True)
DisableGadget(2, #False)
Case 1
CursorID = #kThemeWatchCursor
NumAnimationSteps = 8
CursorIsAnimated = #True
AddWindowTimer(0, 0, 150)
DisableGadget(0, #True)
DisableGadget(1, #True)
DisableGadget(2, #False)
Case 2
CursorIsAnimated = #False
RemoveWindowTimer(0, 0)
SetThemeCursor(#kThemeArrowCursor)
DisableGadget(0, #False)
DisableGadget(1, #False)
DisableGadget(2, #True)
EndSelect
Case #PB_Event_Timer
If EventTimer() = 0
SetAnimatedThemeCursor(CursorID, AnimationStep)
AnimationStep = (AnimationStep + 1) % NumAnimationSteps
EndIf
Case -1
If CursorIsAnimated
SetAnimatedThemeCursor(CursorID, AnimationStep)
Else
SetThemeCursor(#kThemeArrowCursor)
EndIf
EndSelect
ForEver
reduced to this:
Code: Select all
ImportC ""
SetThemeCursor(CursorType.L)
EndImport
#kThemeArrowCursor = 0
#kThemeWatchCursor = 7
OpenWindow(0, 200, 100, 200, 180, "Display Wait cursor")
ButtonGadget(0, 40, 70, 120, 20, "Change cursor")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 0
If IsWaitCursor
SetThemeCursor(#kThemeArrowCursor)
IsWaitCursor = #False
Else
SetThemeCursor(#kThemeWatchCursor)
IsWaitCursor = #True
EndIf
EndIf
Case -1
If IsWaitCursor
SetThemeCursor(#kThemeWatchCursor)
EndIf
EndSelect
ForEver