Aktuelle Zeit: 25.06.2019 13:48

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: GTK CSS Provider
BeitragVerfasst: 28.12.2018 20:36 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Zum testen... :wink:

Update v0.3
- Beispiel erweitert

Code:
;-TOP

; Linux GTK CSS Gadget Style
; by      : mk-soft
; Version : v0.2
; Create  : 28.12.2018
; Update  :

DeclareModule GtkGadgetStyle
 
  Declare AddCssProvider(Gadget, StyleID, CSSData.s)
  Declare RemoveCssProvider(Gadget, StyleID)
  Declare AddCssProviderForScreen(Gadget, StyleID, CSSData.s)
  Declare RemoveCssProviderForScreen(Gadget, StyleID)
 
  Declare.s CSSColorString(color)
 
EndDeclareModule

Module GtkGadgetStyle
 
  EnableExplicit
 
  ;- 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(Gadget, StyleID, CSSData.s)
    Protected CSSProvider, CSSContext
    CSSProvider = gtk_css_provider_new()
    CSSContext = gtk_widget_get_style_context(GadgetID(Gadget))
    If FindMapElement(CSSProviderList(), Hex(Gadget) + "/" + Hex(StyleID))
      gtk_style_context_remove_provider(CSSContext, CSSProviderList())
    EndIf
    CSSProviderList(Hex(Gadget) + "/" + 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(Gadget, StyleID)
    Protected CSSContext
    CSSContext = gtk_widget_get_style_context(GadgetID(Gadget))
    If FindMapElement(CSSProviderList(), Hex(Gadget) + "/" + Hex(StyleID))
      gtk_style_context_remove_provider(CSSContext, CSSProviderList())
      DeleteMapElement(CSSProviderList())
    EndIf
  EndProcedure
 
  ; ---------------------------------------------------------------------------
 
  Procedure AddCssProviderForScreen(Gadget, StyleID, CSSData.s)
    Protected CSSProvider, CSSContext
    CSSProvider = gtk_css_provider_new()
    CSSContext = gtk_widget_get_screen(GadgetID(Gadget))
    If FindMapElement(CSSProviderForScreenList(), Hex(gadget) + "/" + Hex(StyleID))
      gtk_style_context_remove_provider_for_screen(CSSContext, CSSProviderForScreenList())
    EndIf
    CSSProviderForScreenList(Hex(gadget) + "/" + 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(Gadget, StyleID)
    Protected CSSContext
    CSSContext = gtk_widget_get_screen(GadgetID(Gadget))
    If FindMapElement(CSSProviderForScreenList(), Hex(gadget) + "/" + Hex(StyleID))
      gtk_style_context_remove_provider_for_screen(CSSContext, CSSProviderForScreenList())
      DeleteMapElement(CSSProviderForScreenList())
    EndIf
  EndProcedure
 
  ; ---------------------------------------------------------------------------
 
  Procedure.s CSSColorString(color)
    !mov eax, dword [p.v_color]
    !bswap eax
    !shr eax, 8
    !mov dword [p.v_color], eax
    ProcedureReturn "#" + Hex(Color)
  EndProcedure
 
  ; ---------------------------------------------------------------------------
 
EndModule

; *******************************************************************************

CompilerIf #PB_Compiler_IsMainFile
 
  UseModule GtkGadgetStyle
 
  Define css_string.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)
    StringGadget(0, 10, 10, 250, 25, "StringGadget")
    ButtonGadget(1, 10, 45, 120, 25, "Toggle", #PB_Button_Toggle) 
    ButtonGadget(2, 140, 45, 120, 25, "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-color: yellow}"
    css_bg2 = "button {background-color: green}"
   
    AddCssProviderForScreen(1, 1, css_fr) ; Gilt für alle Gadgets ab den Level
   
    AddCssProvider(0, 1, css_string)
    AddCssProvider(1, 2, css_bg1)
   
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
        Case #PB_Event_Gadget
          Select EventGadget()
            Case 1
              If GetGadgetState(1)
                AddCssProvider(1, 2, css_bg2)
              Else
                AddCssProvider(1, 2, css_bg1)
              EndIf 
            Case 2
              RemoveCssProvider(1, 2)
          EndSelect
      EndSelect
    ForEver
  EndIf
 
CompilerEndIf

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Zuletzt geändert von mk-soft am 28.12.2018 23:37, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GTK CSS Provider
BeitragVerfasst: 28.12.2018 23:30 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
:allright:
:allright: (für das im englischen Forum) :mrgreen:

Anbei: Je nach GTK-Theme ist eine "background" - Eigenschaft sinnlos, aber so ist man freier Meister des Cascading Style Sheets - Ungetüms.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GTK CSS Provider
BeitragVerfasst: 29.12.2018 00:17 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Danke :wink:

Hinter manche CSS-Styles bin ich noch nicht hinter gestiegen. Beschäftige mich aber noch nicht lange genug damit.

Man kann aber seine eigene App komplett mit umbauen :mrgreen:

Beispiel
Code:
;-TOP

IncludeFile "CSSProvider.pb"

UseModule GtkGadgetStyle

Enumeration FormWindow
  #Window_0
EndEnumeration

Enumeration FormGadget
  #Container_0
  #Editor_0
  #Button_0
  #Button_1
  #Container_1
  #Editor_1
  #Button_2
  #Button_3
  #Container_2
  #Editor_2
  #Button_4
  #Button_5
EndEnumeration


Procedure OpenWindow_0(x = 0, y = 0, width = 910, height = 350)
  OpenWindow(#Window_0, x, y, width, height, "GTK3 Gadgets", #PB_Window_SystemMenu)
  ContainerGadget(#Container_0, 10, 10, 290, 330, #PB_Container_Single)
  EditorGadget(#Editor_0, 10, 10, 270, 270)
  ButtonGadget(#Button_0, 10, 290, 130, 30, "Ok")
  ButtonGadget(#Button_1, 150, 290, 130, 30, "Cancel")
  CloseGadgetList()
  ContainerGadget(#Container_1, 310, 10, 290, 330, #PB_Container_Single)
  EditorGadget(#Editor_1, 10, 10, 270, 270)
  ButtonGadget(#Button_2, 10, 290, 130, 30, "Ok")
  ButtonGadget(#Button_3, 150, 290, 130, 30, "Cancel")
  CloseGadgetList()
  ContainerGadget(#Container_2, 610, 10, 290, 330, #PB_Container_Single)
  EditorGadget(#Editor_2, 10, 10, 270, 270)
  ButtonGadget(#Button_4, 10, 290, 130, 30, "Ok")
  ButtonGadget(#Button_5, 150, 290, 130, 30, "Cancel")
  CloseGadgetList()
EndProcedure

  UseModule GtkGadgetStyle
 
  Define css0.s, css1.s, css2.s
 
  If 1;
    OpenWindow_0()
   
    css0 = "text {color: black; background-color: darkgreen} text > selection {background-color: lightgreen} "
    css0 + "button {color: red; background-color: yellow} "
    css0 + "frame {background: green} "
   
    AddCssProviderForScreen(#Container_0, 1, css0) ; Gilt für alle Gadgets ab den Level
   
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
      EndSelect
    ForEver
  EndIf

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GTK CSS Provider
BeitragVerfasst: 29.12.2018 00:18 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
keiner CSS-Tipp:

Beispiel:

button {background-image: none; background-color: yellow}
oder:
"button {background: yellow}"

Bei Verwendung von "background-color" bleibt das evt. vorhandene Bild erhalten und man sieht die Farbe nicht.
Bei Verwendung von "background" wird das vorhandene Bild überschrieben und man sieht die Farbe.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GTK CSS Provider
BeitragVerfasst: 29.12.2018 09:18 
Offline

Registriert: 25.03.2013 09:59
Danke an beide :allright:

_________________
PureBasic Linux-API-Library: http://www.chabba.de


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye