Re: ScreenGadget bugs
Posted: Tue Oct 07, 2025 7:12 pm
There is also no application crash.
http://www.purebasic.com
https://www.purebasic.fr/english/
There is also no application crash.
Maybe the standard Long/Integer Value problem in the source ... ?
Code: Select all
; ------------------------------------------------------------
;
; PureBasic - ScreenGadget with custom skin
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
#skin=1 ; you can choose from 3 skins: 1, 2, or 3
Procedure.f POM(v.f)
ProcedureReturn (Random(v*1000)-v*500)/500
EndProcedure
Procedure defcadre(frame,l,c1,c2,c3,dec.f=1,mini=0)
CompilerIf #PB_Compiler_OS <> #PB_OS_Windows
dec*0.5
CompilerEndIf
Protected n=CreateImage(-1,l*2,l*2,32,0)
StartVectorDrawing(ImageVectorOutput(n))
AddPathCircle(l,l,l-0)
VectorSourceCircularGradient(l,l,l, -l/2*dec, -l/2*dec)
VectorSourceGradientColor(c1, 0.0)
VectorSourceGradientColor(c2, 0.6)
VectorSourceGradientColor(c3, 1)
VectorSourceGradientColor(c3 & $ffffff, 1)
VectorSourceGradientColor(c3, 0.9)
VectorSourceGradientColor(c3 & $ffffff, 1)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
VectorSourceGradientColor(c3, 0.9)
; This line doesn't work on OSX and MacOS, it makes the whole UI transparent
VectorSourceGradientColor(c3 & $ffffff, 1)
CompilerElse
VectorSourceGradientColor(c3, 0.9)
VectorSourceGradientColor(c3, 1)
CompilerEndIf
FillPath()
If mini:AddPathCircle(l,l,l*0.4):VectorSourceColor(mini):FillPath():EndIf
StopVectorDrawing()
ScreenGadgetSkin(frame,n,1)
EndProcedure
Procedure texture(im,dx,dy,num,n,alpha,stroke=0,colormode=0,param.f=0)
Protected s.s, i,j,k,col
CreateImage(im,dx,dy,32,0 )
StartVectorDrawing(ImageVectorOutput(im))
For k=1 To n
Select colormode
Case 0:col=Random($ffffff)
Case 1:col=Random($ff)*$010101
Case 2:col=($ff)*$010101
EndSelect
col|alpha<<24
Select num
Case 0:AddPathCircle(Random(dx),Random(dy),param*dx)
Case 1:MovePathCursor(Random(dx),Random(dy)):AddPathLine(pom(dx),pom(dy),#PB_Path_Relative)
Case 2:MovePathCursor(Random(dx),Random(dy)):AddPathLine(dx/2,pom(dx*0.02),#PB_Path_Relative)
EndSelect
s=PathSegments():ResetPath()
For j=-1 To 1:For i=-1 To 1:MovePathCursor(j*dy,i*dx):AddPathSegments(s,#PB_Path_Relative):Next:Next
VectorSourceColor(col)
If stroke:StrokePath(stroke):Else:FillPath():EndIf
Next
StopVectorDrawing()
SaveImage(im,"test"+Str(im)+".bmp")
EndProcedure
Enumeration S_gadgetimage
#PB_ScreenGadget_Mouse = 1
#PB_ScreenGadget_TextureWindow
#PB_ScreenGadget_FrameWindow
#PB_ScreenGadget_FrameRaised
#PB_ScreenGadget_FrameSunken
#PB_ScreenGadget_FrameFlat
#PB_ScreenGadget_FrameScroll
#PB_ScreenGadget_FrameScrollIn
#PB_ScreenGadget_FrameString
#PB_ScreenGadget_FrameProgressBar0
#PB_ScreenGadget_FrameProgressBar1
#PB_ScreenGadget_FramePanel
#PB_ScreenGadget_FrameSplitter
#PB_ScreenGadget_CheckBox0
#PB_ScreenGadget_CheckBox1
#PB_ScreenGadget_Option0
#PB_ScreenGadget_Option1
#PB_ScreenGadget_ComboBox
#PB_ScreenGadget_ScrollLeft:#PB_ScreenGadget_ScrollRight:#PB_ScreenGadget_ScrollUp:#PB_ScreenGadget_ScrollDown
#PB_ScreenGadget_FrameTrackBar
#PB_ScreenGadget_HorizontalTrackBar
#PB_ScreenGadget_TrackBarV
#PB_ScreenGadget_Pin
EndEnumeration
Procedure SelectSkin(skin)
Protected d,n,rf.f=100/DesktopScaledX(100)
defcadre(#PB_ScreenGadget_FrameProgressBar0,8,$ffffffff,$aa777777,$aa333333,-1)
defcadre(#PB_ScreenGadget_FrameProgressBar1,8,$ffffffff,$dd0044ff,$dd002288)
defcadre(#PB_ScreenGadget_FrameSplitter,8,$ffffffff,$88ffffff,$44000000)
Select skin
Case 1
SetScreenGadgetFont(#PB_Default,LoadFont(0,"sans",11*rf))
texture(1,128,128,2,100,24,1,1)
defcadre(#PB_ScreenGadget_FrameWindow ,8,$ffffffff,$ee336666,$ff223333)
defcadre(#PB_ScreenGadget_FrameRaised ,8,$ffffffff,$bb0099cc,$bb003344)
defcadre(#PB_ScreenGadget_FrameSunken ,8,$ffffffff,$44559999,$cc224444,-1)
defcadre(#PB_ScreenGadget_FrameString ,8,$ffffffff,$dd337777,$dd224444,-1,$ffffffff)
defcadre(#PB_ScreenGadget_FrameScroll ,4,$ffffffff,$dd003344,$dd003344,-1)
defcadre(#PB_ScreenGadget_FrameScrollIn ,4,$ffffffff,$ff88cc44,$ff003344)
defcadre(#PB_ScreenGadget_FrameTrackBar ,8,$ffffffff,$aa337777,$aa224444,-1,$bb000000)
defcadre(#PB_ScreenGadget_FramePanel ,8,$ffffffff,$aaaadddd,$aa667777)
Case 2
SetScreenGadgetFont(#PB_Default,LoadFont(0,"osifont",10*rf))
texture(1,128,128,1,300,64,1,2)
defcadre(#PB_ScreenGadget_FrameWindow ,16,$88884444,$ff884444,$ffff8888,0)
defcadre(#PB_ScreenGadget_FrameRaised ,16,$bb448844,$bb448844,$ff88ff88,0)
defcadre(#PB_ScreenGadget_FrameSunken ,16,$444444ff,$884444ff,$ff4444ff,0)
defcadre(#PB_ScreenGadget_FrameString ,8,$bb884444,$bbbb4444,$bbff8888,0,$bbffffff)
defcadre(#PB_ScreenGadget_FrameScroll ,8,$bb666644,$ddbbbb88,$ffbbbb88,0)
defcadre(#PB_ScreenGadget_FrameScrollIn ,8 ,$886666ff,$bb8888ff,$ff8888ff,0)
defcadre(#PB_ScreenGadget_FrameTrackBar ,8,$bb884444,$bbbb4444,$bbff8888,0,$bb000000)
defcadre(#PB_ScreenGadget_FramePanel ,8,$88884444,$ff884444,$ffff8888,0)
Default
SetScreenGadgetFont(#PB_Default,LoadFont(0,"Monospace",12*rf,#PB_Font_Bold))
texture(1,128,128,0,200,25,2,2,0.2)
defcadre(#PB_ScreenGadget_FrameWindow ,4,$ffffffff,$dd668866,$dd446644)
defcadre(#PB_ScreenGadget_FrameRaised ,4,$ffffffff,$bb4444ff,$bb4444aa)
defcadre(#PB_ScreenGadget_FrameSunken ,4,$ffffffff,$bb888888,$bb444444,-1)
defcadre(#PB_ScreenGadget_FrameString ,4,$ffffffff,$aa337777,$aa224444,-1,$ffffffff)
defcadre(#PB_ScreenGadget_FrameScroll ,4,$ffffffff,$ddaa4444,$ddaa4444,-1)
defcadre(#PB_ScreenGadget_FrameScrollIn ,4,$ffffffff,$bbcccccc,$bbcccccc)
defcadre(#PB_ScreenGadget_FrameTrackBar ,4,$ffffffff,$aa337777,$aa224444,-1,$bb000000)
defcadre(#PB_ScreenGadget_FramePanel ,4,$ffffffff,$aa99bb99,$aa446644)
EndSelect
ScreenGadgetSkin(#PB_ScreenGadget_TextureWindow,1)
EndProcedure
Define ag.f,gadget,i,j,t.s,w2h,w2d,quit,debs,debi,delta, fading,zoom,dx,dy,rot
InitEngine3D() ; <---- these will overide GUI
:InitSprite():SpriteQuality(#PB_Sprite_BilinearFiltering)
InitKeyboard():InitMouse():joynb=InitJoystick()
ExamineDesktops():dx=DesktopWidth(0)*0.8:dy=DesktopHeight(0)*0.8
OpenWindow(0, 0, 0, DesktopUnscaledX(dx),DesktopUnscaledY(dy), "[Escape] to quit", #PB_Window_BorderLess | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, dx, dy, 0, 0, 0)
; scene 3d
; CreateCamera(0, 0, 0, 100, 100):MoveCamera(0,0,0,-4):CameraLookAt(0,0,0,0); <---- these will overide GUI
; CreateLight(0,$ffffff, 10000, 10000, 0000) ; <---- these will overide GUI
; CreateTorus(0,1,0.5,64,64) ; <---- these will overide GUI
; CreateMaterial(0,0,$ff):MaterialShininess(0,64,$ffffff) ; <---- these will overide GUI
; CreateEntity(0,MeshID(0),MaterialID(0)) ; <---- these will overide GUI
InitScreenGadgets()
SelectSkin(#skin)
texture(0,256,256,0,50,64,0,0,0.2) ;image
;===============================================================
OpenScreenWindow(1,10 ,50 ,300,530,"Window 1",0) : ScreenWindowAnimation(1,0,1000,1,0,-1,0,-1)
ButtonScreenGadget(11,100,50,160,32,"Enable / Disable W2",0)
CheckBoxScreenGadget(3,10,165,100,20,"Fading",0)
CheckBoxScreenGadget(4,10,205,100,20,"Zoom",0)
ComboBoxScreenGadget(5,140,160,140,32,0):AddScreenGadgetItem(5,-1,"X-Left"):AddScreenGadgetItem(5,-1,"X-Center"):AddScreenGadgetItem(5,-1,"X-Right"):SetScreenGadgetState(5,2)
ComboBoxScreenGadget(6,140,200,140,32,0):AddScreenGadgetItem(6,-1,"Y-Up"):AddScreenGadgetItem(6,-1,"Y-center"):AddScreenGadgetItem(6,-1,"Y-Down"):SetScreenGadgetState(6,1)
TextScreenGadget(8,10,240,100,24,"Rotation",0):TrackBarScreenGadget(7,140,240,140,24,-3,3,1):SetScreenGadgetState(7,1)
TextScreenGadget(9,10,270,120,24,"Test animation",0):ButtonScreenGadget(10,140,270,140,32,"Show / Hide W2",0)
EditorScreenGadget(12,10,320,280,200,#PB_Editor_WordWrap|#PB_Editor_ReadOnly)
OpenScreenWindow(2,420,10,550,700,"Window 2",0)
ScreenWindowAnimation(2,0,1000,0,0,1,0,1)
ScreenWindowAnimation(2,1,1000,0,0,1,0,1)
PanelScreenGadget(70,10,40,530,360)
AddScreenGadgetItem(70,-1,"panel-1");----------------------------------------
ImageScreenGadget(20,260,40,256,256,ImageID(0),0)
ButtonImageScreenGadget(21,30,40,80,80,ImageID(0),0)
ButtonImageScreenGadget(22,140,40,80,80,ImageID(0),0)
TextScreenGadget(24,20,0,100,32,"TextGadget",#PB_Text_Right)
ComboBoxScreenGadget(25,20,130,150,32,0):For i=0 To 9:AddScreenGadgetItem(25,-1,"Combobox it "+i):Next:SetScreenGadgetState(25,5)
OptionScreenGadget(26,8,180,150,20,"OptionGadget 1")
OptionScreenGadget(27,8,200,150,20,"OptionGadget 2"):SetScreenGadgetState(27,1)
OptionScreenGadget(28,8,220,150,20,"OptionGadget 3")
CheckBoxScreenGadget(29,8,260,150,20,"CheckBoxGadget",0)
AddScreenGadgetItem(70,-1,"Splitter");----------------------------------------
ImageScreenGadget(60,0,0,4,4,ImageID(0),0)
ListViewScreenGadget(61,220,450,150,200,0):For i=0 To 25:AddScreenGadgetItem(61,-1, "item number "+i+" wwwwwwww "):Next:SetScreenGadgetState(61,3)
SplitterScreenGadget(62,20,20,490,260,61,60,#PB_Splitter_Vertical):SetScreenGadgetState(62,250)
AddScreenGadgetItem(70,-1,"ScrollArea");----------------------------------------
ScrollAreaScreenGadget(50,20,20,400,220,410,250,10,0)
For j=0 To 3:For i=0 To 3:ButtonScreenGadget(81+j*4+i,i*100+10,j*60+10,90,30,"SA bt "+j+"-"+i,0):Next:Next
CloseScreenGadgetList()
CloseScreenGadgetList();----------------------------------------
SetScreenGadgetState(70,0)
ScrollBarScreenGadget(32,20,450,140,20,0,100,30,0)
ScrollBarScreenGadget(33,20,550,20,140,0,100,30,#PB_ScrollBar_Vertical)
TrackBarScreenGadget(34,20,480,140,24,-5,5,0)
TrackBarScreenGadget(35,60,550,24,140,-10,10,#PB_TrackBar_Vertical):SetScreenGadgetState(35,0)
ProgressBarScreenGadget(36,20,520,140,20,0,1000,0)
ProgressBarScreenGadget(37,100,550,20,140,0,1000,#PB_ProgressBar_Vertical)
StringScreenGadget(40,180,460,250,34,"blablabla blabla bla",0)
EditorScreenGadget(41,180,500,250,180,#PB_Editor_WordWrap*0):RandomSeed(2):For i=1 To 100:t+"bla"+Mid(" "+#LF$,Random(5)+1,1):Next:SetScreenGadgetText(41,t)
CloseScreenGadgetList()
quit=ButtonScreenGadget(-1,10,10,50,32,"Quit",0)
;===============================================================
Repeat
While WindowEvent():Wend
ClearScreen(RGB(0,0,0)) ; <---- this needs to be present for GUI to work
ExamineMouse()
ExamineKeyboard()
; RotateEntity(0,0.1,0.2,0.3,#PB_Relative) ; <---- these will overide GUI
; RenderWorld() ; <---- these will overide GUI
;----------------------------------------
If ScreenWindowEvent()=#PB_Event_Gadget
gadget=EventScreenGadget()
Select gadget
Case quit:End
Case 3,4,5,6,7
fading=GetScreenGadgetState(3)
zoom=GetScreenGadgetState(4)
dx=GetScreenGadgetState(5)-1
dy=GetScreenGadgetState(6)-1
rot=GetScreenGadgetState(7)
ScreenWindowAnimation(2,0,1000,fading,zoom,dx,dy,rot)
ScreenWindowAnimation(2,1,1000,fading,zoom,dx,dy,rot)
Case 10:w2h=1-w2h:HideScreenWindow(2,w2h)
Case 11:w2d=1-w2d:DisableScreenWindow(2,w2d)
EndSelect
SetScreenGadgetText(12, "gadget: "+gadget+ " S_eventType: "+ScreenEventType()+#LF$+"State: "+GetScreenGadgetState(gadget)+#LF$+"Text: "+GetScreenGadgetText(gadget))
EndIf
If IsScreenGadget(36) And IsScreenGadget(37)
ag+0.01:SetScreenGadgetState(36,(1+Sin(ag))*500):SetScreenGadgetState(37,(1+Cos(ag))*500)
EndIf
RenderScreenGadgets()
;----------------------------------------
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(3)
Code: Select all
InitEngine3D()
InitSprite():InitKeyboard()
ExamineDesktops()
OpenWindow(0, 0,0, DesktopWidth(0)*0.8,DesktopHeight(0)*0.8, "test - [Esc] quit",#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0)
CreateSprite(0,256,256,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(0))
DrawingMode(#PB_2DDrawing_AllChannels)
Circle(128,128,127,$8800ff00)
StopDrawing()
CreateCamera(0, 0, 0, 100, 100):MoveCamera(0,0,10,-20):CameraLookAt(0,0,0,0)
CreateLight(0,$ffffff, 0, 10000, -10000)
AmbientColor($111111*3)
CameraBackColor(0,$444488)
CreateMaterial(0,0,$ff)
MaterialShininess(0,128,$111111*4)
CreateTorus(0,10,4)
CreateEntity(0,MeshID(0),MaterialID(0))
Define.f MouseX,Mousey,depx,depz,dist,val
Repeat
While WindowEvent():Wend
ExamineKeyboard()
RotateEntity(0,1,1,1,#PB_Relative)
RenderWorld()
DisplayTransparentSprite(0,100,100)
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)