Seite 1 von 1

[Linux] PB 5.61 (x64) - EventType bei ImageGadget

Verfasst: 17.01.2018 07:33
von Makke
Hallo zusammen,

der beigefügte Code funktioniert nicht unter den Standarteinstellungen des Compilers. Es werden keine EventType() Ergebnisse empfangen. Wenn ich als Lib-Subsystem jedoch "gtk2" wähle, dann funktioniert es.

Code: Alles auswählen

EnableExplicit

Macro DbgEvtType
  If EvtTyp = #PB_EventType_LeftClick
    Debug "Gadget #" + EvtGdg + " received LEFT click"
  ElseIf EvtTyp = #PB_EventType_RightClick
    Debug "Gadget #" + EvtGdg + " received RIGHT click"
  ElseIf EvtTyp = #PB_EventType_Focus
    Debug "Gadget #" + EvtGdg + " gets focus"
  EndIf
EndMacro

If OpenWindow(0, 0, 0, 400, 300, "EventType Test", #PB_Window_SystemMenu)
  
  If LoadImage(0, #PB_Compiler_Home + "examples/sources/Data/PureBasic.bmp")
    
    ImageGadget(1, 10, 10, 180, 40, ImageID(0))
    
    If ContainerGadget(5, 10, 80, 380, 50, #PB_Container_Double)
      
      ImageGadget(2, 5, 5, 180, 40, ImageID(0))
      CloseGadgetList()
      
    EndIf
    
    If ScrollAreaGadget(6, 10, 150, 380, 50, 350, 50, WindowWidth(0)/10, #PB_ScrollArea_Single)
      
      ImageGadget(3, 5, 5, 180, 40, ImageID(0))
      CloseGadgetList()
      
    EndIf
    
  EndIf
  
EndIf

Define.i Quit, WndEvt, EvtGdg, EvtTyp

Repeat
  
  WndEvt = WaitWindowEvent()
  EvtGdg = EventGadget()
  
  Select WndEvt
      
    Case #PB_Event_CloseWindow
      Quit = 1
      
    Case #PB_Event_Gadget
      
      EvtTyp = EventType() : Debug "EvtType:" + EvtTyp
      
      Select EvtGdg
          
        Case 1 : DbgEvtType    
        Case 2 : DbgEvtType
        Case 3 : DbgEvtType
        Case 5 : DbgEvtType
        Case 6 : DbgEvtType
          
      EndSelect
      
   EndSelect
   
Until Quit = 1

End
PB-Version: PureBasic 5.45 LTS (Linux - x64) & PureBasic 5.61 (Linux - x64)
OS: Ubuntu 16.04 x86_64
Compilereinstellungen:
[ ] Unicode-Executable erstellen
[ ] Thread-sicheres Executable erstellen
[ ] OnError-Unterstützung einschalten
[ ] Moderne Themen-Unterstützung aktivieren (für Windows XP und höher)
[ ] Administrator-Modus für Windows Vista und höher anfordern
[ ] User-Modus für Windows Vista und höher anfordern (keine Virtualisierung)
Library Subsystem:gtk3 (mit gtk2 funktionieren die CLICK Events)

Re: [Linux] PB 5.61 (x64) - EventType bei ImageGadget

Verfasst: 17.01.2018 09:48
von RSBasic
Guten Morgen Makke,

kannst du den Bug auch im englischem Forum posten? Da besteht wenigstens die Möglichkeit, dass dieser Fehler behoben wird.

Re: [Linux] PB 5.61 (x64) - EventType bei ImageGadget

Verfasst: 17.01.2018 19:55
von mk-soft

Re: [Linux] PB 5.61 (x64) - EventType bei ImageGadget

Verfasst: 07.02.2018 22:44
von Shardik
mk-soft hat geschrieben:Bug schon bekannt...
Und behoben für GTK3 in PB 5.46 im ASCII- und Unicode-Modus und in PB 5.62... :wink:

Re: [Linux] PB 5.61 (x64) - EventType bei ImageGadget

Verfasst: 11.02.2018 15:46
von DarkSoul
Ach das ist auch ein PB-Bug? :roll:

Das Problem ist schon älter. :|

Ich habe mir ein Workaround gebastelt Habe inzwischen PB mehrmals aktualisiert aber vorsichtshalber den Workaround drin gelassen und seitdem auf ImageGadget() verzichtet. :mrgreen:

GTK3 ist bei mir generell sehr absturzfreudig, wenn es über PB angesprochen wird. Bei WindowOutput() z.B. InvalidMemory. /:->

Re: [Linux] PB 5.61 (x64) - EventType bei ImageGadget

Verfasst: 11.02.2018 16:43
von mk-soft
EDIT:

WindowOutput() sollte man bei gtk3 nicht mehr unbedingt nehmen.
Es wird bei leider gtk3 nicht mehr alles unterstützt.
Am besten ein ImageGadget erstellen und dann einfach mit DisableGadget die Event abschalten.
Dann kann man auch Gadgets auf dem ImageGadget legen, wenn das ImageGadget gesperrt ist.

Kleines Beispiel:

Code: Alles auswählen

;-TOP

Procedure DrawBackGround(Image,col1, col2)
  Protected dx, dy
  dx = ImageWidth(Image)
  dy = ImageHeight(Image)
  StartDrawing(ImageOutput(Image))
    DrawingMode(#PB_2DDrawing_Gradient)      
    BackColor($000000)
    GradientColor(0.8, col1)
    GradientColor(0.8, col2)
    FrontColor($000000)
    LinearGradient(0, 0, 0, dy)      
    Box(0, 0, dx, dy)
  StopDrawing()
EndProcedure

Procedure Main()
  
  If OpenWindow(0, #PB_Ignore, #PB_Ignore, 800, 300, "Backgroung Image", #PB_Window_SystemMenu)
    CreateImage(0, WindowWidth(0), WindowHeight(0), 32)
    DrawBackGround(0, $800000, $FF0000)
    ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), ImageID(0))
    DisableGadget(0,1)
    
    StringGadget(1, 10, 10, 780, 25, "")
    ButtonGadget(2, 10, 45, 120, 25, "Button")
    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
        Case #PB_Event_Gadget
          Select EventGadget()
            Case 2
              DrawBackGround(0, Random($FFFFFF), Random($FFFFFF))
              SetGadgetState(0, ImageID(0))
          EndSelect
      EndSelect
    ForEver
    
  EndIf
  
EndProcedure : Main()