ScreenGadget bugs

Post bugreports for the Windows version here
User_Russian
Addict
Addict
Posts: 1580
Joined: Wed Nov 12, 2008 5:01 pm
Location: Russia

Re: ScreenGadget bugs

Post by User_Russian »

pf shadoko wrote: Tue Oct 07, 2025 4:25 pm No crashes for me.
There is also no application crash.
User avatar
Bisonte
Addict
Addict
Posts: 1316
Joined: Tue Oct 09, 2007 2:15 am

Re: ScreenGadget bugs

Post by Bisonte »

pf shadoko wrote: Tue Oct 07, 2025 4:25 pm No crashes for me.
(I'm running PB6.30 x32 - Windows 10)
Maybe the standard Long/Integer Value problem in the source ... ?
(I mean : runs on 32Bit, crashes on 64Bit)
PureBasic 6.21 (Windows x64) | Windows 11 Pro | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
English is not my native language... (I often use DeepL.)
User avatar
Erlend
Enthusiast
Enthusiast
Posts: 124
Joined: Mon Apr 19, 2004 8:22 pm
Location: NORWAY

Re: ScreenGadget bugs

Post by Erlend »

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
User avatar
pf shadoko
Enthusiast
Enthusiast
Posts: 403
Joined: Thu Jul 09, 2015 9:07 am

Re: ScreenGadget bugs

Post by pf shadoko »

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
User avatar
Erlend
Enthusiast
Enthusiast
Posts: 124
Joined: Mon Apr 19, 2004 8:22 pm
Location: NORWAY

Re: ScreenGadget bugs

Post by Erlend »

@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)

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)
User avatar
pf shadoko
Enthusiast
Enthusiast
Posts: 403
Joined: Thu Jul 09, 2015 9:07 am

Re: ScreenGadget bugs

Post by pf shadoko »

Below is a minimal example.
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)
Post Reply