
Code: Select all
#Image=0
#Window=0
#Gadget=0
Procedure.f ATan2(x.f, y.f)
Protected angle.f=ATan(y/x)
If x<0
angle+3.141592653589793238;#PI
ElseIf y<0
angle+6.283185307179586477;2*#PI
EndIf
ProcedureReturn angle
EndProcedure
Structure SpiralGradient
px.f
py.f
radius.f
loop.i
EndStructure
Procedure.f SpiralGradientCallback(x, y)
Shared SpiralGradient.SpiralGradient
Protected.f px, py, d, dx, dy, c1, c2, c3, a, value
dx=(x-SpiralGradient\px)
dy=(y-SpiralGradient\py)
d=Sqr(dx*dx+dy*dy)
a=ATan2(dx, dy)
value=(Cos(2*#PI*d/(SpiralGradient\radius/SpiralGradient\loop)+a)+1)/2
ProcedureReturn value
EndProcedure
Procedure SpiralGradient(x, y, radius, loop)
Shared SpiralGradient.SpiralGradient
SpiralGradient\px=x
SpiralGradient\py=y
SpiralGradient\radius=radius
SpiralGradient\loop=loop
CustomGradient(@SpiralGradientCallback())
EndProcedure
If OpenWindow(#Window, 0, 0, 300, 300, "Spiral Gradient", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateImage(#Image, 300, 300)
If StartDrawing(ImageOutput(#Image))
DrawingMode(#PB_2DDrawing_Gradient)
GradientColor(0.00, $FFFF0000)
GradientColor(0.20, $FFFFFF00)
GradientColor(0.50, $FF00FF00)
GradientColor(0.80, $FF00FFFF)
GradientColor(1.00, $FF0000FF)
SpiralGradient(150, 150, 150, 3)
Circle(150, 150, 150)
;Box(0, 0, 300, 300)
StopDrawing()
EndIf
ImageGadget(#Gadget, 0, 0, 300, 300, ImageID(#Image))
EndIf
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf