There is also no application crash.
ScreenGadget bugs
-
- Addict
- Posts: 1579
- Joined: Wed Nov 12, 2008 5:01 pm
- Location: Russia
Re: ScreenGadget bugs
Re: ScreenGadget bugs
Maybe the standard Long/Integer Value problem in the source ... ?
(I mean : runs on 32Bit, crashes on 64Bit)
Re: ScreenGadget bugs
No GUI on this example on Linux (both AMD and Intel pc's, Ubuntu 25.04) either (i know this is Windows specific, but wanted pf-shadoko to see as there is no screengadget specific topic
)
The only thins showing is the 3d red rotating torus, no GUI showing. The other example works fine.
If MOD wants to move, please do, but new lib should probably have own topic no?
BR
Erlend

The only thins showing is the 3d red rotating torus, no GUI showing. The other example works fine.
If MOD wants to move, please do, but new lib should probably have own topic no?
BR
Erlend
- pf shadoko
- Enthusiast
- Posts: 403
- Joined: Thu Jul 09, 2015 9:07 am
Re: ScreenGadget bugs
I think I've found the source of the “splitter” bug
@Erlend :
it's no windows spécific as it use sprite librarie
can you test commenting : SelectSkin(#skin)
If that doesn't change anything, try removing the 3D part (completely).
If that works, it means the problem is caused by the sprites with 3D on linux
PS : It's more convenient for me to have all the problems gathered here.
Once the final version is released, we'll use the bug report thread
@Erlend :
it's no windows spécific as it use sprite librarie
can you test commenting : SelectSkin(#skin)
If that doesn't change anything, try removing the 3D part (completely).
If that works, it means the problem is caused by the sprites with 3D on linux
PS : It's more convenient for me to have all the problems gathered here.
Once the final version is released, we'll use the bug report thread
Re: ScreenGadget bugs
@pf shadoko:
No problem I can post here
it seems it has to do with sprits with 3d on Linux as below code works (commented out all 3d commands), but I also had to add ClearScreen command too for it to work (see comments in code)
No problem I can post here

it seems it has to do with sprits with 3d on Linux as below code works (commented out all 3d commands), but I also had to add ClearScreen command too for it to work (see comments in code)
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)
- pf shadoko
- Enthusiast
- Posts: 403
- Joined: Thu Jul 09, 2015 9:07 am
Re: ScreenGadget bugs
Below is a minimal example.
If you don't see the sprite, you can do a bug report “Linux” : 3D + Sprite
If you don't see the sprite, you can do a bug report “Linux” : 3D + Sprite
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)