Seite 1 von 1

Linux-Anfänger mit Gadget-Problemen

Verfasst: 14.07.2020 22:24
von bin_neu_hier
Hallo Allerseits,

wollte mal in die Programmierung unter Linux (genauer gesagt: das aktuelle Kubuntu x64) reinschnuppern und bin - wird Euch nicht wundern - gleich an meine Grenzen gestoßen. Anbei mal ein Code, der ein paar Probleme mitbringt:

Code: Alles auswählen


Enumeration
  #Parentwin
  #Statusbar
EndEnumeration


ImportC ""
  gtk_label_set_yalign(*label.GtkLabel, yalign.f)
  pango_context_get_font_description(*context)
  pango_font_description_get_family(*description)
  pango_font_description_to_string(*description)
EndImport
;habe nicht die blasseste Ahnung, was es mit dem ImportC auf sich hat. 

Procedure.s Gadget_GetFontFamily(Gadget)
  Protected.s sFontFamily
  Protected   *context     = gtk_widget_get_pango_context_(GadgetID(Gadget))
  Protected   *description = pango_context_get_font_description(*context)
  Protected   *family      = pango_font_description_get_family(*description)
  If *family
    sFontFamily= PeekS(*family, -1, #PB_UTF8)
  EndIf
  ProcedureReturn sFontFamily
EndProcedure
;soll mir den aktuellen Hauptfont bringen. Kann ja bei jeder Distri anders sein


If OpenWindow(#Parentwin, 0, 0, 600, 100, "Resize", #PB_Window_SystemMenu | #PB_Window_WindowCentered | #PB_Window_SizeGadget)
  dirselect = ButtonGadget(#PB_Any, 10, 10, 200, 10, "Verzeichnis auswählen")
  
  x$ = Gadget_GetFontFamily(dirselect)
  fontnum = LoadFont(#PB_Any, x$, 11)
  If fontnum
    SetGadgetFont(#PB_Default, FontID(fontnum))
  EndIf
  SetGadgetFont(dirselect, FontID(fontnum))
;soll den aktuellen Hauptfont liefern und in der Größe 11 als Default einstellen 
  
  If CreateStatusBar(#Statusbar, WindowID(#Parentwin))
    AddStatusBarField(#PB_Ignore)
    StatusBarText(#Statusbar, 0, "Statusbar zentriert", #PB_StatusBar_Center)
  EndIf
  
  
  dirstring = TextGadget(#PB_Any, 220, 10, WindowWidth(#Parentwin,#PB_Window_InnerCoordinate)-230, 20, "",#PB_Text_Border)
  ;gtk_label_set_yalign(GadgetID(dirstring), 1)
  ;keine Ahnung, was das gtk... bezwecken soll, kann mit und ohne keinen Unterschied feststellen

  SetGadgetColor(dirstring,#PB_Gadget_FrontColor,RGB(0,0,0))
  SetGadgetColor(dirstring,#PB_Gadget_BackColor,RGB(255,255,255))
  
  
  Repeat 
    Event = WindowEvent()
    
    If Event
      Select Event
        Case #PB_Event_Gadget
          Select EventGadget()
            Case dirselect
              dirselect$ = PathRequester("Verzeichnis wählen", GetHomeDirectory())
              
              If dirselect
                SetGadgetText(dirstring,dirselect$)
                ;wenn Verzeichnis ausgewä#hlz, dann passiert ...
              Else
                SetGadgetText(dirstring,"")
                ; wenn kein Verz ausgewählz, dann passiert ...

              EndIf 
              
          EndSelect
          
          
          
        Case #PB_Event_SizeWindow
          ResizeGadget(dirstring, #PB_Ignore, #PB_Ignore, WindowWidth(#Parentwin,#PB_Window_InnerCoordinate)-230, 20)
          
          
        Case #PB_Event_CloseWindow
          End
          
          
          
      EndSelect
      
      
    Else  
      Delay(1)
    EndIf 
    
  ForEver
  End
  
EndIf
Problem Font: welcher Font ist der Standardfont, damit ich die Größe einstellen kann. Habe dazu die Codeschnipsel ab "ImportC" bis einschl. "Procedure.s Gadget_GetFontFamily(Gadget)" gefunden und eingebaut. Bin mir nicht sicher, ob das so richtig funktioniert.

Die Gadgethöhe für das Textgadget und Buttongadget lassen sich nicht richtig einstellen. Beide sollten gleich hoch sein und nicht viel höher als die Fonteinstellung erforderlich macht.

Wenn das Fenster sehr klein gemacht wird, wird das Textgadget automatisch in der Höhe vergrößert und der Text (also der ausgewählte Pfad) mehrzeilig angezeigt. Wie kann man den Automatismus verhindern? Ziel wäre, dass das Textgadget sich nur in der Breite anpasst.

Kann natürlich auch sein, dass mein PB nicht richtig für Linux konfiguriert ist. Alle Anleitungen, die ich gefunden habe, beziehen sich auf ältere Distributionen, für Kubuntu 20.04LTS habe ich nichts gefunden. Hat da jemand Tipps für mich?

Wäre für etwas Licht im Dunkel sehr dankbar!

Re: Linux-Anfänger mit Gadget-Problemen

Verfasst: 14.07.2020 23:41
von mk-soft
Unter GTK3 haben ButtonGadget und TexGadget eine minimale Größe ...
Bei GTK2 nicht.

Code: Alles auswählen

...
dirstring = TextGadget(#PB_Any, 220, 10, WindowWidth(#Parentwin,#PB_Window_InnerCoordinate)-230, GadgetHeight(dirselect, #PB_Gadget_RequiredSize), "",#PB_Text_Border)
...
ResizeGadget(dirstring, #PB_Ignore, #PB_Ignore, WindowWidth(#Parentwin,#PB_Window_InnerCoordinate)-230, #PB_Ignore)
...