http://www.purebasic.fr/english/viewtop ... 13&t=68164 gave insperation to have a go. And I came up with this and yes i know its gimmicky but it was fun to do and as usual with PB very easy with a few lines of code

Requires ThreadSafe Option in Compiler Option`s Switched ON !!!!
Zebuddi.
Code: Select all
CompilerIf Not #PB_Compiler_Thread
MessageRequester("Thread Error", "Turn on ThreadSafe Mode in Compiler Option")
End
CompilerEndIf
Enumeration
#Fenetre
#ButonImageGadget
#Image
#RotateStart
#RotateStop
#StatusBarID
EndEnumeration
Global *iEvData = AllocateStructure(integer)
Procedure DrawIt(TexteBouton.s, AngleTexte.f)
If CreateImage(#Image, 150, 150, 32, #PB_Image_Transparent) And StartDrawing(ImageOutput(#Image))
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
LineXY(70, 75, 80, 75, $FF000000)
LineXY(75, 70, 75, 80, $FF000000)
X.i = (ImageWidth(#Image) - TextWidth(TexteBouton.s) * Cos(Radian(AngleTexte)) - TextHeight(TexteBouton) * Sin(Radian(AngleTexte))) / 2
Y.i = (ImageHeight(#Image) + TextWidth(TexteBouton.s) * Sin(Radian(AngleTexte)) - TextHeight(TexteBouton) * Cos(Radian(AngleTexte))) / 2
DrawRotatedText(X.i, Y.i, TexteBouton, AngleTexte, RGBA(150, 75, 200, 255))
StopDrawing()
SetGadgetAttribute(#ButonImageGadget, #PB_Button_Image, ImageID(#Image))
FreeImage(#Image)
EndIf
EndProcedure
Procedure draw(dummy.i)
Protected Angle.f = 360, fSlowDown.f, iFinnished = #False
Repeat
Angle.f - 1
If Angle = 0
Angle = 360
EndIf
DrawIt("Working", Angle)
If *iEvData = #RotateStop
Debug "rotatestop " + Str(Angle)
Repeat
Angle.f - 1
DrawIt("Working", Angle)
Delay(iSlowDown) : iSlowDown + 0.25
Until Angle => 0
iFinnished = #True
EndIf
Until iFinnished = #True
*iEvData =#RotateStart
Delay(100)
DisableGadget(#ButonImageGadget, #False)
DrawIt("Process Data", 0)
EndProcedure
Procedure UpdateStatBarProgess(dummy.i)
Protected iProgressDone.i = 0
Repeat
iProgressDone + 2
StatusBarProgress(#StatusBarID, 1, iProgressDone)
StatusBarText(#StatusBarID, 0, Str(iProgressDone) + "%", #PB_StatusBar_Center)
Delay(150); dummy to test with
Select iProgressDone
Case 97,98
*iEvData = #RotateStop
EndSelect
Until iProgressDone = 100
StatusBarProgress(#StatusBarID, 1, 0)
StatusBarText(#StatusBarID, 0, "0%", #PB_StatusBar_Center)
*iEvData = #RotateStart
EndProcedure
Procedure ProcessGadgetUpdates()
DisableGadget(#ButonImageGadget, #True)
StatusBarProgress(#StatusBarID, 1, 0)
CreateThread(@draw(), 0)
CreateThread(@UpdateStatBarProgess(),0)
EndProcedure
OpenWindow(#Fenetre, 327, 177, 500, 300, "Exemple Texte Rotation Centré...", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_TitleBar)
If CreateStatusBar(#StatusBarID, WindowID(#Fenetre))
AddStatusBarField(300)
AddStatusBarField(200)
EndIf
ButtonImageGadget(#ButonImageGadget, 10, 10, 150, 150, 0)
DrawIt("Process Data", 0)
Repeat
Event = WaitWindowEvent()
EventGadget = EventGadget()
EventType = EventType()
Select Event
Case #PB_Event_Gadget
Select EventGadget
Case #ButonImageGadget
ProcessGadgetUpdates()
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow