2
0
Эх сурвалжийг харах

+ Added third gdk article

michael 24 жил өмнө
parent
commit
c2e90d2919

BIN
docs/gtk3ex/ex1.png


+ 106 - 0
docs/gtk3ex/ex1.pp

@@ -0,0 +1,106 @@
+program ex1;
+
+{$mode objfpc}
+
+uses
+ glib,gtk;
+
+var
+  Window       : PGtkWidget;
+  WinBox       : PGtkWidget;
+  MenuBar      : PGtkWidget;
+  DisplayLabel : PgtkWidget;
+
+procedure destroy(widget : pGtkWidget ; data: pgpointer ); cdecl;
+begin
+  gtk_main_quit();
+end;
+
+procedure menu(Data : GPointer; Action : Guint; Widget : pGtkWidget); cdecl;
+
+Var 
+  TheLabel : PgtkWidget;
+  LabelText : Pchar;
+  S : AnsiString;
+  
+begin
+  TheLabel  := g_list_nth_data(gtk_container_children(GTK_CONTAINER(Widget)),0);
+  gtk_label_get(gtk_Label(theLabel),@LabelText);
+  S := 'Chosen menu : ' + Strpas(Labeltext);
+  gtk_label_set_text(GTK_LABEL(DisplayLabel),pchar(S));
+end;
+
+{
+ TGtkItemFactoryEntry = record
+    path : Pgchar;
+    accelerator : Pgchar;
+    callback : TGtkItemFactoryCallback;
+    callback_action : guint;
+    item_type : Pgchar;
+ end;
+}
+
+Type
+  FC = TGtkItemFactoryCallback;
+
+Const 
+  NrMenuItems = 21;
+  TheMenu : Array[1..NrMenuItems] of TGtkItemFactoryEntry = (
+    (path:'/_File';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<Branch>'),
+    (path:'/File/_New';Accelerator:'<ctrl>N';Callback:FC(@Menu);Callback_action:1;item_type:Nil),
+    (path:'/File/_Open';Accelerator:'<control>O';Callback:FC(@Menu);Callback_action:1;item_type:Nil),
+    (path:'/File/_Save';Accelerator:'<control>S';Callback:FC(@Menu);Callback_action:1;item_type:Nil),
+    (path:'/File/sep1';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<Separator>'),
+    (path:'/File/E_xit';Accelerator:'<alt>X';Callback:FC(@destroy);Callback_action:1;item_type:Nil),
+    (path:'/_Radio';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<Branch>'),
+    (path:'/Radio/Radio _1';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<RadioItem>'),
+    (path:'/Radio/Radio _2';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<RadioItem>'),
+    (path:'/Radio/Radio _3';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<RadioItem>'),
+    (path:'/_Check';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<Branch>'),
+    (path:'/Check/Check _1';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<CheckItem>'),
+    (path:'/Check/Check _2';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<CheckItem>'),
+    (path:'/Check/Check _3';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<CheckItem>'),
+    (path:'/_Toggle';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<Branch>'),
+    (path:'/Toggle/Toggle _1';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<CheckItem>'),
+    (path:'/Toggle/Toggle _2';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<CheckItem>'),
+    (path:'/Toggle/Toggle _3';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<CheckItem>'),
+    (path:'/_Help';Accelerator:Nil;Callback:Nil;Callback_action:1;item_type:'<LastBranch>'),
+    (path:'/Help/Contents';Accelerator:'F1';Callback:FC(@Menu);Callback_action:1;item_type:Nil),
+    (path:'/Help/About';Accelerator:'<mod1>A';Callback:FC(@Menu);Callback_action:1;item_type:Nil)
+    );
+
+
+Procedure MakeMenu;
+
+Var
+  Factory : PGtkItemFactory;
+  Accel  : PGtkAccelGroup;
+
+begin
+  accel:=gtk_accel_group_new;
+  factory :=gtk_item_factory_new(GTK_MENU_BAR_TYPE,'<main>',accel);
+  gtk_item_factory_create_items(Factory,NrMenuItems,@TheMenu,Nil);
+  gtk_window_add_accel_group(GTK_Window(Window),accel);
+  MenuBar:=gtk_item_factory_get_widget (Factory, '<main>');
+end;
+
+    
+begin
+  gtk_init (@argc, @argv);
+  window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW(Window),'Menu using an item factory');  
+  gtk_widget_set_usize (Window, 300, 200);
+  gtk_signal_connect (PGTKOBJECT (window), 'destroy',
+                      GTK_SIGNAL_FUNC (@destroy), NULL);
+  WinBox := gtk_vbox_new(False,0);
+  gtk_widget_show(WinBox);
+  Gtk_container_add(GTK_CONTAINER(Window),WinBox);
+  MakeMenu;
+  gtk_widget_show(MenuBar);
+  Gtk_box_pack_start(GTK_BOX(Winbox),MenuBar,False,False,2);
+  DisplayLabel := gtk_label_new('Chosen menu : (none)');
+  gtk_widget_show(DisplayLabeL);
+  Gtk_box_pack_start(GTK_BOX(WinBox),DisplayLabel,TRUE,TRUE,10);
+  gtk_widget_show (window);
+  gtk_main ();
+end.

BIN
docs/gtk3ex/ex2.png


+ 145 - 0
docs/gtk3ex/ex2.pp

@@ -0,0 +1,145 @@
+program ex2;
+
+{$mode objfpc}
+
+uses
+ gdk,glib,gtk;
+
+
+procedure destroy(widget : pGtkWidget ; data: pgpointer ); cdecl;
+begin
+  gtk_main_quit();
+end;
+
+procedure menu(widget : pGtkWidget ; data: pgpointer ); cdecl;
+
+Var 
+  TheLabel : PgtkWidget;
+  LabelText : Pchar;
+  S : AnsiString;
+  
+begin
+  TheLabel  := g_list_nth_data(gtk_container_children(GTK_CONTAINER(Widget)),0);
+  gtk_label_get(gtk_Label(theLabel),@LabelText);
+  S := 'Chosen menu : ' + Strpas(Labeltext);
+  gtk_label_set_text(GTK_LABEL(data),pchar(S));
+end;
+
+Function AddMenuToMenuBar (MenuBar : PGtkMenuBar; 
+                           ShortCuts : PGtkAccelGroup;
+                           Caption : AnsiString;
+                           CallBack : TgtkSignalFunc;
+                           CallBackdata : Pointer;
+                           AlignRight : Boolean;
+                           Var MenuItem : PgtkMenuItem
+                           ) : PGtkMenu; 
+
+Var
+  Key : guint;
+  TheLabel : PGtkLabel;
+
+begin
+  MenuItem:=pgtkmenuitem(gtk_menu_item_new_with_label(''));
+  If AlignRight Then
+    gtk_menu_item_right_justify(MenuItem);
+  TheLabel:=GTK_LABEL(GTK_BIN(MenuItem)^.child);
+  Key:=gtk_label_parse_uline(TheLabel,Pchar(Caption));
+  If Key<>0 then
+    gtk_widget_add_accelerator(PGtkWidget(MenuItem),'activate_item',
+                               Shortcuts,Key,
+                               GDK_MOD1_MASK,GTK_ACCEL_LOCKED);         
+  Result:=PGtkMenu(gtk_menu_new);
+  If CallBack<>Nil then
+    gtk_signal_connect(PGtkObject(result),'activate',
+                        CallBack,CallBackdata);
+  gtk_widget_show(PgtkWidget(MenuItem));  
+  gtk_menu_item_set_submenu(MenuItem, PgtkWidget(Result));
+  gtk_menu_bar_append(MenuBar,PgtkWidget(MenuItem));
+end;
+
+Function AddItemToMenu (Menu : PGtkMenu; 
+                        ShortCuts : PGtkAccelGroup;
+                        Caption : AnsiString;
+                        ShortCut : AnsiString;
+                        CallBack : TgtkSignalFunc;
+                        CallBackdata : Pointer
+                       ) : PGtkMenuItem; 
+
+Var
+  Key,Modifiers : guint;
+  LocalAccelGroup : PGtkAccelGroup;                      
+  TheLabel : PGtkLabel;
+  
+begin
+  Result:=pgtkmenuitem(gtk_menu_item_new_with_label(''));
+  TheLabel:=GTK_LABEL(GTK_BIN(Result)^.child);
+  Key:=gtk_label_parse_uline(TheLabel,Pchar(Caption));
+  If Key<>0 then
+     begin
+     LocalAccelGroup:=gtk_menu_ensure_uline_accel_group(Menu);
+     gtk_widget_add_accelerator(PGtkWidget(result),'activate_item',
+                                LocalAccelGroup,Key,
+                                0,TGtkAccelFlags(0));         
+     end;
+  gtk_menu_append(Menu,pgtkWidget(result));
+  If (ShortCut<>'') and (ShortCuts<>Nil) then  
+    begin
+    gtk_accelerator_parse (pchar(ShortCut), @key, @modifiers);
+    gtk_widget_add_accelerator(PGtkWidget(result),'activate_item',
+                               ShortCuts,Key,
+                               modifiers, GTK_ACCEL_VISIBLE);
+    end;
+  If CallBack<>Nil then  
+    gtk_signal_connect(PGtkObject(result),'activate',
+                       CallBack,CallBackdata);
+  gtk_widget_show(PgtkWidget(result));  
+end;                       
+
+Function AddSeparatorToMenu(Menu : PgtkMenu) : PgtkMenuItem;
+
+begin
+  Result:=pgtkmenuitem(gtk_menu_item_new());
+  gtk_menu_append(Menu,pgtkWidget(result));
+  gtk_widget_show(PgtkWidget(result));
+end;
+
+var
+  Window       : PGtkWidget;
+  WinBox       : PGtkWidget;
+  MenuBar      : PGtkMenuBar;
+  FileMenu     : PGtkMenu;
+  TempMenuItem : PgtkMenuItem;
+  DisplayLabel : PgtkWidget;
+  HelpMenu     : PgtkMenu;
+  Accel        : PGtkAccelGroup;
+    
+begin
+  gtk_init (@argc, @argv);
+  window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW(Window),'Menu made manually');  
+  gtk_widget_set_usize (Window, 300, 200);
+  gtk_signal_connect (PGTKOBJECT (window), 'destroy',
+                    GTK_SIGNAL_FUNC (@destroy), NULL);
+  accel:=gtk_accel_group_new;
+  gtk_window_add_accel_group(GTK_Window(Window),accel);
+  WinBox := gtk_vbox_new(False,0);
+  gtk_widget_show(WinBox);
+  Gtk_container_add(GTK_CONTAINER(Window),WinBox);
+  MenuBar := PgtkMenuBar(gtk_menu_bar_new);
+  gtk_widget_show(PgtkWidget(MenuBar));
+  Gtk_box_pack_start(GTK_BOX(Winbox),PgtkWidget(MenuBar),False,False,2);
+  DisplayLabel := gtk_label_new('Chosen menu : (none)');
+  gtk_widget_show(DisplayLabeL);
+  Gtk_box_pack_start(GTK_BOX(WinBox),DisplayLabel,TRUE,TRUE,10);
+  FileMenu:=AddMenuToMenuBar(MenuBar,accel,'_File',Nil,Nil,False,TempMenuItem);
+  AddItemToMenu(FileMenu,accel,'_New','<control>N',TgtkSignalFunc(@menu),DisplayLabel);
+  AddItemToMenu(FileMenu,accel,'_Open','<control>O',TgtkSignalFunc(@menu),DisplayLabel);
+  AddItemToMenu(FileMenu,accel,'_Save','<control>S',TgtkSignalFunc(@menu),DisplayLabel);
+  AddSeparatorToMenu(PGtkMenu(FileMenu));
+  AddItemToMenu(FileMenu,accel,'_Quit','<control>Q',TgtkSignalFunc(@destroy),Nil);
+  HelpMenu:=AddMenuToMenuBar(MenuBar,Accel,'_Help',Nil,Nil,True,TempMenuItem);
+  AddItemToMenu(HelpMenu,accel,'_Contents','F1',TgtkSignalFunc(@menu),DisplayLabel);
+  AddItemToMenu(HelpMenu,accel,'_About','<alt>A',TgtkSignalFunc(@menu),DisplayLabel);
+  gtk_widget_show (window);
+  gtk_main ();
+end.

BIN
docs/gtk3ex/ex3.png


+ 197 - 0
docs/gtk3ex/ex3.pp

@@ -0,0 +1,197 @@
+program ex3;
+
+{$mode objfpc}
+
+uses
+ gdk,glib,gtk;
+
+
+procedure destroy(widget : pGtkWidget ; data: pgpointer ); cdecl;
+begin
+  gtk_main_quit();
+end;
+
+procedure menu(widget : pGtkWidget ; data: pgpointer ); cdecl;
+
+Var 
+  TheLabel : PgtkWidget;
+  LabelText : Pchar;
+  S : AnsiString;
+  
+begin
+  If Data<>Nil then
+    begin
+    TheLabel  := g_list_nth_data(gtk_container_children(GTK_CONTAINER(Widget)),0);
+    gtk_label_get(gtk_Label(theLabel),@LabelText);
+    S := 'Chosen menu : ' + Strpas(Labeltext);
+    gtk_label_set_text(GTK_LABEL(data),pchar(S));
+    end;
+end;
+
+Function AddMenuToMenuBar (MenuBar : PGtkMenuBar; 
+                           ShortCuts : PGtkAccelGroup;
+                           Caption : AnsiString;
+                           CallBack : TgtkSignalFunc;
+                           CallBackdata : Pointer;
+                           AlignRight : Boolean;
+                           Var MenuItem : PgtkMenuItem
+                           ) : PGtkMenu; 
+
+Var
+  Key : guint;
+  TheLabel : PGtkLabel;
+
+begin
+  MenuItem:=pgtkmenuitem(gtk_menu_item_new_with_label(''));
+  If AlignRight Then
+    gtk_menu_item_right_justify(MenuItem);
+  TheLabel:=GTK_LABEL(GTK_BIN(MenuItem)^.child);
+  Key:=gtk_label_parse_uline(TheLabel,Pchar(Caption));
+  If Key<>0 then
+    gtk_widget_add_accelerator(PGtkWidget(MenuItem),'activate_item',
+                               Shortcuts,Key,
+                               GDK_MOD1_MASK,GTK_ACCEL_LOCKED);         
+  Result:=PGtkMenu(gtk_menu_new);
+  If CallBack<>Nil then
+    gtk_signal_connect(PGtkObject(result),'activate',
+                        CallBack,CallBackdata);
+  gtk_widget_show(PgtkWidget(MenuItem));  
+  gtk_menu_item_set_submenu(MenuItem, PgtkWidget(Result));
+  gtk_menu_bar_append(MenuBar,PgtkWidget(MenuItem));
+end;
+
+Function AddItemToMenu (Menu : PGtkMenu; 
+                        ShortCuts : PGtkAccelGroup;
+                        Caption : AnsiString;
+                        ShortCut : AnsiString;
+                        CallBack : TgtkSignalFunc;
+                        CallBackdata : Pointer
+                       ) : PGtkMenuItem; 
+
+Var
+  Key,Modifiers : guint;
+  LocalAccelGroup : PGtkAccelGroup;                      
+  TheLabel : PGtkLabel;
+  
+begin
+  Result:=pgtkmenuitem(gtk_menu_item_new_with_label(''));
+  TheLabel:=GTK_LABEL(GTK_BIN(Result)^.child);
+  Key:=gtk_label_parse_uline(TheLabel,Pchar(Caption));
+  If Key<>0 then
+     begin
+     LocalAccelGroup:=gtk_menu_ensure_uline_accel_group(Menu);
+     gtk_widget_add_accelerator(PGtkWidget(result),'activate_item',
+                                LocalAccelGroup,Key,
+                                0,TGtkAccelFlags(0));         
+     end;
+  gtk_menu_append(Menu,pgtkWidget(result));
+  If (ShortCut<>'') and (ShortCuts<>Nil) then  
+    begin
+    gtk_accelerator_parse (pchar(ShortCut), @key, @modifiers);
+    gtk_widget_add_accelerator(PGtkWidget(result),'activate_item',
+                               ShortCuts,Key,
+                               modifiers, GTK_ACCEL_VISIBLE);
+    end;
+  If CallBack<>Nil then  
+    gtk_signal_connect(PGtkObject(result),'activate',
+                       CallBack,CallBackdata);
+  gtk_widget_show(PgtkWidget(result));  
+end;                       
+
+Function AddImageItemToMenu (Menu : PGtkMenu; 
+                        ShortCuts : PGtkAccelGroup;
+                        Caption : AnsiString;
+                        ShortCut : AnsiString;
+                        Bitmap : AnsiString;
+                        CallBack : TgtkSignalFunc;
+                        CallBackdata : Pointer
+                       ) : PGtkMenuItem; 
+
+Var
+  Key,Modifiers : guint;
+  LocalAccelGroup : PGtkAccelGroup;                      
+  TheLabel : PGtkLabel;
+  Image : PGtkPixmap;
+  hbox : PGtkHBox;
+  pixmap : PGdkPixmap;
+  BitMapdata : PGdkBitmap;
+  
+begin
+  Result:=pgtkmenuitem(gtk_menu_item_new);
+  hbox:=PGtkHBox(gtk_hbox_new(false,0));
+  gtk_container_add(pgtkcontainer(result),pgtkWidget(hbox));
+  pixmap:=gdk_pixmap_create_from_xpm(Nil,@BitmapData,Nil,pchar(BitMap));
+  Image := PgtkPixMap(gtk_pixmap_new(Pixmap,BitmapData));
+  gtk_box_pack_start(PGtkBox(hbox),pgtkWidget(image),false,false,0);                                   
+  TheLabel:=PgtkLabel(gtk_label_new(''));
+  gtk_box_pack_start(PGtkBox(hbox),pgtkWidget(TheLabel),True,True,0);
+  Key:=gtk_label_parse_uline(TheLabel,Pchar(Caption));
+  If Key<>0 then
+     begin
+     LocalAccelGroup:=gtk_menu_ensure_uline_accel_group(Menu);
+     gtk_widget_add_accelerator(PGtkWidget(result),'activate_item',
+                                LocalAccelGroup,Key,
+                                0,TGtkAccelFlags(0));         
+     end;
+  gtk_menu_append(Menu,pgtkWidget(result));
+  If (ShortCut<>'') and (ShortCuts<>Nil) then  
+    begin
+    gtk_accelerator_parse (pchar(ShortCut), @key, @modifiers);
+    gtk_widget_add_accelerator(PGtkWidget(result),'activate_item',
+                               ShortCuts,Key,
+                               modifiers, GTK_ACCEL_VISIBLE);
+    end;
+  If CallBack<>Nil then  
+    gtk_signal_connect(PGtkObject(result),'activate',
+                       CallBack,CallBackdata);
+  gtk_widget_show_all(PgtkWidget(result));  
+end;                       
+
+Function AddSeparatorToMenu(Menu : PgtkMenu) : PgtkMenuItem;
+
+begin
+  Result:=pgtkmenuitem(gtk_menu_item_new());
+  gtk_menu_append(Menu,pgtkWidget(result));
+  gtk_widget_show(PgtkWidget(result));
+end;
+
+var
+  Window       : PGtkWidget;
+  WinBox       : PGtkWidget;
+  MenuBar      : PGtkMenuBar;
+  FileMenu     : PGtkMenu;
+  TempMenuItem : PgtkMenuItem;
+  DisplayLabel : PgtkWidget;
+  HelpMenu     : PgtkMenu;
+  Accel        : PGtkAccelGroup;
+    
+begin
+  gtk_init (@argc, @argv);
+  window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW(Window),'Menu made manually');  
+  gtk_widget_set_usize (Window, 300, 200);
+  gtk_signal_connect (PGTKOBJECT (window), 'destroy',
+                    GTK_SIGNAL_FUNC (@destroy), NULL);
+  accel:=gtk_accel_group_new;
+  gtk_window_add_accel_group(GTK_Window(Window),accel);
+  WinBox := gtk_vbox_new(False,0);
+  gtk_widget_show(WinBox);
+  Gtk_container_add(GTK_CONTAINER(Window),WinBox);
+  MenuBar := PgtkMenuBar(gtk_menu_bar_new);
+  gtk_widget_show(PgtkWidget(MenuBar));
+  Gtk_box_pack_start(GTK_BOX(Winbox),PgtkWidget(MenuBar),False,False,2);
+  DisplayLabel := gtk_label_new('Chosen menu : (none)');
+  gtk_widget_show(DisplayLabeL);
+  Gtk_box_pack_start(GTK_BOX(WinBox),DisplayLabel,TRUE,TRUE,10);
+  FileMenu:=AddMenuToMenuBar(MenuBar,accel,'_File',Nil,Nil,False,TempMenuItem);
+  AddImageItemToMenu(FileMenu,accel,'_New','<control>N','filenew.xpm',TgtkSignalFunc(@menu),Nil);
+  AddImageItemToMenu(FileMenu,accel,'_Open','<control>O','fileopen.xpm',TgtkSignalFunc(@menu),Nil);
+  AddImageItemToMenu(FileMenu,accel,'_Save','<control>S','filesave.xpm',TgtkSignalFunc(@menu),Nil);
+  AddSeparatorToMenu(PGtkMenu(FileMenu));
+  AddItemToMenu(FileMenu,accel,'_Quit','<control>Q',TgtkSignalFunc(@destroy),Nil);
+  HelpMenu:=AddMenuToMenuBar(MenuBar,Accel,'_Help',Nil,Nil,True,TempMenuItem);
+  AddItemToMenu(HelpMenu,accel,'_Contents','F1',TgtkSignalFunc(@menu),DisplayLabel);
+  AddItemToMenu(HelpMenu,accel,'_About','<alt>A',TgtkSignalFunc(@menu),DisplayLabel);
+  gtk_widget_show (window);
+  gtk_main ();
+end.

+ 27 - 0
docs/gtk3ex/filenew.xpm

@@ -0,0 +1,27 @@
+/* XPM */
+static char *filenew[] = {
+/* width height num_colors chars_per_pixel */
+"    16    15        5            1",
+/* colors */
+". c #000000",
+"# c #c0c0c0",
+"a c #ffffff",
+"b c #dcdcdc",
+"c c #bfbfbf",
+/* pixels */
+"cccc.......ccccc",
+"cccc.aaaabb.cccc",
+"cccc.aaaa#ab.ccc",
+"cccc.aaaa#aab.cc",
+"cccc.aaaa#....cc",
+"cccc.aaaaa###.cc",
+"cccc.aaaaaaaa.cc",
+"cccc.aaaaaaaa.cc",
+"cccc.aaaaaaaa.cc",
+"cccc.aaaaaaaa.cc",
+"cccc.aaaaaaaa.cc",
+"cccc.aaaaaaaa.cc",
+"cccc.aaaaaaaa.cc",
+"cccc..........cc",
+"cccccccccccccccc"
+};

+ 28 - 0
docs/gtk3ex/fileopen.xpm

@@ -0,0 +1,28 @@
+/* XPM */
+static char *fileopen[] = {
+/* width height num_colors chars_per_pixel */
+"    16    15        6            1",
+/* colors */
+". c #000000",
+"# c #808080",
+"a c #c0c0c0",
+"b c #ffffff",
+"c c #dcdcdc",
+"d c #bfbfbf",
+/* pixels */
+"dddddddddddddd..",
+"ddddddddddddd...",
+"dd....dddddddddd",
+"dd.cbc.......ddd",
+"dd.bcbcbcbcb.ddd",
+"dd.cc..........d",
+"dd.bc.ccaaaaa#.d",
+"dd.c.ccacaaa#.dd",
+"dd.c.ccaaa#a#.dd",
+"dd..ccacaaa#.ddd",
+"dd..ccaaa#a#.ddd",
+"dd.########.dddd",
+"dd..........dddd",
+"dddddddddddddddd",
+"dddddddddddddddd"
+};

+ 30 - 0
docs/gtk3ex/filesave.xpm

@@ -0,0 +1,30 @@
+/* XPM */
+static char *filesave[] = {
+/* width height num_colors chars_per_pixel */
+"    16    16        7            1",
+/* colors */
+". c #ffffff",
+"# c #c3c3c3",
+"a c #666666",
+"b c #0000cc",
+"c c #000066",
+"d c #000000",
+"e c #b2c0dc",
+/* pixels */
+"eeeeeeeeeeeeeeee",
+"edddddddddddddee",
+"edb........bbdae",
+"edb.ddddd..bbdae",
+"edb........bbdae",
+"edb.ddd....bbdae",
+"edb........bbdae",
+"edb........bbdae",
+"edbbbbbbbbbbbdae",
+"edbcccccccccbdae",
+"edbcccccccccbdae",
+"edbcc#####ccbdae",
+"edbcc##cc#ccbdae",
+"edbcc##cc#ccbdae",
+"edddddddddddddae",
+"eeaaaaaaaaaaaaae"
+};