diff options
Diffstat (limited to 'libgtk_kylix/GTKUtils.pas')
| -rw-r--r-- | libgtk_kylix/GTKUtils.pas | 138 |
1 files changed, 91 insertions, 47 deletions
diff --git a/libgtk_kylix/GTKUtils.pas b/libgtk_kylix/GTKUtils.pas index c1b662e..1b3e7e8 100644 --- a/libgtk_kylix/GTKUtils.pas +++ b/libgtk_kylix/GTKUtils.pas @@ -32,27 +32,35 @@ function AllocateColor(R, G, B: Word): TGDKColor; overload; *) function KeyValToUnicode(const Key: word): guint32; function UnicodeToKeyVal(const UnicodeVal: guint32): word; -(* -function GetDefaultForegroundColor(State: integer): PGdkColor; overload; -function GetDefaultForegroundColor(Widget: TGTKControl; State: integer): PGdkColor; overload; -function GetDefaultBackgroundColor(State: integer): PGdkColor; overload; -function GetDefaultBackgroundColor(Widget: TGTKControl; State: integer): PGdkColor; overload; -function GetDefaultBaseColor(State: integer): PGdkColor; overload; -function GetDefaultBaseColor(Widget: TGTKControl; State: integer): PGdkColor; overload; -function GetDefaultTextColor(State: integer): PGdkColor; overload; -function GetDefaultTextColor(Widget: TGTKControl; State: integer): PGdkColor; overload; +{ +function GetDefaultForegroundColor(State: TGtkStateFlags): PGdkRGBA; overload; +function GetDefaultForegroundColor(Widget: TGTKControl; State: TGtkStateFlags): PGdkRGBA; overload; +} +function GetDefaultBackgroundColor(Widget: TGTKControl; State: TGtkStateFlags): PGdkRGBA; overload; +{ +function GetDefaultBaseColor(State: TGtkStateFlags): PGdkRGBA; overload; +function GetDefaultBaseColor(Widget: TGTKControl; State: TGtkStateFlags): PGdkRGBA; overload; +} +// Returns newly allocated PGdkRGBA +function GetDefaultTextColor(Widget: TGTKControl; State: TGtkStateFlags): PGdkRGBA; +{ function GDKColorToPGdkRGBA(Color: TGDKColor): PGdkRGBA; -function PGdkRGBAToGDKColor(Color: PGdkRGBA): TGDKColor; -function GDKColorToString(Color: TGDKColor): string; -function StringToGDKColor(Str: string; var Color: TGDKColor): boolean; -*) +function PGdkRGBAToGDKColor(Color: PGdkRGBA): TGDKColor;} + +function GDKRGBAToString(Color: PGdkRGBA): string; +function StringToGDKRGBA(Str: string): PGdkRGBA; + function ValidateColorString(const Color: string): boolean; +function PangoFontDescToCSS(const PangoFontDesc: string): string; + (********************************************************************************************************************************) implementation +uses lazpango1; + (********************************************************************************************************************************) (* function AllocateColor(Widget: PGtkWidget; R, G, B: Word): PGdkColor; @@ -89,7 +97,7 @@ end; (********************************************************************************************************************************) (* -function GetDefaultForegroundColor(State: integer): PGdkColor; +function GetDefaultForegroundColor(State: TGtkStateFlags): PGdkRGBA; var Widget: PGtkWidget; Style: PGtkStyle; begin @@ -99,7 +107,7 @@ begin gtk_widget_destroy(Widget); end; -function GetDefaultForegroundColor(Widget: TGTKControl; State: integer): PGdkColor; +function GetDefaultForegroundColor(Widget: TGTKControl; State: TGtkStateFlags): PGdkRGBA; var Style: PGtkStyle; begin Style := gtk_rc_get_style(Widget.FWidget); @@ -108,28 +116,20 @@ end; *) (********************************************************************************************************************************) -(* -function GetDefaultBackgroundColor(State: integer): PGdkColor; -var Widget: PGtkWidget; - Style: PGtkStyle; -begin - Widget := gtk_window_new(GTK_WINDOW_TOPLEVEL); - Style := gtk_rc_get_style(Widget); - Result := @(Style^.bg[State]); - gtk_widget_destroy(Widget); -end; -function GetDefaultBackgroundColor(Widget: TGTKControl; State: integer): PGdkColor; -var Style: PGtkStyle; +function GetDefaultBackgroundColor(Widget: TGTKControl; State: TGtkStateFlags): PGdkRGBA; +var StyleContext: PGtkStyleContext; + Value: PGdkRGBA; begin - Style := gtk_rc_get_style(Widget.FWidget); - Result := @(Style^.bg[State]); + Value := nil; + StyleContext := gtk_widget_get_style_context(Widget.FWidget); + gtk_style_context_get(StyleContext, State, [GTK_STYLE_PROPERTY_BACKGROUND_COLOR, @Value, nil]); + Result := Value; end; -*) (********************************************************************************************************************************) (* -function GetDefaultBaseColor(State: integer): PGdkColor; +function GetDefaultBaseColor(State: TGtkStateFlags): PGdkRGBA; var Widget: PGtkWidget; Style: PGtkStyle; begin @@ -139,7 +139,7 @@ begin gtk_widget_destroy(Widget); end; -function GetDefaultBaseColor(Widget: TGTKControl; State: integer): PGdkColor; +function GetDefaultBaseColor(Widget: TGTKControl; State: TGtkStateFlags): PGdkRGBA; var Style: PGtkStyle; begin Style := gtk_rc_get_style(Widget.FWidget); @@ -148,24 +148,17 @@ end; *) (********************************************************************************************************************************) -(* -function GetDefaultTextColor(State: integer): PGdkColor; -var Widget: PGtkWidget; - Style: PGtkStyle; -begin - Widget := gtk_window_new(GTK_WINDOW_TOPLEVEL); - Style := gtk_rc_get_style(Widget); - Result := @(Style^.text[State]); - gtk_widget_destroy(Widget); -end; -function GetDefaultTextColor(Widget: TGTKControl; State: integer): PGdkColor; -var Style: PGtkStyle; +function GetDefaultTextColor(Widget: TGTKControl; State: TGtkStateFlags): PGdkRGBA; +var StyleContext: PGtkStyleContext; + Value: PGdkRGBA; begin - Style := gtk_rc_get_style(Widget.FWidget); - Result := @(Style^.text[State]); + Value := nil; + StyleContext := gtk_widget_get_style_context(Widget.FWidget); + gtk_style_context_get(StyleContext, State, [GTK_STYLE_PROPERTY_COLOR, @Value, nil]); + Result := Value; end; -*) + (********************************************************************************************************************************) (* @@ -218,6 +211,26 @@ end; *) (********************************************************************************************************************************) +function GDKRGBAToString(Color: PGdkRGBA): string; +begin + Result := ''; + if Assigned(Color) then Result := String(gdk_rgba_to_string(Color)); +end; + +function StringToGDKRGBA(Str: string): PGdkRGBA; +var Value: TGdkRGBA; +begin + if Length(Str) < 1 then begin + Result := nil; + Exit; + end; + Initialize(Value); + if gdk_rgba_parse(@Value, PChar(Str)) then Result := gdk_rgba_copy(@Value) + else begin + g_log(PChar('tuxcmd'), [G_LOG_LEVEL_WARNING], 'Failed to parse color string "%s"', [PChar(Str)]); + Result := nil; + end; +end; function ValidateColorString(const Color: string): boolean; var rgba: TGdkRGBA; @@ -225,4 +238,35 @@ begin Result := gdk_rgba_parse(@rgba, PChar(Color)); end; +(********************************************************************************************************************************) + +function PangoFontDescToCSS(const PangoFontDesc: string): string; +var font_desc: PPangoFontDescription; + s: string; + val: Pgchar; + size: gint; +begin + s := ''; + font_desc := pango_font_description_from_string(PChar(PangoFontDesc)); + if not Assigned(font_desc) then begin + Result := ''; + Exit; + end; + val := pango_font_description_get_family(font_desc); + if Assigned(val) then s := s + 'font-family: ' + string(val) + '; '; + size := pango_font_description_get_size(font_desc); + if size > 0 then begin + if pango_font_description_get_size_is_absolute(font_desc) + then s := s + 'font-size: ' + IntToStr(size) + 'px; ' + else s := s + 'font-size: ' + IntToStr(Trunc(pango_units_to_double(size))) + 'pt; '; + end; + case pango_font_description_get_style(font_desc) of + PANGO_STYLE_NORMAL: ; + PANGO_STYLE_OBLIQUE: s := s + 'font-style: oblique; '; + PANGO_STYLE_ITALIC: s := s + 'font-style: italic; '; + end; + pango_font_description_free(font_desc); + Result := s; +end; + end. |
