Code: Select all
Procedure.l GtkGadgetColor(Gadget, Type, State)
  ;color types
  #GtkGadgetColorBase = 0
  #GtkGadgetColorBg = 1
  #GtkGadgetColorDark = 2
  #GtkGadgetColorFg = 3
  #GtkGadgetColorLight = 4
  #GtkGadgetColorText = 5
  ;states
  #GtkStateNormal = 0
  #GtkStateActive = 1
  #GtkStatePrelight = 2
  #GtkStateSelected = 3
  #GtkStateIntensitive = 4
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      ;returns a widget color
      Protected *style.GtkStyle, *color.GdkColor
      ;get widget style
      *style = gtk_widget_get_style_(GadgetID(Gadget))
      ;return color according type and state
      Select Type
        Case #GtkGadgetColorBase
          *color = *style\base[State]
        Case #GtkGadgetColorBg
          *color = *style\bg[State]
        Case #GtkGadgetColorDark
          *color = *style\dark[State]
        Case #GtkGadgetColorFg
          *color = *style\fg[State]
        Case #GtkGadgetColorLight
          *color = *style\light[State]
        Case #GtkGadgetColorText
          *color = *style\text[State]
      EndSelect
      ;return color value
      ProcedureReturn RGB(*color\red >> 8, *color\green >> 8, *color\blue >> 8)
    CompilerCase #PB_OS_Windows
      Select Type
        Case #GtkGadgetColorBg, #GtkGadgetColorBase
          If State = #GtkStateSelected
            ProcedureReturn GetSysColor_(#COLOR_HIGHLIGHT)
          Else
            ProcedureReturn GetSysColor_(#COLOR_WINDOW)
          EndIf
        Case #GtkGadgetColorFg, #GtkGadgetColorText
          If State = #GtkStateSelected
            ProcedureReturn GetSysColor_(#COLOR_HIGHLIGHTTEXT)
          Else
            ProcedureReturn GetSysColor_(#COLOR_WINDOWTEXT)
          EndIf
        Case #GtkGadgetColorDark
          ProcedureReturn GetSysColor_(#COLOR_BTNSHADOW)
        Case #GtkGadgetColorLight
          ProcedureReturn GetSysColor_(#COLOR_3DLIGHT)
      EndSelect
  CompilerEndSelect
EndProcedure




