summaryrefslogtreecommitdiff
path: root/libgtk_kylix/GTKUtils.pas
diff options
context:
space:
mode:
Diffstat (limited to 'libgtk_kylix/GTKUtils.pas')
-rw-r--r--libgtk_kylix/GTKUtils.pas138
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.