(* GTK-Kylix Library: GTKUtils - Various utilities Copyright (C) 2003 Tomas Bzatek This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. *) unit GTKUtils; interface uses lazglib2, lazgdk3, lazgtk3, SysUtils, GTKControls, GTKClasses; (********************************************************************************************************************************) (* function AllocateColor(Widget: PGtkWidget; R, G, B: Word): PGdkColor; overload; 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 GDKColorToPGdkRGBA(Color: TGDKColor): PGdkRGBA; function PGdkRGBAToGDKColor(Color: PGdkRGBA): TGDKColor; function GDKColorToString(Color: TGDKColor): string; function StringToGDKColor(Str: string; var Color: TGDKColor): boolean; *) function ValidateColorString(const Color: string): boolean; (********************************************************************************************************************************) implementation (********************************************************************************************************************************) (* function AllocateColor(Widget: PGtkWidget; R, G, B: Word): PGdkColor; begin New(Result); with Result^ do begin Pixel := 0; Red := R; Green := G; Blue := B; end; if Assigned(Widget) then gdk_colormap_alloc_color(gtk_widget_get_colormap(Widget), Result, True, False); end; function AllocateColor(R, G, B: Word): TGDKColor; begin Result.red := R; Result.green := G; Result.blue := B; end; *) (********************************************************************************************************************************) function KeyValToUnicode(const Key: word): guint32; begin Result := gdk_keyval_to_unicode(Key); end; (********************************************************************************************************************************) function UnicodeToKeyVal(const UnicodeVal: guint32): word; begin Result := gdk_unicode_to_keyval(UnicodeVal); end; (********************************************************************************************************************************) (* function GetDefaultForegroundColor(State: integer): PGdkColor; var Widget: PGtkWidget; Style: PGtkStyle; begin Widget := gtk_window_new(GTK_WINDOW_TOPLEVEL); Style := gtk_rc_get_style(Widget); Result := @(Style^.fg[State]); gtk_widget_destroy(Widget); end; function GetDefaultForegroundColor(Widget: TGTKControl; State: integer): PGdkColor; var Style: PGtkStyle; begin Style := gtk_rc_get_style(Widget.FWidget); Result := @(Style^.fg[State]); 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; begin Style := gtk_rc_get_style(Widget.FWidget); Result := @(Style^.bg[State]); end; *) (********************************************************************************************************************************) (* function GetDefaultBaseColor(State: integer): PGdkColor; var Widget: PGtkWidget; Style: PGtkStyle; begin Widget := gtk_window_new(GTK_WINDOW_TOPLEVEL); Style := gtk_rc_get_style(Widget); Result := @(Style^.base[State]); gtk_widget_destroy(Widget); end; function GetDefaultBaseColor(Widget: TGTKControl; State: integer): PGdkColor; var Style: PGtkStyle; begin Style := gtk_rc_get_style(Widget.FWidget); Result := @(Style^.base[State]); 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; begin Style := gtk_rc_get_style(Widget.FWidget); Result := @(Style^.text[State]); end; *) (********************************************************************************************************************************) (* function GDKColorToPGdkRGBA(Color: TGDKColor): PGdkRGBA; begin New(Result); Result^.pixel := Color.pixel; Result^.red := Color.red; Result^.green := Color.green; Result^.blue := Color.blue; end; *) (********************************************************************************************************************************) (* function PGdkRGBAToGDKColor(Color: PGdkRGBA): TGDKColor; function PGdkColorToGDKColor(Color: PGdkColor): TGDKColor; begin Result.pixel := Color^.pixel; Result.red := Color^.red; Result.green := Color^.green; Result.blue := Color^.blue; end; *) (********************************************************************************************************************************) (* function GDKColorToString(Color: TGDKColor): string; begin Result := Format('#%.2x%.2x%.2xFF', [Color.red div 256, Color.green div 256, Color.blue div 256]); end; *) (********************************************************************************************************************************) (* function StringToGDKColor(Str: string; var Color: TGDKColor): boolean; var AColor: PGdkColor; begin Result := False; Str := ANSIUpperCase(Trim(Str)); if (Length(Str) < 7) or (Str[1] <> '#') then Exit; try New(AColor); if Length(Str) = 9 then Delete(Str, 8, 2); Result := boolean(gdk_color_parse(PChar(Str), AColor)); Color := PGdkColorToGDKColor(AColor); Dispose(AColor); except end; end; *) (********************************************************************************************************************************) function ValidateColorString(const Color: string): boolean; var rgba: TGdkRGBA; begin Result := gdk_rgba_parse(@rgba, PChar(Color)); end; end.