I found it again how to adjust the GTK3 CSS styles. Also the minimum height of gadget and button padding.
The best thing is that I wrote it myself.
Code: Select all
;-TOP
; Linux GTK CSS Gadget Style
; by : mk-soft
; Version : v1.01.1
; Create : 28.12.2018
; Update : 22.01.2022
DeclareModule GtkGadgetStyle
Declare AddCssProvider(Widget, StyleID, CSSData.s)
Declare RemoveCssProvider(Widget, StyleID)
Declare AddCssProviderForScreen(Widget, StyleID, CSSData.s)
Declare RemoveCssProviderForScreen(Widget, StyleID)
Declare.s CSSColorString(color.l)
EndDeclareModule
Module GtkGadgetStyle
EnableExplicit
CompilerIf Not Defined(PB_Compiler_Backend, #PB_Constant)
#PB_Compiler_Backend = 0
#PB_Backend_Asm = 0
#PB_Backend_C = 1
CompilerEndIf
;- Imports
ImportC ""
gtk_widget_get_screen(*Widget.GtkWidget)
gtk_widget_get_style_context(*Widget.GtkWidget)
gtk_css_provider_new()
gtk_css_provider_load_from_data(*CSSProvider, CSSData.P-UTF8, Length, *Error.GError)
gtk_style_context_add_provider(*CSSContext, *CSSProvider, Priority)
gtk_style_context_remove_provider(*CSSContext, *CSSProvider)
gtk_style_context_add_provider_for_screen(*CSSContext, *CSSProvider, Priority)
gtk_style_context_remove_provider_for_screen(*CSSContext, *CSSProvider)
EndImport
;- 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
;- Maps
Global NewMap CSSProviderList()
Global NewMap CSSProviderForScreenList()
; ---------------------------------------------------------------------------
Procedure AddCssProvider(Widget, StyleID, CSSData.s)
Protected CSSProvider, CSSContext
CSSProvider = gtk_css_provider_new()
CSSContext = gtk_widget_get_style_context(Widget)
If FindMapElement(CSSProviderList(), Hex(Widget) + "/" + Hex(StyleID))
gtk_style_context_remove_provider(CSSContext, CSSProviderList())
EndIf
CSSProviderList(Hex(Widget) + "/" + Hex(StyleID)) = CSSProvider
gtk_css_provider_load_from_data(CSSProvider, CSSData, -1, 0)
gtk_style_context_add_provider(CSSContext, CSSProvider, #GTK_STYLE_PROVIDER_PRIORITY_USER)
g_object_unref_(CSSProvider)
EndProcedure
; ---------------------------------------------------------------------------
Procedure RemoveCssProvider(Widget, StyleID)
Protected CSSContext
CSSContext = gtk_widget_get_style_context(Widget)
If FindMapElement(CSSProviderList(), Hex(Widget) + "/" + Hex(StyleID))
gtk_style_context_remove_provider(CSSContext, CSSProviderList())
DeleteMapElement(CSSProviderList())
EndIf
EndProcedure
; ---------------------------------------------------------------------------
Procedure AddCssProviderForScreen(Widget, StyleID, CSSData.s)
Protected CSSProvider, CSSContext
CSSProvider = gtk_css_provider_new()
CSSContext = gtk_widget_get_screen(Widget)
If FindMapElement(CSSProviderForScreenList(), Hex(Widget) + "/" + Hex(StyleID))
gtk_style_context_remove_provider_for_screen(CSSContext, CSSProviderForScreenList())
EndIf
CSSProviderForScreenList(Hex(Widget) + "/" + Hex(StyleID)) = CSSProvider
gtk_css_provider_load_from_data(CSSProvider, CSSData, -1, 0)
gtk_style_context_add_provider_for_screen(CSSContext, CSSProvider, #GTK_STYLE_PROVIDER_PRIORITY_APPLICATION)
g_object_unref_(CSSProvider)
EndProcedure
; ---------------------------------------------------------------------------
Procedure RemoveCssProviderForScreen(Widget, StyleID)
Protected CSSContext
CSSContext = gtk_widget_get_screen(Widget)
If FindMapElement(CSSProviderForScreenList(), Hex(Widget) + "/" + Hex(StyleID))
gtk_style_context_remove_provider_for_screen(CSSContext, CSSProviderForScreenList())
DeleteMapElement(CSSProviderForScreenList())
EndIf
EndProcedure
; ---------------------------------------------------------------------------
Procedure.s CSSColorString(color.l)
CompilerIf #PB_Compiler_Backend = #PB_Backend_Asm
!mov eax, dword [p.v_color]
!bswap eax
!shr eax, 8
!mov dword [p.v_color], eax
CompilerElse
!v_color=__builtin_bswap32(v_color);
!v_color=((unsigned int)v_color >> 8);
CompilerEndIf
ProcedureReturn "#" + RSet(Hex(Color, #PB_Long), 6, "0")
EndProcedure
; ---------------------------------------------------------------------------
EndModule
; *******************************************************************************
CompilerIf #PB_Compiler_IsMainFile
UseModule GtkGadgetStyle
Define css_string.s, css_all.s, css_all_button.s, css_fr.s, css_bg1.s, css_bg2.s
Define css_color.s
If OpenWindow(0, 0, 0, 270, 140, "CSS-Gadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
css_all = "* {min-height: 20px}"
AddCssProviderForScreen(WindowID(0), 1, css_all) ; Gilt für alle Gadgets ab den Level
css_all_button = "button {padding-bottom: 2px; padding-left: 8px; padding-right: 8px; padding-top: 2px}"
AddCssProviderForScreen(WindowID(0), 2, css_all_button) ; Gilt für alle Gadgets ab den Level
StringGadget(0, 10, 10, 250, 20, "StringGadget")
ButtonGadget(1, 10, 45, 120, 20, "Toggle", #PB_Button_Toggle)
ButtonGadget(2, 140, 45, 120, 20, "Remove")
css_color = CSSColorString(RGB(255,255,0))
css_string = "entry {color: darkred; background-color: gray} entry > selection {background-color: " + css_color + "}"
css_fr = "button {color: blue}"
css_bg1 = "* button {background: yellow;}"
css_bg2 = "* button {background: green;}"
AddCssProviderForScreen(WindowID(0), 3, css_fr) ; Gilt für alle Gadgets ab den Level
AddCssProvider(GadgetID(0), 1, css_string)
AddCssProvider(GadgetID(1), 2, css_bg1)
AddCssProvider(GadgetID(2), 3, css_bg2)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case 1
If GetGadgetState(1)
AddCssProvider(GadgetID(1), 2, css_bg2)
Else
AddCssProvider(GadgetID(1), 2, css_bg1)
EndIf
Case 2
RemoveCssProvider(GadgetID(1), 2)
EndSelect
EndSelect
ForEver
EndIf
CompilerEndIf