* * *    
Главная » Статьи » Код PB

Просмотров: 1221 | Дата: 20.04.2024 | Коментарии (0)

RoundBoxedGradient()




Code
;-------PureBasic 4.50---------

Structure RoundBoxedGradient
  x.i
  y.i
  Width.i
  Height.i
  RoundX.i
  RoundY.i
EndStructure

Procedure.f RoundBoxedGradientCallback(x.i, y.i)
  Shared RoundBoxedGradient.RoundBoxedGradient
  With RoundBoxedGradient
  x - \x
  y - \y
  If x < \RoundX  
  If y < \RoundY
  ProcedureReturn Sqr(Pow((\RoundX-x)/\RoundX,2)+Pow((\RoundY-y)/\RoundY,2))
  ElseIf y >= \Height-\RoundY
  ProcedureReturn Sqr(Pow((\RoundX-x)/\RoundX,2)+Pow((\RoundY+y+1-\Height)/\RoundY,2))
  Else
  ProcedureReturn (\RoundX-x)/\RoundX
  EndIf
  ElseIf x >= \Width-\RoundX
  If y < \RoundY
  ProcedureReturn Sqr(Pow((\RoundX+x+1-\Width)/\RoundX,2)+Pow((\RoundY-y)/\RoundY,2))
  ElseIf y >= \Height-\RoundY
  ProcedureReturn Sqr(Pow((\RoundX+x+1-\Width)/\RoundX,2)+Pow((\RoundY+y+1-\Height)/\RoundY,2))
  Else
  ProcedureReturn (\RoundX+x+1-\Width)/\RoundX
  EndIf
  Else
  If y < \RoundY
  ProcedureReturn (\RoundY-y)/\RoundY
  ElseIf y >= \Height-\RoundY
  ProcedureReturn (\RoundY+y+1-\Height)/\RoundY
  Else
  ProcedureReturn 0
  EndIf  
  EndIf
  EndWith
EndProcedure

Procedure RoundBoxedGradient(x.i, y.i, Width.i, Height.i, RoundX.i, RoundY.i=#PB_Default)
  Shared RoundBoxedGradient.RoundBoxedGradient
  With RoundBoxedGradient
  \x = x
  \y = y
  \Width = Width
  \Height = Height
  \RoundX = RoundX
  \RoundY = RoundY
  If RoundY=#PB_Default : \RoundY = RoundX : EndIf
  If \RoundX < 0 : \RoundX = 0 : EndIf
  If \RoundY < 0 : \RoundY = 0 : EndIf
  If \RoundX*2 > Width : \RoundX = Width/2 : EndIf
  If \RoundY*2 > Height : \RoundY = Height/2 : EndIf
  EndWith
  CustomGradient(@RoundBoxedGradientCallback())
EndProcedure

Enumeration
  #Window : #Gadget : #Image
EndEnumeration

CreateImage(#Image, 400, 400, 24)

StartDrawing(ImageOutput(#Image))
  DrawingMode(#PB_2DDrawing_Gradient)
  GradientColor(1.0, $FF0000)
  GradientColor(0.0, $0000FF)
  RoundBoxedGradient(0,0,200,200,50,50)
  RoundBox(0,0,200,200,50,50)
  RoundBoxedGradient(200,0,200,400,100,100)
  RoundBox(200,0,200,400,100,100)
  RoundBoxedGradient(0,200,200,200,80,40)
  RoundBox(0,200,200,200,80,40)
StopDrawing()

OpenWindow(#Window, 0, 0, ImageWidth(#Image), ImageHeight(#Image), "Image", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
  ImageGadget(#Gadget, 0, 0, ImageWidth(#Image), ImageHeight(#Image), ImageID(#Image))

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow










Сайт посвящён языку программирования PureBasic — коммерческий компилятор языка программирования, использующего синтаксис BASIC. Предназначен для создания кроссплатформенных приложений для AmigaOS, Linux, Microsoft Windows, Windows NT и Mac OS X. Разработан компанией Fantaisie Software.