From ecde167da74c86bc047aaf84c5e548cf65a5da98 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Sat, 7 Jun 2008 20:34:49 +0200 Subject: Initial commit --- libgtk_kylix/GTKUtils.pas | 212 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 libgtk_kylix/GTKUtils.pas (limited to 'libgtk_kylix/GTKUtils.pas') diff --git a/libgtk_kylix/GTKUtils.pas b/libgtk_kylix/GTKUtils.pas new file mode 100644 index 0000000..924ece1 --- /dev/null +++ b/libgtk_kylix/GTKUtils.pas @@ -0,0 +1,212 @@ +(* + GTK-Kylix Library: GTKUtils - Various utilities + Version 0.6.17 (last updated 2003-10-07) + 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; +{ $WEAKPACKAGEUNIT} + +interface + +uses gtk2, gdk2, glib2, SysUtils, GTKControls, GTKClasses; + +(********************************************************************************************************************************) +function PgcharToString(const S: Pgchar): string; +function StringToPgchar(const S: string): Pgchar; +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 GDKColorToPGdkColor(Color: TGDKColor): PGdkColor; +function PGdkColorToGDKColor(Color: PGdkColor): TGDKColor; +function GDKColorToString(Color: TGDKColor): string; +function StringToGDKColor(Str: string; var Color: TGDKColor): boolean; +(********************************************************************************************************************************) + +implementation + +(********************************************************************************************************************************) +function PgcharToString(const S: Pgchar): string; +begin + Result := string(S); +end; + +(********************************************************************************************************************************) +function StringToPgchar(const S: string): Pgchar; +begin + Result := PChar(S); +end; + +(********************************************************************************************************************************) +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 GDKColorToPGdkColor(Color: TGDKColor): PGdkColor; +begin + New(Result); + Result^.pixel := Color.pixel; + Result^.red := Color.red; + Result^.green := Color.green; + Result^.blue := Color.blue; +end; + +(********************************************************************************************************************************) +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; + +(********************************************************************************************************************************) + +end. -- cgit v1.2.3