From 350ec0ab81d06ddf9a79bef8c9ed9ebe047facf4 Mon Sep 17 00:00:00 2001 From: ajgenius Date: Mon, 22 Sep 2003 15:34:07 +0000 Subject: [PATCH] use GtkImage and Pixbuf for GTK2 instead of Deprecated GtkPixmap git-svn-id: trunk@4659 - --- lcl/interfaces/gtk/gtkint.pp | 25 ++++- lcl/interfaces/gtk/gtkobject.inc | 162 ++++++++++++++++++++++--------- 2 files changed, 141 insertions(+), 46 deletions(-) diff --git a/lcl/interfaces/gtk/gtkint.pp b/lcl/interfaces/gtk/gtkint.pp index 70ea63ed1f..2e1607ead9 100644 --- a/lcl/interfaces/gtk/gtkint.pp +++ b/lcl/interfaces/gtk/gtkint.pp @@ -46,6 +46,12 @@ interface {off $Define Disable_GC_SysColors} +{$IFDEF gtk2} + {$IFDEF NoGdkPixbufLib} + {$UNDEF NoGdkPixbufLib} + {$EndIF} +{$EndIF} + uses InterfaceBase, {$IFDEF gtk2} @@ -73,9 +79,13 @@ type FRCFileAge: integer; FWidgetsWithResizeRequest: TDynHashArray; // hasharray of PGtkWidget FGTKToolTips: PGtkToolTips; + {$IFDef GTK1} FNoteBookCloseBtnPixmapImg: PGdkPixmap; FNoteBookCloseBtnPixmapMask: PGdkPixmap; - + {$Else} + FNoteBookCloseBtnPixbuf : PGdkPixbuf; + {$EndIf} + FStockNullBrush: HBRUSH; FStockBlackBrush: HBRUSH; FStockLtGrayBrush: HBRUSH; @@ -156,6 +166,10 @@ type // images procedure LoadXPMFromLazResource(const ResourceName: string; Window: PGdkWindow; var PixmapImg, PixmapMask: PGdkPixmap);virtual; + {$IfNDef NoGdkPixbufLib} + procedure LoadPixbufFromLazResource(const ResourceName: string; + var Pixbuf: PGdkPixbuf); + {$EndIf} procedure LoadFromXPMFile(Bitmap: TObject; Filename: PChar);virtual; procedure LoadFromPixbufFile(Bitmap: TObject; Filename: PChar);virtual; procedure LoadFromPixbufData(Bitmap : hBitmap; Data : PByte);virtual; @@ -172,8 +186,12 @@ type procedure ParseRCFile;virtual; // notebook - procedure GetNoteBookCloseBtnPixmap(Window: PGdkWindow; + {$IFDef GTK1} + procedure GetNoteBookCloseBtnImage(Window: PGdkWindow; var Img, Mask: PGdkPixmap);virtual; + {$Else} + procedure GetNoteBookCloseBtnImage(var Img: PGdkPixbuf);virtual; + {$EndIF} procedure AddDummyNoteBookPage(NoteBookWidget: PGtkNoteBook);virtual; procedure RemoveDummyNoteBookPage(NoteBookWidget: PGtkNotebook);virtual; procedure UpdateNotebookPageTab(ANoteBook, APage: TObject);virtual; @@ -368,6 +386,9 @@ end. { ============================================================================= $Log$ + Revision 1.151 2003/09/22 15:34:07 ajgenius + use GtkImage and Pixbuf for GTK2 instead of Deprecated GtkPixmap + Revision 1.150 2003/09/20 13:27:49 mattias varois improvements for ParentColor from Micha diff --git a/lcl/interfaces/gtk/gtkobject.inc b/lcl/interfaces/gtk/gtkobject.inc index 527977a8b5..b38172bfe9 100644 --- a/lcl/interfaces/gtk/gtkobject.inc +++ b/lcl/interfaces/gtk/gtkobject.inc @@ -6146,14 +6146,42 @@ begin PixmapImg:=gdk_pixmap_create_from_xpm_d(Window,PixmapMask,nil,ImgData); FreeMem(ImgData); end; + {------------------------------------------------------------------------------- - method TGtkObject GetNoteBookCloseBtnPixmap - Params: ANoteBook: TCustomNotebook; APage: TCustomPage + method TGtkObject LoadPixbufFromLazResource + Params: const ResourceName: string; + var Pixbuf: PGdkPixbuf Result: none - Loads the pixmap for the close button in the tabs of the TCustomNoteBook(s). + Loads a pixbuf from a lazarus resource. The resource must be a XPM file. -------------------------------------------------------------------------------} -procedure TgtkObject.GetNoteBookCloseBtnPixmap(Window: PGdkWindow; +{$IfNDef NoGdkPixbufLib} +procedure TGtkObject.LoadPixbufFromLazResource(const ResourceName: string; + var Pixbuf: PGdkPixbuf); +var + ImgData: PPChar; +begin + Pixbuf:=nil; + try + ImgData:=LazResourceXPMToPPChar(ResourceName); + except + on e: Exception do + writeln('WARNING: TGtkObject.LoadXPMFromLazResource: '+e.Message); + end; + pixbuf:=gdk_pixbuf_new_from_xpm_data(ImgData); + FreeMem(ImgData); +end; +{$EndIF} + +{------------------------------------------------------------------------------- + method TGtkObject GetNoteBookCloseBtnImage + Params: + Result: none + + Loads the image for the close button in the tabs of the TCustomNoteBook(s). +-------------------------------------------------------------------------------} +{$IfDef GTK1} +procedure TgtkObject.GetNoteBookCloseBtnImage(Window: PGdkWindow; var Img, Mask: PGdkPixmap); begin if (FNoteBookCloseBtnPixmapImg=nil) @@ -6164,6 +6192,14 @@ begin Img:=FNoteBookCloseBtnPixmapImg; Mask:=FNoteBookCloseBtnPixmapMask; end; +{$Else} +procedure TgtkObject.GetNoteBookCloseBtnImage(var Img: PGdkPixbuf); +begin + if (FNoteBookCloseBtnPixbuf=nil) then + LoadPixbufFromLazResource('tnotebook_close_tab', FNoteBookCloseBtnPixbuf); + Img:=FNoteBookCloseBtnPixbuf; +end; +{$EndIF} {------------------------------------------------------------------------------- procedure AddDummyNoteBookPage(NoteBookWidget: PGtkNoteBook); @@ -6232,22 +6268,28 @@ var PageWidget: PGtkWidget; // the page (content widget) TabWidget: PGtkWidget; // the tab (hbox containing a pixmap, a label // and a close button) - TabPixmapWidget: PGtkWidget; // the pixmap in the tab + TabImageWidget: PGtkWidget; // the pixmap in the tab TabLabelWidget: PGtkWidget; // the label in the tab TabCloseBtnWidget: PGtkWidget;// the close button in the tab - TabCloseBtnPixmapWidget: PGtkWidget; // the pixmap in the close button + TabCloseBtnImageWidget: PGtkWidget; // the pixmap in the close button MenuWidget: PGtkWidget; // the popup menu (hbox containing a pixmap and // a label) - MenuPixmapWidget: PGtkWidget;// the pixmap in the popup menu item + MenuImageWidget: PGtkWidget;// the pixmap in the popup menu item MenuLabelWidget: PGtkWidget; // the label in the popup menu item - procedure UpdateTabPixmap; + procedure UpdateTabImage; var + {$IfDef GTK1} Img: PGdkPixmap; Mask: PGdkBitmap; + {$Else} + Img: PGdkPixbuf; + {$EndIf} begin Img:=nil; + {$IfDef GTK1} Mask:=nil; + {$EndIf} if (TheNoteBook.Images<>nil) and (ThePage.ImageIndex>=0) and (ThePage.ImageIndexnil then begin // page has an image - if TabPixmapWidget<>nil then begin + if TabImageWidget<>nil then begin // there is already a pixmap for the image in the tab // -> replace the image - gtk_pixmap_set(PGtkPixmap(TabPixmapWidget),Img,Mask); + {$IfDef GTK1} + gtk_pixmap_set(PGtkPixmap(TabImageWidget),Img,Mask); + {$Else} + gtk_image_set_from_pixbuf(GTK_IMAGE(TabImageWidget), Img); + {$EndIf} end else begin // there is no pixmap for the image in the tab // -> insert one ot the left side of the label - TabPixmapWidget:=gtk_pixmap_new(Img,Mask); - gtk_object_set_data(PGtkObject(TabWidget),'TabPixmap',TabPixmapWidget); - gtk_widget_show(TabPixmapWidget); - gtk_box_pack_start_defaults(PGtkBox(TabWidget),TabPixmapWidget); - gtk_box_reorder_child(PGtkBox(TabWidget),TabPixmapWidget,0); + {$IfDef GTK1} + TabImageWidget:=gtk_pixmap_new(Img,Mask); + {$Else} + TabImageWidget:=gtk_image_new_from_pixbuf(Img); + {$EndIf} + gtk_object_set_data(PGtkObject(TabWidget),'TabImage',TabImageWidget); + gtk_widget_show(TabImageWidget); + gtk_box_pack_start_defaults(PGtkBox(TabWidget),TabImageWidget); + gtk_box_reorder_child(PGtkBox(TabWidget),TabImageWidget,0); end; - if MenuPixmapWidget<>nil then begin + if MenuImageWidget<>nil then begin // there is already a pixmap for the image in the menu // -> replace the image - gtk_pixmap_set(PGtkPixmap(MenuPixmapWidget),Img,Mask); + {$IfDef GTK1} + gtk_pixmap_set(PGtkPixmap(MenuImageWidget),Img,Mask); + {$Else} + gtk_image_set_from_pixbuf(GTK_IMAGE(MenuImageWidget), Img); + {$EndIf} end else begin // there is no pixmap for the image in the menu // -> insert one at the left side of the label - MenuPixmapWidget:=gtk_pixmap_new(Img,Mask); - gtk_object_set_data(PGtkObject(MenuWidget),'TabPixmap',MenuPixmapWidget); - gtk_widget_show(MenuPixmapWidget); - gtk_box_pack_start_defaults(PGtkBox(MenuWidget),MenuPixmapWidget); - gtk_box_reorder_child(PGtkBox(MenuWidget),MenuPixmapWidget,0); + {$IfDef GTK1} + MenuImageWidget:=gtk_pixmap_new(Img,Mask); + {$Else} + MenuImageWidget:=gtk_image_new_from_pixbuf(Img); + {$EndIf} + gtk_object_set_data(PGtkObject(MenuWidget),'TabImage',MenuImageWidget); + gtk_widget_show(MenuImageWidget); + gtk_box_pack_start_defaults(PGtkBox(MenuWidget),MenuImageWidget); + gtk_box_reorder_child(PGtkBox(MenuWidget),MenuImageWidget,0); end; end else begin // page does not have an image - if TabPixmapWidget<>nil then begin + if TabImageWidget<>nil then begin // there is a pixmap for an old image in the tab // -> remove the pixmap widget - DestroyWidget(TabPixmapWidget); - gtk_object_set_data(PGtkObject(TabWidget), 'TabPixmap', nil); - TabPixmapWidget:=nil; + DestroyWidget(TabImageWidget); + gtk_object_set_data(PGtkObject(TabWidget), 'TabImage', nil); + TabImageWidget:=nil; end; - if MenuPixmapWidget<>nil then begin + if MenuImageWidget<>nil then begin // there is a pixmap for an old image in the menu // -> remove the pixmap widget - DestroyWidget(MenuPixmapWidget); - gtk_object_set_data(PGtkObject(MenuWidget), 'TabPixmap', nil); - MenuPixmapWidget:=nil; + DestroyWidget(MenuImageWidget); + gtk_object_set_data(PGtkObject(MenuWidget), 'TabImage', nil); + MenuImageWidget:=nil; end; end; end; @@ -6317,9 +6375,18 @@ var procedure UpdateTabCloseBtn; var - Img, Mask: PGdkPixmap; + {$IfDef GTK1} + Img: PGdkPixmap; + Mask: PGdkBitmap; + {$Else} + Img: PGdkPixbuf; + {$EndIf} begin - GetNoteBookCloseBtnPixmap(GetControlWindow(NoteBookWidget),Img,Mask); + {$IfDef GTK1} + GetNoteBookCloseBtnImage(GetControlWindow(NoteBookWidget),Img,Mask); + {$Else} + GetNoteBookCloseBtnImage(Img); + {$EndIf} if (nboShowCloseButtons in TheNotebook.Options) and (Img<>nil) then begin // close buttons enabled if TabCloseBtnWidget=nil then begin @@ -6330,12 +6397,16 @@ var TabCloseBtnWidget); begin // put a pixmap into the button - TabCloseBtnPixmapWidget:=gtk_pixmap_new(Img,Mask); - gtk_object_set_data(PGtkObject(TabCloseBtnWidget),'TabCloseBtnPixmap', - TabCloseBtnPixmapWidget); - gtk_widget_show(TabCloseBtnPixmapWidget); + {$IfDef GTK1} + TabCloseBtnImageWidget:=gtk_pixmap_new(Img,Mask); + {$Else} + TabCloseBtnImageWidget:=gtk_image_new_from_pixbuf(Img); + {$EndIf} + gtk_object_set_data(PGtkObject(TabCloseBtnWidget),'TabCloseBtnImage', + TabCloseBtnImageWidget); + gtk_widget_show(TabCloseBtnImageWidget); gtk_container_add(PGtkContainer(TabCloseBtnWidget), - TabCloseBtnPixmapWidget); + TabCloseBtnImageWidget); end; gtk_widget_show(TabCloseBtnWidget); g_signal_connect(PGtkObject(TabCloseBtnWidget), 'clicked', @@ -6370,11 +6441,11 @@ begin TabWidget:=gtk_notebook_get_tab_label(PGtkNoteBook(NotebookWidget), PageWidget); if TabWidget<>nil then begin - TabPixmapWidget:=gtk_object_get_data(PGtkObject(TabWidget), 'TabPixmap'); + TabImageWidget:=gtk_object_get_data(PGtkObject(TabWidget), 'TabImage'); TabLabelWidget:=gtk_object_get_data(PGtkObject(TabWidget), 'TabLabel'); TabCloseBtnWidget:=gtk_object_get_data(PGtkObject(TabWidget),'TabCloseBtn'); end else begin - TabPixmapWidget:=nil; + TabImageWidget:=nil; TabLabelWidget:=nil; TabCloseBtnWidget:=nil; end; @@ -6383,14 +6454,14 @@ begin MenuWidget:=gtk_notebook_get_menu_label(PGtkNoteBook(NotebookWidget), PageWidget); if MenuWidget<>nil then begin - MenuPixmapWidget:=gtk_object_get_data(PGtkObject(MenuWidget), 'TabPixmap'); + MenuImageWidget:=gtk_object_get_data(PGtkObject(MenuWidget), 'TabImage'); MenuLabelWidget:=gtk_object_get_data(PGtkObject(MenuWidget), 'TabLabel'); end else begin - MenuPixmapWidget:=nil; + MenuImageWidget:=nil; MenuLabelWidget:=nil; end; - UpdateTabPixmap; + UpdateTabImage; UpdateTabLabel; UpdateTabCloseBtn; end; @@ -6425,7 +6496,7 @@ begin // create the tab (hbox container) TabWidget:=gtk_hbox_new(false,1); begin - gtk_object_set_data(PGtkObject(TabWidget), 'TabPixmap', nil); + gtk_object_set_data(PGtkObject(TabWidget), 'TabImage', nil); gtk_object_set_data(PGtkObject(TabWidget), 'TabCloseBtn', nil); // put a label into the tab TabLabelWidget:=gtk_label_new(''); @@ -6439,7 +6510,7 @@ begin MenuWidget:=gtk_hbox_new(false,2); begin // put a pixmap into the menu - gtk_object_set_data(PGtkObject(MenuWidget), 'TabPixmap', nil); + gtk_object_set_data(PGtkObject(MenuWidget), 'TabImage', nil); // put a label into the menu MenuLabelWidget:=gtk_label_new(''); gtk_object_set_data(PGtkObject(MenuWidget), 'TabLabel', MenuLabelWidget); @@ -8193,6 +8264,9 @@ end; { ============================================================================= $Log$ + Revision 1.422 2003/09/22 15:34:07 ajgenius + use GtkImage and Pixbuf for GTK2 instead of Deprecated GtkPixmap + Revision 1.421 2003/09/20 13:27:49 mattias varois improvements for ParentColor from Micha