I played with vectors to make small 3D look clock, please check it on OSX.
Have a nice day!
Lukas
Code: Select all
; Simple 3D clock by Lukas. Enjoy it :-)
Procedure Draw_3D_Clock(gid)
If StartVectorDrawing(CanvasVectorOutput(gid))
ScaleCoordinates(DesktopResolutionX(), DesktopResolutionY())
AddPathBox(0, 0, GadgetWidth(gid), GadgetWidth(gid))
VectorSourceColor(RGBA(255, 255, 255, 255))
VectorFont(FontID(0), GadgetHeight(gid)/40)
FillPath()
BeginVectorLayer(255)
; Dial
VectorSourceCircularGradient(GadgetWidth(gid)/2, GadgetHeight(gid)/2, GadgetWidth(gid)/2, -GadgetWidth(gid)/2, -GadgetHeight(gid)/2.5)
VectorSourceGradientColor(RGBA(255, 255, 255, 255), 0.2)
VectorSourceGradientColor(RGBA(223, 159, 159, 150), 1.0)
AddPathCircle(GadgetWidth(gid)/2,GadgetHeight(gid)/2,GadgetWidth(gid)/3)
FillPath()
ClosePath()
Text$= "PureBasic Clock"
VectorSourceColor(RGBA(153, 51, 51, 150))
MovePathCursor(GadgetHeight(gid)/2 - VectorTextWidth(Text$)/2, GadgetHeight(gid)/2.5)
DrawVectorText(Text$)
; Shadow
VectorSourceCircularGradient(GadgetWidth(gid)/2 + GadgetHeight(gid)/100 ,GadgetHeight(gid)/2 + GadgetHeight(gid)/100,GadgetWidth(gid)/2.5)
VectorSourceGradientColor(RGBA(200, 200, 200, 0), 0.7)
VectorSourceGradientColor(RGBA(100, 100, 100, 100), 0.8)
VectorSourceGradientColor(RGBA(200, 200, 200, 0), 0.9)
AddPathCircle(GadgetWidth(gid)/2 + GadgetHeight(gid)/100,GadgetHeight(gid)/2 + GadgetHeight(gid)/100,GadgetWidth(gid)/3.1)
StrokePath(GadgetWidth(gid)/15,#PB_Path_RoundEnd )
; Frame
VectorSourceCircularGradient(GadgetWidth(gid)/2,GadgetHeight(gid)/2,GadgetWidth(gid)/2.5)
VectorSourceGradientColor(RGBA(0, 0, 0, 250), 0.65)
VectorSourceGradientColor(RGBA(153, 51, 51, 255), 0.8)
VectorSourceGradientColor(RGBA(0, 0, 0, 250), 0.95)
AddPathCircle(GadgetWidth(gid)/2,GadgetHeight(gid)/2,GadgetWidth(gid)/3.1)
StrokePath(GadgetWidth(gid)/15,#PB_Path_RoundEnd )
EndVectorLayer()
BeginVectorLayer(180)
VectorSourceColor(RGBA(0,0,0,255))
loop_step.f = 0
While loop_step < 360
ResetCoordinates()
MovePathCursor(GadgetWidth(gid)/2, GadgetWidth(gid)/2)
RotateCoordinates(GadgetWidth(gid)/2, GadgetHeight(gid)/2, loop_step)
If Mod(loop_step, 15) = 0
MovePathCursor(GadgetWidth(gid)/2, GadgetWidth(gid)/3.8)
AddPathLine(GadgetWidth(gid)/2, GadgetWidth(gid)/4.5)
StrokePath(GadgetWidth(gid)/100,#PB_Path_RoundEnd)
;add numbers ???
Else
MovePathCursor(GadgetWidth(gid)/2, GadgetWidth(gid)/4)
AddPathLine(GadgetWidth(gid)/2, GadgetWidth(gid)/4.5)
StrokePath(GadgetWidth(gid)/400,#PB_Path_RoundEnd)
EndIf
loop_step = loop_step + 6
Wend
EndVectorLayer()
BeginVectorLayer(250)
hours_angle.f = 0
minutes_angle.f = 0
hours.f = Hour(Date())
minutes.f = Minute(Date())
seconds.f = Second(Date())
If (hours >= 12)
hours = hours - 12
EndIf
seconds_angle = seconds * 6
minutes_angle = minutes * 6 + (seconds_angle/60)
hours_angle = hours * 30 + (minutes/60) * 30
; Minutes
VectorSourceColor(RGBA(0,0,0,255))
ResetCoordinates()
RotateCoordinates(GadgetWidth(gid)/2, GadgetHeight(gid)/2,minutes_angle)
MovePathCursor(GadgetWidth(gid)/2 + GadgetWidth(gid)/80, GadgetHeight(gid)/2)
AddPathLine(GadgetWidth(gid)/2 + GadgetWidth(gid)/200, GadgetHeight(gid)/4.1)
AddPathLine(GadgetWidth(gid)/2 - GadgetWidth(gid)/200, GadgetHeight(gid)/4.1)
AddPathLine(GadgetWidth(gid)/2 - GadgetWidth(gid)/80, GadgetHeight(gid)/2)
FillPath(#PB_Path_Winding)
AddPathCircle(GadgetWidth(gid)/2, GadgetHeight(gid)/2, GadgetWidth(gid)/80)
FillPath(#PB_Path_Winding)
; Hours
VectorSourceColor(RGBA(0,0,0,255))
ResetCoordinates()
RotateCoordinates(GadgetWidth(gid)/2, GadgetHeight(gid)/2,hours_angle)
MovePathCursor(GadgetWidth(gid)/2 + GadgetWidth(gid)/80, GadgetHeight(gid)/2)
AddPathLine(GadgetWidth(gid)/2 + GadgetWidth(gid)/200, GadgetHeight(gid)/3.5)
AddPathLine(GadgetWidth(gid)/2 - GadgetWidth(gid)/200, GadgetHeight(gid)/3.5)
AddPathLine(GadgetWidth(gid)/2 - GadgetWidth(gid)/80, GadgetHeight(gid)/2)
FillPath(#PB_Path_Winding)
AddPathCircle(GadgetWidth(gid)/2, GadgetHeight(gid)/2, GadgetWidth(gid)/80)
FillPath(#PB_Path_Winding)
; Seconds
VectorSourceColor(RGBA(150,0,0,255))
ResetCoordinates()
RotateCoordinates(GadgetWidth(gid)/2, GadgetHeight(gid)/2,seconds_angle)
MovePathCursor(GadgetWidth(gid)/2 + GadgetWidth(gid)/100, GadgetHeight(gid)/2)
AddPathLine(GadgetWidth(gid)/2, GadgetHeight(gid)/4.3)
AddPathLine(GadgetWidth(gid)/2 - GadgetWidth(gid)/100, GadgetHeight(gid)/2)
FillPath()
AddPathCircle(GadgetWidth(gid)/2, GadgetHeight(gid)/2, GadgetWidth(gid)/100)
FillPath()
EndVectorLayer()
StopVectorDrawing()
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 300, 300, "Simple 3D Clock", #PB_Window_SystemMenu | #PB_Window_ScreenCentered| #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
AddWindowTimer(0, 123,1000)
CanvasGadget(10, 0, 0, 300, 300)
LoadFont(0, "Verdana", 10, #PB_Font_HighQuality)
Draw_3D_Clock(10)
Repeat
If Event = #PB_Event_Timer And EventTimer() = 123
Draw_3D_Clock(10)
EndIf
If event = #PB_Event_SizeWindow
ResizeGadget(10, 0, 0, WindowHeight(0), WindowHeight(0))
Draw_3D_Clock(10)
EndIf
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf