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/GTKPixbuf.pas | 214 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 libgtk_kylix/GTKPixbuf.pas (limited to 'libgtk_kylix/GTKPixbuf.pas') diff --git a/libgtk_kylix/GTKPixbuf.pas b/libgtk_kylix/GTKPixbuf.pas new file mode 100644 index 0000000..d895071 --- /dev/null +++ b/libgtk_kylix/GTKPixbuf.pas @@ -0,0 +1,214 @@ +(* + GTK-Kylix Library: GTKPixbuf - Image handling routines + Version 0.6.2 (last updated 2003-03-30) + 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 GTKPixbuf; +{ $WEAKPACKAGEUNIT} + +interface + +uses glib2, gdk2, gdk2pixbuf, gtk2, Classes, GTKControls, GTKStdCtrls; + + +type + TGTKIconSize = (isInvalid, isMenu, isSmallToolbar, isLargeToolbar, isButton, isDND, isDialog); + +(****************************************** TGDKPIXBUF **************************************************************************) + TGDKPixbuf = class (TComponent) + private + function GetWidth: integer; + function GetHeight: integer; + function GetBPP: integer; + protected + public + FPixbuf: PGdkPixbuf; + constructor Create(AOwner: TComponent); override; + constructor CreateNew(AOwner: TComponent; const Width, Height, BPP: integer; const HasAlpha: boolean); + destructor Destroy; override; + function LoadFromFile(const FileName: string): boolean; + function LoadFromXPM(const Data: PPChar): boolean; + function LoadFromInline(Data: Pointer): boolean; + procedure Fill(const Pixel: Cardinal); + procedure ScaleSimple(const DestWidth, DestHeight: integer); + function Copy: PGdkPixbuf; + procedure CopyArea(Source: TGDKPixbuf; SourceX, SourceY, SourceWidth, SourceHeight, DestX, DestY: integer); + procedure SetFromStock(Stock_ID: string; IconSize: TGTKIconSize); + published + property Width: integer read GetWidth; + property Height: integer read GetHeight; + property BPP: integer read GetBPP; + end; + +(****************************************** TGTKIMAGE ***************************************************************************) + TGTKImage = class(TGTKMisc) + private + protected + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure LoadFromFile(const FileName: string); + procedure SetFromPixbuf(Pixbuf: TGDKPixbuf); + function GetPixbuf: PGdkPixbuf; + procedure CopyFromPixbuf(Pixbuf: TGDKPixbuf); + procedure SetFromStock(Stock_ID: string; IconSize: TGTKIconSize); + end; + +(********************************************************************************************************************************) +(********************************************************************************************************************************) +implementation + +uses SysUtils, DateUtils; + + +(********************************************************************************************************************************) +(********************************************************************************************************************************) +constructor TGDKPixbuf.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FPixbuf := nil; +end; + +constructor TGDKPixbuf.CreateNew(AOwner: TComponent; const Width, Height, BPP: integer; const HasAlpha: boolean); +begin + inherited Create(AOwner); + FPixbuf := gdk_pixbuf_new(GDK_COLORSPACE_RGB, HasAlpha, BPP, Width, Height); +end; + +destructor TGDKPixbuf.Destroy; +begin + if FPixbuf <> nil then gdk_pixbuf_unref(FPixbuf); + inherited Destroy; +end; + +function TGDKPixbuf.GetWidth: integer; +begin + Result := gdk_pixbuf_get_width(FPixbuf); +end; + +function TGDKPixbuf.GetHeight: integer; +begin + Result := gdk_pixbuf_get_height(FPixbuf); +end; + +function TGDKPixbuf.GetBPP: integer; +begin + Result := gdk_pixbuf_get_bits_per_sample(FPixbuf); +end; + +function TGDKPixbuf.LoadFromFile(const FileName: string): boolean; +var P: Pointer; + Error: PGError; +begin + Error := nil; + P := gdk_pixbuf_new_from_file(PChar(FileName), @Error); + Result := P <> nil; + if P <> nil then FPixbuf := P; +end; + +function TGDKPixbuf.LoadFromXPM(const Data: PPChar): boolean; +var P: Pointer; +begin + P := gdk_pixbuf_new_from_xpm_data(Data); + Result := P <> nil; + if P <> nil then FPixbuf := P; +end; + +function TGDKPixbuf.LoadFromInline(Data: Pointer): boolean; +var P: Pointer; + Error: PGError; +begin + Error := nil; + P := gdk_pixbuf_new_from_inline(-1, Pguint8(Data)^, True, @Error); + Result := P <> nil; + if Error <> nil then begin + WriteLn('TGDKPixbuf.LoadFromInline error: ', Error^.message); + g_error_free(Error); + end; + if P <> nil then FPixbuf := P; +end; + +procedure TGDKPixbuf.Fill(const Pixel: Cardinal); +begin + gdk_pixbuf_fill(FPixbuf, Pixel); +end; + +procedure TGDKPixbuf.ScaleSimple(const DestWidth, DestHeight: integer); +begin + FPixbuf := gdk_pixbuf_scale_simple(FPixbuf, DestWidth, DestHeight, GDK_INTERP_BILINEAR); +end; + +function TGDKPixbuf.Copy: PGdkPixbuf; +begin + Result := gdk_pixbuf_copy(FPixbuf); +end; + +procedure TGDKPixbuf.CopyArea(Source: TGDKPixbuf; SourceX, SourceY, SourceWidth, SourceHeight, DestX, DestY: integer); +begin + gdk_pixbuf_copy_area(Source.FPixbuf, SourceX, SourceY, SourceWidth, SourceHeight, FPixbuf, DestX, DestY); +end; + +procedure TGDKPixbuf.SetFromStock(Stock_ID: string; IconSize: TGTKIconSize); +begin + FPixbuf := gtk_widget_render_icon(gtk_label_new(nil), PChar(Stock_ID), Ord(IconSize), nil); +end; + + +(********************************************************************************************************************************) +(********************************************************************************************************************************) +constructor TGTKImage.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FWidget := gtk_image_new; + Show; +end; + +destructor TGTKImage.Destroy; +begin + inherited Destroy; +end; + +procedure TGTKImage.LoadFromFile(const FileName: string); +begin + gtk_image_set_from_file(PGtkImage(FWidget), PChar(FileName)); +end; + +function TGTKImage.GetPixbuf: PGdkPixbuf; +begin + Result := gtk_image_get_pixbuf(PGtkImage(FWidget)); +end; + +procedure TGTKImage.SetFromPixbuf(Pixbuf: TGDKPixbuf); +begin + gtk_image_set_from_pixbuf(PGtkImage(FWidget), Pixbuf.FPixbuf); +end; + +procedure TGTKImage.CopyFromPixbuf(Pixbuf: TGDKPixbuf); +begin + gtk_image_set_from_pixbuf(PGtkImage(FWidget), Pixbuf.Copy); +end; + +procedure TGTKImage.SetFromStock(Stock_ID: string; IconSize: TGTKIconSize); +begin + gtk_image_set_from_stock(PGtkImage(FWidget), PChar(Stock_ID), Ord(IconSize)); +end; + +(********************************************************************************************************************************) +end. -- cgit v1.2.3