Seite 1 von 1

Buttonhöhe abhängig vom Subsystem

Verfasst: 08.02.2026 02:17
von jogo
muß jetzt noch mal nachfragen wegen dem Subsystemen.
Ich verstehe die Unterschiedliche Darstellung nicht und bin mir nicht sicher, an welcher Stelle was falsch arbeitet.

Wenn ich KEIN Subsystem eintrage, wählt PB ja auf LMDE6/7 GTK3.xx
GTK3
- Die Schriftart wird gesetzt, aber die Buttonhöhe wird ab 25 abwärts komplett ignoriert

GTK2
- Die Schriftart wird gesetzt, Buttonhöhe wird gesetzt, aber innen ist so wenig Platz, nicht mal 50% kleinere Schrift reinpasst

QT
- Schriftart ok, Buttonhöhe ok, Schrift innen lesbar

Ich verwende für mich LMDE 5/6/7 und Mint 22. Aktuell PB 6.21
So gesehen könnte man sagen: Dann nimm doch QT. Aber irgendwas funktionierte dort mit den Systray-Icon oder Tray-Menü nicht (schon länger her, weiß deshalb nicht mehr genau, warum ich dann QT doch nicht nehmen wollte)

Meine Frage: Verwendet ihr unter Linux Buttons kleiner 25? Warum geht das nicht oder nicht gut bei GTK?
Hier mal ein Minicode, der zeigt, was ich meine:

Code: Alles auswählen

OpenWindow(0, 100, 100, 340, 120, "Fenster" ,#PB_Window_MinimizeGadget)
ButtonGadget(0,1,50,110,25,"Ein Button 0") 
ButtonGadget(1,115,50,110,20,"Ein Button 1") 
ButtonGadget(2,228,50,110,15,"Ein Button 2") 

If LoadFont(0, "Liberation Mono",10)      ;FreeMono Liberation Mono
  SetGadgetFont(0, FontID(0))             ;geladenen Zeichensatz zuweisen
EndIf

If LoadFont(1, "Liberation Mono",8)      
  SetGadgetFont(1, FontID(1))             
EndIf

If LoadFont(2, "Liberation Mono", 7)     
  SetGadgetFont(2, FontID(2))             
EndIf

Repeat
  Select  WaitWindowEvent()    
    Case #PB_Event_CloseWindow  ;wenn x
      Break                     
    Case  #PB_Event_Gadget     
      Select EventGadget()   
        Case 0
          Debug "0"
        Case 1                     
          Debug "1" 
        Case 2                              
          Debug "2" 
      EndSelect                 ;auf welche taste
  EndSelect                     ;fensterereignis 
ForEver 

Re: Buttonhöhe abhängig vom Subsystem

Verfasst: 08.02.2026 03:26
von mk-soft
Das liegt am CSS Style. War schon mal schlimmer mit den Mindest-Höhen.
Hat aber Fred schon etwas den CSS-Style angepasst.

Wenn du es noch kleiner möchtest, must du den CSS-Style weiter anpassen.
Habe mal hier die mindest+höhe auf 10 px einstellt. Kommt also noch der Ramen mit 2px dazu.

Code: Alles auswählen

;-TOP by mk-soft, v1.02.0, create 21.05.2022, update 06.12.2023

CompilerIf #PB_Compiler_OS = #PB_OS_Linux
  ;- Constants
  #GTK_STYLE_PROVIDER_PRIORITY_FALLBACK = 1
  #GTK_STYLE_PROVIDER_PRIORITY_THEME = 200
  #GTK_STYLE_PROVIDER_PRIORITY_SETTINGS = 400
  #GTK_STYLE_PROVIDER_PRIORITY_APPLICATION = 600
  #GTK_STYLE_PROVIDER_PRIORITY_USER  = 800
  
  ImportC ""
    gtk_css_provider_load_from_data(*CSSProvider, CSSData.P-UTF8, Length, *Error.GError)
    gtk_css_provider_new()
    gtk_style_context_add_provider_for_screen(*Screen.GdkScreen, *StyleProvider, Priority)
  EndImport
  
  Procedure _SetLinuxStyle()
    Protected CSSProvider, CSSDefault.s, Screen
    
    ;CSSDefault = "button, entry {min-height: 20px;} "
    CSSDefault = "button, entry {min-height: 10px;} "
    CSSDefault + "tab {min-height: 20px;} "
    CSSDefault + "button, scale {padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px} "
    CSSDefault + "entry {padding-bottom: 3px; padding-left: 6px; padding-right: 6px; padding-top: 3px} "
    ;CSSDefault + "scrolledwindow undershoot.top, scrolledwindow undershoot.right, scrolledwindow undershoot.bottom, scrolledwindow undershoot.left { background-image: none; } "
    CSSProvider= gtk_css_provider_new()
    gtk_css_provider_load_from_data(CSSProvider, CSSDefault, -1, 0)
    Screen = gdk_display_get_default_screen_(gdk_display_get_default_())
    gtk_style_context_add_provider_for_screen(Screen, CSSProvider, #GTK_STYLE_PROVIDER_PRIORITY_USER)
    g_object_unref_(CSSProvider)
    
  EndProcedure : _SetLinuxStyle()
  
CompilerEndIf


OpenWindow(0, 100, 100, 340, 120, "Fenster" ,#PB_Window_MinimizeGadget)
ButtonGadget(0,1,50,110,25,"Ein Button 0") 
ButtonGadget(1,115,50,110,20,"Ein Button 1") 
ButtonGadget(2,228,50,110,15,"Ein Button 2") 

If LoadFont(0, "Liberation Mono",10)      ;FreeMono Liberation Mono
  SetGadgetFont(0, FontID(0))             ;geladenen Zeichensatz zuweisen
EndIf

If LoadFont(1, "Liberation Mono",8)      
  SetGadgetFont(1, FontID(1))             
EndIf

If LoadFont(2, "Liberation Mono", 7)     
  SetGadgetFont(2, FontID(2))             
EndIf

Repeat
  Select  WaitWindowEvent()    
    Case #PB_Event_CloseWindow  ;wenn x
      Break                     
    Case  #PB_Event_Gadget     
      Select EventGadget()   
        Case 0
          Debug "0"
        Case 1                     
          Debug "1" 
        Case 2                              
          Debug "2" 
      EndSelect                 ;auf welche taste
  EndSelect                     ;fensterereignis 
ForEver 

Re: Buttonhöhe abhängig vom Subsystem

Verfasst: 08.02.2026 04:39
von jogo
ahh - funktioniert wie verrückt... Danke :-)
bin nun dabei, diese Ergänzung etwas zu verstehen.

Code: Alles auswählen

; #### ok, das ist klar - hier definiere ich die Mindesthöhe 
;CSSDefault = "button, entry {min-height: 20px;} "
 CSSDefault = "button, entry {min-height: 10px;} "
    
;####  hier die Räder - also wären hier bei einer Höhe von 10 noch Platz für 6px Schrifthöhe?
 CSSDefault + "button, scale {padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px} "   
  
; #### ab hier müßte ich nur noch raten....
    ;**** für Tabs?
    CSSDefault + "tab {min-height: 20px;} "
    ;**** Textabstand zu den Rändern? Aber waren doch die 2px von oben (CSSDefault + "button, scale...)? 
    CSSDefault + "entry {padding-bottom: 3px; padding-left: 6px; padding-right: 6px; padding-top: 3px} "
    ;*** Hast du zwar auskommentiert, aber was könnte ich hiermit verändern?
    ;CSSDefault + "scrolledwindow undershoot.top, scrolledwindow undershoot.right, scrolledwindow undershoot.bottom, scrolledwindow undershoot.left { background-image: none; } "
    
und was bewirkt dies?:
EndProcedure : _SetLinuxStyle()

Re: Buttonhöhe abhängig vom Subsystem

Verfasst: 08.02.2026 13:51
von mk-soft
Es wird die Procedure aufgerufen die den neuen CSS-Style hinzufügt.

Bei GTK3 kann man einen Inspector für die GUI aufrufen. Dazu im Terminal den Inspector aktivieren.
gsettings set org.gtk.Settings.Debug enable-inspector-keybinding true
Deine App starten, Focus drauf und mit CTRL+SHIFT+I den Inspector öffnen.

Eine Übersicht von den CSS-Styles findest zu hier: https://docs.gtk.org/gtk3/css-overview.html

Was man zum Beispiel mit CSS machen kann sieht du hier: https://www.purebasic.fr/english/viewtopic.php?t=71992