ÆþÌçGTK+

Size: px
Start display at page:

Download "ÆþÌçGTK+"

Transcription

1 GTK

2

3 iii GTK+ GUI GIMP GIMP GTK+ Windows GNOME GTK+ GTK+ GNOME KDE Qt GTK+ GTK+ GUI GUI Glade Anjuta GUI GUI GTK+ GTK+ GTK+ GUI

4 iv C GUI GTK+ GUI GTK+ GTK+ GTK+ GTK+ 1 GTK+ GTK+ Ubuntu 9.04 Remix GTK+ 2 GTK+ GTK+ GTK+ GTK+ 3 GTK+ GUI 4 GLib GLib C GLib 5 GdkPixbuf GTK+ 2 GdkPixbuf GdkPixbuf PNG JPEG GdkPixbuf 6 cairo cairo GTK+ cairo 7 GTK+ GUI 8 GTK+ 9 GTK+/GNOME Anjuta Anjuta Glade GUI GTK+ 10 A GTK+ GTK+ B Visual Studio 2008 Express Edition Windows Visual Studio 2008 Express Edition C GtkStockItem GTK+ GtkStockItem

5 v D Web Ubuntu 9.04 Remix OS GTK+ A p. 277 $ $ sudo aptitude install libgtk2.0-dev GNU 2 1 : image-viewer.c 1 # include <gtk/ gtk. h> 2 3 /* 4 5 */ 6 int 7 main ( int argc, char** argv) 8 { 9 GtkWidget* window; /* GTK+ */ 12 gtk_init (&argc, &argv); Web Web sugaya@iim.cs.tut.ac.jp

6 vi

7 vii iii 1 GTK GTK GUI GTK GUI GTK devhelp

8 viii GTK GLib GLib Unicode GList : : GHashTable GdkPixbuf GtkImage GtkDrawingArea GUI cairo cairo GTK

9 ix PS EPS SVG UI

10 x GtkCellRenderer GUI Glade GUI main.c

11 xi GtkIconView A GTK+ 277 A.1 GTK+ Fedora A.2 GTK+ OpenSUSE A.3 GTK+ Windows Vista B Visual Studio 2008 Express Edition 283 C GtkStockItem 287 D 291 E Gdk 293 E.1 Gdk E E E E E E E E E E F GNOME 303 F.1 GNOME F.2 GNOME F F

12

13 1 1 GTK+ 1.1 GTK+ GTK+ *1 GUI Graphical User Interface GIMP * GIMP GNOME *3 GTK+ + GTK+ 2 Pango ATK cairo 2 GTK+ GLib GIMP *1 GTK+ The GIMP Toolkit : *2 GIMP The GNU Image Manipulation Program: *3 GNOME: The Free Software Desktop Project: 第 1 章 GTK+ って何だろう

14 2 1 GTK+ Pango... ATK... GDK... GdkPixbuf... cairo... GTK+ Web GTK+ GTK+ Web GTK+ 1.2 GIMP Inkscape Gnumeric gedit eog Eye of GNOME 1.3 GTK+ 1.2 GUI GTK+ GUI GTK+ GTK+ GUI Xaw... Project Athena X Window System Motif... Motif X Window System GUI Motif Motif Motif LessTif... Motif Swing... Java GUI Tk... Tcl GUI Qt... C++ GUI GNOME KDE 1.2 gtk.org GTK+ 第 1 章 GTK+ って何だろう

15 1.3 GTK+ 3 (a) gedit (b) eog 1.3 GTK+ 1.3 GTK+ GTK+... GTK+ GNU LGPL *4... GTK+ GUI C... C++ Qt C++ GTK+ C C++ C GUI... GTK+... GTK+... GTK+ C C C++ C# Python Ruby *5... GTK+ Linux Windows Mac OS X 1.4 GTK+ GTK+ OS Linux Unix OS Ubuntu 9.04 Remix Ubuntu 9.04 Remix GTK+ A p. 277 Fedora 11 OpenSUSE 11.1 Windows Vista Ubuntu 9.04 Remix Ubuntu Japanese Local Community Team Web *4 GNU Lesser General Public License: *5 binding: 第 1 章 GTK+ って何だろう

16 4 1 GTK+ jp/ Ubuntu 9.04 Remix GTK+ Ubuntu GTK+ GUI GUI Synaptic Synaptic Synaptic GTK+ 1. Synaptic Synaptic 2. Synaptic libgtk2.0-dev (S) 1.5(a) 3. libgtk2.0-dev (M) 1.5(b) (a) 1.5 (b) 第 1 章 GTK+ って何だろう

17 Synaptic (a) (A) 1.6 (a) (b) (b) (C) GTK+ 9 Anjuta gtranslator devhelp Ubuntu aptitude aptitude GUI libgtk2.0-dev aptitude $ sudo aptitude install libgtk2.0-dev y -y y : MB 68.6MB 第 1 章 GTK+ って何だろう

18 6 1 GTK+? [Y/n/?] y Anjuta gtranslator devhelp $ sudo aptitude install anjuta devhelp gtranslator 第 1 章 GTK+ って何だろう

19 7 2 GTK+ 2.1 GTK+ 2.1 GTK+ GTK+ Windows A p. 277 B p GTK tutorial tutorial $ mkdir tutorial $ cd tutorial tutorial 2 1 tutorial image-viewer.c Ubuntu gedit 2.2 $ gedit image-viewer.c 第 2 章 GTK+ で画像ビューワを作ってみよう

20 8 2 GTK : image-viewer.c 1 # include <gtk/ gtk. h> 2 3 /* 4 5 */ 6 int 7 main ( int argc, char** argv) 8 { 9 GtkWidget * window; /* GTK+ */ 12 gtk_init (&argc, &argv); 13 /* */ 14 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 15 /* */ 16 gtk_ widget_ set_ size_ request ( window, 300, 200); 2.2 gedit 第 2 章 GTK+ で画像ビューワを作ってみよう

21 /* */ 18 gtk_ widget_ show ( window); 19 /* */ 20 gtk_main (); return 0; 23 } GTK+ pkg-config pkg-config $ pkg-config --cflags gtk D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/at k-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/pixman-1 -I/u sr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/incl ude/glib-2.0 -I/usr/lib/glib-2.0/include GTK+ pkg-config $ gcc image-viewer.c -o image-viewer pkg-config --cflags --libs gtk+-2.0 Shift+@ image-viewer $./image-viewer GTK+ gtk.h GTK+ 第 2 章 GTK+ で画像ビューワを作ってみよう

22 10 2 GTK+ 2.3 GTK+ 12 gtk init GTK+ GTK+ GTK+ void gtk_init (int *argc, char ***argv); gtk window new GTK WINDOW TOPLEVEL GTK WINDOW POPUP GtkWidget* gtk_ window_ new ( GtkWindowType type); 1 GUI GTK+ 9 window gtk window new window 16 gtk widget set size request void gtk_ widget_ set_ size_ request ( GtkWidget * widget, gint width, gint height); gtk widget show void gtk_ widget_ show ( GtkWidget * widget); 1 第 2 章 GTK+ で画像ビューワを作ってみよう

23 void gtk_ main ( void); devhelp GTK+ devhelp devhelp gtk window new devhelp gtk window new gtk window gtk window devhelp GTK+ GTK gtk button new with label Quit 第 2 章 GTK+ で画像ビューワを作ってみよう

24 12 2 GTK+ 2.5 GtkWidget *button; button = gtk_button_new_with_label ("Quit"); gtk_container_add (GTK_CONTAINER (window), button); 1 gtk container add GTK CONTAINER GObject G OBJECT void gtk_ container_ add ( GtkContainer * container, GtkWidget * widget); 1 2 gtk widget show gtk widget show all gtk_widget_show_all (window); void gtk_ widget_ show_ all ( GtkWidget * widget); 第 2 章 GTK+ で画像ビューワを作ってみよう

25 clicked cb button clicked g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_button_clicked), NULL); g signal connect GTK+ C++ GObject 1 G OBJECT() GObject static void cb_button_clicked (GtkWidget *button, gpointer user_data) { gtk_main_quit (); } 1 2 g signal connect 4 gtk main quit gtk main void gtk_ main_ quit ( void); $ gcc image-viewer.c -o image-viewer pkg-config --cflags --libs gtk : image-viewer.c 1 # include <gtk/ gtk. h> 2 第 2 章 GTK+ で画像ビューワを作ってみよう

26 14 2 GTK+ 3 /* 4 5 */ 6 static void 7 cb_ button_ clicked ( GtkWidget * button, gpointer user_ data) 8 { 9 /* */ 10 gtk_main_quit (); 11 } /* */ 16 int 17 main ( int argc, char ** argv) 18 { 19 GtkWidget * window; /* GTK+ */ 22 gtk_init (&argc, &argv); 23 /* */ 24 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 25 /* */ 26 gtk_ widget_ set_ size_ request ( window, 300, 200); 27 { 28 GtkWidget * button; /* */ 31 button = gtk_ button_ new_ with_ label (" Quit"); 32 /* */ 33 gtk_ container_ add ( GTK_ CONTAINER ( window), button); 34 /* */ 35 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 36 G_ CALLBACK ( cb_ button_ clicked), NULL); 37 } 38 /* */ 39 gtk_ widget_ show_ all ( window); 40 /* */ 41 gtk_main (); return 0; 44 } $./image-viewer 2.6 Quit gtk widget show gtk widget show all 第 2 章 GTK+ で画像ビューワを作ってみよう

27 p. 69 GtkWidget *image; image = gtk_image_new_from_file (argv[1]); gtk image new from file 5.1 p. 66 argv[1] 1 image GtkWidget* gtk_ image_ new_ from_ file ( const gchar * filename); GtkWidget *vbox; vbox = gtk_vbox_new (FALSE, 2); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_box_pack_start (GTK_BOX (vbox), image, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); gtk vbox new GtkWidget* gtk_ vbox_ new ( gboolean homogeneous, gint spacing); 第 2 章 GTK+ で画像ビューワを作ってみよう

28 16 2 GTK+ 1 2 TRUE FALSE gtk box pack start p : image-viewer.c 1 # include <gtk/ gtk. h> 2 # include <stdlib. h> 3 4 /* 5 6 */ 7 static void 8 cb_ button_ clicked ( GtkWidget * button, gpointer user_ data) 9 { 10 /* */ 11 gtk_main_quit (); 12 } /* */ 17 int 18 main ( int argc, char ** argv) 19 { 20 GtkWidget * window; /* */ 23 if (argc!= 2) 24 { 25 g_print ("Usage: %s image -file\n", argv[0]); 26 exit (1); 27 } 28 /* GTK+ */ 29 gtk_init (&argc, &argv); 30 /* */ 31 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 32 /* */ 33 gtk_ widget_ set_ size_ request ( window, 300, 200); 34 { 35 GtkWidget * vbox; /* */ 38 vbox = gtk_ vbox_ new ( FALSE, 2); 39 /* */ 40 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); 41 { 42 GtkWidget * image; 43 GtkWidget * button; /* */ 46 image = gtk_ image_ new_ from_ file ( argv[ 1]); 47 /* */ 48 gtk_box_pack_start (GTK_BOX (vbox), image, TRUE, TRUE, 0); /* */ 第 2 章 GTK+ で画像ビューワを作ってみよう

29 button = gtk_ button_ new_ with_ label (" Quit"); 52 /* */ 53 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), button, FALSE, FALSE, 0); 54 /* */ 55 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 56 G_ CALLBACK ( cb_ button_ clicked), NULL); 57 } 58 } 59 /* */ 60 gtk_ widget_ show_ all ( window); 61 /* */ 62 gtk_main (); return 0; 65 } p. 9 $./image-viewer ~/images/bird.png 2.7(a) 2.7(a) 2.7(b) (a) (b) 2.7 (a) (b) 第 2 章 GTK+ で画像ビューワを作ってみよう

30 18 2 GTK GTK+ GtkWidget *scroll_window; scroll_window = gtk_scrolled_window_new (NULL, NULL); gtk scrolled window new NULL OK gtk scrolled window add with viewport gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scroll_window), image); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk scrolled window set policy GTK POLICY AUTOMATIC : image-viewer.c 1 # include <gtk/ gtk. h> 2 # include <stdlib. h> 3 4 /* 5 6 */ 7 static void 8 cb_ button_ clicked ( GtkWidget * button, gpointer user_ data) 9 { 第 2 章 GTK+ で画像ビューワを作ってみよう

31 /* */ 11 gtk_main_quit (); 12 } /* */ 17 int 18 main ( int argc, char ** argv) 19 { 20 GtkWidget * window; /* */ 23 if (argc!= 2) 24 { 25 g_print ("Usage: %s image -file\n", argv[0]); 26 exit (1); 27 } 28 /* GTK+ */ 29 gtk_init (&argc, &argv); /* */ 32 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 33 /* */ 34 gtk_ widget_ set_ size_ request ( window, 300, 200); 35 { 36 GtkWidget* vbox; /* */ 39 vbox = gtk_ vbox_ new ( FALSE, 2); 40 /* */ 41 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); 42 { 43 GtkWidget * scroll_ window; 44 GtkWidget * button; /* */ 47 scroll_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 48 /* */ 49 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), scroll_window, TRUE, TRUE, 0); 50 /* */ 51 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW 52 ( scroll_ window), 53 GTK_POLICY_AUTOMATIC, 54 GTK_ POLICY_ AUTOMATIC); 55 { 56 GtkWidget * image; /* */ 59 image = gtk_ image_ new_ from_ file ( argv[ 1]); 60 /* */ 61 gtk_ scrolled_ window_ add_ with_ viewport ( GTK_ SCROLLED_ WINDOW 62 ( scroll_ window), image); 63 } 64 /* */ 65 button = gtk_ button_ new_ with_ label (" Quit"); 66 /* */ 67 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 68 G_ CALLBACK ( cb_ button_ clicked), NULL); 69 /* */ 70 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), button, FALSE, FALSE, 0); 71 } 72 } 73 /* */ 74 gtk_ widget_ show_ all ( window); 75 /* */ 76 gtk_main (); return 0; 79 } 第 2 章 GTK+ で画像ビューワを作ってみよう

32 20 2 GTK+ 2.8 $./image-viewer ~/images/bird.png Open Quit 2 Quit Quit Open GtkUIManager GtkUIManager GUI GtkUIManager 第 2 章 GTK+ で画像ビューワを作ってみよう

33 XML XML static const gchar *menu_info = "<ui>" " <menubar name= Menubar >" " <menu name= File >" " <menuitem name= Open />" " <separator/>" " <menuitem name= Quit />" " </menu>" " </menubar>" "</ui>"; <ui></ui> <menubar></menubar> <menu></menu> <menuitem></menuitem> File Open Quit Open Quit File Open Quit ID GtkActionEntry 6 1. ID static GtkActionEntry entries[] = { {"File", NULL, "_File"}, {"Open", GTK_STOCK_OPEN, "_Open", "<control>o", "Open an image", G_CALLBACK (cb_open)}, {"Quit", GTK_STOCK_QUIT, "_Quit", "<control>q", "Quit this program", G_CALLBACK (cb_quit)} }; 2 GTK STOCK OPEN GTK STOCK QUIT GTK p. 160 第 2 章 GTK+ で画像ビューワを作ってみよう

34 22 2 GTK GtkUIManager 1. UI UI 5. UI UI GtkUIManager *ui; ui = gtk_ui_manager_new (); GtkActionGroup gtk action group add actions GtkActionGroup *actions; actions = gtk_action_group_new ("filemenu"); gtk_action_group_add_actions (actions, entries, sizeof (entries) / sizeof (entries[0]), parent); gtk action group new UI ID void gtk_ action_ group_ add_ actions ( GtkActionGroup * action_group, const GtkActionEntry * entries, guint n_entries, gpointer user_ data); UI gtk_ui_manager_insert_action_group (ui, actions, 0); gtk ui manager insert action group UI 3 0 void gtk_ ui_ manager_ insert_ action_ group ( GtkUIManager * self, GtkActionGroup * action_group, gint pos); UI UI 第 2 章 GTK+ で画像ビューワを作ってみよう

35 gtk_ui_manager_add_ui_from_string (ui, menu_info, -1, NULL); gtk ui manager add ui from string 3 1 guint gtk_ ui_ manager_ add_ ui_ from_ string ( GtkUIManager * self, const gchar * buffer, gssize length, GError **error); UI UI ID GtkActionEntry gtk window add accel group gtk_window_add_accel_group (GTK_WINDOW (parent), gtk_ui_manager_get_accel_group (ui)); 2 GtkAccelGroup gtk ui manager get accel group void gtk_ window_ add_ accel_ group ( GtkWindow * window, GtkAccelGroup * accel_ group); UI gtk ui manager get widget name / /Menubar / GtkWidget* gtk_ ui_ manager_ get_ widget ( GtkUIManager * self, const gchar * path); 1 2 UI UI cb quit UI 第 2 章 GTK+ で画像ビューワを作ってみよう

36 24 2 GTK g object set data g object get data GObject GObject g object set data 110 g_object_set_data (G_OBJECT (window), "ui", (gpointer) ui); ui UI g object get data GtkUIManager *ui; ui = (GtkUIManager *) g_object_get_data (G_OBJECT (window), "ui"); UI UI UI $./image-viewer ~/images/bird.png : image-viewer.c 1 # include <gtk/ gtk. h> 2 # include <stdlib. h> 3 4 /* 5 O p e n 6 */ 7 static void 8 cb_ open ( GtkAction * action, gpointer user_ data) 9 { 10 g_ print (" This function is not implemented yet.\ n"); 第 2 章 GTK+ で画像ビューワを作ってみよう

37 } /* 14 Q u i t 15 */ 16 static void 17 cb_ quit ( GtkAction * action, gpointer user_ data) 18 { 19 GObject * window = G_ OBJECT ( user_ data); g_object_unref (g_object_get_data (window, "ui")); 22 gtk_main_quit (); 23 } /* 26 * 27 */ 28 static const gchar * menu_ info = 29 " <ui >" 30 " <menubar name= Menubar >" 31 " <menu name= File action= File >" 32 " <menuitem name= Open action= Open / >" 33 " <separator/ >" 34 " <menuitem name= Quit action= Quit / >" 35 " </menu >" 36 " </menubar >" 37 " </ui >"; /* 40 * 41 */ 42 static GtkActionEntry entries[] = { 43 {"File", NULL, "_File"}, 44 {" Open", GTK_STOCK_OPEN, "_ Open", " <control >O", " Open an image", 45 G_CALLBACK (cb_open)}, 46 {" Quit", GTK_STOCK_QUIT, "_ Quit", " <control >Q", " Quit this program", 47 G_ CALLBACK ( cb_ quit)} 48 }; /* 51 * 52 */ 53 static GtkUIManager* 54 create_ menu ( GtkWidget * parent) 55 { 56 GtkUIManager * ui; 57 GtkActionGroup * actions; /* U I */ 60 ui = gtk_ ui_ manager_ new (); 61 /* */ 62 actions = gtk_ action_ group_ new (" menu"); 63 /* */ 64 gtk_ action_ group_ add_ actions ( actions, entries, 65 sizeof ( entries) / sizeof ( entries[ 0]), 66 parent); 67 /* U I */ 68 gtk_ ui_ manager_ insert_ action_ group ( ui, actions, 0); 69 /* U I */ 70 gtk_ ui_ manager_ add_ ui_ from_ string ( ui, menu_info, -1, NULL); 71 /* 72 * 73 * 74 */ 75 gtk_ window_ add_ accel_ group ( GTK_ WINDOW ( parent), 76 gtk_ui_manager_get_accel_group (ui)); 77 return ui; 78 } /* */ 83 int 84 main ( int argc, char** argv) 85 { 第 2 章 GTK+ で画像ビューワを作ってみよう

38 26 2 GTK+ 86 GtkWidget * window; /* GTK+ */ 89 gtk_init (&argc, &argv); /* */ 92 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 93 /* */ 94 gtk_ widget_ set_ size_ request ( window, 400, 300); 95 { 96 GtkWidget * vbox; /* */ 99 vbox = gtk_ vbox_ new ( FALSE, 2); 100 /* */ 101 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); 102 { 103 GtkUIManager * ui; 104 GtkWidget * menubar; 105 GtkWidget * scroll_ window; /* */ 108 ui = create_ menu ( window); 109 /* U I */ 110 g_ object_ set_ data ( G_ OBJECT ( window), " ui", ( gpointer) ui); 111 /* */ 112 menubar = gtk_ ui_ manager_ get_ widget ( ui, "/ Menubar"); 113 /* */ 114 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), menubar, FALSE, FALSE, 0); /* */ 117 scroll_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 118 /* */ 119 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW 120 ( scroll_ window), 121 GTK_POLICY_AUTOMATIC, 122 GTK_ POLICY_ AUTOMATIC); 123 /* */ 124 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), scroll_window, TRUE, TRUE, 0); 125 { 126 GtkWidget * image; /* */ 129 image = gtk_ image_ new (); 130 /* */ 131 gtk_ scrolled_ window_ add_ with_ viewport ( GTK_ SCROLLED_ WINDOW 132 ( scroll_ window), image); 133 } 134 } 135 } 136 /* */ 137 gtk_ widget_ show_ all ( window); 138 /* */ 139 gtk_main (); return 0; 142 } GtkUIManager (a) UI (e) UI OK a UI 第 2 章 GTK+ で画像ビューワを作ってみよう

39 b c d UI e UI GTK gtk file chooser dialog new GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new ("Open an image", GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk file chooser dialog new GtkWidget* gtk_ file_ chooser_ dialog_ new ( const gchar * title, GtkWindow * parent, GtkFileChooserAction action, const gchar * first_button_text,...); ID 2 3 GTK FILE CHOOSER ACTION OPEN GTK FILE CHOOSER ACTION SAVE ID GTK STOCK CANCEL GTK STOCK OPEN GTK RESPONSE CANCEL ID GTK RESPONSE ACCEPT NULL 第 2 章 GTK+ で画像ビューワを作ってみよう

40 28 2 GTK gtk dialog run gint response; response = gtk_dialog_run (GTK_DIALOG (dialog)); ID gint gtk_ dialog_ run ( GtkDialog * dialog); 1 ID gtk dialog run GTK RESPONSE ACCEPT gchar *filename; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); gtk_image_set_from_file (GTK_IMAGE (image), filename); gtk file chooser get filename g free gtk image new : image-viewer.c 1 # include <gtk/ gtk. h> 2 3 /* 4 O p e n 5 */ 6 static void 7 cb_ open ( GtkAction * action, gpointer user_ data) 8 { 9 GtkWidget* window; 10 GtkWidget* dialog; 11 gint response; /* */ 14 window = GTK_ WIDGET ( user_ data); 15 /* */ 第 2 章 GTK+ で画像ビューワを作ってみよう

41 (a) (b) dialog = gtk_ file_ chooser_ dialog_ new (" Open an image", 17 GTK_ WINDOW ( window), 18 GTK_ FILE_CHOOSER_ACTION_OPEN, 19 GTK_STOCK_CANCEL, 20 GTK_RESPONSE_CANCEL, 21 GTK_STOCK_OPEN, 22 GTK_RESPONSE_ACCEPT, 23 NULL); 24 /* */ 25 gtk_ widget_ show_ all ( dialog); 26 /* */ 27 response = gtk_ dialog_ run ( GTK_ DIALOG ( dialog)); 28 if ( response == GTK_ RESPONSE_ ACCEPT) 29 { 30 gchar * filename; 31 GtkWidget * image; /* */ 34 filename 35 = gtk_ file_ chooser_ get_ filename ( GTK_ FILE_ CHOOSER ( dialog)); 36 /* */ 37 image 38 = GTK_WIDGET (g_object_get_data (G_OBJECT (window), "image")); 39 /* */ 40 gtk_ image_ set_ from_ file ( GTK_ IMAGE ( image), filename); 41 /* */ 42 g_ free ( filename); 第 2 章 GTK+ で画像ビューワを作ってみよう

42 30 2 GTK+ 43 } 44 /* */ 45 gtk_ widget_ destroy ( dialog); 46 } /* 49 Q u i t 50 */ 51 static void 52 cb_ quit ( GtkAction * action, gpointer user_ data) 53 { 54 GObject * window = G_ OBJECT ( user_ data); g_object_unref (g_object_get_data (window, "ui")); 57 gtk_main_quit (); 58 } /* 61 * 62 */ 63 static const gchar* menu_ info = 64 " <ui >" 65 " <menubar name= Menubar >" 66 " <menu name= File action= File >" 67 " <menuitem name= Open action= Open / >" 68 " <separator/ >" 69 " <menuitem name= Quit action= Quit / >" 70 " </menu >" 71 " </menubar >" 72 " </ui >"; /* 75 * 76 */ 77 static GtkActionEntry entries[] = { 78 {"File", NULL, "_File"}, 79 {" Open", GTK_STOCK_OPEN, "_ Open", " <control >O", " Open an image", 80 G_CALLBACK(cb_open)}, 81 {" Quit", GTK_STOCK_QUIT, "_ Quit", " <control >Q", " Quit this program", 82 gtk_ main_ quit} 83 }; /* 86 * 87 */ 88 static GtkUIManager* 89 create_ menu ( GtkWidget * parent) 90 { 91 GtkUIManager * ui; 92 GtkActionGroup * actions; /* U I */ 95 ui = gtk_ ui_ manager_ new (); 96 /* */ 97 actions = gtk_ action_ group_ new (" menu"); 98 /* */ 99 gtk_ action_ group_ add_ actions ( actions, entries, 100 sizeof ( entries) / sizeof ( entries[ 0]), 101 parent); 102 /* U I */ 103 gtk_ ui_ manager_ insert_ action_ group ( ui, actions, 0); 104 /* U I */ 105 gtk_ ui_ manager_ add_ ui_ from_ string ( ui, menu_info, -1, NULL); 106 /* 107 * 108 * 109 */ 110 gtk_ window_ add_ accel_ group ( GTK_ WINDOW ( parent), 111 gtk_ui_manager_get_accel_group (ui)); 112 return ui; 113 } /* */ 第 2 章 GTK+ で画像ビューワを作ってみよう

43 int 119 main ( int argc, char** argv) 120 { 121 GtkWidget * window; /* GTK+ */ 124 gtk_init (&argc, &argv); /* */ 127 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 128 /* */ 129 gtk_ widget_ set_ size_ request ( window, 400, 300); 130 { 131 GtkWidget * vbox; /* */ 134 vbox = gtk_ vbox_ new ( FALSE, 2); 135 /* */ 136 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); 137 { 138 GtkUIManager * ui; 139 GtkWidget * menubar; 140 GtkWidget * scroll_ window; /* */ 143 ui = create_ menu ( window); 144 /* U I */ 145 g_ object_ set_ data ( G_ OBJECT ( window), " ui", ( gpointer) ui); 146 /* */ 147 menubar = gtk_ ui_ manager_ get_ widget ( ui, "/ Menubar"); 148 /* */ 149 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), menubar, FALSE, FALSE, 0); /* */ 152 scroll_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 153 /* */ 154 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW 155 ( scroll_ window), 156 GTK_POLICY_AUTOMATIC, 157 GTK_ POLICY_ AUTOMATIC); 158 /* */ 159 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), scroll_window, TRUE, TRUE, 0); 160 { 161 GtkWidget * image; /* */ 164 image = gtk_ image_ new (); 165 /* */ 166 gtk_ scrolled_ window_ add_ with_ viewport ( GTK_ SCROLLED_ WINDOW 167 ( scroll_ window), image); 168 /* */ 169 g_ object_ set_ data ( G_ OBJECT ( window), " image", ( gpointer) image); 170 } 171 } 172 } 173 /* */ 174 gtk_ widget_ show_ all ( window); 175 /* */ 176 gtk_main (); return 0; 179 } GObject 第 2 章 GTK+ で画像ビューワを作ってみよう

44 32 2 GTK+ GTK+ GTK+ 第 2 章 GTK+ で画像ビューワを作ってみよう

45 33 3 GTK+ 3.1 C++ GObject 3.1 GTK Reference Manual Object Hierarchy GtkWindow GtkContainer GTK CONTAINER 3.2 GUI GTK+ GUI GtkWindow gtk container add gtk container set border width void gtk_ container_ set_ border_ width ( GtkContainer * container, gint border_ width); 第 3 章もっと GTK+

46 34 3 GTK+ GObject + -- GInitiallyUnowned + -- GtkObject + -- GtkWidget + -- GtkContainer + -- GtkBin + -- GtkWindow + -- GtkDialog + -- GtkAboutDialog + -- GtkColorSelectionDialog + -- GtkFileChooserDialog + -- GtkFileSelection + -- GtkFontSelectionDialog + -- GtkInputDialog + -- GtkMessageDialog + -- GtkPageSetupUnixDialog + -- GtkPrintUnixDialog + -- GtkRecentChooserDialog + -- GtkAssistant + -- GtkPlug + -- GtkAlignment + -- GtkFrame + -- GtkAspectFrame + -- GtkButton + -- GtkToggleButton + -- GtkCheckButton + -- GtkRadioButton + -- GtkColorButton + -- GtkFontButton + -- GtkLinkButton + -- GtkOptionMenu + -- GtkScaleButton + -- GtkVolumeButton + -- GtkItem + -- GtkMenuItem + -- GtkCheckMenuItem + -- GtkRadioMenuItem + -- GtkImageMenuItem + -- GtkSeparatorMenuItem + -- GtkTearoffMenuItem + -- GtkListItem + -- GtkTreeItem GUI gtk hbox new 1 TRUE FALSE TRUE 2 第 3 章もっと GTK+

47 GtkWidget* gtk_ hbox_ new ( gboolean homogeneous, gint spacing); 1 2 TRUE FALSE gtk vbox new gtk box pack start GtkVbox void gtk_ box_ pack_ start ( GtkBox * box, GtkWidget * child, gboolean expand, gboolean fill, guint padding); TRUE FALSE TRUE FALSE gtk box pack end gtk box pack start GtkVbox 3 4 GUI gtk box pack start expand fill 3.1 fill expand TRUE expand fill 2 expand fill TRUE expand TRUE fill FALSE 3 FALSE gtk box pack start expand fill 1 TRUE TRUE 2 TRUE FALSE 3 FALSE FALSE 第 3 章もっと GTK+

48 36 3 GTK : packing-sample.c 1 # include <gtk/ gtk. h> 2 3 int 4 main ( int argc, char ** argv) 5 { 6 GtkWidget * window; 7 GtkWidget * vbox; 8 GtkWidget * hbox; 9 GtkWidget * button; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 14 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Packing Sample"); 15 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 10); 16 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 17 G_ CALLBACK ( gtk_ main_ quit), NULL); vbox = gtk_ vbox_ new ( TRUE, 5); 20 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); hbox = gtk_ hbox_ new ( FALSE, 0); 23 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); 24 button = gtk_ button_ new_ with_ label (" expand: TRUE"); 25 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); 26 button = gtk_ button_ new_ with_ label (" fill: TRUE"); 27 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); hbox = gtk_ hbox_ new ( FALSE, 0); 30 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); 31 button = gtk_ button_ new_ with_ label (" expand: TRUE"); 32 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, TRUE, FALSE, 0); 33 button = gtk_ button_ new_ with_ label (" fill: FALSE"); 34 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, TRUE, FALSE, 0); hbox = gtk_ hbox_ new ( FALSE, 0); 37 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); 38 button = gtk_ button_ new_ with_ label (" expand: FALSE"); 39 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, FALSE, FALSE, 0); 40 button = gtk_ button_ new_ with_ label (" fill: FALSE"); 41 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 44 gtk_main (); return 0; 47 } GtkTable gtk table new 1 2 第 3 章もっと GTK+

49 TRUE FALSE TRUE 3.4 FALSE 3.4 GtkWidget* gtk_ table_ new ( guint rows, guint columns, gboolean homogeneous); TRUE FALSE gtk table attach void gtk_ table_ attach ( GtkTable * table, GtkWidget * child, guint left_attach, guint right_attach, guint top_attach, guint bottom_attach, GtkAttachOptions xoptions, GtkAttachOptions yoptions, guint xpadding, guint ypadding); left attach 6 bottom attach left attach right attach top attach bottom attach left attach right attach top attach bottom attach xoptions yoptions GtkAttachOptions 3.2 第 3 章もっと GTK+

50 38 3 GTK xoptions yoptions : table-sample2.c 1 # include <gtk/ gtk. h> 2 3 int 4 main ( int argc, char ** argv) 5 { 6 GtkWidget * window; 7 GtkWidget * vbox; 8 GtkWidget * table; 9 10 gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 13 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Table Sample2"); 14 gtk_ widget_ set_ size_ request ( window, 400, 200); 15 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 10); 16 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 3.2 GtkAttachOptions GTK EXPAND GTK SHRINK GTK FILL GTK SHRINK 3.3 GtkAttachOptions GtkAttachOptions GTK FILL GTK SHRINK GTK EXPAND GTK FILL GTK SHRINK GTK SHRINK GTK EXPAND 第 3 章もっと GTK+

51 G_ CALLBACK ( gtk_ main_ quit), NULL); 18 vbox = gtk_ vbox_ new ( FALSE, 5); 19 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); table = gtk_ table_ new (3, 4, FALSE); 22 gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); 23 { 24 GtkWidget * button; button = gtk_ button_ new_ with_ label (" January"); 27 gtk_table_attach (GTK_TABLE (table), button, 0, 1, 0, 1, 28 GTK_ FILL GTK_ SHRINK GTK_EXPAND, 29 GTK_ FILL GTK_ SHRINK GTK_EXPAND, 0, 0); 30 button = gtk_ button_ new_ with_ label (" February"); 31 gtk_table_attach (GTK_TABLE (table), button, 1, 2, 0, 1, 32 GTK_ FILL GTK_ SHRINK GTK_EXPAND, 33 GTK_ FILL GTK_ SHRINK GTK_EXPAND, 0, 0); 34 button = gtk_ button_ new_ with_ label (" March"); 35 gtk_table_attach (GTK_TABLE (table), button, 2, 3, 0, 1, 36 GTK_ FILL GTK_ SHRINK GTK_EXPAND, 37 GTK_ FILL GTK_ SHRINK GTK_EXPAND, 0, 0); 38 button = gtk_ button_ new_ with_ label (" April"); 39 gtk_table_attach (GTK_TABLE (table), button, 3, 4, 0, 1, 40 GTK_ FILL GTK_ SHRINK GTK_EXPAND, 41 GTK_ FILL GTK_ SHRINK GTK_EXPAND, 0, 0); 42 button = gtk_ button_ new_ with_ label (" May"); 43 gtk_table_attach (GTK_TABLE (table), button, 0, 1, 1, 2, 44 GTK_ FILL GTK_SHRINK, 45 GTK_ FILL GTK_SHRINK, 0, 0); 46 button = gtk_ button_ new_ with_ label (" June"); 47 gtk_table_attach (GTK_TABLE (table), button, 1, 2, 1, 2, 48 GTK_ FILL GTK_SHRINK, 49 GTK_ FILL GTK_SHRINK, 0, 0); 50 button = gtk_ button_ new_ with_ label (" July"); 51 gtk_table_attach (GTK_TABLE (table), button, 2, 3, 1, 2, 52 GTK_ FILL GTK_SHRINK, 53 GTK_ FILL GTK_SHRINK, 0, 0); 54 button = gtk_ button_ new_ with_ label (" August"); 55 gtk_table_attach (GTK_TABLE (table), button, 3, 4, 1, 2, 56 GTK_ FILL GTK_SHRINK, 57 GTK_ FILL GTK_SHRINK, 0, 0); 58 button = gtk_ button_ new_ with_ label (" September"); 59 gtk_table_attach (GTK_TABLE (table), button, 0, 1, 2, 3, 60 GTK_ SHRINK GTK_EXPAND, 61 GTK_ SHRINK GTK_EXPAND, 0, 0); 62 button = gtk_ button_ new_ with_ label (" October"); 63 gtk_table_attach (GTK_TABLE (table), button, 1, 2, 2, 3, 64 GTK_ SHRINK GTK_EXPAND, 65 GTK_ SHRINK GTK_EXPAND, 0, 0); 66 button = gtk_ button_ new_ with_ label (" Norbember"); 67 gtk_table_attach (GTK_TABLE (table), button, 2, 3, 2, 3, 68 GTK_ SHRINK GTK_EXPAND, 69 GTK_ SHRINK GTK_EXPAND, 0, 0); 70 button = gtk_ button_ new_ with_ label (" December"); 71 gtk_table_attach (GTK_TABLE (table), button, 3, 4, 2, 3, 72 GTK_ SHRINK GTK_EXPAND, 73 GTK_ SHRINK GTK_EXPAND, 0, 0); 74 } 75 gtk_ widget_ show_ all ( window); gtk_main (); 78 return 0; 79 } GUI 第 3 章もっと GTK+

52 40 3 GTK+ GTK+ 9 Glade g signal connect 2 2 p g_ signal_ connect ( G_ OBJECT ( button), " clicked", G_ CALLBACK ( cb_ button), NULL); void function_ name ( GtkWidget * widget, gpointer data); 1 2 g signal connect 4 g signal connect 4 int char gpointer p. 49 gpointer gtypes.h typedef void* gpointer; GTK+ 2.0 Tutorial Appendix A GTK Signals * g signal connect data gulong g_ signal_ connect_ data ( gpointer instance, const gchar * detailed_signal, GCallback c_handler, gpointer data, GClosureNotify destroy_data, GConnectFlags connect_ flags); ID 6 GConnectFlags 3.4 *1 第 3 章もっと GTK+

53 ID g signal connect data 5 void (* GClosureNotify) ( gpointer data, GClosure * closure); 1 g signal connect data 4 2 g signal connect data Click me! g signal connect data 4 Hello World g strdup g signal connect data Destroy the callback function data. Hello World $./signal-sample1 Hello World Destroy the callback function data. The value of the destroyed data = Hello World : signal-sample1.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ button ( GtkWidget * widget, gpointer user_ data) 5 { 6 g_print ("%s\n", (gchar *) user_data); 3.4 G CONNECT AFTER G CONNECT SWAPPED 第 3 章もっと GTK+

54 42 3 GTK+ 7 } 8 9 static void 10 destroy_ data ( gpointer user_data, GClosure * closure) 11 { 12 g_ print (" Destroy the callback function data.\ n"); 13 g_ print (" The value of the destroyed data = %s \n", 14 ( gchar *) user_ data); 15 g_free ((gchar *) user_data); 16 } int 19 main ( int argc, char ** argv) 20 { 21 GtkWidget * window; 22 GtkWidget * button; 23 gulong handle; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 28 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Signal Sample1"); 29 gtk_ widget_ set_ size_ request ( window, 250, 50); 30 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 31 G_ CALLBACK ( gtk_ main_ quit), NULL); button = gtk_ button_ new_ with_ label (" Click me!"); 34 gtk_ container_ add ( GTK_ CONTAINER ( window), button); g_ signal_ connect_ data ( G_ OBJECT ( button), " clicked", 37 G_ CALLBACK ( cb_ button), 38 ( gpointer *) g_ strdup (" Hello World"), 39 destroy_data, 0); 40 gtk_ widget_ show_ all ( window); gtk_main (); return 0; 45 } g signal connect data g signal connect data GClosureNotify 3 g signal connect gulong g_ signal_ connect ( gpointer instance, const gchar * detailed_signal, GCallback c_handler, gpointer data); g signal connect after gulong g_ signal_ connect_ after ( gpointer instance, const gchar * detailed_signal, GCallback c_handler, gpointer data); g signal connect swapped c hander 1 data gulong g_ signal_ connect_ swapped ( gpointer instance, const gchar * detailed_signal, 第 3 章もっと GTK+

55 GCallback c_handler, gpointer data); g signal connect g signal connect after g signal connect g signal connect after $./signal-sample2 function 1. function 2. function 3. function 4. g signal connect g signal connect after 3 4 : signal-sample2.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ button1 ( GtkWidget * widget, gpointer user_ data) 5 { 6 g_print ("function 1.\n"); 7 } 8 9 static void 10 cb_ button2 ( GtkWidget * widget, gpointer user_ data) 11 { 12 g_print ("function 2.\n"); 13 } static void 16 cb_ button3 ( GtkWidget * widget, gpointer user_ data) 17 { 18 g_print ("function 3.\n"); 19 } static void 22 cb_ button4 ( GtkWidget * widget, gpointer user_ data) 23 { 24 g_print ("function 4.\n"); 25 } int 28 main ( int argc, char ** argv) 29 { 30 GtkWidget * window; 31 GtkWidget * button; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 36 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Signal Sample2"); 37 gtk_ widget_ set_ size_ request ( window, 250, 50); 38 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 第 3 章もっと GTK+

56 44 3 GTK+ 39 G_ CALLBACK( gtk_ main_ quit), NULL); button = gtk_ button_ new_ with_ label (" Click me!"); 42 gtk_ container_ add ( GTK_ CONTAINER ( window), button); g_ signal_ connect_ after ( G_ OBJECT ( button), " clicked", 45 G_ CALLBACK ( cb_ button3), NULL); 46 g_ signal_ connect_ after ( G_ OBJECT ( button), " clicked", 47 G_ CALLBACK ( cb_ button4), NULL); 48 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 49 G_ CALLBACK( cb_ button1), NULL); 50 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 51 G_ CALLBACK( cb_ button2), NULL); gtk_ widget_ show_ all ( window); gtk_main (); return 0; 58 } g signal connect swapped g signal connect swapped 1 g signal connect swapped 1 g signal connect swapped g signal connect swapped g signal connect 2 g signal connect swapped g signal connect swapped : signal-sample3.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ button ( GtkWidget * widget, gpointer user_ data) 5 { 6 static gint count = 0; 7 gchar buf[ 64]; 8 9 sprint (buf, "%d time(s) clicked.", ++count); 10 gtk_ button_ set_ label ( GTK_ BUTTON ( widget), buf); 11 } int 14 main ( int argc, char ** argv) 15 { 16 GtkWidget * window; 3.8 g signal connect swapped 第 3 章もっと GTK+

57 GtkWidget * hbox; 18 GtkWidget * button1; 19 GtkWidget * button2; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 24 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Signal Sample3"); 25 gtk_ widget_ set_ size_ request ( window, 500, 50); 26 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 27 G_ CALLBACK( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( TRUE, 0); 30 gtk_ container_ add ( GTK_ CONTAINER ( window), hbox); button1 = gtk_ button_ new_ with_ label (" 0 time( s) clicked."); 33 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button1, TRUE, TRUE, 0); 34 g_ signal_ connect ( G_ OBJECT ( button1), " clicked", 35 G_ CALLBACK ( cb_ button), NULL); button2 = gtk_ button_ new_ with_ label (" Click me!"); 38 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button2, TRUE, TRUE, 0); 39 g_ signal_ connect_ swapped ( G_ OBJECT ( button2), " clicked", 40 G_ CALLBACK ( cb_ button), ( gpointer) button1); gtk_ widget_ show_ all ( window); gtk_main (); return 0; 47 } g signal handler disconnect g signal connect ID void g_ signal_ handler_ disconnect ( gpointer instance, gulong handler_ id); 1 2 ID cb button Callback function is called disconnect handler $./signal-sample4 Callback function is called. Callback function is diconnected. Callback function is already diconnected. 3.9 第 3 章もっと GTK+

58 46 3 GTK+ ID 1 GObject GTK g object set data void g_ object_ set_ data ( GObject * object, const gchar * key, gpointer data); g object get data gpointer g_ object_ get_ data ( GObject * object, const gchar * key); 1 2 disconnect handler g signal handler disconnect g signal handler is connected gboolean g_ signal_ handler_ is_ connected ( gpointer instance, gulong handler_ id); 1 2 ID 3 6 g signal connect swapped : signal-sample4.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ button ( GtkWidget * widget, gpointer user_ data) 5 { 6 g_ print (" Callback function is called.\ n"); 7 } 8 9 static void 10 disconnect_ handler ( GtkWidget * widget, gpointer user_ data) 11 { 12 GtkWidget * button; 13 gulong handle; button = GTK_ WIDGET ( g_ object_ get_ data ( G_ OBJECT ( widget), " button1")); 16 handle = ( gulong) g_ object_ get_ data ( G_ OBJECT ( widget), " handle"); if ( g_ signal_ handler_ is_ connected ( button, handle)) 19 { 20 g_ signal_ handler_ disconnect ( button, handle); 21 g_ print (" Callback function is diconnected.\ n"); 22 return; 23 } 24 else 25 { 26 g_ print (" Callback function is already diconnected.\ n"); 27 } 28 } int 31 main ( int argc, char ** argv) 32 { 33 GtkWidget * window; 第 3 章もっと GTK+

59 GtkWidget * hbox; 35 GtkWidget * button1; 36 GtkWidget * button2; 37 gulong handle; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 42 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Signal Sample4"); 43 gtk_ widget_ set_ size_ request ( window, 500, 50); 44 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 45 G_ CALLBACK ( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( TRUE, 0); 48 gtk_ container_ add ( GTK_ CONTAINER ( window), hbox); button1 = gtk_ button_ new_ with_ label (" Click me!"); 51 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button1, TRUE, TRUE, 0); 52 handle = g_ signal_ connect ( G_ OBJECT ( button1), " clicked", 53 G_ CALLBACK ( cb_ button), NULL); button2 = gtk_ button_ new_ with_ label (" Disconnect button1 callbacks."); 56 g_ object_ set_ data ( G_ OBJECT ( button2), " button1", ( gpointer) button1); 57 g_ object_ set_ data ( G_ OBJECT ( button2), " handle", ( gpointer) handle); 58 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button2, TRUE, TRUE, 0); 59 g_ signal_ connect ( G_ OBJECT ( button2), " clicked", 60 G_ CALLBACK( disconnect_ handler), NULL); gtk_ widget_ show_ all ( window); 63 gtk_main (); return 0; 66 } delete-event p. 165 delete-event FALSE destroy cb destroy delete-event TRUE destroy 3 7 : signal-sample5.c 1 # include <gtk/ gtk. h> 2 3 static gboolean 4 cb_ delete ( GtkWidget * widget, gpointer user_ data) 第 3 章もっと GTK+

60 48 3 GTK+ 5 { 6 GtkWidget * dialog; 7 gint result; 8 9 dialog 10 = gtk_ message_ dialog_ new ( GTK_ WINDOW ( widget), 11 GTK_ DIALOG_ MODAL 12 GTK_DIALOG_ DESTROY_ WITH_ PARENT, 13 GTK_MESSAGE_QUESTION, 14 GTK_BUTTONS_YES_NO, 15 " Confirm are you sure you want to quit."); result = gtk_ dialog_ run ( GTK_ DIALOG ( dialog)); 18 gtk_ widget_ destroy ( dialog); if ( result == GTK_ RESPONSE_ YES) 21 { 22 return FALSE; 23 } 24 else 25 { 26 return TRUE; 27 } 28 } static void 31 cb_ destroy ( GtkWidget * widget, gpointer user_ data) 32 { 33 gtk_main_quit (); 34 } int 37 main ( int argc, char ** argv) 38 { 39 GtkWidget * window; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 44 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Signal Sample5"); 45 gtk_ widget_ set_ size_ request ( window, 250, 50); 46 g_ signal_ connect ( G_ OBJECT ( window), " delete - event", 47 G_ CALLBACK ( cb_ delete), NULL); 48 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 49 G_ CALLBACK ( cb_ destroy), NULL); gtk_ widget_ show_ all ( window); 52 gtk_main (); return 0; 55 } 第 3 章もっと GTK+

61 49 4 GLib GLib C GTK+ GLib GLib 4.1 GLib GLib C GLib GLib gboolean int gpointer void* gconstpointer const void * gchar char guchar unsigned char gint int guint unsigned int gshort short gushort unsigned short glong long gulong unsigned long gfloat float gdouble double gint8 8 guint8 8 gint16 16 guint16 16 gint32 32 guint32 32 gint64 64 guint64 64 第 4 章 GLib

62 50 4 GLib 4.2 GLib g strdup gchar* g_ strdup ( const gchar * str); 1 gchar *copy; copy = g_strdup ("Hello GTK+ World!"); g_print ("%s\n", copy); g strdup printf sprintf gchar* g_strdup_printf (const gchar *format,...); 1 2 int n; for (n = 0; n < 10; n++) { gchar *text; text = g strdup printf ("chapter-%d", n); g print ("%s\n", text); g free (text); } g strsplit string delimiter max tokens gchar** g_ strsplit ( const gchar * string, const gchar * delimiter, gint max_ tokens); NULL const gchar *string = "This is a sample of g_strsplit."; gchar **text; int n; text = g_strsplit (string, " ", 0); for (n = 0; text[n]!= NULL; n++) 第 4 章 GLib

63 { g_print ("%s\n", text[n]); } g_strfreev (text); g new0 struct type n structs 0 g malloc0 # define g_ new0( struct_type, n_ structs) \ ((struct_type *) g_malloc0 (((gsize) sizeof (struct_type)) * \ ((gsize) (n_structs)))) gpointer g_ malloc0 ( gulong n_ bytes); 1 2 gint *array; int n; array = g_new0 (gint, 10); for (n = 0; n < 10; n++) { g_print ("%d\n", array[n]); } g_free (array); g free g new0 void g_ free ( gpointer mem); 1 g strfreev g strsplit void g_ strfreev ( gchar ** str_ array); g file test GFileTest 2 gboolean g_ file_ test ( const gchar * filename, GFileTest test); 1 2 TRUE FALSE g dir open g dir read name 第 4 章 GLib

64 52 4 GLib 4.2 GFileTest G FILE TEST IS REGULAR G FILE TEST IS SYMLINK G FILE TEST IS DIR G FILE TEST IS EXECUTABLE G FILE TEST EXISTS GDir* g_ dir_ open ( const gchar * path, guint flags, GError **error); g dir read name g dir open NULL G_ CONST_ RETURN gchar* g_ dir_ read_ name ( GDir * dir); 1 g dir close g dir open void g_ dir_ close ( GDir * dir); g dir open GError NULL NULL while g dir read name 1 g file test g build filename g build filename 29 g free 31 g dir close 第 4 章 GLib

65 $ gcc file-sample.c -o file-sample pkg-config --cflags --libs glib-2.0 $./file-sample. file-sample.c (file) file-sample (file) file-sample.o (file) Makefile (file) test-dir (directory) $ 4 1 : file-sample.c 1 # include <glib. h> 2 # include <stdlib. h> 3 4 int 5 main ( int argc, char ** argv) 6 { 7 GDir *dir; 8 gchar * currentdir; 9 10 if (argc!= 2) 11 { 12 g_print ("Usage:./file -sample directory\n"); 13 exit (1); 14 } 15 currentdir = argv[ 1]; 16 dir = g_ dir_ open ( currentdir, 0, NULL); 17 if (dir) 18 { 19 const gchar * name; while ( name = g_ dir_ read_ name ( dir)) 22 { 23 gchar * path; 24 gboolean is_ dir; path = g_ build_ filename ( currentdir, name, NULL); 27 is_dir = g_file_test (path, G_FILE_TEST_IS_DIR); 28 g_print ("%s\t(%s)\n", name, (is_dir)? "directory" : "file"); 29 g_free (path); 30 } 31 g_dir_close (dir); 32 } 33 return 0; 34 } Unicode JIS EUC Unicode GLib Unicode UTF-8 GLib UTF-8 g locale to utf8 UTF-8 g free gchar* g_ locale_ to_ utf8 ( const gchar * opsysstring, gssize len, gsize * bytes_read, gsize * bytes_written, GError **error); 第 4 章 GLib

66 54 4 GLib g locale from utf8 UTF8 g free gchar* g_ locale_ from_ utf8 ( const gchar * utf8string, gssize len, gsize * bytes_read, gsize * bytes_written, GError **error); g filename to utf8 UTF8 g free gchar* g_ filename_ to_ utf8 ( const gchar * opsysstring, gssize len, gsize * bytes_read, gsize * bytes_written, GError **error); g filename from utf8 UTF8 g free gchar* g_ filename_ from_ utf8 ( const gchar * utf8string, gssize len, gsize * bytes_read, gsize * bytes_written, GError **error); 第 4 章 GLib

67 g get home dir G_ CONST_ RETURN gchar* g_ get_ home_ dir ( void); g_print ("My home directory is %s.\n", g_get_home_dir ()); g get current dir g free gchar* g_ get_ current_ dir ( void); gchar *currentdir; currentdir = g_get_current_dir (); g_print ("The current directory is %s.\n", currentdir); g_free (currentdir); g path get basename gchar* g_ path_ get_ basename ( const gchar * file_ name); 1 g path get dirname gchar* g_ path_ get_ dirname ( const gchar * file_ name); 1 gchar *basename; gchar *dirname; basename = g_path_get_basename (filename); dirname = g_path_get_dirname (filename); g_print ("basename = %s\n", basename); g_print ("dirname = %s\n", dirname); g_free (basename); g_free (dirname); 第 4 章 GLib

68 56 4 GLib g build filename / 1 NULL gchar* g_ build_ filename ( const gchar * first_element,...); 1 const gchar *dirname = "/home/gtk"; const gchar *basename = "sample.c"; gchar *filename; filename = g_build_filename (dirname, basename, NULL); g_print ("filename = %s\n", filename); g_free (filename); 4.3 GLib GLib gpointer struct GList { gpointer data; GList * next; GList * prev; }; GList GList g list append list NULL GList* g_ list_ append ( GList * list, gpointer data); 1 2 g list insert GList* g_ list_ insert ( GList * list, gpointer data, gint position); 第 4 章 GLib

69 g list delete link GList* g_ list_ delete_ link ( GList * list, GList * link_); 1 2 g list free void g_ list_ free ( GList * list); 1 g list foreach func void g_ list_ foreach ( GList * list, GFunc func, gpointer user_ data); GFunc 1 2 g list foreach 3 g list length void (* GFunc) ( gpointer data, gpointer user_ data); guint g_ list_ length ( GList * list); 1 g list first GList* g_ list_ first ( GList * list); 1 g list last GList* g_ list_ last ( GList * list); 1 g list previous 第 4 章 GLib

70 58 4 GLib # define g_ list_ previous( list) \ ((list)? (((GList *)(list)) ->prev) : NULL) 1 g list next #define g_list_next(list) ((list)? (((GList *)(list)) ->next) : NULL) 1 g list nth n GList* g_ list_ nth ( GList * list, guint n); 1 2 g list nth data n gpointer g_ list_ nth_ data ( GList * list, guint n); 1 2 g list sort compare func GList* g_ list_ sort ( GList * list, GCompareFunc compare_ func); 1 2 GCompareFunc gint (* GCompareFunc) ( gconstpointer a, gconstpointer b); : GList 4 2 January December $ gcc list-sort.c -o list-sort pkg-config --cflags --libs glib-2.0 $./list-sort January February March April May June July August September October November December April August December February January July June March May November October September 第 4 章 GLib

71 GList g list append NULL data g list append g list nth data n 34 g list sort strcmp 35 g list foreach for g list foreach 38 g list free 4 2 : list-sort.c 1 # include <glib. h> 2 3 static gint 4 compare_ function ( gconstpointer a, gconstpointer b) 5 { 6 return strcmp ((gchar *) a, (gchar *) b); 7 } 8 9 static void 10 print_ data ( gpointer data, gpointer user_ data) 11 { 12 g_print ("%s ", (gchar *) data); 13 } int 16 main ( int argc, char * argv[]) 17 { 18 GList * list = NULL; 19 gchar *data[] = {"January", "February", "March", "April", "May", 20 "June", "July", "August", "September", "October", 21 "November", "December"}; 22 int n; for ( n = 0; n < 12; n++) 25 { 26 list = g_ list_ append ( list, ( gpointer) data[ n]); 27 } 28 for ( n = 0; n < 12; n++) 29 { 30 g_print ("%s ", (gchar *) g_list_nth_data (list, n)); 31 } 32 g_print ("\n"); list = g_ list_ sort ( list, compare_ function); 35 g_ list_ foreach ( list, ( GFunc) print_data, NULL); 36 g_print ("\n"); g_list_free (list); return 0; 41 } 第 4 章 GLib

72 60 4 GLib : 4 3 g list insert g list delete link January February April g strdup March g strdup g free 4 3 g list nth data g list nth g list free g list foreach g free $ gcc list-operation.c -o list-operation pkg-config --cflags --libs glib-2.0 $./list-operation January February April January February March April January February March 4 3 : list-operation.c 1 # include <glib. h> 2 3 int 4 main ( int argc, char * argv[]) 5 { 6 GList * list = NULL, * work; 7 gchar *data[] = {"January", "February", "April"}; 8 int n; 9 10 for ( n = 0; n < 3; n++) 11 { 12 list = g_list_append (list, (gpointer) g_strdup (data[n])); 13 } 14 for ( work = list; work; work = g_ list_ next ( work)) 15 { 16 g_print ("%s ", (gchar *) work - >data); 17 } 18 g_print ("\n"); list = g_ list_ insert ( list, ( gpointer) g_ strdup (" March"), 2); 21 for ( work = list; work; work = g_ list_ next ( work)) 22 { 23 g_print ("%s ", (gchar *) work - >data); 24 } 25 g_print ("\n"); g_free (g_list_nth_data (list, 3)); 28 list = g_list_delete_link (list, g_list_nth (list, 3)); 29 for ( work = list; work; work = g_ list_ next ( work)) 30 { 31 g_print ("%s ", (gchar *) work - >data); 32 } 33 g_print ("\n"); 第 4 章 GLib

73 g_ list_ foreach ( list, ( GFunc) g_free, NULL); 36 g_list_free (list); return 0; 39 } 4.4 GLib GHashTable g hash table GHashTable GHashTable g hash table new hash func NULL g direct hash key equal func 2 GHashTable GHashTable* g_ hash_ table_ new ( GHashFunc hash_func, GEqualFunc key_ equal_ func); 1 2 g hash table new full g hash table new GHashTable GHashTable GHashTable* g_ hash_ table_ new_ full ( GHashFunc hash_func, GEqualFunc key_equal_func, GDestroyNotify key_destroy_func, GDestroyNotify value_ destroy_ func); g hash table insert void g_ hash_ table_ insert ( GHashTable * hash_table, gpointer key, gpointer value); g hash table size GHashTable guint g_ hash_ table_ size ( GHashTable * hash_ table); 第 4 章 GLib

74 62 4 GLib 1 g hash table lookup GHashTable gpointer g_ hash_ table_ lookup ( GHashTable * hash_table, gconstpointer key); 1 2 g hash table destroy GHashTable void g_ hash_ table_ destroy ( GHashTable * hash_ table); GHashTable 4 4 $ gcc hash-sample.c -o hash-sample pkg-config --cflags --libs glib-2.0 $./hash-sample Key: large => Value: +1 Key: normal => Value: +0 Key: small => Value: g hash table new full GDestroyNotify g free g hash table insert for g hash table lookup 24 g hash table destroy g hash table new full g hash table destroy g hash table new g hash table destroy 4 4 : hash-sample.c 1 # include <glib. h> 2 3 int 4 main ( int argc, char * argv[]) 5 { 第 4 章 GLib

75 GHashTable * hash; 7 gchar *data[] = {"large", "normal", "small"}; 8 int n; 9 10 hash = g_ hash_ table_ new_ full ( g_str_hash, g_str_equal, 11 ( GDestroyNotify) g_free, 12 ( GDestroyNotify) g_ free); 13 g_hash_table_insert (hash, g_strdup (data[0]), g_strdup ("+1")); 14 g_hash_table_insert (hash, g_strdup (data[1]), g_strdup ("+0")); 15 g_hash_table_insert (hash, g_strdup (data[2]), g_strdup (" -1")); for ( n = 0; n < 3; n++) 18 { 19 g_print ("Key: %s = > Value: %s\n", 20 data[n], 21 (gchar *) g_hash_table_lookup (hash, 22 ( gconstpointer) data[ n])); 23 } 24 g_ hash_ table_ destroy ( hash); return 0; 27 } 4.5 GLib g timeout add guint g_ timeout_ add ( guint interval, GSourceFunc function, gpointer data); ID 1/1000 interval = GSourceFunc gboolean (* GSourceFunc) ( gpointer data); g timeout add 3 ID g source remove g timeout add ID gboolean g_ source_ remove ( guint tag); 1 ID TRUE FALSE 4 5 g timeout add 1 count down count 第 4 章 GLib

76 64 4 GLib 4 5 : timer-sample.c 1 # include <gtk/ gtk. h> 2 3 static gint count = 10; 4 static guint timer_ id; 5 6 static 7 gboolean count_ down ( gpointer user_ data) 8 { 9 GtkLabel * label = GTK_ LABEL ( user_ data); 10 gchar format[] = " Count % 2d"; 11 gchar str[ 9]; g_ sprintf ( str, format, --count); 14 gtk_ label_ set_ text ( label, str); if ( count == 0) 17 { 18 g_ source_ remove ( timer_ id); 19 gtk_main_quit (); 20 } 21 } int 24 main ( int argc, char * argv[]) 25 { 26 GtkWidget * window; 27 GtkWidget * label; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 32 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Timer Sample"); 33 gtk_ widget_ set_ size_ request ( window, 200, -1); 34 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 10); label = gtk_ label_ new (" Count 10"); 37 gtk_ container_ add ( GTK_ CONTAINER ( window), label); timer_ id = g_ timeout_ add (1000, ( GSourceFunc) count_down, label); gtk_ widget_ show_ all ( window); 42 gtk_main (); return 0; 45 } 第 4 章 GLib

77 65 5 GdkPixbuf GdkPixbuf GTK+ GTK+ GdkPixbuf GdkPixbuf GTK GdkPixbuf gdk pixbuf new from file GdkPixbuf 5.1 GdkPixbuf* gdk_ pixbuf_ new_ from_ file ( const char * filename, GError **error); GError NULL typedef struct { GQuark gint gchar } GError; domain; code; * message; NULL GError error $./read_image cannotread.png error->code : 2 error->message : 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

78 66 5 GdkPixbuf 5.1 GdkPixbuf jpeg png ico ani bmp gif pnm ras tga tiff xbm xpm cannotread.png : $./read_image nothing.png error->code : 4 error->message : nothing.png : GdkPixbuf gdk pixbuf new GdkPixbuf GdkPixbuf* gdk_ pixbuf_ new ( GdkColorspace colorspace, gboolean has_alpha, int bits_per_sample, int width, int height); GdkColorspace GDK COLORSPACE RGB has alpha TRUE FALSE 3 has alpha TRUE 3 bits per sample 8 gdk pixbuf new from data GdkPixbuf guchar 1 GdkPixbuf* gdk_ pixbuf_ new_ from_ data ( const guchar * data, GdkColorspace colorspace, gboolean has_alpha, int bits_per_sample, int width, int height, int rowstride, GdkPixbufDestroyNotify destroy_fn, gpointer destroy_ fn_ data); GdkPixbufDestroyNotify destroy fn data 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

79 GdkPixbufDestroyNotify 2 void (* GdkPixbufDestroyNotify) ( guchar * pixels, gpointer data); 7 rowstride 1 W 3W a%b a b gdk pixbuf new from xpm data XPM GdkPixbuf rowstride = 3W + (4 3W %4) GdkPixbuf* gdk_ pixbuf_ new_ from_ xpm_ data ( const char ** data); gdk pixbuf new from inline GdkPixbuf GdkPixbuf* gdk_ pixbuf_ new_ from_ inline ( gint data_length, const guint8 * data, gboolean copy_pixels, GError **error); data length 1 copy pixels TRUE gdk-pixbuf-csource $ gdk-pixbuf-csource --name="icon_pixbuf" /usr/share/pixmap/gnome-terminal.png > icon.h gdk-pixbuf-csource name 1 /* GdkPixbuf RGBA C- Source image dump 1 -byte - run - length - encoded */ 2 3 #ifdef SUNPRO_C 4 # pragma align 4 ( icon_ pixbuf) 5 #endif 6 #ifdef GNUC 7 static const guint8 icon_pixbuf[] attribute (( aligned (4))) = 8 #else 9 static const guint8 icon_ pixbuf[] = 10 #endif 11 { "" 12 /* Pixbuf magic ( 0x47646b50) */ 13 "GdkP" 14 /* length: header ( 24) + pixel_ data ( 7104) */ 15 "\0\0\33\330" 16 /* pixdata_ type ( 0x ) */ 17 "\2\1\0\2" 18 /* rowstride (192) */ 19 "\0\0\0\300" 20 /* width (48) */ 21 "\0\0\0""0" 22 /* height (48) */ 23 "\0\0\0""0" 24 /* pixel_data: */ 25 "\377\0\0\0\0\222\0\0\0\0\6\0\0\0\1\0\0\0\2\0\0\0\4\0\0\0\7\0..." 26 "\0\0\12\204\0\0\0\13\233\0\0\0\14\203\0\0\0\13\6\0\0\0\12\0\..." 27 "\0\0\7\0\0\0\4\0\0\0\2\0\0\0\1\202\0\0\0\0\4\0\0\0\2\0\0\0""..." 28 "\1\1\1\377\246\0\0\0\377\20\0\0\0K\0\0\0\14\0\0\0\7\0\0\0\2\..." 29 "\0\0\0\0\0\0\4\0\0\0\377\340\336\334\332\352\351\346\377\357..." 30 "\377\360\357\355\377\361\360\356\377\362\361\357\377\360\360..." 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

80 68 5 GdkPixbuf GdkPixbuf gdk pixbuf save gboolean gdk_ pixbuf_ save ( GdkPixbuf * pixbuf, const char * filename, const char * type, GError **error,...); GdkPixbuf JPEG PNG ICO 5.1 type jpeg png ico GdkPixbuf JPEG gdk_pixbuf_save (pixbuf, "sample.jpg", "jpeg", NULL, NULL); 4 NULL GdkPixbuf gdk pixbuf get width int gdk_ pixbuf_ get_ width ( const GdkPixbuf * pixbuf); gdk pixbuf get height int gdk_ pixbuf_ get_ height ( const GdkPixbuf * pixbuf); gdk pixbuf get n channels RGB 3 4 int gdk_ pixbuf_ get_ n_ channels ( const GdkPixbuf * pixbuf); gdk pixbuf get has alpha TRUE FALSE gboolean gdk_ pixbuf_ get_ has_ alpha ( const GdkPixbuf * pixbuf); gdk pixbuf get rowstride 1 int gdk_ pixbuf_ get_ rowstride ( const GdkPixbuf * pixbuf); gdk pixbuf get pixels guchar* gdk_ pixbuf_ get_ pixels ( const GdkPixbuf * pixbuf); 5.2 GdkPixbuf jpeg quality png compression 0 9 ico depth 16, 24, 32 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

81 GtkImage 2.4 p. 15 GtkImage GtkImage GtkImage GtkImage : display1.c 1 # include <gtk/ gtk. h> 2 # include <stdlib. h> 3 4 int 5 main ( int argc, char * argv[]) 6 { 7 GtkWidget * window; 8 GtkWidget * image; 9 10 if ( argc < 2) 11 { 12 g_print ("Usage:./display1 imagefile\n"); 13 exit (0); 14 } 15 gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 18 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Display Image 1"); 19 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 20 G_ CALLBACK ( gtk_ main_ quit), NULL); 21 image = gtk_ image_ new_ from_ file ( argv[ 1]); 22 gtk_ container_ add ( GTK_ CONTAINER ( window), image); gtk_ widget_ show_ all ( window); 25 gtk_main (); return 0; 28 } 5 1 GtkImag GtkWindow GdkPixbuf gtk image new from file GtkImage GtkWidget* gtk_ image_ new_ from_ file ( const gchar * filename); GdkPixbuf GdkPixmap GtkImage 5.1 GdkImage 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

82 70 5 GdkPixbuf GtkWidget* gtk_ image_ new_ from_ pixbuf ( GdkPixbuf * pixbuf); GtkWidget* gtk_ image_ new_ from_ pixmap ( GdkPixmap * pixmap, GdkBitmap * mask); GtkImage GdkPixbuf GdkPixmap GdkPixbuf* gtk_ image_ get_ pixbuf ( GtkImage * image); void gtk_ image_ get_ pixmap ( GtkImage * image, GdkPixmap ** pixmap, GdkBitmap ** mask); GtkDrawingArea GtkDrawingArea GDK GdkDrawable GtkDrawingArea GtkImage GtkDrawingArea 5 2 p gdk pixbuf new from file GtkDrawingArea GtkImage GtkDrawingArea gtk widget set size request void gtk_ widget_ set_ size_ request ( GtkWidget * widget, gint width, gint height); GtkDrawingArea expose-event expose-event GdkPixbuf GdkPixmap GdkPixbuf gdk pixbuf render pixmap and mask void gdk_ pixbuf_ render_ pixmap_ and_ mask ( GdkPixbuf * pixbuf, GdkPixmap ** pixmap_return, GdkBitmap ** mask_return, int alpha_ threshold); GdkPixbuf gdk window clear 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

83 gdk pixbuf composite color 5 2 gdk pixbuf composite color void gdk_ pixbuf_ composite_ color ( const GdkPixbuf * src, GdkPixbuf * dest, int dest_x, int dest_y, int dest_width, int dest_height, double offset_x, double offset_y, double scale_x, double scale_y, GdkInterpType interp_type, int overall_alpha, int check_x, int check_y, int check_size, guint32 color1, guint32 color2); 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : X Y X Y X Y X Y scale x scale y (offset x, offset y) (dest x, dest y) dest width dest height GdkInterpType GDK INTERP NEAREST GDK INTERP TILES GDK INTERP BILINEAR GDK INTERP HYPER 2 gdk window set back pixmap GtkDrawingArea 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

84 72 5 GdkPixbuf window gdk window clear void gdk_ window_ set_ back_ pixmap ( GdkWindow * window, GdkPixmap * pixmap, gboolean parent_ relative); void gdk_ window_ clear ( GdkWindow * window); 5 2 GtkDrawingArea : display2.c 1 # include <gtk/ gtk. h> 2 # include <stdlib. h> 3 4 static gint 5 cb_ expose ( GtkWidget * widget, 6 GdkEventExpose * event, 7 gpointer user_ data) 8 { 9 GdkPixbuf * pixbuf = ( GdkPixbuf *) user_ data; 10 GdkPixbuf * background; 11 GdkPixmap * pixmap; 12 int w, h; w = gdk_ pixbuf_ get_ width ( pixbuf); 15 h = gdk_ pixbuf_ get_ height ( pixbuf); 16 background = gdk_ pixbuf_ new ( GDK_COLORSPACE_RGB, FALSE, 8, w, h); 17 gdk_ pixbuf_ composite_ color ( pixbuf, background, 18 0, 0, w, h, 0, 0, 1.0, 1.0, 19 GDK_INTERP_BILINEAR, 255, 0, 0, 16, 20 0xaaaaaa, 0x555555); 21 gdk_ pixbuf_ render_ pixmap_ and_ mask ( background, & pixmap, NULL, 255); 22 gdk_ window_ set_ back_ pixmap ( widget - >window, pixmap, FALSE); 23 gdk_ window_ clear( widget - >window); g_ object_ unref ( background); 26 g_ object_ unref ( pixmap); return TRUE; 29 } int 32 main ( int argc, char * argv[]) 33 { 34 GtkWidget * window; 35 GtkWidget * canvas; 36 GdkPixbuf * pixbuf; if ( argc < 2) 39 { 40 g_print ("Usage:./display2 imagefile\n"); 41 exit (0); 42 } 43 gtk_init (&argc, &argv); 5.2 GtkDrawingArea 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

85 pixbuf = gdk_ pixbuf_ new_ from_ file ( argv[1], NULL); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 48 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Display Image 2"); 49 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 50 G_ CALLBACK ( gtk_ main_ quit), NULL); canvas = gtk_ drawing_ area_ new (); 53 gtk_ widget_ set_ size_ request ( canvas, 54 gdk_ pixbuf_ get_ width ( pixbuf), 55 gdk_ pixbuf_ get_ height ( pixbuf)); 56 g_ signal_ connect ( G_ OBJECT ( canvas), " expose - event", 57 G_ CALLBACK ( cb_ expose), pixbuf); 58 gtk_ container_ add ( GTK_ CONTAINER ( window), canvas); gtk_ widget_ show_ all ( window); 61 gtk_main (); return 0; 64 } GUI GtkDrawingArea GtkScrolledWindow 5.2 gdk window set back pixmap GtkAlignment GtkAlignment 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

86 74 5 GdkPixbuf GtkWidget* gtk_ alignment_ new ( gfloat xalign, gfloat yalign, gfloat xscale, gfloat yscale); xalign yalign xscale yscale GtkAlignment 1 0 GtkAlignment GUI 5.4 GUI gtk scrolled window new gtk scrolled window set policy 5.4 GtkWidget* gtk_ scrolled_ window_ new ( GtkAdjustment * hadjustment, GtkAdjustment * vadjustment); void gtk_ scrolled_ window_ set_ policy ( GtkScrolledWindow * scrolled_window, GtkPolicyType hscrollbar_policy, GtkPolicyType vscrollbar_ policy); 5.4 GTK POLICY ALWAYS GTK POLICY AUTOMATIC GTK POLICY NEVER GtkScrolledWindow GtkAlignment GtkWindow GtkVBox GtkDrawingArea GtkScrolledWindow GtkLabel GtkSpinButton GtkHBox GtkButton 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

87 gtk scrolled window set shadow type void gtk_ scrolled_ window_ set_ shadow_ type( GtkScrolledWindow scrolled_window, GtkShadowType type); GtkShadowType GTK SHADOW NONE GTK SHADOW IN GTK SHADOW OUT GTK SHADOW ETCHED IN GTK SHADOW ETCHED OUT GtkAlignment gtk alignment new GtkDrawingArea alignment = gtk_ alignment_ new (0.5, 0.5, 0, 0); gtk spin button new GtkAdjustment value-changed GtkWidget* gtk_ spin_ button_ new ( GtkAdjustment * adjustment, gdouble climb_rate, guint digits); GtkObject* gtk_ adjustment_ new ( gdouble value, gdouble lower, gdouble upper, gdouble step_increment, gdouble page_increment, gdouble page_ size); 5.5 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

88 76 5 GdkPixbuf GUI : binarize.c 1 # define WINDOW_ WIDTH # define WINDOW_ HEIGHT static GtkWidget* 5 make_ interface ( const gchar * title, 6 GdkPixbuf * pixbuf) 7 { 8 GtkWidget * window; 9 GtkWidget * vbox; 10 GtkWidget * scroll_ window; 11 GtkWidget * hbox; 12 GtkWidget * drawingarea; window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 15 gtk_ window_ set_ title ( GTK_ WINDOW ( window), title); 16 gtk_ widget_ set_ size_ request ( window, WINDOW_WIDTH, WINDOW_ HEIGHT); vbox = gtk_ vbox_ new ( FALSE, 3); 19 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); 20 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( vbox), 5); scroll_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 23 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), scroll_window, TRUE, TRUE, 0); 24 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW ( scroll_ window), 25 GTK_POLICY_AUTOMATIC, 26 GTK_ POLICY_ AUTOMATIC); 27 gtk_ scrolled_ window_ set_ shadow_ type ( GTK_ SCROLLED_ WINDOW 28 ( scroll_ window), 29 GTK_ SHADOW_ ETCHED_ IN); 30 { 31 GtkWidget * alignment; alignment = gtk_ alignment_ new (0.5, 0.5, 0, 0); 34 gtk_ scrolled_ window_ add_ with_ viewport ( GTK_ SCROLLED_ WINDOW 35 ( scroll_ window), 36 alignment); 37 { 38 drawingarea = gtk_ drawing_ area_ new (); 39 gtk_ container_ add ( GTK_ CONTAINER ( alignment), drawingarea); 40 gtk_ widget_ set_ size_ request ( drawingarea, 41 gdk_ pixbuf_ get_ width ( pixbuf), 42 gdk_ pixbuf_ get_ height ( pixbuf)); 43 g_ signal_ connect ( G_ OBJECT ( drawingarea), " expose - event", 44 G_ CALLBACK( cb_ expose), ( gpointer) pixbuf); 45 } 46 } 47 hbox = gtk_ hbox_ new ( FALSE, 5); 48 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); 49 { 50 GtkWidget * label; 51 GtkObject * adjustment; 52 GtkWidget * spinbutton; label = gtk_ label_ new (" Threshold :"); 55 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), label, FALSE, FALSE, 0); adjustment = gtk_ adjustment_ new (128, 0, 255, 1, 5, 0); 58 spinbutton = gtk_ spin_ button_ new ( GTK_ ADJUSTMENT ( adjustment), 1, 0); 59 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), spinbutton, TRUE, TRUE, 0); 60 g_ signal_ connect ( G_ OBJECT ( spinbutton), " value - changed", 61 G_ CALLBACK ( cb_ value_ changed), drawingarea); 62 } 63 hbox = gtk_ hbox_ new ( FALSE, 0); 64 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); 65 { 66 GtkWidget * button; 67 button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 68 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); 69 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 70 G_ CALLBACK( cb_ quit), ( gpointer) pixbuf); 71 } 72 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

89 G_ CALLBACK ( cb_ quit), ( gpointer) pixbuf); return window; 76 } GtkDrawingArea GtkSpinButton GtkDrawingArea GtkDrawingArea expose-event expose-event cb expose pixbuf 2 bin GtkSpinButton cb value changed value-changed Enter cb expose gtk spin button get value as int gtk spin button get value gtk widget queue draw GtkDrawingArea expose-event cb expose gint gtk_ spin_ button_ get_ value_ as_ int ( GtkSpinButton * spin_ button); gdouble gtk_ spin_ button_ get_ value ( GtkSpinButton * spin_ button); void gtk_ widget_ queue_ draw ( GtkWidget * widget); : binarize.c 1 # include <gtk/ gtk. h> 2 # include " operation. h" 3 4 GdkPixbuf * bin; 5 gint threshold = 128; 6 7 static gint 8 cb_ expose ( GtkWidget * widget, 9 GdkEventExpose * event, 10 gpointer data) 11 { 12 GdkPixbuf * pixbuf = ( GdkPixbuf *) data; 13 GdkPixbuf * background; 14 GdkPixmap * pixmap; 15 int w, h; create_ binarized_ image ( pixbuf, bin, threshold); w = gdk_ pixbuf_ get_ width ( pixbuf); 20 h = gdk_ pixbuf_ get_ height ( pixbuf); 21 background = gdk_ pixbuf_ new ( GDK_COLORSPACE_RGB, FALSE, 8, w, h); 22 gdk_ pixbuf_ composite_ color ( bin, background, 23 0, 0, w, h, 0, 0, 1.0, 1.0, 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

90 78 5 GdkPixbuf 24 GDK_INTERP_BILINEAR, 255, 0, 0, 16, 25 0xaaaaaa, 0x555555); 26 gdk_ pixbuf_ render_ pixmap_ and_ mask ( background, & pixmap, NULL, 255); 27 gdk_ window_ set_ back_ pixmap ( widget - >window, pixmap, FALSE); 28 gdk_ window_ clear( widget - >window); g_ object_ unref ( background); 31 g_ object_ unref ( pixmap); return TRUE; 34 } static void 37 cb_ value_ changed ( GtkSpinButton * spinbutton, 38 gpointer user_ data) 39 { 40 threshold = 41 gtk_ spin_ button_ get_ value_ as_ int ( GTK_ SPIN_ BUTTON ( spinbutton)); 42 gtk_ widget_ queue_ draw ( GTK_ WIDGET ( user_ data)); 43 } operation.h 1 (5.1) GdkPixbuf GdkPixbuf 1 gdk pixbuf get rowstride (x, y) p rowstride y + x + p (5.2) : operation.h 1 #ifndef OPERATION_H 2 #define OPERATION_H 3 4 #define gdk_pixbuf_get_pixel(pixbuf,x,y,p) \ 5 (*(gdk_pixbuf_get_pixels ((pixbuf)) + \ 6 gdk_ pixbuf_ get_ rowstride (( pixbuf)) * ( y) + \ 7 gdk_pixbuf_get_n_channels ((pixbuf)) * (x) + (p))) 8 9 #define gdk_pixbuf_put_pixel(pixbuf,x,y,p,val) \ 10 (*(gdk_pixbuf_get_pixels ((pixbuf)) + \ 11 gdk_ pixbuf_ get_ rowstride (( pixbuf)) * ( y) + \ 12 gdk_pixbuf_get_n_channels ((pixbuf)) * (x) + (p)) = (val)) void create_ binarized_ image ( const GdkPixbuf * src, 15 GdkPixbuf * dst, 16 gint threshold); #endif /* OPERATION_H */ operation.c create binarized image (x, y) RGB 19 RGB Y : operation.c 1 # include <gtk/ gtk. h> 2 # include " operation. h" 3 4 void 5 create_ binarized_ image ( const GdkPixbuf * src, 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

91 GdkPixbuf * dst, 7 gint threshold) 8 { 9 int row, col; 10 guchar r, g, b, y, val; for ( row = 0; row < gdk_ pixbuf_ get_ height ( src); row++) 13 { 14 for ( col = 0; col < gdk_ pixbuf_ get_ width ( src); col++) 15 { 16 r = gdk_pixbuf_get_pixel (src, col, row, 0); 17 g = gdk_pixbuf_get_pixel (src, col, row, 1); 18 b = gdk_pixbuf_get_pixel (src, col, row, 2); 19 y = ( guchar) ( * r * g * b); 20 val = ( y >= threshold)? 255 : 0; 21 gdk_pixbuf_put_pixel (dst, col, row, 0, val); 22 gdk_pixbuf_put_pixel (dst, col, row, 1, val); 23 gdk_pixbuf_put_pixel (dst, col, row, 2, val); 24 } 25 } 26 } gcc make Makefile $ make gcc -Wall /usr/bin/pkg-config --cflags gtk c -o binarize.o binarize.c gcc -Wall /usr/bin/pkg-config --cflags gtk c -o operation.o operation.c gcc binarize.o operation.o /usr/bin/pkg-config --libs gtk+-2.0 /usr/bin/pkg-co nfig --libs gtk o binarize-gui $./binarize-gui sample.png 5.6 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

92 80 5 GdkPixbuf : binarize.c 1 int 2 main ( int argc, char * argv[]) 3 { 4 GtkWidget * window; 5 GdkPixbuf * pixbuf; 6 7 if ( argc < 2) 8 { 9 g_print ("Usage: %s imagefile\n", argv[0]); 10 exit (0); 11 } 12 gtk_init (&argc, &argv); pixbuf = gdk_ pixbuf_ new_ from_ file ( argv[1], NULL); 15 bin = gdk_ pixbuf_ copy ( pixbuf); 16 window = make_ interface (" Image Binarization", pixbuf); 17 gtk_ widget_ show_ all ( window); 18 gtk_main (); return 0; 21 } Makefile 1 CC = gcc 2 3 INSTALL = / usr/ bin/ install 4 PKG_ CONFIG = / usr/ bin/ pkg - config 5 6 CFLAGS = -Wall $( PKG_ CONFIG) --cflags gtk LDFLAGS = $( PKG_ CONFIG) --libs gtk SRCS = binarize. c operation. c 10 HDRS = operation. h 11 OBJS = $(SRCS:.c=.o) DEST = $( PREFIX)/ bin PROGRAM = binarize - gui all: $( PROGRAM) $( PROGRAM): $( OBJS) $( HDRS) 20 $( CC) $( OBJS) $( LDFLAGS) -o $( PROGRAM) clean:; rm -f *. o * ~ $( PROGRAM) install: $( PROGRAM) 25 $( INSTALL) -s $( PROGRAM) $( DEST) 第 5 章 GdkPixbuf を使った画像アプリケーションの作成

93 81 6 cairo 6.1 cairo cairo SVG cairo GTK+ cairo cairo C C++ Java Mono Perl Python Ruby cairo Web Cairo Tutorial cairo The Cairo graphics tutorial ZetCode cairo Rubyist Magazine cairo: 2 cairo Ruby rcairo cairo 6.2 cairo GDK cairo 第 6 章 cairo による図形の描画

94 82 6 cairo (a) 6.1(b) (a) (b) 6.1 cairo : (a) (b) GTK+ PS EPS SVG GTK+ GTK+ gdk cairo create cairo_ t* gdk_ cairo_ create ( GdkDrawable * drawable); 1 GdkDrawable cairo image surface create cairo_ surface_ t* cairo_ image_ surface_ create ( cairo_ format_ t format, int width, int height); 第 6 章 cairo による図形の描画

95 CAIRO FORMAT ARGB32 CAIRO FORMAT RGB24 CAIRO FORMAT A8 CAIRO FORMAT A1 RGB RGB 8 1 PNG p. 99 GdkPixbuf cairo image surface create for data cairo_ surface_ t* cairo_ image_ surface_ create_ for_ data ( unsigned char * data, cairo_ format_ t format, int width, int height, int stride); PNG cairo image surface create from png cairo_ surface_ t* cairo_ image_ surface_ create_ from_ png ( const char * filename); 1 PNG PNG PNG cairo surface write to png cairo_ status_ t cairo_ surface_ write_ to_ png ( cairo_ surface_ t * surface, const char * filename); 1 cairo status t PS EPS PS cairo ps surface create 1/72 第 6 章 cairo による図形の描画

96 84 6 cairo cairo_ surface_ t* cairo_ ps_ surface_ create ( const char * filename, double width_in_points, double height_ in_ points); EPS cairo ps surface set eps void cairo_ ps_ surface_ set_ eps ( cairo_ surface_ t * surface, cairo_ bool_ t eps); 1 2 EPS TRUE FALSE PS SVG cairo show page void cairo_ show_ page ( cairo_ t * cr); cairo copy page void cairo_ copy_ page ( cairo_ t * cr); cairo surface destroy void cairo_ surface_ destroy ( cairo_ surface_ t * surface); SVG SVG cairo svg surface create cairo_ surface_ t* cairo_ svg_ surface_ create ( const char * filename, double width_in_points, double height_ in_ points); 6.4 cairo create cairo_ t* cairo_ create ( cairo_ surface_ t * target); GTK+ gdk cairo create p cairo move to 2. cairo line to 3. cairo stroke void cairo_ move_ to ( cairo_ t * cr, double x, double y); 第 6 章 cairo による図形の描画

97 void cairo_ line_ to ( cairo_ t * cr, double x, double y); void cairo_ stroke ( cairo_ t * cr); cairo line to cairo move to cairo line to 2 1 cairo line to cairo cairo stroke cairo stroke cairo stroke cairo stroke preserve void cairo_ stroke_ preserve ( cairo_ t * cr); (50, 50) (100, 100) cairo_t *cr; cairo_move_to (cr, 50, 50); cairo_line_to (cr, 100, 100); cario_stroke (cr); 6.6 cairo cairo set line width void cairo_ set_ line_ width ( cairo_ t * cr, double width); cairo line cap t CAIRO LINE CAP BUTT CAIRO LINE CAP ROUND CAIRO LINE CAP SQUARE 6.2 CAIRO LINE CAP ROUND CAIRO LINE CAP SQUARE cairo set line cap void cairo_set_line_cap (cairo_t *cr, cairo_line_cap_t line_cap); cairo set source rgb 第 6 章 cairo による図形の描画

98 86 6 cairo 6.2 RGB cairo cairo GDK 6 1 : cairo-line-cap.c 1 # include <gtk/ gtk. h> 2 3 gboolean 4 cb_ expose_ event ( GtkWidget * widget, 5 GdkEventExpose * event, 6 gpointer user_ data) 7 { 8 GdkWindow * drawable = widget - >window; 9 cairo_ t * cr; 10 double line_ width = 30. 0; cr = gdk_ cairo_ create ( drawable); cairo_ set_ line_ width ( cr, line_ width); cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); 17 cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT); 18 cairo_move_to (cr, 50.0, 50.0); 19 cairo_line_to (cr, 350.0, 50.0); 20 cairo_ stroke ( cr); cairo_set_source_rgb (cr, 0.0, 1.0, 0.0); 23 cairo_ set_ line_ cap ( cr, CAIRO_ LINE_ CAP_ ROUND); 24 cairo_move_to (cr, 50.0, 100.0); 25 cairo_line_to (cr, 350.0, 100.0); 26 cairo_ stroke ( cr); cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); 29 cairo_ set_ line_ cap ( cr, CAIRO_ LINE_ CAP_ SQUARE); 30 cairo_move_to (cr, 50.0, 150.0); 31 cairo_line_to (cr, 350.0, 150.0); 32 cairo_ stroke ( cr); cairo_set_line_width (cr, 1); 35 cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); cairo_move_to (cr, 50.0, 15.0); 38 cairo_line_to (cr, 50.0, 185.0); 39 cairo_ stroke ( cr); cairo_move_to (cr, line_width / 2.0, 15.0); 42 cairo_ line_ to ( cr, line_ width / 2.0, ); 43 cairo_ stroke ( cr); cairo_ destroy ( cr); return FALSE; 48 } int 51 main ( int argc, char * argv[]) 52 { 53 GtkWidget * window; 第 6 章 cairo による図形の描画

99 GtkWidget * canvas; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 59 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " cairo_ line_ cap Sample"); 60 gtk_ widget_ set_ size_ request ( window, 400, 200); 61 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 62 G_ CALLBACK ( gtk_ main_ quit), NULL); canvas = gtk_ drawing_ area_ new (); 65 gtk_ container_ add ( GTK_ CONTAINER ( window), canvas); 66 g_ signal_ connect ( G_ OBJECT ( canvas), " expose - event", 67 G_ CALLBACK ( cb_ expose_ event), NULL); gtk_ widget_ show_ all ( window); 70 gtk_main (); return 0; 73 } cairo line join t CAIRO LINE JOIN MITER CAIRO LINE JOIN ROUND CAIRO LINE JOIN BEVEL 6.3 cairo set line join void cairo_ set_ line_ join ( cairo_ t * cr, cairo_ line_ join_ t line_ join); cairo set line join 6.12 p. 103 cairo translate 22 for 3 cairo translate 6 2 : cairo line join.c 1 # include <gtk/ gtk. h> 2 3 gboolean 4 cb_ expose_ event ( GtkWidget * widget, 5 GdkEventExpose * event, 第 6 章 cairo による図形の描画

100 88 6 cairo 6 gpointer user_ data) 7 { 8 GdkWindow * drawable = widget - >window; 9 cairo_ t * cr; 10 cairo_ line_ join_ t join_ type[] = { CAIRO_LINE_JOIN_MITER, 11 CAIRO_LINE_JOIN_ROUND, 12 CAIRO_ LINE_ JOIN_ BEVEL}; 13 double color[ 3][ 3] = {{1.0, 0.0, 0.0}, 14 {0.0, 1.0, 0.0}, 15 {0.0, 0.0, 1.0}}; 16 int n; cr = gdk_ cairo_ create ( drawable); cairo_set_line_width (cr, 30.0); for ( n = 0; n < 3; n++) 23 { 24 cairo_set_source_rgb (cr, color[n][0], color[n][1], color[n][2]); 25 cairo_set_line_join (cr, join_type[n]); 26 cairo_move_to (cr, 25.0, 150.0); 27 cairo_line_to (cr, 25.0, 50.0); 28 cairo_line_to (cr, 125.0, 125.0); 29 cairo_ stroke ( cr); 30 cairo_ translate ( cr, 130.0, 0. 0); 31 } 32 cairo_ destroy ( cr); return FALSE; 35 } cairo set dash void cairo_set_dash (cairo_t *cr, const double * dashes, int num_dashes, double offset); cairo set dash 6.4 cairo set dash 2 2 double 第 6 章 cairo による図形の描画

101 : cairo line dash.c 1 # include <gtk/ gtk. h> 2 3 gboolean 4 cb_ expose_ event ( GtkWidget * widget, 5 GdkEventExpose * event, 6 gpointer user_ data) 7 { 8 GdkWindow * drawable = widget - >window; 9 cairo_ t * cr; 10 double dash_ pattern1[] = {40.0, 5. 0}; 11 double dash_ pattern2[] = {40.0, 5.0, 5.0, 5. 0}; cr = gdk_ cairo_ create ( drawable); cairo_set_line_width (cr, 5.0); cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); 18 cairo_ set_ dash ( cr, dash_pattern1, 19 sizeof ( dash_ pattern1) / sizeof ( dash_ pattern1[ 0]), 20 0); 21 cairo_move_to (cr, 50.0, 50.0); 22 cairo_line_to (cr, 350.0, 50.0); 23 cairo_ stroke ( cr); cairo_set_source_rgb (cr, 0.0, 1.0, 0.0); 26 cairo_ set_ dash ( cr, dash_pattern2, 27 sizeof ( dash_ pattern2) / sizeof ( dash_ pattern2[ 0]), 28 0); 29 cairo_move_to (cr, 50.0, 100.0); 30 cairo_line_to (cr, 350.0, 100.0); 31 cairo_ stroke ( cr); cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); 34 cairo_ set_ dash ( cr, dash_pattern2, 35 sizeof ( dash_ pattern2) / sizeof ( dash_ pattern2[ 0]), 36-5); 37 cairo_move_to (cr, 50.0, 150.0); 38 cairo_line_to (cr, 350.0, 150.0); 39 cairo_ stroke ( cr); cairo_ destroy ( cr); return FALSE; 44 } 6.7 cairo stroke cairo rectangle x y width height void cairo_ rectangle ( cairo_ t * cr, double x, double y, double width, double height); cairo fill cairo stroke cairo fill preserve void cairo_ fill ( cairo_ t * cr); void cairo_ fill_ preserve ( cairo_ t * cr); 第 6 章 cairo による図形の描画

102 90 6 cairo : cairo rectangle.c 1 # include <gtk/ gtk. h> 2 3 gboolean 4 cb_ expose_ event ( GtkWidget * widget, 5 GdkEventExpose * event, 6 gpointer user_ data) 7 { 8 GdkWindow * drawable = widget - >window; 9 cairo_ t * cr; cr = gdk_ cairo_ create ( drawable); 12 cairo_set_line_width (cr, 10.0); cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); 15 cairo_ rectangle ( cr, 50.0, 50.0, 100.0, ); 16 cairo_ stroke ( cr); cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); 19 cairo_ rectangle ( cr, 200.0, 50.0, 100.0, ); 20 cairo_ stroke_ preserve ( cr); 21 cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); 22 cairo_ fill ( cr); cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); 25 cairo_ rectangle ( cr, 350.0, 50.0, 100.0, ); 26 cairo_ fill_ preserve ( cr); 27 cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); 28 cairo_ stroke ( cr); cairo_ destroy ( cr); return FALSE; 33 } p cairo close path void cairo_ close_ path ( cairo_ t * cr); 第 6 章 cairo による図形の描画

103 : cairo polygon.c 1 # include <gtk/ gtk. h> 2 3 gboolean 4 cb_ expose_ event ( GtkWidget * widget, 5 GdkEventExpose * event, 6 gpointer user_ data) 7 { 8 GdkWindow * drawable = widget - >window; 9 cairo_ t * cr; 10 double points[ 11][ 2] = {{50.0, 125.0}, {125.0, 115.0}, 11 {150.0, 50.0}, {175.0, 115.0}, 12 {250.0, 125.0}, {200.0, 165.0}, 13 {210.0, 230.0}, {150.0, 190.0}, 14 {90.0, 230.0}, {100.0, 165.0}, 15 {50.0, 125.0}}; 16 int n; cr = gdk_ cairo_ create ( drawable); cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); 21 cairo_set_line_width (cr, 10.0); 22 for ( n = 0; n < 11; n++) 23 { 24 cairo_line_to (cr, points[n][0], points[n][1]); 25 } 26 cairo_ stroke_ preserve ( cr); 27 cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); 28 cairo_set_line_width (cr, 1.0); 29 cairo_ fill ( cr); 30 cairo_ translate ( cr, 250.0, 0. 0); cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); 33 cairo_set_line_width (cr, 10.0); 34 for ( n = 0; n < 10; n++) 35 { 36 cairo_line_to (cr, points[n][0], points[n][1]); 37 } 38 cairo_ stroke_ preserve ( cr); 39 cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); 40 cairo_set_line_width (cr, 1.0); 41 cairo_ fill ( cr); 42 cairo_ translate ( cr, 250.0, 0. 0); cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); 45 cairo_set_line_width (cr, 10.0); 46 for ( n = 0; n < 10; n++) 47 { 48 cairo_line_to (cr, points[n][0], points[n][1]); 49 } 第 6 章 cairo による図形の描画

104 92 6 cairo 50 cairo_ close_ path ( cr); 51 cairo_ stroke_ preserve ( cr); 52 cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); 53 cairo_set_line_width (cr, 1.0); 54 cairo_ fill ( cr); cairo_ destroy ( cr); return FALSE; 59 } 6.9 cairo arc void cairo_ arc ( cairo_ t * cr, double xc, double yc, double radius, double angle1, double angle2); 6.7 cairo arc xc yc radius angle1 angle2 0 radius ( xc, yc ) angle1 angle 第 6 章 cairo による図形の描画

105 : cairo arc.c 1 # include <gtk/ gtk. h> 2 # include <math. h> 3 4 gboolean 5 cb_ expose_ event ( GtkWidget * widget, 6 GdkEventExpose * event, 7 gpointer user_ data) 8 { 9 GdkWindow * drawable = widget - >window; 10 cairo_ t * cr; cr = gdk_ cairo_ create ( drawable); cairo_set_line_width (cr, 10.0); 15 cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); cairo_arc (cr, 100.0, 100.0, 80.0, 0.0, 2.0 * M_PI); 18 cairo_ stroke ( cr); cairo_arc (cr, 300.0, 100.0, 80.0, 0.0, 3.0 * M_PI / 4.0); 21 cairo_ stroke ( cr); cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); cairo_ arc ( cr, 300.0, 100.0, 80.0, * M_PI / 4.0, 7.0 * M_PI / 4.0); 27 cairo_ fill ( cr); cairo_ destroy ( cr); return FALSE; 32 } 6.10 cairo curve to Bézier curve void cairo_curve_to (cairo_t *cr, double x1, double y1, double x2, double y2, double x3, double y3); cairo move to cairo curve to (x1 y1) (x2 y2) (x3 y3) 6.9 cairo set source rgba 第 6 章 cairo による図形の描画

106 94 6 cairo 6 7 : cairo curve.c 1 # include <gtk/ gtk. h> 2 3 gboolean 4 cb_ expose_ event ( GtkWidget * widget, 5 GdkEventExpose * event, 6 gpointer user_ data) 7 { 8 GdkWindow * drawable = widget - >window; 9 cairo_ t * cr; 10 double x0 = 25.6, y0 = ; 11 double x1 = 102.4, y1 = ; 12 double x2 = 153.6, y2 = 25. 6; 13 double x3 = 230.4, y3 = ; cr = gdk_ cairo_ create ( drawable); cairo_set_line_width (cr, 10.0); 18 cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); cairo_move_to (cr, x0, y0); 21 cairo_curve_to (cr, x1, y1, x2, y2, x3, y3); 22 cairo_ stroke ( cr); cairo_set_line_width (cr, 6.0); 25 cairo_set_source_rgba (cr, 1.0, 0.2, 0.2, 0.6); cairo_move_to (cr, x0, y0); 28 cairo_line_to (cr, x1, y1); 29 cairo_line_to (cr, x2, y2); 30 cairo_line_to (cr, x3, y3); 31 cairo_ stroke ( cr); cairo_ destroy ( cr); return FALSE; 36 } cairo set source rgb cairo set source rgba void cairo_ set_ source_ rgb ( cairo_ t * cr, double red, double green, double blue); void cairo_ set_ source_ rgba ( cairo_ t * cr, double red, double green, double blue, double alpha); RGB 第 6 章 cairo による図形の描画

107 RGBA : cairo transparency.c 1 # include <gtk/ gtk. h> 2 3 gboolean 4 cb_ expose_ event ( GtkWidget * widget, 5 GdkEventExpose * event, 6 gpointer user_ data) 7 { 8 GdkWindow * drawable = widget - >window; 9 cairo_ t * cr; 10 int n; cr = gdk_ cairo_ create ( drawable); for ( n = 1; n <= 10; n++) 15 { 16 cairo_set_source_rgba (cr, 0.0, 0.0, 1.0, n * 0.1); 17 cairo_ rectangle ( cr, * n, 20.0, 40.0, 40. 0); 18 cairo_ fill ( cr); 19 } 20 cairo_ destroy ( cr); return FALSE; 23 } cairo cairo set source void cairo_ set_ source ( cairo_ t * cr, cairo_ pattern_ t * source); 1 2 cairo pattern create linear cairo_ pattern_ t* cairo_ pattern_ create_ linear ( double x0, double y0, double x1, double y1); 6.12 第 6 章 cairo による図形の描画

108 96 6 cairo p. 103 cairo matrix t void cairo_ pattern_ add_ color_ stop_ rgb ( cairo_ pattern_ t * pattern, double offset, double red, double green, double blue); void cairo_ pattern_ add_ color_ stop_ rgba ( cairo_ pattern_ t * pattern, double offset, double red, double green, double blue, double alpha); 3 5 RGB cairo pattern create linear pattern RGB pattern RGB 1 0 cairo pattern add color stop rgba pattern3 cairo pattern create linear 30 2 (x0 y0) (x1 y1) pattern3 2 pattern1 pattern2 pattern3 (0 0) (50 50) cairo translate cairo pattern set extend void cairo_ pattern_ set_ extend ( cairo_ pattern_ t * pattern, cairo_ extend_ t extend); 6.4 cairo extend t 4 CAIRO EXTEND NONE 35 CAIRO EXTEND REPEAT 第 6 章 cairo による図形の描画

109 CAIRO EXTEND NONE CAIRO EXTEND REPEAT CAIRO EXTEND REFLECT CAIRO EXTEND PAD : cairo pattern linear.c 1 # include <gtk/ gtk. h> 2 3 gboolean 4 cb_ expose_ event ( GtkWidget * widget, 5 GdkEventExpose * event, 6 gpointer user_ data) 7 { 8 GdkWindow * drawable = widget - >window; 9 cairo_ t * cr; 10 cairo_ pattern_ t * pattern1; 11 cairo_ pattern_ t * pattern2; 12 cairo_ pattern_ t * pattern3; cr = gdk_ cairo_ create ( drawable); pattern1 = cairo_ pattern_ create_ linear (50.0, 50.0, 350.0, 50. 0); 17 cairo_ pattern_ add_ color_ stop_ rgb ( pattern1, 0.0, 1.0, 0.0, 0. 0); 18 cairo_ pattern_ add_ color_ stop_ rgb ( pattern1, 1.0, 1.0, 1.0, 1. 0); 19 cairo_ set_ source ( cr, pattern1); 20 cairo_ rectangle ( cr, 50.0, 50.0, 300.0, 50. 0); 21 cairo_ fill ( cr); pattern2 = cairo_ pattern_ create_ linear (50.0, 120.0, 50.0, ); 24 cairo_ pattern_ add_ color_ stop_ rgba ( pattern2, 0.0, 0.0, 1.0, 0.0, 1. 0); 25 cairo_ pattern_ add_ color_ stop_ rgba ( pattern2, 1.0, 0.0, 1.0, 0.0, 0. 0); 26 cairo_ set_ source ( cr, pattern2); 27 cairo_ rectangle ( cr, 50.0, 120.0, 300.0, 50. 0); 28 cairo_ fill ( cr); pattern3 = cairo_ pattern_ create_ linear (0, 0.0, 50.0, 50. 0); 31 cairo_ pattern_ add_ color_ stop_ rgb ( pattern3, 0.0, 0.0, 0.0, 0. 0); 32 cairo_ pattern_ add_ color_ stop_ rgb ( pattern3, 0.5, 1.0, 1.0, 0. 0); 33 cairo_ pattern_ add_ color_ stop_ rgb ( pattern3, 1.0, 0.0, 0.0, 0. 0); 34 cairo_ pattern_ set_ extend ( pattern3, CAIRO_ EXTEND_ REPEAT); 35 cairo_ set_ source ( cr, pattern3); 36 cairo_ translate ( cr, 50.0, ); 37 cairo_ rectangle ( cr, 0.0, 0.0, 300.0, 70. 0); 38 cairo_ fill ( cr); 39 第 6 章 cairo による図形の描画

110 98 6 cairo 40 cairo_ pattern_ destroy ( pattern1); 41 cairo_ pattern_ destroy ( pattern2); 42 cairo_ pattern_ destroy ( pattern3); 43 cairo_ destroy ( cr); return FALSE; 46 } cairo pattern create radial 2 cairo_ pattern_ t* cairo_ pattern_ create_ radial ( double cx0, double cy0, double radius0, double cx1, double cy1, double radius1); cairo pattern add color stop rgb : cairo pattern radial.c 1 # include <gtk/ gtk. h> 2 # include <math. h> 3 4 gboolean 5 cb_ expose_ event ( GtkWidget * widget, 6 GdkEventExpose * event, 7 gpointer user_ data) 8 { 9 GdkWindow * drawable = widget - >window; 10 cairo_ t * cr; 11 cairo_ pattern_ t * pattern; cr = gdk_ cairo_ create ( drawable); pattern = cairo_ pattern_ create_ radial (160.0, 160.0, 30.0, , 200.0, ); 6.12 第 6 章 cairo による図形の描画

111 cairo_pattern_add_color_stop_rgb (pattern, 0.5, 1.0, 0.0, 0.0); 18 cairo_pattern_add_color_stop_rgb (pattern, 1.0, 1.0, 1.0, 1.0); 19 cairo_ set_ source ( cr, pattern); 20 cairo_arc (cr, 200.0, 200.0, 160.0, 0.0, 2.0 * M_PI); 21 cairo_ fill ( cr); cairo_ pattern_ destroy ( pattern); 24 cairo_ destroy ( cr); return FALSE; 27 } gdk cairo set source pixbuf GdkPixbuf GdkPixbuf void gdk_ cairo_ set_ source_ pixbuf ( cairo_ t * cr, const GdkPixbuf * pixbuf, double pixbuf_x, double pixbuf_ y); main 36 GdkPixbuf 49 cb expose event user data 36 GdkPixbuf 14 gdk cairo set source pixbuf 15 cairo paint void cairo_ paint ( cairo_ t * cr); cairo paint with alpha void cairo_ paint_ with_ alpha ( cairo_ t * cr, double alpha); 第 6 章 cairo による図形の描画

112 100 6 cairo 6 11 : cairo source image.c 1 # include <gtk/ gtk. h> 2 # include <stdlib. h> 3 4 gboolean 5 cb_ expose_ event ( GtkWidget * widget, 6 GdkEventExpose * event, 7 gpointer user_ data) 8 { 9 GdkWindow * drawable = widget - >window; 10 cairo_ t * cr; cr = gdk_ cairo_ create ( drawable); gdk_ cairo_ set_ source_ pixbuf ( cr, ( GdkPixbuf *) user_data, 0.0, 0. 0); 15 cairo_ paint ( cr); cairo_ destroy ( cr); return FALSE; 20 } int 23 main ( int argc, char * argv[]) 24 { 25 GtkWidget * window; 26 GtkWidget * canvas; 27 GdkPixbuf * pixbuf; if (argc!= 2) 30 { 31 g_print ("%s imagefile\n", argv[0]); 32 exit (1); 33 } 34 gtk_init (&argc, &argv); pixbuf = gdk_ pixbuf_ new_ from_ file ( argv[1], NULL); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 39 gtk_ window_ set_ title ( GTK_ WINDOW ( window), 40 " cairo_ source_ image Sample"); 41 gtk_ widget_ set_ size_ request ( window, 42 gdk_ pixbuf_ get_ width ( pixbuf), 43 gdk_ pixbuf_ get_ height ( pixbuf)); 44 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 45 G_ CALLBACK ( gtk_ main_ quit), NULL); canvas = gtk_ drawing_ area_ new (); 48 gtk_ container_ add ( GTK_ CONTAINER ( window), canvas); 49 g_ signal_ connect ( G_ OBJECT ( canvas), " expose - event", 50 G_ CALLBACK ( cb_ expose_ event), pixbuf); gtk_ widget_ show_ all ( window); 53 gtk_main (); g_ object_ unref ( pixbuf); return 0; 58 } 第 6 章 cairo による図形の描画

113 cairo set source surface 3 4 void cairo_ set_ source_ surface ( cairo_ t * cr, cairo_ surface_ t * surface, double x, double p. 82 cairo image surface create from png PNG 32 cb expose event cairo set source surface y); 6 12 : cairo source image surface.c 1 # include <gtk/ gtk. h> 2 3 gboolean 4 cb_ expose_ event ( GtkWidget * widget, 5 GdkEventExpose * event, 6 gpointer user_ data) 7 { 8 GdkWindow * drawable = widget - >window; 9 cairo_ t * cr; 10 cairo_ surface_ t * surface; cr = gdk_ cairo_ create ( drawable); surface = ( cairo_ surface_ t *) user_ data; 15 cairo_ set_ source_ surface ( cr, surface, 0.0, 0. 0); 16 cairo_ paint ( cr); cairo_ destroy ( cr); return FALSE; 21 } int 24 main ( int argc, char * argv[]) 25 { 26 GtkWidget * window; 27 GtkWidget * canvas; 28 cairo_ surface_ t * surface; 第 6 章 cairo による図形の描画

114 102 6 cairo gtk_init (&argc, &argv); surface = cairo_ image_ surface_ create_ from_ png ("./ Parrots. png"); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 35 gtk_ window_ set_ title ( GTK_ WINDOW ( window), 36 " cairo_ source_ image_ surface Sample"); 37 gtk_ widget_ set_ size_ request 38 (window, 39 cairo_ image_ surface_ get_ width ( surface) * 1.2, 40 cairo_ image_ surface_ get_ height ( surface) * 1. 2); 41 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 42 G_ CALLBACK ( gtk_ main_ quit), NULL); canvas = gtk_ drawing_ area_ new (); 45 gtk_ container_ add ( GTK_ CONTAINER ( window), canvas); 46 g_ signal_ connect ( G_ OBJECT ( canvas), " expose - event", 47 G_ CALLBACK ( cb_ expose_ event), surface); gtk_ widget_ show_ all ( window); 50 gtk_main (); cairo_ surface_ destroy ( surface); return 0; 55 } cairo pattern create for surface cairo_ pattern_ t* cairo_ pattern_ create_ for_ surface ( cairo_ surface_ t * surface); p : cairo pattern image.c 1 # include <gtk/ gtk. h> 2 3 gboolean 4 cb_ expose_ event ( GtkWidget * widget, 5 GdkEventExpose * event, 6 gpointer user_ data) 7 { 8 GdkWindow * drawable = widget - >window; 9 cairo_ t * cr; 10 cairo_ surface_ t * surface; 11 cairo_ pattern_ t * pattern; 12 double points[ 10][ 2] = {{ 50.0, 125.0}, {125.0, 115.0}, 13 {150.0, 50.0}, {175.0, 115.0}, 14 {250.0, 125.0}, {200.0, 165.0}, 15 {210.0, 230.0}, {150.0, 190.0}, 16 { 90.0, 230.0}, {100.0, 165.0}}; 17 int n; cr = gdk_ cairo_ create ( drawable); surface = ( cairo_ surface_ t *) user_ data; 22 pattern = cairo_ pattern_ create_ for_ surface ( surface); 23 cairo_ set_ source ( cr, pattern); 24 cairo_ pattern_ set_ extend ( cairo_ get_ source ( cr), CAIRO_ EXTEND_ REPEAT); for ( n = 0; n < 10; n++) 27 { 28 cairo_line_to (cr, points[n][0], points[n][1]); 29 } 30 cairo_ close_ path ( cr); 31 cairo_ fill ( cr); cairo_ pattern_ destroy ( pattern); 34 cairo_ destroy ( cr); 第 6 章 cairo による図形の描画

115 return FALSE; 37 } void cairo_ translate ( cairo_ t * cr, double tx, double ty); void cairo_ scale ( cairo_ t * cr, double sx, double sy); void cairo_ rotate ( cairo_ t * cr, double angle); cairo transform void cairo_ transform ( cairo_ t * cr, const cairo_ matrix_ t * matrix); cairo translate ( ) (0 0) 80 cairo translate ( ) cairo scale 1/2 (0 0) 80 1/ π/6 * / cairo get matrix cairo matrix invert cairo transform ( ) 80 *1 Radian: 360 2π 第 6 章 cairo による図形の描画

116 104 6 cairo 6.16 void cairo_ get_ matrix ( cairo_ t * cr, cairo_ matrix_ t * matrix); cairo_ status_ t cairo_ matrix_ invert ( cairo_ matrix_ t * matrix); 6 14 : cairo transform.c 1 # include <gtk/ gtk. h> 2 # include <math. h> 3 4 gboolean 5 cb_ expose_ event ( GtkWidget * widget, 6 GdkEventExpose * event, 7 gpointer user_ data) 8 { 9 GdkWindow * drawable = widget - >window; 10 cairo_ t * cr; 11 cairo_ matrix_ t mat; cr = gdk_ cairo_ create ( drawable); cairo_set_line_width (cr, 5.0); cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); 18 cairo_ translate ( cr, 100.0, ); 19 cairo_arc (cr, 0.0, 0.0, 80.0, 0.0, 2.0 * M_PI); 20 cairo_ stroke ( cr); cairo_set_source_rgb (cr, 0.0, 1.0, 0.0); 23 cairo_ translate ( cr, 200.0, 0. 0); 24 cairo_scale (cr, 1.0, 0.5); 25 cairo_arc (cr, 0.0, 0.0, 80.0, 0.0, 2.0 * M_PI); 26 cairo_ stroke ( cr); cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); 29 cairo_ translate ( cr, 200.0, 0. 0); 30 cairo_scale (cr, 1.0, 2.0); 31 cairo_rotate (cr, M_PI / 6.0); 32 cairo_scale (cr, 1.0, 0.5); 33 cairo_arc (cr, 0.0, 0.0, 80.0, 0.0, 2.0 * M_PI); 34 cairo_ stroke ( cr); cairo_get_matrix (cr, &mat); 37 cairo_ matrix_ invert (& mat); 38 cairo_ transform ( cr, & mat); cairo_set_source_rgb (cr, 1.0, 1.0, 0.0); 41 cairo_arc (cr, 100.0, 100.0, 80.0, 0.0, 2.0 * M_PI); 42 cairo_ fill ( cr); cairo_ destroy ( cr); return FALSE; 47 } 第 6 章 cairo による図形の描画

117 cairo cairo show text void cairo_ show_ text ( cairo_ t * cr, const char * utf8); UTF-8 2 sans-serif cairo select font face void cairo_ select_ font_ face ( cairo_ t * cr, const char * family, cairo_ font_ slant_ t slant, cairo_ font_ weight_ t weight); cairo font slant t cairo font weight t 6.5 CAIRO FONT SLANT NORMAL CAIRO FONT SLANT ITALIC CAIRO FONT SLANT OBLIQUE 6.6 CAIRO FONT WEIGHT NORMAL CAIRO FONT WEIGHT BOLD cairo set font size void cairo_ set_ font_ size ( cairo_ t * cr, double size); 6 15 : cairo text.c 1 # include <gtk/ gtk. h> 2 3 gboolean 4 cb_ expose_ event ( GtkWidget * widget, 5 GdkEventExpose * event, 6 gpointer user_ data) 7 { 8 GdkWindow * drawable = widget - >window; 6.17 第 6 章 cairo による図形の描画

118 106 6 cairo cairo_ t * cr; cr = gdk_ cairo_ create ( drawable); cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); 14 cairo_ select_ font_ face ( cr, " FreeSans", 15 CAIRO_FONT_SLANT_ITALIC, 16 CAIRO_ FONT_ WEIGHT_ NORMAL); 17 cairo_set_font_size (cr, 24.0); 18 cairo_move_to (cr, 50.0, 50.0); 19 cairo_ show_ text ( cr, " This is a text drawing sample."); cairo_set_source_rgb (cr, 0.0, 1.0, 0.0); cairo_select_font_face (cr, "VL ", 24 CAIRO_FONT_SLANT_NORMAL, 25 CAIRO_ FONT_ WEIGHT_ NORMAL); 26 cairo_move_to (cr, 50.0, 100.0); 27 cairo_show_text (cr, " "); cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); 30 cairo_select_font_face (cr, " ", 31 CAIRO_FONT_SLANT_NORMAL, 32 CAIRO_ FONT_ WEIGHT_ BOLD); 33 cairo_move_to (cr, 50.0, 150.0); 34 cairo_show_text (cr, " "); cairo_ destroy ( cr); return FALSE; 39 } cairo clip void cairo_ clip ( cairo_ t * cr); cairo paint 6 16 : cairo clipping.c 1 # include <gtk/ gtk. h> 2 # include <math. h> 3 4 gboolean 5 cb_ expose_ event ( GtkWidget * widget, 6 GdkEventExpose * event, 7 gpointer user_ data) 第 6 章 cairo による図形の描画

119 { 9 GdkWindow * drawable = widget - >window; 10 cairo_ t * cr; 11 cairo_ surface_ t * surface; 12 double x, y, r; cr = gdk_ cairo_ create ( drawable); surface = ( cairo_ surface_ t *) user_ data; 17 cairo_ set_ source_ surface ( cr, surface, 0.0, 0. 0); x = cairo_ image_ surface_ get_ width ( surface) / 2. 0; 20 y = cairo_ image_ surface_ get_ height ( surface) / 2. 0; 21 r = x < y? x : y; 22 cairo_arc (cr, x, y, r, 0.0, 2.0 * M_PI); 23 cairo_ clip ( cr); 24 cairo_ paint ( cr); cairo_ destroy ( cr); return FALSE; 29 } void cairo_ mask ( cairo_ t * cr, cairo_ pattern_ t * pattern); void cairo_ mask_ surface ( cairo_ t * cr, cairo_ surface_ t * surface, double surface_x, double surface_ y); p cairo paint cairo mask 第 6 章 cairo による図形の描画

120 108 6 cairo : cairo mask.c 1 # include <gtk/ gtk. h> 2 3 gboolean 4 cb_ expose_ event ( GtkWidget * widget, 5 GdkEventExpose * event, 6 gpointer user_ data) 7 { 8 GdkWindow * drawable = widget - >window; 9 cairo_ t * cr; 10 cairo_ pattern_ t * pattern; 11 cairo_ surface_ t * surface; 12 double x, y, r; cr = gdk_ cairo_ create ( drawable); surface = ( cairo_ surface_ t *) user_ data; 17 cairo_ set_ source_ surface ( cr, surface, 0.0, 0. 0); x = cairo_ image_ surface_ get_ width ( surface) / 2. 0; 20 y = cairo_ image_ surface_ get_ height ( surface) / 2. 0; 21 r = x < y? x : y; pattern = cairo_ pattern_ create_ radial ( x, y, 0. 2 * r, x, y, r); 24 cairo_pattern_add_color_stop_rgba (pattern, 0.0, 1.0, 1.0, 1.0, 1.0); 25 cairo_pattern_add_color_stop_rgba (pattern, 1.0, 1.0, 1.0, 1.0, 0.0); cairo_ mask ( cr, pattern); cairo_ pattern_ destroy ( pattern); 30 cairo_ destroy ( cr); return FALSE; 33 } XOR cairo surface create similar 2 CAIRO CONTEXT COLOR ALPHA 第 6 章 cairo による図形の描画

121 cairo_ surface_ t* cairo_ surface_ create_ similar ( cairo_ surface_ t * other, cairo_ content_ t content, int width, int height); cairo set operator void cairo_ set_ operator ( cairo_ t * cr, cairo_ operator_ t op); 4. cairo source set surface 5. cairo paint 6.7 CAIRO OPERATOR CLEAR CAIRO OPERATOR SOURCE CAIRO OPERATOR OVER CAIRO OPERATOR IN CAIRO OPERATOR OUT CAIRO OPERATOR ATOP CAIRO OPERATOR DEST CAIRO OPERATOR DEST OVER CAIRO OPERATOR DEST IN CAIRO OPERATOR DEST OUT CAIRO OPERATOR DEST ATOP CAIRO OPERATOR XOR CAIRO OPERATOR ADD CAIRO OPERATOR SATURATE XOR CAIRO OPERATOR DEST OVER 6 18 : cairo composite.c 1 # include <gtk/ gtk. h> 2 3 static void 4 draw (cairo_t *cr, 5 double x, 6 double y, 7 double w, 8 double h, 9 cairo_ operator_ t op, 10 gchar * operator_ str) { 11 cairo_ t * source_cr, * dest_ cr; 第 6 章 cairo による図形の描画

122 110 6 cairo cairo_ surface_ t * source_surface, * dest_ surface; source_ surface = 15 cairo_ surface_ create_ similar ( cairo_ get_ target ( cr), 16 CAIRO_CONTENT_COLOR_ALPHA, w, h); 17 dest_ surface = 18 cairo_ surface_ create_ similar ( cairo_ get_ target ( cr), 19 CAIRO_CONTENT_COLOR_ALPHA, w, h); 20 source_ cr = cairo_ create ( source_ surface); 21 cairo_ set_ source_ rgb ( source_cr, 0.0, 0.0, 1. 0); 22 cairo_ rectangle ( source_cr, x , y , 50.0, 50. 0); 23 cairo_ fill ( source_ cr); dest_ cr = cairo_ create ( dest_ surface); 26 cairo_set_source_rgb (dest_cr, 1.0, 0.0, 0.0); 27 cairo_ rectangle ( dest_cr, x, y, 50.0, 50. 0); 28 cairo_ fill ( dest_ cr); cairo_ set_ operator ( dest_cr, op); 31 cairo_ set_ source_ surface ( dest_cr, source_surface, 0.0, 0. 0); 32 cairo_ paint ( dest_ cr); cairo_ set_ source_ surface ( cr, dest_surface, 0.0, 0. 0); 35 cairo_ paint ( cr); cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); 38 cairo_move_to (cr, x, y ); 39 cairo_ show_ text ( cr, operator_ str); cairo_ surface_ destroy ( source_ surface); 42 cairo_ surface_ destroy ( dest_ surface); 43 } static gboolean 46 cb_ expose_ event ( GtkWidget * widget, 47 GdkEventExpose * event, 48 gpointer user_ data) 49 { 50 GdkWindow * drawable = widget - >window; 51 cairo_ t * cr; 52 cairo_ operator_ t operator[] = { CAIRO_OPERATOR_CLEAR, 53 CAIRO_OPERATOR_SOURCE, 54 CAIRO_OPERATOR_OVER, 55 CAIRO_OPERATOR_IN, 第 6 章 cairo による図形の描画

123 CAIRO_OPERATOR_OUT, 57 CAIRO_OPERATOR_ATOP, 58 CAIRO_OPERATOR_DEST, 59 CAIRO_OPERATOR_DEST_OVER, 60 CAIRO_OPERATOR_DEST_IN, 61 CAIRO_OPERATOR_DEST_OUT, 62 CAIRO_OPERATOR_DEST_ATOP, 63 CAIRO_OPERATOR_XOR, 64 CAIRO_OPERATOR_ADD, 65 CAIRO_ OPERATOR_ SATURATE}; 66 gchar * operator_ strs[] = {" CAIRO_ OPERATOR_ CLEAR", 67 " CAIRO_ OPERATOR_ SOURCE", 68 " CAIRO_ OPERATOR_ OVER", 69 " CAIRO_ OPERATOR_ IN", 70 " CAIRO_ OPERATOR_ OUT", 71 " CAIRO_ OPERATOR_ ATOP", 72 " CAIRO_ OPERATOR_ DEST", 73 " CAIRO_ OPERATOR_ DEST_ OVER", 74 " CAIRO_ OPERATOR_ DEST_ IN", 75 " CAIRO_ OPERATOR_ DEST_ OUT", 76 " CAIRO_ OPERATOR_ DEST_ ATOP", 77 " CAIRO_ OPERATOR_ XOR", 78 " CAIRO_ OPERATOR_ ADD", 79 " CAIRO_ OPERATOR_ SATURATE"}; 80 gint x, y, w, h, n; cr = gdk_ cairo_ create ( drawable); gdk_ window_ get_ geometry ( drawable, NULL, NULL, & w, & h, NULL); x = 20; 87 y = 20; 88 draw ( cr, x, y, w, h, operator[0], operator_ strs[ 0]); for ( x = 20, y = 140, n = 1; n <= 5; x += 160, n++) 91 { 92 draw ( cr, x, y, w, h, operator[ n], operator_ strs[ n]); 93 } 94 for ( x = 20, y = 260, n = 6; n <= 10; x += 160, n++) 95 { 96 draw ( cr, x, y, w, h, operator[ n], operator_ strs[ n]); 97 } 98 for ( x = 20, y = 380, n = 11; n < 14; x += 160, n++) 99 { 100 draw ( cr, x, y, w, h, operator[ n], operator_ strs[ n]); 101 } 102 cairo_ destroy ( cr); return FALSE; 105 } 第 6 章 cairo による図形の描画

124

125 GUI 3 GtkButton... GtkCheckButton... GtkRadioButton GtkButton GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkButton GtkButton 第 7 章 ウィジェットリファレン

126 enter leave pressed released clicked gtk button new GtkWidget* gtk_ button_ new ( void); gtk button new with label 7.1 GtkWidget* gtk_ button_ new_ with_ label ( const gchar * label); gtk button new with mnemonic 7.1 GtkWidget* gtk_ button_ new_ with_ mnemonic ( const gchar * label); gtk button new from stock 7.1 GtkStockItem ID GTK STOCK OK GTK STOCK OPEN ID GtkWidget* gtk_ button_ new_ from_ stock ( const gchar * stock_ id); 7.1 clicked pressed released void user_ function ( GtkButton * button, gpointer user_ data); gtk button get label G_ CONST_ RETURN gchar* gtk_ button_ get_ label ( GtkButton * button); gtk button set label void gtk_ button_ set_ label ( GtkButton * button, const gchar * label); cb button clicked 7.2 第 7 章 ウィジェットリファレン

127 : gtkbutton-sample2.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ button_ clicked ( GtkButton * widget, 5 gpointer user_ data) 6 { 7 static int count = 0; 8 char buf[ 1024]; 9 10 sprintf (buf, "%d time(s) clicked.", ++count); 11 gtk_ button_ set_ label ( widget, buf); 12 } int 15 main ( int argc, char ** argv) 16 { 17 GtkWidget * window; 18 GtkWidget * box; 19 GtkWidget * button; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 24 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkButton Sample2"); 25 gtk_ widget_ set_ size_ request ( window, 240, -1); 26 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 27 G_ CALLBACK ( gtk_ main_ quit), NULL); box = gtk_ vbox_ new ( TRUE, 0); 30 gtk_ container_ add ( GTK_ CONTAINER ( window), box); button = gtk_ button_ new_ with_ label (" Please click me."); 33 gtk_box_pack_start (GTK_BOX (box), button, TRUE, TRUE, 0); 34 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 35 G_ CALLBACK ( cb_ button_ clicked), NULL); gtk_ widget_ show_ all ( window); 38 gtk_main (); return 0; 41 } GtkCheckButton GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkButton +----GtkToggleButton +----GtkCheckButton 第 7 章 ウィジェットリファレン

128 116 7 toggled 7.2 GtkCheckButton 3 gtk check button new 7.3 GtkWidget* gtk_ check_ button_ new ( void); gtk check button new with label 7.3 GtkWidget* gtk_ check_ button_ new_ with_ label ( const gchar * label); gtk check button new with mnemonic ( 7.3 ) GtkWidget* gtk_ check_ button_ new_ with_ mnemonic ( const gchar * label); 7.2 toggled toggled void user_ function ( GtkToggleButton * togglebutton, gpointer user_ data); gtk toggle button get active TRUE FALSE gboolean gtk_ toggle_ button_ get_ active ( GtkToggleButton * toggle_ button); gtk toggle button set active void gtk_ toggle_ button_ set_ active ( GtkToggleButton * toggle_button, gboolean is_ active); gtk toggle button toggled void gtk_ toggle_ button_ toggled ( GtkToggleButton * toggle_ button); 7.3 第 7 章 ウィジェットリファレン

129 toggled cb button toggled : gtkcheckbutton-sample2.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ button_ toggled ( GtkToggleButton * widget, 5 gpointer user_ data) 6 { 7 gboolean active; 8 gchar *str[] = {"FALSE", "TRUE"}; 9 10 active = gtk_ toggle_ button_ get_ active ( widget); 11 g_ print (" Check button state : % s\ n", str[ active]); 12 } int 15 main ( int argc, char ** argv) 16 { 17 GtkWidget * window; 18 GtkWidget * box; 19 GtkWidget * button; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 24 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkCheckButton Sample2"); 25 gtk_ widget_ set_ size_ request ( window, 300, -1); 26 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 27 G_ CALLBACK ( gtk_ main_ quit), NULL); box = gtk_ vbox_ new ( TRUE, 0); 30 gtk_ container_ add ( GTK_ CONTAINER ( window), box); button = gtk_ check_ button_ new_ with_ label (" Please click me."); 33 gtk_box_pack_start (GTK_BOX (box), button, TRUE, TRUE, 0); 34 gtk_ toggle_ button_ set_ active ( GTK_ TOGGLE_ BUTTON ( button), TRUE); 35 g_ signal_ connect ( G_ OBJECT ( button), " toggled", 36 G_ CALLBACK ( cb_ button_ toggled), NULL); gtk_ widget_ show_ all ( window); 39 gtk_main (); return 0; 42 } 7.4 第 7 章 ウィジェットリファレン

130 GtkRadioButton 1 GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkButton +----GtkToggleButton +----GtkCheckButton +----GtkRadioButton GtkRadioButton 6 gtk radio button new 7.5 GtkWidget* gtk_ radio_ button_ new ( GSList * group); gtk radio button new with label 7.5 GtkWidget* gtk_ radio_ button_ new_ with_ label ( GSList * group, const gchar * label); gtk radio button new with mnemonic 7.5 GtkWidget* gtk_ radio_ button_ new_ with_ mnemonic ( GSList * group, const gchar * label); gtk radio button new from widget GtkWidget* gtk_ radio_ button_ new_ from_ widget ( GtkRadioButton * group); gtk radio button new with label from widget GtkWidget* gtk_ radio_ button_ new_ with_ label_ from_ widget ( GtkRadioButton * group, const gchar * label); gtk radio button new with mnemonic from widget GtkWidget* 7.5 第 7 章 ウィジェットリファレン

131 group-changed toggled gtk_ radio_ button_ new_ with_ mnemonic_ from_ widget ( GtkRadioButton * group, const gchar * label); NULL gtk radio button new from widget GtkWidget * radio_ button[ 2]; 2 3 radio_ button[ 0] = gtk_ radio_ button_ new ( NULL); 4 radio_ button[ 1] = 5 gtk_radio_button_new_from_widget (GTK_RADIO_BUTTON (radio_button[0])); 7.3 toggled group-changed group-changed void user_ function ( GtkRadioButton * radiobutton, gpointer user_ data); gtk toggle button get active gtk radio button get group GSList* gtk_ radio_ button_ get_ group ( GtkRadioButton * radio_ button); gtk radio button set group void gtk_ radio_ button_ set_ group ( GtkRadioButton * radio_button, GSList *group); toggled cb button toggled GINT TO POINTER 11 gpointer GPOINTER TO INT 第 7 章 ウィジェットリファレン

132 : gtkradiobutton-sample2.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ button_ toggled ( GtkRadioButton * widget, gpointer user_ data) 5 { 6 g_ print (" Catch the toggled signal from the radio button% d.\ n", 7 GPOINTER_TO_INT (user_data)); 8 if ( gtk_ toggle_ button_ get_ active ( GTK_ TOGGLE_ BUTTON ( widget))) 9 { 10 g_ print (" The radio button% d is selected.\ n", 11 GPOINTER_TO_INT (user_data)); 12 } 13 } int 16 main ( int argc, char ** argv) 17 { 18 GtkWidget * window; 19 GtkWidget * box; 20 GtkWidget * button[ 3]; 21 GSList * group = NULL; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 26 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkRadioButton Sample2"); 27 gtk_ widget_ set_ size_ request ( window, 300, -1); 28 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 29 G_ CALLBACK ( gtk_ main_ quit), NULL); box = gtk_ vbox_ new ( TRUE, 0); 32 gtk_ container_ add ( GTK_ CONTAINER ( window), box); button[ 0] = gtk_ radio_ button_ new_ with_ label ( group, " Red"); 35 gtk_ box_ pack_ start ( GTK_ BOX ( box), button[0], TRUE, TRUE, 0); button[ 1] = gtk_ radio_ button_ new_ with_ label_ from_ widget 38 (GTK_RADIO_BUTTON (button[0]), "Green"); 39 gtk_ box_ pack_ start ( GTK_ BOX ( box), button[1], TRUE, TRUE, 0); button[ 2] = gtk_ radio_ button_ new_ with_ label_ from_ widget 42 (GTK_RADIO_BUTTON (button[0]), "Blue"); 43 gtk_ box_ pack_ start ( GTK_ BOX ( box), button[2], TRUE, TRUE, 0); gtk_ toggle_ button_ set_ active ( GTK_ TOGGLE_ BUTTON ( button[ 1]), TRUE); g_signal_connect (G_OBJECT (button[0]), "toggled", 48 G_ CALLBACK ( cb_ button_ toggled), GINT_ TO_ POINTER ( 0)); 49 g_signal_connect (G_OBJECT (button[1]), "toggled", 50 G_ CALLBACK ( cb_ button_ toggled), GINT_ TO_ POINTER ( 1)); 51 g_signal_connect (G_OBJECT (button[2]), "toggled", 52 G_ CALLBACK ( cb_ button_ toggled), GINT_ TO_ POINTER ( 2)); gtk_ widget_ show_ all ( window); 55 gtk_main (); return 0; 58 } 7.6 第 7 章 ウィジェットリファレン

133 GtkContainer GtkWindow GtkWindow GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkWindow gtk window new GtkWindowType 7.4 GTK WINDOW TOPLEVEL GTK WINDOW POPUP GtkWidget* gtk_ window_ new ( GtkWindowType type); 7.4 GtkWindowType GTK WINDOW TOPLEVEL GTK WINDOW POPUP GtkContainer gtk container add gtk window get title gtk window set title const gchar* gtk_ window_ get_ title ( GtkWindow * window); void gtk_ window_ set_ title ( GtkWindow * window, const gchar * title); gtk window set resizable gtk window get resizable gboolean gtk_ window_ get_ resizable ( GtkWindow * window); void gtk_ window_ set_ resizable ( GtkWindow * window, gboolean resizable); 第 7 章 ウィジェットリファレン

134 122 7 GdkPixbuf* gtk_ window_ get_ icon ( GtkWindow * window); void gtk_ window_ set_ icon ( GtkWindow * window, GdkPixbuf * icon); gtk window set decorated 2 FALSE void gtk_ window_ set_ decorated ( GtkWindow * window, gboolean setting); gtk window get decorated gboolean gtk_ window_ get_ decorated ( GtkWindow * window); gtk widget set size request 2 3 void gtk_ widget_ set_ size_ request ( GtkWidget * widget, gint width, gint height); gtk window set resizable 2 FALSE gtk window resize 2 3 void gtk_ window_ resize ( GtkWindow * window, gint width, gint height); gtk widget set size request gtk window resize gtk widget set size request 1 gdk screen width gdk screen height gint gdk_ screen_ width ( void); gint gdk_ screen_ height ( void); gtk window fullscreen gtk window unfullscreen void gtk_ window_ fullscreen ( GtkWindow * window); void gtk_ window_ unfullscreen ( GtkWindow * window); gtk window iconify gtk window deiconify void gtk_ window_ iconify ( GtkWindow * window); void gtk_ window_ deiconify ( GtkWindow * window); 第 7 章 ウィジェットリファレン

135 gtk window maximize gtk window unmaximize void gtk_ window_ maximize ( GtkWindow * window); void gtk_ window_ unmaximize ( GtkWindow * window); gtk window move 2 3 void gtk_ window_ move ( GtkWindow * window, gint x, gint y); GtkFrame GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkFrame gtk frame new GtkWidget* gtk_ frame_ new ( const gchar * label); GtkContainer gtk container add 3 G_ CONST_ RETURN gchar* gtk_ frame_ get_ label ( GtkFrame * frame); 7.7 第 7 章 ウィジェットリファレン

136 124 7 void gtk_ frame_ set_ label ( GtkFrame * frame, const gchar * label); 2 xalign yalign 0 1 void gtk_ frame_ get_ label_ align ( GtkFrame * frame, gfloat * xalign, gfloat * yalign); void gtk_ frame_ set_ label_ align ( GtkFrame * frame, gfloat xalign, gfloat yalign); 5.5 p. 75 GtkShadowType 7.7 GtkShadowType gtk_ frame_ get_ shadow_ type ( GtkFrame * frame); void gtk_ frame_ set_ shadow_ type ( GtkFrame * frame, GtkShadowType type); GtkPaned GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkPaned +----GtkHPaned 2 GtkHPaned 2 GtkVPaned 2 gtk hpaned new gtk vpaned new 7.8 第 7 章 ウィジェットリファレン

137 GtkWidget* gtk_ hpaned_ new ( void); GtkWidget* gtk_ vpaned_ new ( void); gtk paned pack1 gtk paned pack2 3 4 void gtk_ paned_ pack1 ( GtkPaned * paned, GtkWidget * child, gboolean resize, gboolean shrink); void gtk_ paned_ pack2 ( GtkPaned * paned, GtkWidget * child, gboolean resize, gboolean shrink); 3 FALSE 4 TRUE void gtk_ paned_ add1 ( GtkPaned * paned, GtkWidget * child); void gtk_ paned_ add2 ( GtkPaned * paned, GtkWidget * child); GtkToolbar GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkToolbar GtkToolbar gtk toolbar new GtkWidget* gtk_ toolbar_ new ( void); 7.9 第 7 章 ウィジェットリファレン

138 126 7 gtk toolbar insert void gtk_ toolbar_ insert ( GtkToolbar * toolbar, GtkToolItem * item, gint pos); 1 : 2 : 3 : GtkToolItem 3 3 gtk tool item new GtkToolItem* gtk_ tool_ item_ new ( void); gtk container add gtk tool button new GtkToolItem* gtk_ tool_ button_ new ( GtkWidget * icon_widget, const gchar * label); gtk tool button new from stock GtkToolItem* gtk_ tool_ button_ new_ from_ stock ( const gchar * stock_ id); gtk toggle tool button new gtk toggle tool button new from stock GtkToolItem* gtk_ toggle_ tool_ button_ new ( void); GtkToolItem* gtk_ toggle_ tool_ button_ new_ from_ stock ( const gchar * stock_ id); gtk radio tool button new gtk radio tool button new from stock GtkToolItem* gtk_ radio_ tool_ button_ new ( GSList * group); GtkToolItem* gtk_ radio_ tool_ button_ new_ from_ stock ( GSList * group, const gchar * stock_ id); 1 NULL 1 gtk raido tool button get group GSList* gtk_ radio_ tool_ button_ get_ group ( GtkRadioToolButton * button); 第 7 章 ウィジェットリファレン

139 gtk separator tool item new GtkToolItem* gtk_ separator_ tool_ item_ new ( void); 7.5 orientation-changed void user_ function ( GtkToolbar * toolbar, GtkOrientation orientation, gpointer user_ data); GtkOrientation orientation typedef enum { GTK_ORIENTATION_HORIZONTAL, GTK_ ORIENTATION_ VERTICAL } GtkOrientation; popup-context-menu x y button 1 gboolean user_ function ( GtkToolbar * toolbar, gint x, gint y, gint button, gpointer user_ data); style-changed void user_ function ( GtkToolbar * toolbar, GtkToolbarStyle style, gpointer user_ data); GtkToolbarStyle style typedef enum { GTK_TOOLBAR_ICONS, GTK_TOOLBAR_TEXT, GTK_TOOLBAR_BOTH, GTK_ TOOLBAR_ BOTH_ HORIZ } GtkToolbarStyle; 3 void gtk_ orientable_ set_ orientation ( GtkOrientable * orientable, GtkOrientation orientation); 7.5 orientation-changed popup-context-menu style-changed 第 7 章 ウィジェットリファレン

140 128 7 GtkOrientation gtk_ orientable_ get_ orientation ( GtkOrientable * orientable); GtkIconSize void gtk_ toolbar_ set_ icon_ size ( GtkToolbar * toolbar, GtkIconSize icon_ size); GtkIconSize gtk_ toolbar_ get_ icon_ size ( GtkToolbar * toolbar); GtkIconSize typedef enum { GTK_ICON_SIZE_INVALID, GTK_ICON_SIZE_MENU, GTK_ ICON_SIZE_SMALL_TOOLBAR, GTK_ ICON_SIZE_LARGE_TOOLBAR, GTK_ICON_SIZE_BUTTON, GTK_ICON_SIZE_DND, GTK_ ICON_ SIZE_ DIALOG } GtkIconSize; p : gtktoolbar-sample.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ show_ text ( GtkWidget * widget, gpointer user_ data) 5 { 6 if ( gtk_ toggle_ button_ get_ active ( GTK_ TOGGLE_ BUTTON ( widget))) 7 { 8 gtk_ toolbar_ set_ style ( GTK_ TOOLBAR ( user_ data), GTK_ TOOLBAR_ BOTH); 9 } 10 else 11 { 12 gtk_ toolbar_ set_ style ( GTK_ TOOLBAR ( user_ data), GTK_ TOOLBAR_ ICONS); 13 } 14 } static void 17 cb_ set_ horizontal ( GtkToggleToolButton * widget, gpointer user_ data) 18 { 19 if ( gtk_ toggle_ tool_ button_ get_ active ( widget)) 20 { 21 GtkOrientable * orientable; orientable 24 = GTK_ ORIENTABLE ( g_ object_ get_ data ( G_ OBJECT ( user_ data), 25 "toolbar")); 26 gtk_ orientable_ set_ orientation ( orientable, 27 GTK_ ORIENTATION_ HORIZONTAL); 28 gtk_ widget_ set_ size_ request ( GTK_ WIDGET ( user_ data), 400, -1); 29 } 30 } static void 33 cb_ set_ vertical ( GtkToggleToolButton * widget, gpointer user_ data) 34 { 35 if ( gtk_ toggle_ tool_ button_ get_ active ( widget)) 36 { 37 GtkOrientable * orientable; 38 第 7 章 ウィジェットリファレン

141 orientable 40 = GTK_ ORIENTABLE ( g_ object_ get_ data ( G_ OBJECT ( user_ data), 41 "toolbar")); 42 gtk_ orientable_ set_ orientation ( orientable, 43 GTK_ ORIENTATION_ VERTICAL); 44 gtk_ widget_ set_ size_ request ( GTK_ WIDGET ( user_ data), 100, 300); 45 } 46 } int 49 main ( int argc, char ** argv) 50 { 51 GtkWidget * window; 52 GtkWidget * toolbar; 53 GtkWidget * widget; 54 GtkToolItem * item; 55 GSList * group; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 60 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkToolbar Sample"); 61 gtk_ window_ set_ resizable ( GTK_ WINDOW ( window), FALSE); 62 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 63 G_ CALLBACK ( gtk_ main_ quit), NULL); 64 gtk_ widget_ set_ size_ request ( window, 400, -1); toolbar = gtk_ toolbar_ new (); 67 gtk_ container_ add ( GTK_ CONTAINER ( window), toolbar); 68 gtk_ toolbar_ set_ style ( GTK_ TOOLBAR ( toolbar), GTK_ TOOLBAR_ BOTH); 69 gtk_ toolbar_ set_ orientation ( GTK_ TOOLBAR ( toolbar), 70 GTK_ ORIENTATION_ HORIZONTAL); 71 g_ object_ set_ data ( G_ OBJECT ( window), " toolbar", ( gpointer) toolbar); item = gtk_ tool_ item_ new (); 74 widget = gtk_ check_ button_ new_ with_ label (" Show text"); 75 gtk_ container_ add ( GTK_ CONTAINER ( item), widget); 76 gtk_ tool_ item_ set_ tooltip_ text ( item, " Toggle whether show text"); 77 gtk_ toggle_ button_ set_ active ( GTK_ TOGGLE_ BUTTON ( widget), TRUE); 78 g_ signal_ connect ( G_ OBJECT ( widget), " toggled", 79 G_ CALLBACK ( cb_ show_ text), ( gpointer) toolbar); 80 gtk_ toolbar_ insert ( GTK_ TOOLBAR ( toolbar), item, -1); item = gtk_ separator_ tool_ item_ new (); 83 gtk_ toolbar_ insert ( GTK_ TOOLBAR ( toolbar), item, -1); item 86 = gtk_ radio_ tool_ button_ new_ from_ stock ( NULL, GTK_ STOCK_ GO_ FORWARD); 87 gtk_ tool_ button_ set_ label ( GTK_ TOOL_ BUTTON ( item), " Horizontal"); 88 gtk_ toggle_ tool_ button_ set_ active ( GTK_ TOGGLE_ TOOL_ BUTTON ( item), 89 TRUE); 90 group = gtk_ radio_ tool_ button_ get_ group ( GTK_ RADIO_ TOOL_ BUTTON ( item)); 91 gtk_ tool_ item_ set_ tooltip_ text ( item, " Set the toolbar to horizontal"); 92 g_ signal_ connect ( G_ OBJECT ( item), " toggled", 93 G_ CALLBACK ( cb_ set_ horizontal), ( gpointer) window); 94 gtk_ toolbar_ insert ( GTK_ TOOLBAR ( toolbar), item, -1); item 97 = gtk_ radio_ tool_ button_ new_ from_ stock ( group, GTK_ STOCK_ GO_ DOWN); 98 gtk_ tool_ button_ set_ label ( GTK_ TOOL_ BUTTON ( item), " Vertical"); 99 gtk_ tool_ item_ set_ tooltip_ text ( item, " Set the toolbar to vertical"); 100 g_ signal_ connect ( G_ OBJECT ( item), " toggled", 101 G_ CALLBACK ( cb_ set_ vertical), ( gpointer) window); 102 gtk_ toolbar_ insert ( GTK_ TOOLBAR ( toolbar), item, -1); item = gtk_ separator_ tool_ item_ new (); 105 gtk_ toolbar_ insert ( GTK_ TOOLBAR ( toolbar), item, -1); widget = gtk_ image_ new_ from_ stock ( GTK_STOCK_QUIT, 108 gtk_ toolbar_ get_ icon_ size 109 (GTK_TOOLBAR (toolbar))); 110 item = gtk_ tool_ button_ new ( widget, " Quit"); 111 gtk_ tool_ item_ set_ tooltip_ text ( item, " Exit this program"); 112 g_ signal_ connect_ swapped ( G_ OBJECT ( item), " clicked", 113 G_ CALLBACK ( gtk_ main_ quit), 114 ( gpointer) window); 第 7 章 ウィジェットリファレン

142 gtk_ toolbar_ insert ( GTK_ TOOLBAR ( toolbar), item, -1); gtk_ widget_ show_ all ( window); 118 gtk_main (); return 0; 121 } GtkHandleBox GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkHandleBox gtk handle box new GtkWidget* gtk_ handle_ box_ new ( void); GtkContainer gtk container add void user_ function ( GtkHandleBox * handlebox, GtkWidget * widget, gpointer user_ data); child-attached child-detached 第 7 章 ウィジェットリファレン

143 p. 75 GtkShadowType void gtk_ handle_ box_ set_ shadow_ type ( GtkHandleBox * handle_box, GtkShadowType type); GtkShadowType gtk_ handle_ box_ get_ shadow_ type ( GtkHandleBox * handle_ box); void gtk_ handle_ box_ set_ handle_ position ( GtkHandleBox * handle_box, GtkPositionType position); GtkPositionType gtk_ handle_ box_ get_ handle_ position ( GtkHandleBox * handle_ box); # include <gtk/ gtk. h> 2 3 static void 4 cb_ show_ text ( GtkWidget * widget, gpointer user_ data) 5 { 6 if ( gtk_ toggle_ button_ get_ active ( GTK_ TOGGLE_ BUTTON ( widget))) 7 { 8 gtk_ toolbar_ set_ style ( GTK_ TOOLBAR ( user_ data), GTK_ TOOLBAR_ BOTH); 9 } 10 else 11 { 12 gtk_ toolbar_ set_ style ( GTK_ TOOLBAR ( user_ data), GTK_ TOOLBAR_ ICONS); 13 } 14 } static void 17 cb_ set_ horizontal ( GtkToggleToolButton * widget, gpointer user_ data) 18 { 19 if ( gtk_ toggle_ tool_ button_ get_ active ( widget)) 20 { 21 GtkOrientable * orientable; orientable 24 = GTK_ ORIENTABLE ( g_ object_ get_ data ( G_ OBJECT ( user_ data), 25 "toolbar")); 26 gtk_ orientable_ set_ orientation ( orientable, 27 GTK_ ORIENTATION_ HORIZONTAL); 28 gtk_ widget_ set_ size_ request ( GTK_ WIDGET ( user_ data), 400, -1); 29 } 30 } static void 33 cb_ set_ vertical ( GtkToggleToolButton * widget, gpointer user_ data) 34 { 35 if ( gtk_ toggle_ tool_ button_ get_ active ( widget)) 36 { 37 GtkOrientable * orientable; orientable 40 = GTK_ ORIENTABLE ( g_ object_ get_ data ( G_ OBJECT ( user_ data), 41 "toolbar")); 42 gtk_ orientable_ set_ orientation ( orientable, 43 GTK_ ORIENTATION_ VERTICAL); 第 7 章 ウィジェットリファレン

144 gtk_ widget_ set_ size_ request ( GTK_ WIDGET ( user_ data), 100, 300); 45 } 46 } int 49 main ( int argc, char ** argv) 50 { 51 GtkWidget * window; 52 GtkWidget * handlebox; 53 GtkWidget * toolbar; 54 GtkWidget * widget; 55 GtkToolItem * item; 56 GSList * group; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 61 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkHandleBox Sample"); 62 gtk_ window_ set_ resizable ( GTK_ WINDOW ( window), TRUE); 63 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 64 G_ CALLBACK ( gtk_ main_ quit), NULL); 65 gtk_ widget_ set_ size_ request ( window, 400, -1); handlebox = gtk_ handle_ box_ new (); 68 gtk_ handle_ box_ set_ handle_ position ( GTK_ HANDLE_ BOX ( handlebox), 69 GTK_ POS_ LEFT); 70 gtk_ container_ add ( GTK_ CONTAINER ( window), handlebox); toolbar = gtk_ toolbar_ new (); 73 gtk_ container_ add ( GTK_ CONTAINER ( handlebox), toolbar); 74 gtk_ toolbar_ set_ style ( GTK_ TOOLBAR ( toolbar), GTK_ TOOLBAR_ BOTH); 75 gtk_ toolbar_ set_ orientation ( GTK_ TOOLBAR ( toolbar), 76 GTK_ ORIENTATION_ HORIZONTAL); 77 g_ object_ set_ data ( G_ OBJECT ( window), " toolbar", ( gpointer) toolbar); widget = gtk_ check_ button_ new_ with_ label (" Show text"); 80 item = gtk_ tool_ item_ new (); 81 gtk_ container_ add ( GTK_ CONTAINER ( item), widget); 82 gtk_ tool_ item_ set_ tooltip_ text ( item, " Toggle whether show text"); 83 gtk_ toggle_ button_ set_ active ( GTK_ TOGGLE_ BUTTON ( widget), TRUE); 84 g_ signal_ connect ( G_ OBJECT ( widget), " toggled", 85 G_ CALLBACK ( cb_ show_ text), ( gpointer) toolbar); 86 gtk_ toolbar_ insert ( GTK_ TOOLBAR ( toolbar), item, -1); item = gtk_ separator_ tool_ item_ new (); 89 gtk_ toolbar_ insert ( GTK_ TOOLBAR ( toolbar), item, -1); item 92 = gtk_ radio_ tool_ button_ new_ from_ stock ( NULL, GTK_ STOCK_ GO_ FORWARD); 93 gtk_ tool_ button_ set_ label ( GTK_ TOOL_ BUTTON ( item), " Horizontal"); 94 gtk_ toggle_ tool_ button_ set_ active ( GTK_ TOGGLE_ TOOL_ BUTTON ( item), 95 TRUE); 96 group = gtk_ radio_ tool_ button_ get_ group ( GTK_ RADIO_ TOOL_ BUTTON ( item)); 97 gtk_ tool_ item_ set_ tooltip_ text ( item, " Set the toolbar to horizontal"); 98 g_ signal_ connect ( G_ OBJECT ( item), " toggled", 99 G_ CALLBACK ( cb_ set_ horizontal), ( gpointer) window); 100 gtk_ toolbar_ insert ( GTK_ TOOLBAR ( toolbar), item, -1); item 103 = gtk_ radio_ tool_ button_ new_ from_ stock ( group, GTK_ STOCK_ GO_ DOWN); 104 gtk_ tool_ button_ set_ label ( GTK_ TOOL_ BUTTON ( item), " Vertical"); 105 gtk_ tool_ item_ set_ tooltip_ text ( item, " Set the toolbar to vertical"); 106 g_ signal_ connect ( G_ OBJECT ( item), " toggled", 107 G_ CALLBACK ( cb_ set_ vertical), ( gpointer) window); 108 gtk_ toolbar_ insert ( GTK_ TOOLBAR ( toolbar), item, -1); item = gtk_ separator_ tool_ item_ new (); 111 gtk_ toolbar_ insert ( GTK_ TOOLBAR ( toolbar), item, -1); widget = gtk_ image_ new_ from_ stock ( GTK_STOCK_QUIT, 114 gtk_ toolbar_ get_ icon_ size 115 (GTK_TOOLBAR (toolbar))); 116 item = gtk_ tool_ button_ new ( widget, " Quit"); 117 gtk_ tool_ item_ set_ tooltip_ text ( item, " Exit this program"); 118 g_ signal_ connect_ swapped ( G_ OBJECT ( item), " clicked", 119 G_ CALLBACK ( gtk_ main_ quit), 第 7 章 ウィジェットリファレン

145 ( gpointer) window); 121 gtk_ toolbar_ insert ( GTK_ TOOLBAR ( toolbar), item, -1); gtk_ widget_ show_ all ( window); 124 gtk_main (); return 0; 127 } GtkNotebook 7.11 GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkNotebook gtk notebook new GtkWidget* gtk_ notebook_ new ( void); gtk notebook append page gint gtk_ notebook_ append_ page ( GtkNotebook * notebook, GtkWidget * child, GtkWidget * tab_ label); child tab label 0 gtk notebook append page menu gtk notebook append page gint gtk_ notebook_ append_ page_ menu ( GtkNotebook * notebook, GtkWidget * child, GtkWidget * tab_label, GtkWidget * menu_ label); 7.11 第 7 章 ウィジェットリファレン

146 switch-page gtk notebook prepend page gtk notebook prepend page menu gtk notebook insert page gtk notebook insert page menu gint gtk_ notebook_ prepend_ page ( GtkNotebook * notebook, GtkWidget * child, GtkWidget * tab_ label); gint gtk_ notebook_ prepend_ page_ menu ( GtkNotebook * notebook, GtkWidget * child, GtkWidget * tab_label, GtkWidget * menu_ label); gint gtk_ notebook_ insert_ page ( GtkNotebook * notebook, GtkWidget * child, GtkWidget * tab_label, gint position); gint gtk_ notebook_ insert_ page_ menu ( GtkNotebook * notebook, GtkWidget * child, GtkWidget * tab_label, GtkWidget * menu_label, gint position); 7.7 switch-page void user_ function ( GtkNotebook * notebook, GtkNotebookPage * page, guint page_num, gpointer user_ data); 3 / void gtk_ notebook_ popup_ enable ( GtkNotebook * notebook); void gtk_ notebook_ popup_ disable ( GtkNotebook * notebook); void gtk_ notebook_ set_ current_ page ( GtkNotebook * notebook, gint page_ num); gint gtk_ notebook_ get_ current_ page ( GtkNotebook * notebook); gint gtk_ notebook_ get_ n_ pages ( GtkNotebook * notebook); 第 7 章 ウィジェットリファレン

147 / void gtk_ notebook_ set_ scrollable ( GtkNotebook * notebook, gboolean scrollable); gboolean gtk_ notebook_ get_ scrollable ( GtkNotebook * notebook); void gtk_ notebook_ set_ tab_ pos ( GtkNotebook * notebook, GtkPositionType pos); GtkPositionType gtk_ notebook_ get_ tab_ pos ( GtkNotebook * notebook); : gtknotebook-sample.c 1 # include <gtk/ gtk. h> 2 3 GdkPixbuf * book_ open; 4 GdkPixbuf * book_ close; 5 6 static void 7 set_ page_ image ( GtkNotebook * notebook, 8 gint page_num, 9 GdkPixbuf * pixbuf) 10 { 11 GtkWidget * page_ widget; 12 GtkWidget * icon; page_ widget = gtk_ notebook_ get_ nth_ page ( notebook, page_ num); 15 icon = ( GtkWidget *) 16 g_object_get_data (G_OBJECT (page_widget), "tab_icon"); 17 gtk_ image_ set_ from_ pixbuf ( GTK_ IMAGE ( icon), pixbuf); 18 icon = ( GtkWidget *) 19 g_object_get_data (G_OBJECT (page_widget), "menu_icon"); 20 gtk_ image_ set_ from_ pixbuf ( GTK_ IMAGE ( icon), pixbuf); 21 } static void 24 page_ switch ( GtkWidget * widget, 25 GtkNotebookPage * page, 26 gint page_ num) 27 { 28 GtkNotebook * notebook = GTK_ NOTEBOOK ( widget); 29 gint old_ page_ num; old_ page_ num = gtk_ notebook_ get_ current_ page ( notebook); 32 if ( page_ num == old_ page_ num) return; 33 set_ page_ image ( notebook, page_num, book_ open); 34 if ( old_ page_ num! = -1) 35 { 36 set_ page_ image ( notebook, old_page_num, book_ close); 37 } 38 } static void 41 cb_ tab_ position_ left ( GtkWidget * widget, gpointer data) 42 { 43 gtk_ notebook_ set_ tab_ pos ( GTK_ NOTEBOOK ( data), GTK_ POS_ LEFT); 44 } static void 47 cb_ tab_ position_ right ( GtkWidget * widget, gpointer data) 48 { 49 gtk_ notebook_ set_ tab_ pos ( GTK_ NOTEBOOK ( data), GTK_ POS_ RIGHT); 第 7 章 ウィジェットリファレン

148 } static void 53 cb_ tab_ position_ top ( GtkWidget * widget, gpointer data) 54 { 55 gtk_ notebook_ set_ tab_ pos ( GTK_ NOTEBOOK ( data), GTK_ POS_ TOP); 56 } static void 59 cb_ tab_ position_ bottom ( GtkWidget * widget, gpointer data) 60 { 61 gtk_ notebook_ set_ tab_ pos ( GTK_ NOTEBOOK ( data), GTK_ POS_ BOTTOM); 62 } static GtkWidget* 65 icon_ button_ new ( const gchar * stock_ id) 66 { 67 GtkWidget * button; 68 GtkWidget * icon; icon = gtk_ image_ new_ from_ stock ( stock_id, GTK_ ICON_ SIZE_ BUTTON); 71 button = gtk_ button_ new (); 72 gtk_ container_ add ( GTK_ CONTAINER ( button), icon); return button; 75 } int 78 main ( int argc, char ** argv) 79 { 80 GtkWidget * window; 81 GtkWidget * vbox; 82 GtkWidget * hbox; 83 GtkWidget * notebook; 84 GtkWidget * box; 85 GtkWidget * label; 86 GtkWidget * label_ box; 87 GtkWidget * menu_ box; 88 GtkWidget * icon; 89 GtkWidget * button; 90 gchar buf[ 1024]; 91 int n; gtk_init (&argc, &argv); book_ open = gdk_ pixbuf_ new_ from_ file (" stock_ book_ open. png", NULL); 96 book_ close = gdk_ pixbuf_ new_ from_ file (" stock_ book_ close. png", NULL); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 99 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkNotebook Sample"); 100 gtk_ window_ set_ resizable ( GTK_ WINDOW ( window), TRUE); 101 gtk_ widget_ set_ size_ request ( window, 300, 200); 102 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 103 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 104 G_ CALLBACK ( gtk_ main_ quit), NULL); vbox = gtk_ vbox_ new ( FALSE, 5); 107 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); notebook = gtk_ notebook_ new (); 110 gtk_ notebook_ set_ scrollable ( GTK_ NOTEBOOK ( notebook), TRUE); 111 gtk_ notebook_ popup_ enable ( GTK_ NOTEBOOK( notebook)); 112 g_ signal_ connect ( G_ OBJECT ( notebook), " switch_ page", 113 G_ CALLBACK ( page_ switch), NULL); 114 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), notebook, TRUE, TRUE, 0); for ( n = 1; n <= 5; n++) 117 { 118 box = gtk_ vbox_ new ( FALSE, 0); sprintf ( buf, " Contents % d", n); 121 label = gtk_ label_ new ( buf); 122 gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0); label_ box = gtk_ hbox_ new ( FALSE, 0); 125 icon = gtk_ image_ new_ from_ pixbuf ( book_ close); 第 7 章 ウィジェットリファレン

149 g_object_set_data (G_OBJECT (box), "tab_icon", icon); 127 gtk_box_pack_start (GTK_BOX (label_box), icon, FALSE, TRUE, 0); 128 gtk_misc_set_padding (GTK_MISC (icon), 5, 1); sprintf (buf, "Page %d", n); 131 label = gtk_ label_ new ( buf); 132 gtk_ box_ pack_ start ( GTK_ BOX ( label_ box), label, FALSE, TRUE, 0); gtk_ widget_ show_ all ( label_ box); menu_ box = gtk_ hbox_ new ( FALSE, 0); 137 icon = gtk_ image_ new_ from_ pixbuf ( book_ close); 138 g_object_set_data (G_OBJECT (box), "menu_icon", icon); 139 gtk_box_pack_start (GTK_BOX (menu_box), icon, FALSE, TRUE, 0); 140 gtk_misc_set_padding (GTK_MISC (icon), 5, 1); label = gtk_ label_ new ( buf); 143 gtk_box_pack_start (GTK_BOX (menu_box), label, FALSE, TRUE, 0); gtk_ widget_ show_ all ( menu_ box); gtk_ notebook_ append_ page_ menu ( GTK_ NOTEBOOK ( notebook), 148 box, label_box, menu_ box); 149 } 150 hbox = gtk_ hbox_ new ( TRUE, 0); 151 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), hbox, FALSE, FALSE, 0); 152 { 153 button = icon_ button_ new ( GTK_ STOCK_ GO_ BACK); 154 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 155 G_ CALLBACK ( cb_ tab_ position_ left), notebook); 156 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, TRUE, TRUE, 0); button = icon_ button_ new ( GTK_ STOCK_ GO_ FORWARD); 159 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 160 G_ CALLBACK ( cb_ tab_ position_ right), notebook); 161 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, TRUE, TRUE, 0); button = icon_ button_ new ( GTK_ STOCK_ GO_ UP); 164 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 165 G_ CALLBACK ( cb_ tab_ position_ top), notebook); 166 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, TRUE, TRUE, 0); button = icon_ button_ new ( GTK_ STOCK_ GO_ DOWN); 169 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 170 G_ CALLBACK ( cb_ tab_ position_ bottom), notebook); 171 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, TRUE, TRUE, 0); 172 } 173 button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 174 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 175 G_ CALLBACK ( gtk_ main_ quit), NULL); 176 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 179 gtk_main (); return 0; 182 } 第 7 章 ウィジェットリファレン

150 GtkExpander GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkExpander gtk expander new GtkWidget* gtk_ expander_ new ( const gchar * label); gtk expander new with mnemonic GtkWidget* gtk_ expander_ new_ with_ mnemonic ( const gchar * label); gtk container add 7.8 activate void user_ function ( GtkExpander * toolbar, gpointer user_ data); void gtk_ expander_ set_ expanded ( GtkExpander * expander, gboolean expanded); gboolean gtk_ expander_ get_ expanded ( GtkExpander * expander); 7.12 第 7 章 ウィジェットリファレン

151 activate void gtk_ expander_ set_ label ( GtkExpander * expander, const gchar * label); G_ CONST_ RETURN gchar* gtk_ expander_ get_ label ( GtkExpander * expander); : gtkexpander-sample.c 1 # include <gtk/ gtk. h> 2 3 int 4 main ( int argc, char ** argv) 5 { 6 GtkWidget * window; 7 GtkWidget * vbox; 8 GtkWidget * hbox; 9 GtkWidget * label; 10 GtkWidget * button; 11 GtkWidget * expander; gtk_init (&argc, &argv); 14 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 15 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkExpander Sample"); 16 gtk_ window_ set_ resizable ( GTK_ WINDOW ( window), FALSE); 17 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 18 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 19 G_ CALLBACK ( gtk_ main_ quit), NULL); vbox = gtk_ vbox_ new ( FALSE, 5); 22 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); label = 25 gtk_ label_ new (" Expander demo. Click on the triangle for details."); 26 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), label, FALSE, FALSE, 0); expander = gtk_ expander_ new (" Details"); 29 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), expander, FALSE, FALSE, 0); 30 gtk_ expander_ set_ expanded ( GTK_ EXPANDER ( expander), TRUE); label = gtk_ label_ new (" Details can be shown or hidden."); 33 gtk_ container_ add ( GTK_ CONTAINER ( expander), label); hbox = gtk_ hbox_ new ( FALSE, 5); 36 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 39 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 40 G_ CALLBACK ( gtk_ main_ quit), NULL); gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 45 gtk_main (); return 0; 48 } 第 7 章 ウィジェットリファレン

152 GtkEntry GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkEntry 7.13 gtk entry new GtkWidget* gtk_ entry_ new ( void); 7.9 activate copyclipboard paste-clipboard activate void user_ function ( GtkEntry * entry, gpointer user_ data); void gtk_ entry_ set_ editable ( GtkEntry * entry, gboolean editable); gboolean gtk_ entry_ get_ has_ frame ( GtkEntry * entry); void gtk_ entry_ set_ has_ frame ( GtkEntry * entry, gboolean setting); * 7.9 activate 第 7 章 ウィジェットリファレン

153 void gtk_ entry_ set_ invisible_ char ( GtkEntry * entry, gunichar ch); gunichar gtk_ entry_ get_ invisible_ char ( GtkEntry * entry); void gtk_ entry_ set_ visibility ( GtkEntry * entry, gboolean visible); gboolean gtk_ entry_ get_ visibility ( GtkEntry * entry); void gtk_ entry_ set_ text ( GtkEntry * entry, const gchar * text); G_ CONST_ RETURN gchar* gtk_ entry_ get_ text ( GtkEntry * entry); : gtkentry-sample.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ entry ( GtkEntry * entry, gpointer data) 5 { 6 g_print ("%s\n", gtk_entry_get_text (entry)); 7 } 8 9 static void 10 cb_ button ( GtkButton * button, gpointer data) 11 { 12 g_print ("%s\n", gtk_entry_get_text (GTK_ENTRY (data))); 13 } int 16 main ( int argc, char ** argv) 17 { 18 GtkWidget * window; 19 GtkWidget * hbox; 20 GtkWidget * label; 21 GtkWidget * entry; 22 GtkWidget * button; gtk_init (&argc, &argv); 25 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 26 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkEntry Sample"); 27 gtk_ window_ set_ resizable ( GTK_ WINDOW ( window), FALSE); 28 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 29 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 30 G_ CALLBACK ( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( FALSE, 5); 33 gtk_ container_ add ( GTK_ CONTAINER ( window), hbox); label = gtk_label_new ("Input :"); 36 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), label, FALSE, FALSE, 0); entry = gtk_ entry_ new (); 39 g_ signal_ connect ( G_ OBJECT ( entry), " activate", 40 G_ CALLBACK ( cb_ entry), NULL); 41 gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ APPLY); 44 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 45 G_ CALLBACK ( cb_ button), ( gpointer) entry); 46 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, FALSE, FALSE, 0); 第 7 章 ウィジェットリファレン

154 gtk_ widget_ show_ all ( window); 49 gtk_main (); return 0; 52 } GtkComboBoxEntry GtkTreeView GtkTreeView 7.6 p. 179 GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkComboBox +----GtkComboBoxEntry gtk combo box entry new text GtkWidget* gtk_ combo_ box_ entry_ new_ text ( void); gtk combo box entry new gtk combo box set model gtk combo box entry set text column gtk combo box entry new text GtkWidget* gtk_ combo_ box_ entry_ new ( void); gtk combo box entry new with model Gtk- TreeModel GtkWidget* gtk_ combo_ box_ entry_ new_ with_ model ( GtkTreeModel * model, gint text_ column); 7.10 changed 第 7 章 ウィジェットリファレン

155 void user_ function ( GtkComboBox * combobox, gpointer user_ data); gtk combo box get active gint gtk_ combo_ box_ get_ active ( GtkComboBox * combo_ box); gtk combo box set active 0 void gtk_ combo_ box_ set_ active ( GtkComboBox * combo_box, gint index_); GtkComboBox * combobox; 2 GtkTreeModel * model; 3 GtkTreeIter iter; 4 gchar * label; 5 model = gtk_ combo_ box_ get_ model ( combobox); 6 if (gtk_combo_box_get_active_iter (combobox, &iter)) 7 { 8 gtk_tree_model_get (model, &iter, 0, &label, -1); 9 } gtk combo box get active iter GtkTreeIter FALSE gboolean gtk_ combo_ box_ get_ active_ iter ( GtkComboBox * combo_box, GtkTreeIter * iter); gtk tree model get 3 1 void gtk_ tree_ model_ get ( GtkTreeModel * tree_model, GtkTreeIter * iter,...); changed 第 7 章 ウィジェットリファレン

156 : gtkcomboboxentry-sample.c 1 # include <gtk/ gtk. h> 2 3 # define COMBO_ LIST_ LIMIT static GList * combolist = NULL; 6 7 static GList* 8 append_ item ( GtkComboBox * combobox, 9 GList * combolist, 10 const gchar * item_ label) 11 { 12 gtk_ combo_ box_ append_ text ( combobox, item_ label); 13 combolist = g_ list_ append ( combolist, g_ strdup ( item_ label)); return combolist; 16 } static GList* 19 remove_ item ( GtkComboBox * combobox, 20 GList * combolist, 21 gint index) 22 { 23 gtk_ combo_ box_ remove_ text ( combobox, index); 24 g_free (g_list_nth_data (combolist, index)); 25 combolist 26 = g_ list_ remove_ link ( combolist, g_ list_ nth ( combolist, index)); return combolist; 29 } static void 32 cb_ combo_ changed ( GtkComboBox * combobox, 33 gpointer user_ data) 34 { 35 GtkTreeModel * model; 36 GtkTreeIter iter; 37 gchar * text; model = gtk_ combo_ box_ get_ model ( combobox); 40 if ( gtk_ combo_ box_ get_ active_ iter ( combobox, & iter)) 41 { 42 gtk_tree_model_get (model, &iter, 0, &text, -1); 43 g_print ("Item number is %d (%s)\n", 44 gtk_ combo_ box_ get_ active ( combobox), text); 45 } 46 } static void 49 cb_ combo_ entry_ activate ( GtkEntry * entry, 50 gpointer user_ data) 51 { 52 GtkComboBox * combobox; 53 GList * list; 54 gboolean exist_ flag = FALSE; 55 const gchar * new_ text; new_ text = gtk_ entry_ get_ text ( entry); 58 if (! new_ text strcmp ( new_text, "") == 0) return; for ( list = combolist; list; list = g_ list_ next ( list)) 61 { 62 if ( strcmp ( new_text, ( gchar *) list - >data) == 0) 63 { 64 exist_ flag = TRUE; 65 break; 66 } 67 } 68 if (! exist_ flag) 69 { 70 combobox = GTK_ COMBO_ BOX ( user_ data); 71 combolist = append_ item ( combobox, combolist, new_ text); 第 7 章 ウィジェットリファレン

157 if ( g_ list_ length ( combolist) > COMBO_ LIST_ LIMIT) 73 { 74 combolist = remove_ item ( combobox, combolist, 0); 75 } 76 g_ print (" Append a new item label %s.\n", new_ text); 77 } 78 } int 81 main ( int argc, char ** argv) 82 { 83 GtkWidget * window; 84 GtkWidget * hbox; 85 GtkWidget * label; 86 GtkWidget * combo; 87 GtkWidget * button; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 92 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkComboBoxEntry Sample"); 93 gtk_ window_ set_ resizable ( GTK_ WINDOW ( window), FALSE); 94 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 95 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 96 G_ CALLBACK ( gtk_ main_ quit), NULL); 97 hbox = gtk_ hbox_ new ( FALSE, 5); 98 gtk_ container_ add ( GTK_ CONTAINER ( window), hbox); label = gtk_label_new ("Input :"); 101 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), label, FALSE, FALSE, 0); combo = gtk_ combo_ box_ entry_ new_ text (); 104 combolist = append_ item ( GTK_ COMBO_ BOX ( combo), combolist, " 1st Item"); 105 combolist = append_ item ( GTK_ COMBO_ BOX ( combo), combolist, " 2nd Item"); 106 gtk_ combo_ box_ set_ active ( GTK_ COMBO_ BOX ( combo), 0); g_ signal_ connect ( G_ OBJECT ( combo), " changed", 109 G_ CALLBACK ( cb_ combo_ changed), NULL); 110 g_ signal_ connect ( G_ OBJECT ( GTK_ BIN ( combo) - >child), " activate", 111 G_ CALLBACK ( cb_ combo_ entry_ activate), combo); gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 116 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 117 G_ CALLBACK ( gtk_ main_ quit), NULL); 118 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 121 gtk_main (); return 0; 124 } GtkSpinButton GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkEntry +----GtkSpinButton 2 第 7 章 ウィジェットリファレン

158 value-changed gtk spin button new GtkAdjustment climb rate digits GtkWidget* gtk_ spin_ button_ new ( GtkAdjustment * adjustment, gdouble climb_rate, guint digits); gtk spin button new GtkAdjustment gtk spin button new with range GtkWidget * spinbutton; 2 GtkObject * adjustment; 3 gdouble value = 1.0, min = 0.0, max = ; 4 gdouble step = 0.1, page = 1.0, page_ size = 10.0, digits = 1; 5 6 adjustment = gtk_ adjustment_ new ( value, min, max, 7 step, page, page_ size); 8 spinbutton = gtk_ spin_ button_ new ( GTK_ ADJUSTMENT( adjustment), 9 step, digits); gtk spin button new with range GtkWidget* gtk_ spin_ button_ new_ with_ range ( gdouble min, gdouble max, gdouble step); 7.11 value-changed value-changed gboolean user_ function ( GtkSpinButton * spinbutton, gpointer user_ data); void gtk_ spin_ button_ set_ increments ( GtkSpinButton * spin_button, gdouble step, gdouble page); 7.15 第 7 章 ウィジェットリファレン

159 void gtk_ spin_ button_ get_ increments ( GtkSpinButton * spin_button, gdouble * step, gdouble *page); : gtkspinbutton-sample.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ value_ changed ( GtkSpinButton * spinbutton, gpointer data) 5 { 6 g_print ("value = %f\n", gtk_spin_button_get_value (spinbutton)); 7 } 8 9 static void 10 cb_ button ( GtkButton * button, gpointer data) 11 { 12 g_print ("value = %f\n", 13 gtk_spin_button_get_value (GTK_SPIN_BUTTON (data))); 14 } int 17 main ( int argc, char ** argv) 18 { 19 GtkWidget * window; 20 GtkWidget * hbox; 21 GtkWidget * label; 22 GtkWidget * spinbutton; 23 GtkWidget * button; 24 GtkObject * adjustment; 25 gdouble min = 0.0, max = 100.0, step = 0. 1; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 30 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkSpinButton Sample"); 31 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 32 gtk_ widget_ set_ size_ request ( window, 300, -1); 33 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 34 G_ CALLBACK ( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( FALSE, 5); 37 gtk_ container_ add ( GTK_ CONTAINER ( window), hbox); label = gtk_label_new ("Input :"); 40 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), label, FALSE, FALSE, 0); spinbutton = gtk_ spin_ button_ new_ with_ range ( min, max, step); 43 gtk_ spin_ button_ set_ digits ( GTK_ SPIN_ BUTTON ( spinbutton), 2); 44 gtk_ spin_ button_ set_ wrap ( GTK_ SPIN_ BUTTON ( spinbutton), TRUE); g_ signal_ connect ( G_ OBJECT ( spinbutton), " value - changed", 47 G_ CALLBACK ( cb_ value_ changed), NULL); 48 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), spinbutton, TRUE, TRUE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ APPLY); 51 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 52 G_ CALLBACK ( cb_ button), ( gpointer) spinbutton); 53 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 56 gtk_main (); return 0; 59 } 第 7 章 ウィジェットリファレン

160 GtkTextView GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkTextView gtk text view new gtk text view new with buffer GtkWidget* gtk_ text_ view_ new ( void); GtkWidget* gtk_ text_ view_ new_ with_ buffer ( GtkTextBuffer * buffer); gtk text view new GtkTextBuffer GtkTextView GtkTextBuffer gtk text view get buffer GtkTextBuffer* gtk_ text_ view_ get_ buffer ( GtkTextView * text_ view); gtk text buffer set text UTF8 UTF8 g locale to utf8 len 1 void gtk_ text_ buffer_ set_ text ( GtkTextBuffer * buffer, const gchar * text, gint len); gtk text buffer get text start end UTF8 g free gchar* gtk_ text_ buffer_ get_ text ( GtkTextBuffer * buffer, const GtkTextIter * start, const GtkTextIter * end, gboolean include_ hidden_ chars); GtkTextIter 7.16 第 7 章 ウィジェットリファレン

161 gtk text buffer get iter at line GtkTextIter 0 void gtk_ text_ buffer_ get_ iter_ at_ line ( GtkTextBuffer * buffer, GtkTextIter * iter, gint line_ number); gtk text buffer get start iter GtkTextIter void gtk_ text_ buffer_ get_ start_ iter ( GtkTextBuffer * buffer, GtkTextIter * iter); gtk text buffer get end iter GtkTextIter void gtk_ text_ buffer_ get_ end_ iter ( GtkTextBuffer * buffer, GtkTextIter * iter); : gtktextview-sample.c 1 # include <gtk/ gtk. h> 2 3 static void 4 set_ text ( GtkTextView * textview, const gchar * text) 5 { 6 GtkTextBuffer * buffer; 7 8 buffer = gtk_ text_ view_ get_ buffer ( textview); 9 gtk_ text_ buffer_ set_ text ( buffer, text, -1); 10 } static void 13 print_ text ( GtkWidget * widget, gpointer data) 14 { 15 GtkTextBuffer * buffer; 16 GtkTextIter start, end; 17 gchar * utf8_ text; buffer = gtk_ text_ view_ get_ buffer ( GTK_ TEXT_ VIEW ( data)); 20 gtk_ text_ buffer_ get_ start_ iter ( buffer, & start); 21 gtk_text_buffer_get_end_iter (buffer, &end); 22 utf8_ text = gtk_ text_ buffer_ get_ text ( buffer, & start, & end, TRUE); 23 g_print ("%s\n", utf8_text); 24 g_free (utf8_text); 25 } int 28 main ( int argc, char ** argv) 29 { 30 GtkWidget * window; 31 GtkWidget * vbox; 32 GtkWidget * hbox; 33 GtkWidget * scrolledwindow; 34 GtkWidget * textview; 35 GtkWidget * button; gtk_init (&argc, &argv); 38 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 39 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkTextView Sample"); 40 gtk_ widget_ set_ size_ request ( window, 300, 100); 41 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 42 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 43 G_ CALLBACK ( gtk_ main_ quit), NULL); 第 7 章 ウィジェットリファレン

162 vbox = gtk_ vbox_ new ( FALSE, 5); 46 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); scrolledwindow = gtk_ scrolled_ window_ new ( NULL, NULL); 49 gtk_ scrolled_ window_ set_ shadow_ type ( GTK_ SCROLLED_ WINDOW 50 ( scrolledwindow), 51 GTK_ SHADOW_ ETCHED_ OUT); 52 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW ( scrolledwindow), 53 GTK_POLICY_AUTOMATIC, 54 GTK_ POLICY_ AUTOMATIC); 55 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), scrolledwindow, TRUE, TRUE, 0); textview = gtk_ text_ view_ new (); 58 gtk_ container_ add ( GTK_ CONTAINER ( scrolledwindow), textview); 59 set_ text ( GTK_ TEXT_ VIEW ( textview), 60 " This is a sample program of GtkTextView.\ n" 61 " GtkTextView is a...\ n" 62 " G t k T e x t V i e w \n" 63 " "); 64 hbox = gtk_ hbox_ new ( FALSE, 5); 65 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 68 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 69 G_ CALLBACK ( gtk_ main_ quit), NULL); 70 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ APPLY); 73 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 74 G_ CALLBACK ( print_ text), ( gpointer) textview); 75 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 78 gtk_main (); return 0; 81 } GtkMenuBar 第 7 章 ウィジェットリファレン

163 GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkMenuShell +----GtkMenuBar gtk menu bar new GtkWidget* gtk_ menu_ bar_ new ( void); gtk menu new gtk menu item new GtkWidget* gtk_ menu_ new ( void); gtk menu item new GtkWidget* gtk_ menu_ item_ new ( void); gtk menu item new with label GtkWidget* gtk_ menu_ item_ new_ with_ label ( const gchar * label); gtk menu item new with mnemonic GtkWidget* gtk_ menu_ item_ new_ with_ mnemonic ( const gchar * label); 2. gtk image menu item new GtkWidget* gtk_ image_ menu_ item_ new ( void); gtk image new gtk image menu item set image void gtk_ image_ menu_ item_ set_ image ( GtkImageMenuItem * image_menu_item, GtkWidget * image); GtkWidget * item; GtkWidget * image; image = gtk_ image_ new_ from_ stock ( GTK_STOCK_OK, GTK_ ICON_ SIZE_ MENU); item = gtk_ image_ menu_ item_ new (); gtk_ image_ menu_ item_ set_ image ( GTK_ IMAGE_ MENU_ ITEM ( item), image); 第 7 章 ウィジェットリファレン

164 152 7 gtk image menu item new with label GtkWidget* gtk_ image_ menu_ item_ new_ with_ label ( const gchar * label); gtk image menu item new with mnemonic GtkWidget* gtk_ image_ menu_ item_ new_ with_ mnemonic ( const gchar * label); gtk image menu item new from stock GtkStockItem GtkAccelGroup GtkWidget* gtk_ image_ menu_ item_ new_ from_ stock ( const gchar * stock_id, 3. gtk check menu item new GtkWidget* gtk_ check_ menu_ item_ new ( void); gtk check menu item new with label GtkWidget* GtkAccelGroup * accel_ group); gtk_ check_ menu_ item_ new_ with_ label ( const gchar * label); gtk check menu item new with mnemonic GtkWidget* gtk_ check_ menu_ item_ new_ with_ mnemonic ( const gchar * label); gtk check menu item set active void gtk_ check_ menu_ item_ set_ active ( GtkCheckMenuItem * check_menu_item, 4. gtk radio menu item new gboolean is_ active); NULL GtkWidget* gtk_ radio_ menu_ item_ new ( GSList * group); gtk radio menu item new from widget GtkWidget* gtk_ radio_ menu_ item_ new_ from_ widget ( GtkRadioMenuItem * group); gtk radio menu item new with label NULL GtkWidget* gtk_ radio_ menu_ item_ new_ with_ label ( GSList * group, const gchar * label); 第 7 章 ウィジェットリファレン

165 gtk radio menu item new with label from widget GtkWidget* gtk_ radio_ menu_ item_ new_ with_ label_ from_ widget gtk radio menu item new with mnemonic ( GtkRadioMenuItem * group, const gchar * label); GtkWidget* gtk_ radio_ menu_ item_ new_ with_ mnemonic ( GSList * group, gtk radio menu item new with mnemonic from widget const gchar * label); GtkWidget* gtk_ radio_ menu_ item_ new_ with_ mnemonic_ from_ widget 5. ( GtkRadioMenuItem * group, const gchar gtk separator menu item new GtkWidget* gtk_ separator_ menu_ item_ new ( void); gtk tearoff menu item new GtkWidget* gtk_ tearoff_ menu_ item_ new ( void); * label); gtk image menu item new from stock gtk widget add accelerator void gtk_ widget_ add_ accelerator ( GtkWidget * widget, const gchar * accel_signal, GtkAccelGroup * accel_group, guint accel_key, GdkModifierType accel_mods, GtkAccelFlags accel_ flags); GDK O GDK CONTROL MASK CTRL+O o GtkAccelGroup 第 7 章 ウィジェットリファレン

166 GtkWidget * item; 2 GtkAccelGroup * accel_ group; 3 4 accel_ group = gtk_ accel_ group_ new (); 5 item = gtk_menu_item_new_with_mnemonic ("_Open"); 6 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 7 GDK_O, GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); GdkModifierType typedef enum { GDK_ SHIFT_ MASK = 1 << 0, GDK_ LOCK_ MASK = 1 << 1, GDK_ CONTROL_ MASK = 1 << 2, GDK_ MOD1_ MASK = 1 << 3, GDK_ MOD2_ MASK = 1 << 4, GDK_ MOD3_ MASK = 1 << 5, GDK_ MOD4_ MASK = 1 << 6, GDK_ MOD5_ MASK = 1 << 7, GDK_ BUTTON1_ MASK = 1 << 8, GDK_ BUTTON2_ MASK = 1 << 9, GDK_ BUTTON3_ MASK = 1 << 10, GDK_ BUTTON4_ MASK = 1 << 11, GDK_ BUTTON5_ MASK = 1 << 12, GDK_ RELEASE_ MASK = 1 << 30, GDK_ MODIFIER_ MASK = GDK_ RELEASE_ MASK 0x1fff } GdkModifierType; GtkAccelFlags typedef enum { GTK_ ACCEL_ VISIBLE = 1 << 0, GTK_ ACCEL_ LOCKED = 1 << 1, GTK_ ACCEL_ MASK } GtkAccelFlags; = 0x07 GTK ACCEL VISIBLE GTK ACCEL LOCKED GTK ACCEL VISIBLE GTK ACCEL LOCKED GTK ACCEL MASK 1 gtk menu item set submenu void gtk_ menu_ item_ set_ submenu ( GtkMenuItem * menu_item, 1. menu = gtk_menu_new (); 2. item = gtk_menu_item_new (); GtkWidget * submenu); gtk_ container_ add ( GTK_ CONTAINER( menu), item); 第 7 章 ウィジェットリファレン

167 submenu = gtk_ menu_ new (); 4. gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM( item), submenu); 5. subitem = gtk_ menu_ item_ new (); gtk_ container_ add ( GTK_ CONTAINER( submenu), subitem); File Edit View gtk window add accel group void gtk_ window_ add_ accel_ group ( GtkWindow * window, GtkAccelGroup * accel_ group); : gtkmenubar-sample.c 1 # include <gtk/ gtk. h> 2 # include <gdk/ gdkkeysyms. h> 3 4 static void 5 cb_ quit ( GtkWidget * widget, gpointer data) 6 { 7 gtk_main_quit (); 8 } 9 10 static GtkWidget* 11 create_ menu ( void) 12 { 13 GtkWidget * menubar; 14 GtkWidget * menu; 15 GtkWidget * item; 16 GtkWidget * image; 17 GtkAccelGroup * accel_ group; 18 GSList * group = NULL; menubar = gtk_ menu_ bar_ new (); 21 accel_ group = gtk_ accel_ group_ new (); item = gtk_menu_item_new_with_mnemonic ("_File"); 24 gtk_ container_ add ( GTK_ CONTAINER ( menubar), item); 25 menu = gtk_ menu_ new (); 26 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM ( item), menu); 27 { 28 item = gtk_ tearoff_ menu_ item_ new (); 29 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_menu_item_new_with_mnemonic ("_New"); 32 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 33 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 34 GDK_N, 35 GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); item = gtk_menu_item_new_with_mnemonic ("_Open"); 38 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 39 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 40 GDK_O, 41 GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); item = gtk_menu_item_new_with_mnemonic ("_Save"); 第 7 章 ウィジェットリファレン

168 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 45 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 46 GDK_S, 47 GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); item = gtk_ menu_ item_ new_ with_ mnemonic (" Save _ as"); 50 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 51 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 52 GDK_S, 53 GDK_ CONTROL_ MASK GDK_SHIFT_MASK, 54 GTK_ ACCEL_ VISIBLE); item = gtk_ separator_ menu_ item_ new (); 57 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_menu_item_new_with_mnemonic ("_Quit"); 60 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 61 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 62 GDK_Q, 63 GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); 64 g_ signal_ connect ( G_ OBJECT ( item), " activate", 65 G_ CALLBACK ( cb_ quit), NULL); 66 } 67 item = gtk_menu_item_new_with_mnemonic ("_Edit"); 68 gtk_ container_ add ( GTK_ CONTAINER ( menubar), item); 69 menu = gtk_ menu_ new (); 70 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM ( item), menu); 71 { 72 item = gtk_ tearoff_ menu_ item_ new (); 73 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock ( GTK_STOCK_CUT, 76 accel_ group); 77 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock ( GTK_STOCK_COPY, 80 accel_ group); 81 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock ( GTK_STOCK_PASTE, 84 accel_ group); 85 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock ( GTK_STOCK_DELETE, 88 accel_ group); 89 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 90 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 91 GDK_D, 92 GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); 93 } 94 item = gtk_menu_item_new_with_mnemonic ("_View"); 95 gtk_ container_ add ( GTK_ CONTAINER ( menubar), item); 96 menu = gtk_ menu_ new (); 97 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM ( item), menu); 98 { 99 item = gtk_ tearoff_ menu_ item_ new (); 100 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_ check_ menu_ item_ new_ with_ label (" Show Hidden Folders"); 103 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 104 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 105 GDK_H, 106 GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); item = gtk_image_menu_item_new_with_label ("Sort by..."); 109 image = gtk_ image_ new_ from_ stock ( GTK_STOCK_SORT_ASCENDING, 110 GTK_ ICON_ SIZE_ MENU); 111 gtk_ image_ menu_ item_ set_ image ( GTK_ IMAGE_ MENU_ ITEM ( item), image); 112 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 113 menu = gtk_ menu_ new (); 114 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM ( item), menu); 115 { 116 item = gtk_ radio_ menu_ item_ new_ with_ label ( group, " File type"); 117 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 118 gtk_ check_ menu_ item_ set_ active ( GTK_ CHECK_ MENU_ ITEM ( item), TRUE); 119 第 7 章 ウィジェットリファレン

169 group = gtk_ radio_ menu_ item_ get_ group ( GTK_ RADIO_ MENU_ ITEM ( item)); 121 item = gtk_ radio_ menu_ item_ new_ with_ label ( group, " File size"); 122 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); group = gtk_ radio_ menu_ item_ get_ group ( GTK_ RADIO_ MENU_ ITEM ( item)); 125 item = gtk_ radio_ menu_ item_ new_ with_ label ( group, " Update time"); 126 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 127 } 128 } 129 return menubar; 130 } int 133 main ( int argc, char ** argv) 134 { 135 GtkWidget * window; 136 GtkWidget * menubar; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 141 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkMenubar Sample"); 142 gtk_ widget_ set_ size_ request ( window, 300, -1); 143 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 144 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 145 G_ CALLBACK ( gtk_ main_ quit), NULL); menubar = create_ menu (); 148 gtk_ container_ add ( GTK_ CONTAINER ( window), menubar); gtk_ widget_ show_ all ( window); 151 gtk_main (); return 0; 154 } GtkPopupMenu 7.18 GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkMenuShell +----GtkMenu 7.18 第 7 章 ウィジェットリファレン

170 158 7 gtk menu popup void gtk_ menu_ popup ( GtkMenu * menu, GtkWidget * parent_menu_shell, GtkWidget * parent_menu_item, GtkMenuPositionFunc func, gpointer data, guint button, guint32 activate_ time); NULL GdkEventButton time gtk get current event time guint32 gtk_ get_ current_ event_ time ( void); GdkEventButton button : gtkpopupmenu-sample.c 1 # include <gtk/ gtk. h> 2 # include <gdk/ gdkkeysyms. h> 3 4 static void 5 cb_ quit ( GtkWidget * widget, gpointer data) 6 { 7 gtk_main_quit (); 8 } 9 10 static gboolean 11 cb_ popup_ menu ( GtkWidget * widget, 12 GdkEventButton * event, 13 gpointer user_ data) 14 { 15 GtkMenu * popupmenu = GTK_ MENU( user_ data); if (event - >button == 3) /* */ 18 { 19 gtk_ menu_ popup ( popupmenu, NULL, NULL, NULL, NULL, 0, event - >time); 20 } 21 return FALSE; 22 } static GtkWidget* 25 create_ popupmenu ( GtkWindow * parent) 26 { 27 GtkWidget * popupmenu; 28 GtkWidget * menu; 29 GtkWidget * item; 30 GtkWidget * image; 31 GtkAccelGroup * accel_ group; 32 GSList * group = NULL; popupmenu = gtk_ menu_ new (); 35 accel_ group = gtk_ accel_ group_ new (); 36 gtk_ window_ add_ accel_ group ( parent, accel_ group); item = gtk_ menu_ item_ new_ with_ label (" Popup Menu"); 39 gtk_ widget_ set_ sensitive ( item, FALSE); 40 gtk_ menu_ shell_ append ( GTK_ MENU_ SHELL ( popupmenu), item); 41 第 7 章 ウィジェットリファレン

171 item = gtk_ separator_ menu_ item_ new (); 43 gtk_ menu_ shell_ append ( GTK_ MENU_ SHELL ( popupmenu), item); item = gtk_menu_item_new_with_mnemonic ("_File"); 46 gtk_ menu_ shell_ append ( GTK_ MENU_ SHELL ( popupmenu), item); 47 menu = gtk_ menu_ new (); 48 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM ( item), menu); 49 { 50 item = gtk_ tearoff_ menu_ item_ new (); 51 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_menu_item_new_with_mnemonic ("_New"); 54 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 55 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 56 GDK_N, 57 GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); item = gtk_menu_item_new_with_mnemonic ("_Open"); 60 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 61 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 62 GDK_O, 63 GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); item = gtk_menu_item_new_with_mnemonic ("_Save"); 66 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 67 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 68 GDK_S, 69 GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); item = gtk_ menu_ item_ new_ with_ mnemonic (" Save _ as"); 72 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 73 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 74 GDK_S, 75 GDK_ CONTROL_ MASK GDK_SHIFT_MASK, 76 GTK_ ACCEL_ VISIBLE); item = gtk_ separator_ menu_ item_ new (); 79 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_menu_item_new_with_mnemonic ("_Quit"); 82 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 83 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 84 GDK_Q, 85 GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); 86 g_ signal_ connect ( G_ OBJECT ( item), " activate", 87 G_ CALLBACK ( cb_ quit), NULL); 88 } 89 item = gtk_menu_item_new_with_mnemonic ("_Edit"); 90 gtk_ menu_ shell_ append ( GTK_ MENU_ SHELL ( popupmenu), item); 91 menu = gtk_ menu_ new (); 92 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM ( item), menu); 93 { 94 item = gtk_ tearoff_ menu_ item_ new (); 95 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock ( GTK_STOCK_CUT, 98 accel_ group); 99 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock ( GTK_STOCK_COPY, 102 accel_ group); 103 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock ( GTK_STOCK_PASTE, 106 accel_ group); 107 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock ( GTK_STOCK_DELETE, 110 accel_ group); 111 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 112 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 113 GDK_D, 114 GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); 115 } 116 item = gtk_menu_item_new_with_mnemonic ("_View"); 117 gtk_ menu_ shell_ append ( GTK_ MENU_ SHELL ( popupmenu), item); 第 7 章 ウィジェットリファレン

172 menu = gtk_ menu_ new (); 119 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM ( item), menu); 120 { 121 item = gtk_ tearoff_ menu_ item_ new (); 122 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); item = gtk_ check_ menu_ item_ new_ with_ label (" Show Hidden Folders"); 125 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 126 gtk_ widget_ add_ accelerator ( item, " activate", accel_group, 127 GDK_H, 128 GDK_CONTROL_MASK, GTK_ ACCEL_ VISIBLE); item = gtk_image_menu_item_new_with_label ("Sort by..."); 131 image = gtk_ image_ new_ from_ stock ( GTK_STOCK_SORT_ASCENDING, 132 GTK_ ICON_ SIZE_ MENU); 133 gtk_ image_ menu_ item_ set_ image ( GTK_ IMAGE_ MENU_ ITEM ( item), image); 134 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 135 menu = gtk_ menu_ new (); 136 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM ( item), menu); 137 { 138 item = gtk_ radio_ menu_ item_ new_ with_ label ( group, " File type"); 139 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 140 gtk_ check_ menu_ item_ set_ active ( GTK_ CHECK_ MENU_ ITEM ( item), TRUE); group = gtk_ radio_ menu_ item_ get_ group ( GTK_ RADIO_ MENU_ ITEM ( item)); 143 item = gtk_ radio_ menu_ item_ new_ with_ label ( group, " File size"); 144 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); group = gtk_ radio_ menu_ item_ get_ group ( GTK_ RADIO_ MENU_ ITEM ( item)); 147 item = gtk_ radio_ menu_ item_ new_ with_ label ( group, " Update time"); 148 gtk_ container_ add ( GTK_ CONTAINER ( menu), item); 149 } 150 } 151 return popupmenu; 152 } int 155 main ( int argc, char ** argv) 156 { 157 GtkWidget * window; 158 GtkWidget * eventbox; 159 GtkWidget * popupmenu; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 164 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkPopupMenu Sample"); 165 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 166 gtk_ widget_ set_ size_ request ( window, 300, 100); 167 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 168 G_ CALLBACK ( gtk_ main_ quit), NULL); popupmenu = create_ popupmenu ( GTK_ WINDOW ( window)); 171 gtk_ widget_ show_ all ( popupmenu); eventbox = gtk_ event_ box_ new (); 174 gtk_ container_ add ( GTK_ CONTAINER ( window), eventbox); 175 g_ signal_ connect ( G_ OBJECT ( eventbox), " button_ press_ event", 176 G_ CALLBACK ( cb_ popup_ menu), popupmenu); gtk_ widget_ show_ all ( window); 179 gtk_main (); return 0; 182 } UI UI GtkUIManager 7.17 UI UI 第 7 章 ウィジェットリファレン

173 GObject +----GtkUIManager UI gtk ui manager new GtkUIManager* gtk_ ui_ manager_ new ( void); GtkActionEntry GtkActionEntry typedef struct { const gchar const gchar const gchar const gchar const gchar GCallback } GtkActionEntry; * name; * stock_ id; * label; * accelerator; * tooltip; callback; name stock id GtkStockItem label accelerator <control>o <control><shift>s, <alt><shift>x tooltips callback 7.19 UI 第 7 章 ウィジェットリファレン

174 162 7 GtkToggleActionEntry GtkRadioActionEntry GtkToggleActionEntry typedef struct { const gchar const gchar const gchar const gchar const gchar GCallback gboolean * name; * stock_ id; * label; * accelerator; * tooltip; callback; } GtkToggleActionEntry; is_ active; GtkToggleActionEntry GtkActionEntry is active gboolean GtkRadioActionEntry typedef struct { const gchar const gchar const gchar const gchar const gchar gint * name; * stock_ id; * label; * accelerator; * tooltip; value; } GtkRadioActionEntry; GtkRadioActionEntry callback ID value gint gtk action group add radio actions UI GtkActionGroup gtk action group new GtkActionGroup* gtk_ action_ group_ new ( const gchar * name); 3 gtk action group add actions GtkActionEntry 3 4 void gtk_ action_ group_ add_ actions ( GtkActionGroup * action_group, const GtkActionEntry * entries, guint n_entries, gpointer user_ data); gtk action group add toggle actions GtkActionToggleEntry void gtk_ action_ group_ add_ toggle_ actions ( GtkActionGroup * action_group, const GtkToggleActionEntry * entries, guint n_entries, gpointer user_ data); 第 7 章 ウィジェットリファレン

175 gtk action group add radio actions GtkActionRadioEntry 4 GtkActionRadioEntry value 5 void gtk_ action_ group_ add_ radio_ actions ( GtkActionGroup * action_group, const GtkRadioActionEntry * entries, guint n_entries, gint value, GCallback on_change, gpointer user_ data); 1 GTK+ GtkUIManager static const gchar * ui_ info = " <ui >" " <menubar name= MenuBar >" " <menu action= FileMenu >" " <menuitem action= New / >" " <menuitem action= Open / >" " <menuitem action= Save / >" " <menuitem action= SaveAs / >" " <separator/ >" " <menuitem action= Quit / >" " </menu >" " </menubar >" " </ui >"; <ui> </ui> <menuitem action= New /> action GtkActionEntry name GtkUIManager UI : gtkuimanager-sample.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ test1 ( void) 5 { 6 g_print ("...\n"); 7 } 8 9 static void 10 cb_ test2 ( GtkWidget * widget, gpointer user_ data) 11 { 12 g_print ("%s\n", (gchar *) user_data); 13 } static GtkActionEntry entries[] = 16 { 17 {"FileMenu", NULL, "_File"}, 18 {"EditMenu", NULL, "_Edit"}, 第 7 章 ウィジェットリファレン

176 {"ViewMenu", NULL, "_View"}, 20 {" SortMenu", GTK_STOCK_SORT_ASCENDING, " Sort by..."}, 21 {"New", NULL, "_New", " <control >N", NULL, cb_test1}, 22 {"Open", NULL, "_Open", " <control >O", NULL, G_CALLBACK (cb_test2)}, 23 {"Save", NULL, "_Save", " <control >S", NULL, NULL}, 24 {"SaveAs", NULL, "Save _as", " <shift > <control >S", NULL, NULL}, 25 {"Quit", NULL, "_Quit", " <control >Q", NULL, gtk_main_quit}, 26 {"Cut", GTK_STOCK_CUT, "C_ut", " <control >X", NULL, NULL}, 27 {"Copy", GTK_STOCK_COPY, "_Copy", " <control >C", NULL, NULL}, 28 {"Paste", GTK_STOCK_PASTE, "_Paste", " <control >V", NULL, NULL}, 29 {" Delete", GTK_STOCK_DELETE, "_ Delete", " <control >D", NULL, NULL} 30 }; static GtkToggleActionEntry toggle_ entries[] = 33 { 34 {" ShowHidden", NULL, " Show Hidden Folders", " <control >H", 35 NULL, NULL, FALSE} 36 }; enum 39 { 40 SORT_FILE_TYPE, 41 SORT_FILE_SIZE, 42 SORT_ UPDATE_ TIME 43 }; static GtkRadioActionEntry radio_ entries[] = 46 { 47 {" FileType", NULL, " File type", NULL, NULL, SORT_ FILE_ TYPE}, 48 {" FileSize", NULL, " File size", NULL, NULL, SORT_ FILE_ SIZE}, 49 {" UpdateTime", NULL, " Update time", NULL, NULL, SORT_ UPDATE_ TIME} 50 }; static guint n_ entries = G_ N_ ELEMENTS ( entries); 53 static guint n_ toggle_ entries = G_ N_ ELEMENTS ( toggle_ entries); 54 static guint n_ radio_ entries = G_ N_ ELEMENTS ( radio_ entries); static const gchar * ui_ info = 57 " <ui >" 58 " <menubar name= MenuBar >" 59 " <menu action= FileMenu >" 60 " <menuitem action= New / >" 61 " <menuitem action= Open / >" 62 " <menuitem action= Save / >" 63 " <menuitem action= SaveAs / >" 64 " <separator/ >" 65 " <menuitem action= Quit / >" 66 " </menu >" 67 " <menu action= EditMenu >" 68 " <menuitem action= Cut / >" 69 " <menuitem action= Copy / >" 70 " <menuitem action= Paste / >" 71 " <menuitem action= Delete / >" 72 " </menu >" 73 " <menu action= ViewMenu >" 74 " <menuitem action= ShowHidden / >" 75 " <menu action= SortMenu >" 76 " <menuitem action= FileType / >" 77 " <menuitem action= FileSize / >" 78 " <menuitem action= UpdateTime / >" 79 " </menu >" 80 " </menu >" 81 " </menubar >" 82 " </ui >"; static void 85 activate_ radio_ action ( GtkAction * action, 86 GtkRadioAction * current) 87 { 88 g_print ("Radio action \"%s\" selected\n", 89 gtk_action_get_name (GTK_ACTION (current))); 90 } static GtkWidget* 93 create_ menu ( GtkWidget * parent) 94 { 第 7 章 ウィジェットリファレン

177 GtkUIManager * ui; 96 GtkActionGroup * actions; 97 static gchar * text = " Hello"; actions = gtk_ action_ group_ new (" Actions"); 100 gtk_ action_ group_ add_ actions ( actions, entries, n_entries, 101 ( gpointer) text); 102 gtk_ action_ group_ add_ toggle_ actions ( actions, 103 toggle_entries, n_toggle_entries, 104 NULL); 105 gtk_ action_ group_ add_ radio_ actions ( actions, 106 radio_entries, n_radio_entries, 107 SORT_FILE_TYPE, 108 G_ CALLBACK ( activate_ radio_ action), 109 NULL); ui = gtk_ ui_ manager_ new (); 112 gtk_ ui_ manager_ insert_ action_ group ( ui, actions, 0); 113 gtk_ ui_ manager_ set_ add_ tearoffs ( ui, TRUE); 114 gtk_ window_ add_ accel_ group ( GTK_ WINDOW ( parent), 115 gtk_ui_manager_get_accel_group (ui)); 116 gtk_ ui_ manager_ add_ ui_ from_ string ( ui, ui_info, -1, NULL); return gtk_ui_manager_get_widget (ui, "/MenuBar"); 119 } int 122 main ( int argc, char ** argv) 123 { 124 GtkWidget * window; 125 GtkWidget * menubar; gtk_init (&argc, &argv); 128 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 129 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkUIManager Sample"); 130 gtk_ widget_ set_ size_ request ( window, 300, -1); 131 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 132 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 133 G_ CALLBACK ( gtk_ main_ quit), NULL); menubar = create_ menu ( window); 136 gtk_ container_ add ( GTK_ CONTAINER ( window), menubar); gtk_ widget_ show_ all ( window); 139 gtk_main (); return 0; 142 } 7.5 GtkDialog GtkMessageDialog GtkDialog GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkWindow +----GtkDialog 第 7 章 ウィジェットリファレン

178 166 7 GtkDialog 2 gtk dialog new gtk dialog new GtkDialog vbox action area struct GtkDialog { }; GtkWidget * vbox; GtkWidget * action_ area; GtkWidget* gtk_ dialog_ new ( void); gtk dialog new with buttons GtkDialogFlags GtkWidget* gtk_ dialog_ new_ with_ buttons ( const gchar * title, GtkWindow * parent, GtkDialogFlags flags, const gchar * first_button_text,...); GtkDialogFlags typedef enum { GTK_ DIALOG_ MODAL = 1 << 0, GTK_ DIALOG_ DESTROY_ WITH_ PARENT = 1 << 1, GTK_ DIALOG_ NO_ SEPARATOR = 1 << 2 } GtkDialogFlags; 4 ID ID NULL GtkWidget * dialog = gtk_ dialog_ new_ with_ buttons (" My dialog", ID typedef enum main_app_window, GTK_ DIALOG_ MODAL GTK_ DIALOG_ DESTROY_ WITH_ PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); 7.20 第 7 章 ウィジェットリファレン

179 { GTK_ RESPONSE_ NONE = -1, GTK_ RESPONSE_ REJECT = -2, GTK_ RESPONSE_ ACCEPT = -3, GTK_ RESPONSE_ DELETE_ EVENT = -4, GTK_ RESPONSE_ OK = -5, GTK_ RESPONSE_ CANCEL = -6, GTK_ RESPONSE_ CLOSE = -7, GTK_ RESPONSE_ YES = -8, GTK_ RESPONSE_ NO = -9, GTK_ RESPONSE_ APPLY = -10, GTK_ RESPONSE_ HELP = -11 } GtkResponseType; ID gtk dialog run gint gtk_ dialog_ run ( GtkDialog * dialog); vbox action area gtk dialog set has sesparator gtk dialog get has sesparator void gtk_ dialog_ set_ has_ separator ( GtkDialog * dialog, gboolean setting); gboolean gtk_ dialog_ get_ has_ separator ( GtkDialog * dialog); 第 7 章 ウィジェットリファレン

180 : gtkdialog-sample.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ button ( GtkButton * button, gpointer user_ data) 5 { 6 GtkWidget * dialog; 7 GtkWidget * parent; 8 GtkWidget * label; 9 gint response; parent = GTK_ WIDGET ( user_ data); dialog 14 = gtk_ dialog_ new_ with_ buttons (" Save Confirmation", 15 GTK_ WINDOW( parent), 16 GTK_ DIALOG_ MODAL 17 GTK_ DIALOG_ DESTROY_ WITH_ PARENT, 18 GTK_STOCK_NO, GTK_RESPONSE_NO, 19 GTK_STOCK_YES, GTK_RESPONSE_YES, 20 NULL); 21 label = gtk_ label_ new (" Confirm are you sure you want to save."); 22 gtk_ container_ add ( GTK_ CONTAINER ( GTK_ DIALOG ( dialog) - >vbox), label); 23 gtk_ widget_ set_ size_ request ( dialog, 400, 100); 24 gtk_ widget_ show_ all ( dialog); response = gtk_ dialog_ run ( GTK_ DIALOG ( dialog)); 27 if ( response == GTK_ RESPONSE_ YES) 28 { 29 g_ print (" Yes button was pressed.\ n"); 30 } 31 else if ( response == GTK_ RESPONSE_ NO) 32 { 33 g_ print (" No button was pressed.\ n"); 34 } 35 else 36 { 37 g_ print (" Another response was recieved.\ n"); 38 } 39 gtk_ widget_ destroy ( dialog); 40 } int 43 main ( int argc, char ** argv) 44 { 45 GtkWidget * window; 46 GtkWidget * hbox; 47 GtkWidget * label; 48 GtkWidget * entry; 49 GtkWidget * button; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 54 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkDialog Sample"); 55 gtk_ widget_ set_ size_ request ( window, 300, -1); 56 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 57 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 58 G_ CALLBACK ( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( FALSE, 5); 61 gtk_ container_ add ( GTK_ CONTAINER ( window), hbox); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ SAVE); 64 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 65 G_ CALLBACK ( cb_ button), ( gpointer) window); 66 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 69 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 70 G_ CALLBACK ( gtk_ main_ quit), NULL); 71 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); 第 7 章 ウィジェットリファレン

181 gtk_ widget_ show_ all ( window); 74 gtk_main (); return 0; 77 } GtkMessageDialog 4 GtkButtonsType GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkWindow +----GtkDialog +----GtkMessageDialog GtkMessageDialog 2 gtk mesage dialog new GtkDialogFlags GtkMessageType GtkButtonsType 7.22 GtkWidget* gtk_ message_ dialog_ new ( GtkWindow * parent, GtkMessageType 7.12 GtkButtonType typedef enum GtkDialogFlags flags, GtkMessageType type, GtkButtonsType buttons, const gchar * message_format,...); 7.22 第 7 章 ウィジェットリファレン

182 GTK MESSAGE INFO GTK MESSAGE WARNING GTK MESSAGE QUESTION GTK MESSAGE ERROR { GTK_BUTTONS_NONE, GTK_BUTTONS_OK, GTK_BUTTONS_CLOSE, GTK_BUTTONS_CANCEL, GTK_BUTTONS_YES_NO, GTK_ BUTTONS_ OK_ CANCEL } GtkButtonsType; gtk mesage dialog new with markup GtkWidget* gtk_ message_ dialog_ new_ with_ markup ( GtkWindow * parent, GtkDialogFlags flags, GtkMessageType type, GtkButtonsType buttons, const gchar * message_format,...); gtk message dialog set markup void gtk_ message_ dialog_ set_ markup ( GtkMessageDialog * message_dialog, const gchar * str); : gtkmessagedialog-sample.c 1 # include <gtk/ gtk. h> 2 3 GtkWidget * window; 4 5 static void 6 show_ dialog ( GtkButton * button, gpointer user_ data) 7 { 8 GtkWidget * dialog; 9 GtkButtonsType btype[] = { GTK_BUTTONS_CLOSE, 10 GTK_BUTTONS_OK_CANCEL, 11 GTK_BUTTONS_YES_NO, 7.23 第 7 章 ウィジェットリファレン

183 GTK_ BUTTONS_ OK}; 13 GtkMessageType mtype = ( GtkMessageType) user_ data; 14 gchar * string[] = {" GTK_ MESSAGE_ INFO", 15 " GTK_ MESSAGE_ WARNING", 16 " GTK_ MESSAGE_ QUESTION", 17 "GTK_MESSAGE_ERROE"}; 18 gint result; dialog = 21 gtk_ message_ dialog_ new ( GTK_ WINDOW ( window), 22 GTK_ DIALOG_ MODAL 23 GTK_ DIALOG_DESTROY_WITH_PARENT, 24 mtype, 25 btype[ mtype], 26 " This dialog is a GtkMessageDialog sample\ n" 27 "( GtkMessageType = % s)", 28 string[ mtype]); 29 result = gtk_ dialog_ run ( GTK_ DIALOG ( dialog)); switch ( result) 32 { 33 case GTK_ RESPONSE_ OK: 34 g_print ("GTK_RESPONSE_OK is recieved.\n"); 35 break; 36 case GTK_ RESPONSE_ CANCEL: 37 g_ print (" GTK_ RESPONSE_ CANCEL is recieved.\ n"); 38 break; 39 case GTK_ RESPONSE_ CLOSE: 40 g_ print (" GTK_ RESPONSE_ CLOSE is recieved.\ n"); 41 break; 42 case GTK_ RESPONSE_ YES: 43 g_print ("GTK_RESPONSE_YES is recieved.\n"); 44 break; 45 case GTK_ RESPONSE_ NO: 46 g_print ("GTK_RESPONSE_NO is recieved.\n"); 47 break; 48 default: 49 g_ print (" Another response is recieved.\ n"); 50 break; 51 } 52 gtk_ widget_ destroy ( dialog); 53 } int 56 main ( int argc, char ** argv) 57 { 58 GtkWidget * hbox; 59 GtkWidget * button; 60 gchar * stock[] = { GTK_STOCK_DIALOG_INFO, 61 GTK_STOCK_DIALOG_WARNING, 62 GTK_STOCK_DIALOG_QUESTION, 63 GTK_ STOCK_ DIALOG_ ERROR}; 64 int n; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 69 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkMessageDialog Sample"); 70 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 71 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 72 G_ CALLBACK ( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( TRUE, 5); 75 gtk_ container_ add ( GTK_ CONTAINER ( window), hbox); for ( n = 0; n < 4; n++) 78 { 79 button = gtk_ button_ new_ from_ stock ( stock[ n]); 80 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 81 G_ CALLBACK ( show_ dialog), GINT_ TO_ POINTER ( n)); 82 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); 83 } 84 button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 85 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 86 G_ CALLBACK ( gtk_ main_ quit), NULL); 87 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); 第 7 章 ウィジェットリファレン

184 gtk_ widget_ show_ all ( window); 90 gtk_main (); return 0; 93 } GtkFileChooser 7.24 GInterface +----GtkFileChooser gtk file chooser dialog new GtkWidget* gtk_ file_ chooser_ dialog_ new ( const gchar * title, GtkWidget * parent, GtkFileChooserAction action, const gchar * first_button_text,...); GtkFileChooserAction GtkResponseType 7.24 第 7 章 ウィジェットリファレン

185 GtkFileChooserAction GTK FILE CHOOSER ACTION OPEN GTK FILE CHOOSER ACTION SAVE GTK FILE CHOOSER ACTION SELECT FOLDER GTK FILE CHOOSER ACTION CREATE FOLDER NULL GtkStockItem dialog = gtk_ file_ chooser_ dialog_ new (" File Open Dialog", GTK_ WIDGET( parent), GTK_ FILE_CHOOSER_ ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCE, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk file chooser get filename gtk file chooser set filename gchar* gtk_ file_ chooser_ get_ filename ( GtkFileChooser * chooser); gboolean gtk_ file_ chooser_ set_ filename ( GtkFileChooser * chooser, const gchar * filename); gtk file chooser get uri gtk file chooser set uri URI file:/// URI gchar* gtk_ file_ chooser_ get_ uri ( GtkFileChooser * chooser); gboolean gtk_ file_ chooser_ set_ uri ( GtkFileChooser * chooser, const gchar * filename); gtk file chooser get filenames gtk file chooser get uris GSList* gtk_ file_ chooser_ get_ filenames ( GtkFileChooser * chooser); GSList* gtk_ file_ chooser_ get_ uris ( GtkFileChooser * chooser); gtk file chooser get current folder gtk file chooser set current folder URI gtk file chooser get current folder uri gtk file chooser set current folder uri gchar* gtk_ file_ chooser_ get_ current_ folder ( GtkFileChooser * chooser); gboolean gtk_ file_ chooser_ set_ current_ folder ( GtkFileChooser * chooser, gchar * filename); 第 7 章 ウィジェットリファレン

186 174 7 gchar* gtk_ file_ chooser_ get_ current_ folder_ uri ( GtkFileChooser * chooser); gboolean gtk_ file_ chooser_ set_ current_ folder_ uri ( GtkFileChooser * chooser, gchar *uri); GtkFileChooser GtkFileFilter GtkFileFilter 1. gtk file filter new GtkFileFilter* gtk_ file_ filter_ new ( void); 2. gtk file filter set name void gtk_ file_ filter_ set_ name ( GtkFileFilter * filter, 3. const gchar * name); void gtk_ file_ filter_ add_ pattern ( GtkFileFilter * filter, const gchar * pattern); void gtk_ file_ filter_ add_ mime_ type ( GtkFileFilter * filter, const gchar * mime_ type); void gtk_ file_ filter_ add_ pixbuf_ formats ( GtkFileFilter * filter); 4. gtk file chooser add filter void gtk_ file_ chooser_ add_ filter ( GtkFileChooser * chooser, GtkFileFilter * filter); GTK FILE CHOOSER ACTION SAVE gtk file chooser set do overwrite confirmation 2 TRUE gtk file chooser get do overwrite confirmation void gtk_ file_ chooser_ set_ do_ overwrite_ confirmation ( GtkFileChooser * chooser, gboolean do_ overwrite_ confirmation); gboolean gtk_ file_ chooser_ get_ do_ overwrite_ confirmation ( GtkFileChooser * chooser); gtk file chooser set show hidden 2 TRUE gtk file chooser get show hidden void gtk_ file_ chooser_ set_ show_ hidden ( GtkFileChooser * chooser, gboolean show_ hidden); gboolean gtk_ file_ chooser_ get_ show_ hidden ( GtkFileChooser * chooser); 第 7 章 ウィジェットリファレン

187 gtk file chooser set select multiple 2 TRUE gtk file chooser get select multiple void gtk_ file_ chooser_ set_ select_ multiple ( GtkFileChooser * chooser, gboolean select_ multiple); gboolean gtk_ file_ chooser_ get_ select_ multiple ( GtkFileChooser * chooser); JPEG PNG gtk file filter add pattern * JPEG gtk file filter add mime type notify::filter : gtkfilechooser-sample.c 1 # include <gtk/ gtk. h> 2 3 static void 4 filter_ changed ( GtkFileChooserDialog * dialog, gpointer data) 5 { 6 g_print ("File filter changed.\n"); 7 } 8 9 static void 10 cb_ button ( GtkButton * button, gpointer data) 11 { 12 GtkWidget * dialog; 13 GtkWidget * parent; 14 GtkEntry * entry; 15 GtkFileFilter * filter; 16 GtkFileChooserAction action[] = { GTK_ FILE_ CHOOSER_ ACTION_OPEN, 17 GTK_FILE_CHOOSER_ACTION_ SAVE, 18 GTK_ FILE_ CHOOSER_ ACTION_ SELECT_ FOLDER, 19 GTK_ FILE_ CHOOSER_ ACTION_ CREATE_ FOLDER 20 }; 21 gint response; 22 gchar * filename; 23 gchar * folder; parent = GTK_WIDGET(g_object_get_data (G_OBJECT (data), "parent")); 26 entry = GTK_ ENTRY ( data); dialog = gtk_ file_ chooser_ dialog_ new (" File Chooser Dialog", 29 GTK_ WINDOW ( parent), 30 action[0], 31 GTK_STOCK_CANCEL, 32 GTK_RESPONSE_CANCEL, 33 GTK_STOCK_OPEN, 34 GTK_RESPONSE_ACCEPT, 35 NULL); 36 filter = gtk_ file_ filter_ new (); 37 gtk_ file_ filter_ set_ name ( filter, " All Files"); 38 gtk_file_filter_add_pattern (filter, "*"); 39 gtk_ file_ chooser_ add_ filter ( GTK_ FILE_ CHOOSER ( dialog), filter); filter = gtk_ file_ filter_ new (); 42 gtk_file_filter_set_name (filter, "JPEG"); 43 gtk_file_filter_add_mime_type (filter, "image/jpeg"); 44 gtk_ file_ chooser_ add_ filter ( GTK_ FILE_ CHOOSER ( dialog), filter); 第 7 章 ウィジェットリファレン

188 filter = gtk_ file_ filter_ new (); 47 gtk_file_filter_set_name (filter, "PNG"); 48 gtk_file_filter_add_mime_type (filter, "image/png"); 49 gtk_ file_ chooser_ add_ filter ( GTK_ FILE_ CHOOSER ( dialog), filter); g_ signal_ connect ( dialog, " notify:: filter", 52 G_ CALLBACK( filter_ changed), NULL); gtk_ widget_ show_ all ( dialog); response = gtk_ dialog_ run ( GTK_ DIALOG ( dialog)); 57 if ( response == GTK_ RESPONSE_ ACCEPT) 58 { 59 filename 60 = gtk_ file_ chooser_ get_ filename ( GTK_ FILE_ CHOOSER ( dialog)); 61 folder 62 = gtk_ file_ chooser_ get_ current_ folder ( GTK_ FILE_ CHOOSER 63 (dialog)); 64 g_print ("%s\n", folder); 65 g_ free ( folder); gtk_ entry_ set_ text ( entry, filename); 68 g_ free ( filename); 69 } 70 else if ( response == GTK_ RESPONSE_ CANCEL) 71 { 72 g_ print (" Cancel button was pressed.\ n"); 73 } 74 else 75 { 76 g_ print (" Another response was recieved.\ n"); 77 } 78 gtk_ widget_ destroy ( dialog); 79 } int 82 main ( int argc, char ** argv) 83 { 84 GtkWidget * window; 85 GtkWidget * hbox; 86 GtkWidget * label; 87 GtkWidget * entry; 88 GtkWidget * button; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 93 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkFileChooser Sample"); 94 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 95 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 96 G_ CALLBACK ( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( FALSE, 5); 99 gtk_ container_ add ( GTK_ CONTAINER ( window), hbox); label = gtk_label_new ("File :"); 102 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), label, FALSE, FALSE, 0); entry = gtk_ entry_ new (); 105 gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0); 106 g_ object_ set_ data ( G_ OBJECT ( entry), " parent", ( gpointer) window); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ OPEN); 109 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 110 G_ CALLBACK ( cb_ button), ( gpointer) entry); 111 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 114 gtk_main (); return 0; 117 } 第 7 章 ウィジェットリファレン

189 GtkAboutDialog GtkAboutDialog 7.25 GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkWindow +----GtkDialog +----GtkAboutDialog GtkAboutDialog GtkWidget* gtk_ about_ dialog_ new ( void); void gtk_ about_ dialog_ set_ name ( GtkAboutDialog * about, const gchar * name); const gchar* gtk_ about_ dialog_ get_ name ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ version ( GtkAboutDialog * about, const gchar * version); const gchar* gtk_ about_ dialog_ get_ version ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ authors ( GtkAboutDialog * about, const gchar ** authors); const gchar* const * gtk_ about_ dialog_ get_ authors ( GtkAboutDialog * about); 第 7 章 ウィジェットリファレン

190 178 7 void gtk_ about_ dialog_ set_ documenters ( GtkAboutDialog * about, const gchar ** documenters); const gchar* const * gtk_ about_ dialog_ get_ documenters ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ translator_ credits ( GtkAboutDialog * about, const gchar * translator_ credits); const gchar* gtk_ about_ dialog_ get_ translator_ credits ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ comments ( GtkAboutDialog * about, const gchar * comments); const gchar* gtk_ about_ dialog_ get_ comments ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ copyright ( GtkAboutDialog * about, const gchar * copyright); const gchar* gtk_ about_ dialog_ get_ copyright ( GtkAboutDialog * about); Web void gtk_ about_ dialog_ set_ website ( GtkAboutDialog * about, const gchar * website); const gchar* gtk_ about_ dialog_ get_ website ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ logo ( GtkAboutDialog * about, GdkPixbuf * logo); GdkPixbuf* gtk_ about_ dialog_ get_ logo ( GtkAboutDialog * about); : gtkaboutdialog-sample.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ show_ dialog ( GtkWidget * widget, gpointer data) 5 { 6 GtkWidget * dialog; 7 GtkAboutDialog * about; 8 GdkPixbuf * pixbuf; 9 const gchar * authors[] = {" GTK", NULL}; 10 const gchar * documenters[] = {" GTK", NULL}; 11 const gchar * translators = " GTK"; dialog = gtk_ about_ dialog_ new (); 14 about = GTK_ ABOUT_ DIALOG( dialog); 第 7 章 ウィジェットリファレン

191 gtk_ about_ dialog_ set_ name ( about, " GtkAboutDialog - Sample"); 16 gtk_ about_ dialog_ set_ authors ( about, authors); 17 gtk_ about_ dialog_ set_ documenters ( about, documenters); 18 gtk_ about_ dialog_ set_ translator_ credits ( about, translators); 19 gtk_about_dialog_set_version (about, "1.0.0"); 20 gtk_ about_ dialog_ set_ copyright ( about, " Copyright ( C) 2009"); 21 gtk_ about_ dialog_ set_ comments ( about, 22 " This is a GtkAboutDialog sample " 23 "program."); 24 gtk_about_dialog_set_website (about, "file:///..."); pixbuf = gdk_ pixbuf_ new_ from_ file (" gnome - tigert. png", NULL); 27 gtk_ about_ dialog_ set_ logo ( about, pixbuf); gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( dialog), 5); gtk_ widget_ show_ all ( dialog); 32 } int 35 main ( int argc, char ** argv) 36 { 37 GtkWidget * window; 38 GtkWidget * button; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 43 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkAboutDialog - Sample"); 44 gtk_ widget_ set_ size_ request ( window, 300, -1); 45 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 46 G_ CALLBACK ( gtk_ main_ quit), NULL); button = gtk_ button_ new_ with_ label (" Show About Dialog"); 49 gtk_ container_ add ( GTK_ CONTAINER ( window), button); 50 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 51 G_ CALLBACK ( cb_ show_ dialog), NULL); gtk_ widget_ show_ all ( window); 54 gtk_main (); return 0; 57 } 7.6 GtkTreeView GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkTreeView gtk tree view new GtkWidget* gtk_ tree_ view_ new ( void); GtkTreeModel gtk tree view new with model 第 7 章 ウィジェットリファレン

192 180 7 GtkWidget* gtk_ tree_ view_ new_ with_ model ( GtkTreeModel * model); gtk tree view new gtk tree view set model void gtk_ tree_ view_ set_ model ( GtkTreeView * tree_view, GtkTreeModel * model); GtkListStore GtkTreeStore GtkListStore gtk list store new GtkListStore* gtk_ list_ store_ new ( gint n_columns,...); 1 G TYPE BOOLEAN G TYPE INT G TYPE STRING GDK TYPE PIXBUF GtkTreeViewColumn GtkCell- Renderer GtkTreeViewColumn GtkCellRenderer GtkTreeViewColumn gtk tree view column new GtkTreeViewColumn* gtk_ tree_ view_ column_ new ( void); GtkCellRenderer gtk cell renderer text new GtkCellRenderer* gtk_ cell_ renderer_ text_ new ( void); gtk cell renderer toggle new TRUE FALSE GtkCellRenderer* gtk_ cell_ renderer_ toggle_ new ( void); gtk cell renderer pixbuf new GtkCellRenderer* gtk_ cell_ renderer_ pixbuf_ new ( void); gtk tree view column new GtkTreeViewColumn gtk tree view column set title gtk tree view column pack start gtk tree view column set attributes 第 7 章 ウィジェットリファレン

193 text active pixbuf void gtk_ tree_ view_ column_ set_ title ( GtkTreeViewColumn * tree_column, const gchar * title); 2. GtkTreeViewColumn GtkCellRenderer 52 void gtk_ tree_ view_ column_ pack_ start ( GtkTreeViewColumn * tree_column, GtkCellRenderer * cell, gboolean expand); gtk tree view column set attributes 3 NULL gtk tree view column add attribute void gtk_ tree_ view_ column_ set_ attributes( GtkTreeViewColumn * tree_column, GtkCellRenderer * cell_renderer,...); void gtk_ tree_ view_ column_ add_ attribute ( GtkTreeViewColumn * tree_column, GtkCellRenderer * cell_renderer, const gchar * attribute, gint column); 7.14 gtk tree view column new gtk tree view column new with attributes GtkTreeViewColumn* gtk_ tree_ view_ column_ new_ with_ attributes ( const gchar * title, GtkCellRenderer * cell,...); GtkTreeViewColumn gtk tree view append column gint gtk_ tree_ view_ append_ column ( GtkTreeView * tree_view, GtkTreeViewColumn * column); gtk list store append 第 7 章 ウィジェットリファレン

194 182 7 void gtk_ list_ store_ append ( GtkListStore * list_store, GtkTreeIter * iter); gtk list store append GtkTreeIter GtkTreeIter gtk list store set 3 1 void gtk_ list_ store_ set ( GtkListStore * list_store, GtkTreeIter * iter,...); : gtkliststore-sample1.c 1 # include <gtk/ gtk. h> 2 3 enum 4 { 5 COLUMN_ID, 6 COLUMN_NAME, 7 N_ COLUMNS 8 }; 9 10 typedef struct _ ListData 11 { 12 guint id; 13 gchar * name; 14 } ListData; static ListData data[] = { {0, "Mike"}, {1, "JoJo"} }; static void 19 add_ data ( GtkTreeView * treeview) 20 { 21 GtkListStore * store; 22 GtkTreeIter iter; 23 int n; store = GTK_ LIST_ STORE ( gtk_ tree_ view_ get_ model ( treeview)); for ( n = 0; n < sizeof ( data) / sizeof ( data[ 0]); n++) 28 { 29 gtk_ list_ store_ append ( store, & iter); 30 gtk_list_store_set (store, &iter, 31 COLUMN_ID, data[n].id, 32 COLUMN_NAME, data[ n]. name, -1); 33 } 34 } static GtkWidget* 37 create_ list_ model ( void) 38 { 39 GtkWidget * treeview; 40 GtkListStore * liststore; 41 GtkCellRenderer * renderer; 42 GtkTreeViewColumn * column; liststore = gtk_ list_ store_ new ( N_COLUMNS, 45 G_TYPE_UINT, G_ TYPE_ STRING); 46 treeview = gtk_ tree_ view_ new_ with_ model ( GTK_ TREE_ MODEL ( liststore)); 47 g_ object_ unref ( liststore); renderer = gtk_ cell_ renderer_ text_ new (); 50 column = gtk_ tree_ view_ column_ new (); 51 gtk_tree_view_column_set_title (column, "ID"); 52 gtk_ tree_ view_ column_ pack_ start ( column, renderer, FALSE); 53 gtk_ tree_ view_ column_ set_ attributes ( column, renderer, 54 " text", COLUMN_ID, NULL); 55 gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW ( treeview), column); renderer = gtk_ cell_ renderer_ text_ new (); 第 7 章 ウィジェットリファレン

195 column = 59 gtk_ tree_ view_ column_ new_ with_ attributes (" Name", renderer, 60 " text", COLUMN_NAME, NULL); 61 gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW ( treeview), column); return treeview; 64 } int 67 main ( int argc, char ** argv) 68 { 69 GtkWidget * window; 70 GtkWidget * treeview; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 75 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkListStore Sample1"); 76 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 77 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 78 G_ CALLBACK ( gtk_ main_ quit), NULL); 79 gtk_ widget_ set_ size_ request ( window, 300, 100); treeview = create_ list_ model (); 82 gtk_ container_ add ( GTK_ CONTAINER ( window), treeview); add_ data ( GTK_ TREE_ VIEW ( treeview)); gtk_ widget_ show_ all ( window); 87 gtk_main (); return 0; 90 } ID 2 G TYPE STRING G TYPE UINT gtk tree view column add attribute 2 background underline devhelp background gchararray Write underline PangoUnderline Read / Write PangoUnderline 第 7 章 ウィジェットリファレン

196 184 7 typedef enum { PANGO_UNDERLINE_NONE, PANGO_UNDERLINE_SINGLE, PANGO_UNDERLINE_DOUBLE, PANGO_UNDERLINE_LOW, PANGO_ UNDERLINE_ ERROR } PangoUnderline; : gtkliststore-sample2.c 1 # include <gtk/ gtk. h> 2 3 enum 4 { 5 COLUMN_ID, 6 COLUMN_NAME, 7 COLUMN_NAME_COLOR, 8 COLUMN_NAME_LINE, 9 N_ COLUMNS 10 }; typedef struct _ ListData 13 { 14 guint id; 15 gchar * name; 16 gchar * color; 17 PangoUnderline linestyle; 18 } ListData; static ListData data[] = 21 { 22 {0, " Mike", " Orange", PANGO_ UNDERLINE_ NONE}, 23 {1, " JoJo", " Red", PANGO_ UNDERLINE_ SINGLE} 24 }; static void 27 add_ data ( GtkTreeView * treeview) 28 { 29 GtkListStore * store; 30 GtkTreeIter iter; 31 int n; store = GTK_ LIST_ STORE ( gtk_ tree_ view_ get_ model ( treeview)); for ( n = 0; n < sizeof ( data) / sizeof ( data[ 0]); n++) 36 { 37 gtk_ list_ store_ append ( store, & iter); 38 gtk_list_store_set (store, &iter, 39 COLUMN_ID, data[n].id, 40 COLUMN_NAME, data[ n]. name, 41 COLUMN_NAME_COLOR, data[ n]. color, 42 COLUMN_NAME_LINE, data[ n]. linestyle, -1); 43 } 44 } static GtkWidget* 47 create_ list_ model ( void) 48 { 49 GtkWidget * treeview; 50 GtkListStore * liststore; 51 GtkCellRenderer * renderer; 52 GtkTreeViewColumn * column; liststore = gtk_ list_ store_ new ( N_COLUMNS, 55 G_TYPE_UINT, 56 G_TYPE_STRING, 57 G_TYPE_STRING, 58 G_TYPE_UINT); 59 treeview = gtk_ tree_ view_ new_ with_ model ( GTK_ TREE_ MODEL ( liststore)); 60 g_ object_ unref ( liststore); renderer = gtk_ cell_ renderer_ text_ new (); 第 7 章 ウィジェットリファレン

197 column = 64 gtk_ tree_ view_ column_ new_ with_ attributes (" ID", renderer, 65 " text", COLUMN_ID, NULL); 66 gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW( treeview), column); renderer = gtk_ cell_ renderer_ text_ new (); 69 column = 70 gtk_ tree_ view_ column_ new_ with_ attributes (" Name", renderer, 71 " text", COLUMN_NAME, NULL); 72 gtk_ tree_ view_ column_ add_ attribute ( column, renderer, 73 " background", COLUMN_ NAME_ COLOR); 74 gtk_ tree_ view_ column_ add_ attribute ( column, renderer, 75 " underline", COLUMN_ NAME_ LINE); gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW ( treeview), column); return treeview; 80 } int 83 main ( int argc, char ** argv) 84 { 85 GtkWidget * window; 86 GtkWidget * treeview; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 91 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkListStore Sample2"); 92 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 93 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 94 G_ CALLBACK ( gtk_ main_ quit), NULL); 95 gtk_ widget_ set_ size_ request ( window, 300, 100); treeview = create_ list_ model (); 98 gtk_ container_ add ( GTK_ CONTAINER ( window), treeview); add_ data ( GTK_ TREE_ VIEW ( treeview)); gtk_ widget_ show_ all ( window); 103 gtk_main (); return 0; 106 } 第 7 章 ウィジェットリファレン

198 gtk tree view get selection GtkTreeSelection NULL GtkTreeSelection* gtk_ tree_ view_ get_ selection ( GtkTreeView * tree_ view); 13 1 GtkTreeSelection gtk tree selection get selected GtkTreeIter FALSE gboolean gtk_ tree_ selection_ get_ selected ( GtkTreeSelection * selection, GtkTreeModel ** model, GtkTreeIter * iter); 14 gtk list store remove TRUE gboolean gtk_ list_ store_ remove ( GtkListStore * list_store, GtkTreeIter * iter); : gtkliststore-sample3.c 1 static void 2 delete_ list ( GtkTreeView * treeview) 3 { 4 GtkListStore * store; 5 GtkTreeSelection * selection; 6 GtkTreeIter iter; 7 gboolean success; 8 9 selection = gtk_ tree_ view_ get_ selection ( treeview); 10 if (! selection) return; store = GTK_ LIST_ STORE( gtk_ tree_ view_ get_ model ( treeview)); 13 success = gtk_ tree_ selection_ get_ selected ( selection, NULL, & iter); 14 if ( success) gtk_ list_ store_ remove ( store, & iter); 15 } 第 7 章 ウィジェットリファレン

199 gtk tree model iter next gtk tree model iter next GtkTreeIter gboolean gtk_ tree_ model_ iter_ next ( GtkTreeModel * tree_model, GtkTreeIter * iter); gtk tree model get iter first OK gboolean gtk_ tree_ model_ get_ iter_ first ( GtkTreeModel * tree_model, GtkTreeIter * iter); gtk tree model foreach gtk tree model foreach void gtk_ tree_ model_ foreach ( GtkTreeModel * model, GtkTreeModelForeachFunc func, gpointer user_ data); GtkTreeModelForeachFunc gboolean (* GtkTreeModelForeachFunc) ( GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data); GtkTreeIter gtk tree model get 3 1 void gtk_ tree_ model_ get ( GtkTreeModel * tree_model, GtkTreeIter * iter,...); : gtkliststore-sample4.c 1 static gboolean 2 list_ print_ func ( GtkTreeModel * model, 3 GtkTreePath * path, 4 GtkTreeIter * iter, 5 gpointer user_ data) 6 { 7 gchar * name; 8 9 gtk_ tree_ model_ get ( model, iter, COLUMN_NAME, & name, -1); 10 g_print ("%s\n", name); 11 g_free (name); return FALSE; 14 } static void 17 cb_ button_ print ( GtkButton * button, gpointer user_ data) 18 { 19 GtkTreeView * treeview; 20 GtkTreeModel * model; 21 GtkTreeIter iter; 22 gboolean success; 23 gchar * name; treeview = 26 GTK_TREE_VIEW (g_object_get_data (G_OBJECT (user_data), "treeview")); 27 model = GTK_ TREE_ MODEL ( gtk_ tree_ view_ get_ model ( treeview)); 28 # ifdef USE_ LOOP 29 success = gtk_ tree_ model_ get_ iter_ first ( model, & iter); 30 while ( success) { 31 gtk_ tree_ model_ get ( model, & iter, COLUMN_NAME, & name, -1); 32 g_print ("%s\n", name); 33 success = gtk_ tree_ model_ iter_ next ( model, & iter); 34 } 第 7 章 ウィジェットリファレン

200 #else 36 gtk_ tree_ model_ foreach ( model, list_print_func, NULL); 37 #endif 38 } gtk tree selection get selected 4 gtk tree model iter next 41, GtkTreePath 20 GtkTreePath GtkTreeIter gtk list store swap void gtk_ list_ store_ swap ( GtkListStore * store, GtkTreeIter * a, GtkTreeIter *b); : gtkliststore-sample5.c 1 static void 2 up_ list ( GtkTreeView * treeview) 3 { 4 GtkListStore * store; 5 GtkTreeSelection * selection; 6 GtkTreeIter iter; 7 gboolean success; 8 9 selection = gtk_ tree_ view_ get_ selection ( treeview); 10 if (! selection) return; store = GTK_ LIST_ STORE ( gtk_ tree_ view_ get_ model ( treeview)); 13 success = gtk_ tree_ selection_ get_ selected ( selection, NULL, & iter); 14 if ( success) 15 { 16 GtkTreePath * path; 17 GtkTreeIter pre_ iter; path = gtk_ tree_ model_ get_ path ( GTK_ TREE_ MODEL ( store), & iter); 20 if ( gtk_ tree_ path_ prev ( path) && 21 gtk_ tree_ model_ get_ iter ( GTK_ TREE_ MODEL ( store), 22 & pre_iter, path)) 23 { 24 gtk_list_store_swap (store, &pre_iter, &iter); 25 } 26 } 27 } static void 30 down_ list ( GtkTreeView * treeview) 7.30 第 7 章 ウィジェットリファレン

201 { 32 GtkListStore * store; 33 GtkTreeSelection * selection; 34 GtkTreeIter iter; 35 gboolean success; selection = gtk_ tree_ view_ get_ selection ( treeview); 38 if (! selection) return; store = GTK_ LIST_ STORE ( gtk_ tree_ view_ get_ model ( treeview)); 41 success = gtk_ tree_ selection_ get_ selected ( selection, NULL, & iter); 42 if ( success) 43 { 44 GtkTreeIter next_ iter; next_ iter = iter; 47 if (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &next_iter)) 48 { 49 gtk_list_store_swap (store, &iter, &next_iter); 50 } 51 } 52 } GtkCellRenderer GtkCellRenderer GtkCellRendererText GtkCellRendererToggle GtkCellRendererPixbuf GtkCellRendererText GtkCellRendererToggle void user_ function ( GtkCellRendererToggle * cellrenderertoggle, gchar * path_string, gpointer user_ data); void user_ function ( GtkCellRendererText * cellrenderertext, gchar * path_string, gchar * new_text, gpointer user_ data); GtkCellRendererText GtkCellRendererToggle GtkCellRendererText GtkTreeView treeview 7.16 GtkCellRendererText edited 7.31 GtkCellRenderer 第 7 章 ウィジェットリファレン

202 GtkCellRendererToggle toggled gtk list store set GtkCellRendererToggle GtkTreeView treeview GtkCellRenderer : gtkliststore-sample6.c 1 static void 2 cb_ status_ toggled ( GtkCellRendererToggle * renderer, 3 gchar * path_string, 4 gpointer user_ data) 5 { 6 GtkTreeModel * model; 7 GtkTreeIter iter; 8 GtkTreePath * path; 9 gboolean status; model = gtk_ tree_ view_ get_ model ( GTK_ TREE_ VIEW( user_ data)); 12 path = gtk_ tree_ path_ new_ from_ string ( path_ string); gtk_tree_model_get_iter (model, &iter, path); 15 gtk_ tree_ model_ get ( model, & iter, COLUMN_STATUS, & status, -1); 16 gtk_list_store_set (GTK_LIST_STORE(model), &iter, 17 COLUMN_STATUS,! status, -1); 18 gtk_ tree_ path_ free ( path); 19 } static void 22 cb_ name_ edited ( GtkCellRendererText * renderer, 23 const gchar * path_string, 24 const gchar * new_text, 25 gpointer user_ data) 26 { 27 GtkTreeModel * model; 28 GtkTreeIter iter; 29 GtkTreePath * path; 30 gboolean status; model = gtk_ tree_ view_ get_ model ( GTK_ TREE_ VIEW ( user_ data)); 33 path = gtk_ tree_ path_ new_ from_ string ( path_ string); gtk_tree_model_get_iter (model, &iter, path); 36 gtk_list_store_set (GTK_LIST_STORE (model), &iter, 37 COLUMN_NAME, new_text, -1); 38 gtk_ tree_ path_ free ( path); 39 } static GtkWidget* 42 list_ new ( void) 43 { 44 GtkWidget * treeview; 45 GtkListStore * liststore; 46 GtkCellRenderer * renderer; 47 GtkTreeViewColumn * column; liststore = gtk_ list_ store_ new ( N_COLUMNS, 50 G_TYPE_BOOLEAN, 51 G_TYPE_STRING, 第 7 章 ウィジェットリファレン

203 G_ TYPE_ BOOLEAN); 53 treeview = gtk_ tree_ view_ new_ with_ model ( GTK_ TREE_ MODEL ( liststore)); renderer = gtk_ cell_ renderer_ toggle_ new (); 56 g_ signal_ connect ( renderer, " toggled", 57 G_ CALLBACK ( cb_ status_ toggled), treeview); 58 column = 59 gtk_ tree_ view_ column_ new_ with_ attributes (" Status", renderer, 60 " active", COLUMN_STATUS, 61 NULL); 62 gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW ( treeview), column); renderer = gtk_ cell_ renderer_ text_ new (); 65 g_ signal_ connect ( renderer, " edited", 66 G_ CALLBACK ( cb_ name_ edited), treeview); 67 column = 68 gtk_ tree_ view_ column_ new_ with_ attributes (" Name", renderer, 69 " text", COLUMN_NAME, 70 "editable", 71 COLUMN_EDITABLE, 72 NULL); 73 gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW ( treeview), column); return treeview; 76 } gtk tree view column sort column id GtkTreeViewColumn ID COLUMN NAME 11 void gtk_ tree_ view_ column_ set_ sort_ column_ id( GtkTreeViewColumn * tree_column, gint sort_ column_ id); : gtkliststore-sample7.c 1 renderer = gtk_ cell_ renderer_ text_ new (); 2 g_ signal_ connect ( renderer, " edited", 3 G_ CALLBACK ( cb_ name_ edited), treeview); 4 column = 5 gtk_ tree_ view_ column_ new_ with_ attributes (" Name", renderer, 6 " text", COLUMN_NAME, 7 "editable", 8 COLUMN_EDITABLE, 9 NULL); 10 gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW ( treeview), column); 11 gtk_ tree_ view_ column_ set_ sort_ column_ id ( column, COLUMN_ NAME); 第 7 章 ウィジェットリファレン

204 GtkTreeStore gtk tree store new gtk list store new GtkTreeStore* gtk_ tree_ store_ new ( gint n_columns,...); gtk cell renderer pixbuf new GtkCellRenderer* gtk_ cell_ renderer_ pixbuf_ new ( void); GdkPixbuf pixbuf gtk tree store append 2 GtkTreeIter 3 1 GtkTreeIter 3 NULL void gtk_ tree_ store_ append ( GtkTreeStore * tree_store, GtkTreeIter * iter, GtkTreeIter * parent); gtk tree store append GtkTreeIter GtkTreeIter gtk tree store set 3 1 void gtk_ tree_ store_ set ( GtkTreeStore * tree_store, GtkTreeIter * iter,...); GdkPixbuf gdk pixbuf new from file GdkPixbuf 122 gtk tree view set headers visible 2 TRUE FALSE void gtk_ tree_ view_ set_ headers_ visible ( GtkTreeView * tree_view, gboolean headers_ visible); 第 7 章 ウィジェットリファレン

205 : gtktreestore-sample1.c 1 # include <gtk/ gtk. h> 2 3 enum 4 { 5 COLUMN_ICON, 6 COLUMN_LABEL, 7 N_ COLUMNS 8 }; 9 10 typedef struct _ TreeData TreeData; 11 struct _ TreeData 12 { 13 gchar * iconname; 14 gchar * label; 15 TreeData * child; 16 }; static TreeData sublevel1[] = 19 { 20 {"file.png", "file 1-1", NULL}, 21 {"file.png", "file 1-2", NULL}, 22 NULL 23 }; static TreeData sublevel2[] = 26 { 27 {"file.png", "file 2-1", NULL}, 28 {"file.png", "file 2-2", NULL}, 29 NULL 30 }; static TreeData toplevel[] = 33 { 34 {" folder. png", " Folder 1", sublevel1}, 35 {" folder. png", " Folder 2", sublevel2}, 36 NULL 37 }; static void 40 add_ data ( GtkTreeView * treeview) 41 { 42 GtkTreeStore * store; 43 TreeData * top; store = GTK_ TREE_ STORE( gtk_ tree_ view_ get_ model ( treeview)); top = toplevel; 48 while ( top - >iconname) 49 { 50 TreeData * child; 51 GdkPixbuf * pixbuf; 52 GtkTreeIter iter; child = top - >child; 55 pixbuf = gdk_ pixbuf_ new_ from_ file ( top - >iconname, NULL); 56 gtk_ tree_ store_ append ( store, & iter, NULL); 57 gtk_tree_store_set (store, &iter, 58 COLUMN_ICON, pixbuf, 59 COLUMN_LABEL, top - >label, -1); 60 while ( child - >iconname) 61 { 62 GtkTreeIter child_ iter; pixbuf = gdk_ pixbuf_ new_ from_ file ( child - >iconname, NULL); 65 gtk_ tree_ store_ append ( store, & child_iter, & iter); 66 gtk_ tree_ store_ set ( store, & child_iter, 67 COLUMN_ICON, pixbuf, 68 COLUMN_LABEL, child - >label, -1); 69 child++; 70 } 71 top++; 72 } 第 7 章 ウィジェットリファレン

206 } static GtkWidget* 76 create_ tree_ model ( void) 77 { 78 GtkWidget * treeview; 79 GtkTreeStore * treestore; 80 GtkCellRenderer * renderer; 81 GtkTreeViewColumn * column; treestore = gtk_ tree_ store_ new ( N_COLUMNS, 84 GDK_TYPE_PIXBUF, G_ TYPE_ STRING); 85 treeview = gtk_ tree_ view_ new_ with_ model ( GTK_ TREE_ MODEL ( treestore)); 86 g_ object_ unref ( treestore); column = gtk_ tree_ view_ column_ new (); renderer = gtk_ cell_ renderer_ pixbuf_ new (); 91 gtk_tree_view_column_set_title (column, "Folder"); 92 gtk_ tree_ view_ column_ pack_ start ( column, renderer, FALSE); 93 gtk_ tree_ view_ column_ add_ attribute ( column, renderer, " pixbuf", 94 COLUMN_ ICON); renderer = gtk_ cell_ renderer_ text_ new (); 97 gtk_ tree_ view_ column_ pack_ start ( column, renderer, TRUE); 98 gtk_ tree_ view_ column_ add_ attribute ( column, renderer, " text", 99 COLUMN_ LABEL); gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW ( treeview), column); return treeview; 104 } int 107 main ( int argc, char ** argv) 108 { 109 GtkWidget * window; 110 GtkWidget * treeview; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 115 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkTreeStore Sample1"); 116 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 117 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 118 G_ CALLBACK ( gtk_ main_ quit), NULL); 119 gtk_ widget_ set_ size_ request ( window, 280, 240); treeview = create_ tree_ model (); 122 gtk_ tree_ view_ set_ headers_ visible ( GTK_ TREE_ VIEW ( treeview), FALSE); 123 gtk_ container_ add ( GTK_ CONTAINER ( window), treeview); add_ data ( GTK_ TREE_ VIEW ( treeview)); gtk_ widget_ show_ all ( window); 128 gtk_main (); return 0; 131 } row-activated g signal connect row-activated void user_ function ( GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * column, gpointer user_ data); 第 7 章 ウィジェットリファレン

207 gtk tree view expand row gtk tree view collapse row gtk tree view expand row 3 gboolean gtk_ tree_ view_ expand_ row ( GtkTreeView * tree_view, GtkTreePath * path, gboolean open_ all); gboolean gtk_ tree_ view_ collapse_ row ( GtkTreeView * tree_view, GtkTreePath * path); : gtktreestore-sample2.c 1 static void 2 get_ expanded_ path ( GtkTreeView * treeview, 3 GtkTreePath * path, 4 gpointer user_ data) 5 { 6 GtkTreeModel * model; 7 GtkTreeIter iter; 8 GList ** list; 9 gchar * label; list = user_ data; 12 model = gtk_ tree_ view_ get_ model ( treeview); gtk_tree_model_get_iter (model, &iter, path); 15 gtk_ tree_ model_ get ( model, & iter, COLUMN_LABEL, & label, -1); *list = g_list_append (*list, label); 18 } static gboolean 21 is_ expanded ( GtkTreeView * treeview, 22 const gchar * label) 23 { 24 GList * list = NULL, * node; 25 gboolean success = FALSE; gtk_ tree_ view_ map_ expanded_ rows ( treeview, get_expanded_path, & list); 28 for ( node = list; node; node = g_ list_ next ( node)) 29 { 30 if ( strcmp (( char *) node - >data, label) == 0) 31 { 32 success = TRUE; 33 break; 34 } 35 } 36 g_ list_ foreach ( list, ( GFunc) g_free, NULL); 37 g_list_free (list); return success; 40 } static void 43 cb_ double_ clicked ( GtkTreeView * treeview, 44 GtkTreePath * path, 45 GtkTreeViewColumn * column, 46 gpointer user_ data) 47 { 48 GtkTreeModel * model; 49 GtkTreeIter iter; 50 gchar * label; model = gtk_ tree_ view_ get_ model ( treeview); 53 if (gtk_tree_model_get_iter (model, &iter, path)) 54 { 第 7 章 ウィジェットリファレン

208 gtk_ tree_ model_ get ( model, & iter, COLUMN_LABEL, & label, -1); 56 if ( is_ expanded ( treeview, label)) 57 { 58 gtk_ tree_ view_ collapse_ row ( treeview, path); 59 } 60 else 61 { 62 gtk_ tree_ view_ expand_ row ( treeview, path, FALSE); 63 } 64 g_ free ( label); 65 } 66 } int 69 main ( int argc, char ** argv) 70 { 71 GtkWidget * window; 72 GtkWidget * treeview; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 77 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkTreeStore Sample2"); 78 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 79 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 80 G_ CALLBACK ( gtk_ main_ quit), NULL); 81 gtk_ widget_ set_ size_ request ( window, 280, 240); treeview = create_ tree_ model (); 84 g_ signal_ connect ( treeview, " row - activated", 85 G_ CALLBACK ( cb_ double_ clicked), NULL); 86 gtk_ tree_ view_ set_ headers_ visible ( GTK_ TREE_ VIEW ( treeview), FALSE); 87 gtk_ container_ add ( GTK_ CONTAINER ( window), treeview); add_ data ( GTK_ TREE_ VIEW ( treeview)); gtk_ widget_ show_ all ( window); 92 gtk_main (); return 0; 95 } gtk tree store is ancestor 2 iter 3 descendant TRUE gboolean gtk_ tree_ store_ is_ ancestor ( GtkTreeStore * tree_store, GtkTreeIter * iter, GtkTreeIter * descendant); gtk tree store iter depth 0 gint gtk_ tree_ store_ iter_ depth ( GtkTreeStore * tree_store, GtkTreeIter * iter); GtkTooltip GtkTooltip 7.34 第 7 章 ウィジェットリファレン

209 GObject +----GtkTooltip gtk widget set tooltip text void gtk_ widget_ set_ tooltip_ text ( GtkWidget * widget, const gchar * text); : gtktooltip-sample.c 1 # include <gtk/ gtk. h> 2 3 int 4 main ( int argc, char ** argv) 5 { 6 GtkWidget * window; 7 GtkWidget * hbox; 8 GtkWidget * button; 9 10 gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 13 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkTooltip Sample"); 14 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 15 G_ CALLBACK ( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( TRUE, 0); 18 gtk_ container_ add ( GTK_ CONTAINER ( window), hbox); tooltips = gtk_ tooltips_ new (); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ NEW); 23 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); 24 gtk_ widget_ set_ tooltip_ text ( button, " Run new program"); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ OPEN); 27 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); 28 gtk_ widget_ set_ tooltip_ text ( button, " Open a file"); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 31 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); 32 gtk_ widget_ set_ tooltip_ text ( button, " Quit this program"); g_ signal_ connect ( G_ OBJECT ( button), " clicked", 35 G_ CALLBACK ( gtk_ main_ quit), NULL); gtk_ widget_ show_ all ( window); 38 gtk_main (); return 0; 41 } 7.34 第 7 章 ウィジェットリファレン

210 GtkProgressBar GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkProgress +----GtkProgressBar gtk progress bar new GtkWidget* gtk_ progress_ bar_ new ( void); gtk progress bar pulse void gtk_ progress_ bar_ pulse ( GtkProgressBar * pbar); gtk progress bar set pulse step void gtk_ progress_ bar_ set_ pulse_ step ( GtkProgressBar * pbar, gdouble fraction); gtk progress bar set fraction void gtk_ progress_ bar_ set_ fraction ( GtkProgressBar * pbar, gdouble fraction); gtk progress bar get fraction gtk progress bar set fracktion 7.35 第 7 章 ウィジェットリファレン

211 gdouble gtk_ progress_ bar_ get_ fraction ( GtkProgressBar * pbar); gtk progress bar set orientation gtk progress bar get orientation void gtk_ progress_ bar_ set_ orientation ( GtkProgressBar * pbar, GtkProgressBarOrientation typedef enum { GTK_ PROGRESS_LEFT_TO_ RIGHT, GTK_ PROGRESS_RIGHT_TO_LEFT, GTK_ PROGRESS_BOTTOM_TO_TOP, GTK_ PROGRESS_ TOP_ TO_ BOTTOM } GtkProgressBarOrientation; GtkProgressBarOrientation orientation); % gtk progress bar set text gtk progress bar get text void gtk_ progress_ bar_ set_ text ( GtkProgressBar * pbar, G_ CONST_ RETURN gchar* const gchar * text); gtk_ progress_ bar_ get_ text ( GtkProgressBar * pbar); GLib g timeout add 4.5 p : gtkprogressbar-sample.c 1 # include <gtk/ gtk. h> 2 3 static gboolean activity_ mode = 0; 4 static gboolean show_ text = 0; 5 static gint timer = 0; 6 7 static gboolean 8 progressbar_ update ( gpointer user_ data) 9 { 10 GtkProgressBar * progressbar = GTK_ PROGRESS_ BAR ( user_ data); 11 gdouble new_ val; 12 const gchar * text; 13 gchar label[ 256]; if (! activity_ mode) 16 { 17 gtk_ progress_ bar_ pulse( progressbar); 18 } 19 else 20 { 21 new_ val = gtk_ progress_ bar_ get_ fraction ( progressbar) ; 22 if ( new_ val > 1. 0) new_ val = 0. 0; 23 gtk_ progress_ bar_ set_ fraction ( progressbar, new_ val); 第 7 章 ウィジェットリファレン

212 if ( show_ text) 25 { 26 sprintf (label, "%3d%s", (int) (new_val * 100.0), "%"); 27 gtk_ progress_ bar_ set_ text ( progressbar, label); 28 } 29 } 30 return TRUE; 31 } static void 34 cb_ show_ text ( GtkToggleButton * widget, gpointer user_ data) 35 { 36 if ( show_ text) 37 { 38 gtk_progress_bar_set_text (GTK_PROGRESS_BAR (user_data), ""); 39 show_ text = FALSE; 40 } 41 else 42 { 43 show_ text = TRUE; 44 } 45 } static void 48 cb_ activity_ mode ( GtkToggleButton * widget, gpointer user_ data) 49 { 50 activity_ mode = gtk_ toggle_ button_ get_ active ( widget); 51 if ( activity_ mode) 52 { 53 gtk_ progress_ bar_ set_ fraction ( GTK_ PROGRESS_ BAR ( user_ data), 0. 0); 54 } 55 else 56 { 57 gtk_ progress_ bar_ pulse ( GTK_ PROGRESS_ BAR ( user_ data)); 58 } 59 } static void 62 cb_ orientation ( GtkToggleButton * widget, gpointer user_ data) 63 { 64 GtkProgressBarOrientation orientation; orientation = 67 gtk_ progress_ bar_ get_ orientation ( GTK_ PROGRESS_ BAR ( user_ data)); 68 switch ( orientation) 69 { 70 case GTK_ PROGRESS_ LEFT_ TO_ RIGHT: 71 gtk_ progress_ bar_ set_ orientation ( GTK_ PROGRESS_ BAR ( user_ data), 72 GTK_ PROGRESS_ RIGHT_ TO_ LEFT); 73 break; 74 case GTK_ PROGRESS_ RIGHT_ TO_ LEFT: 75 gtk_ progress_ bar_ set_ orientation ( GTK_ PROGRESS_ BAR ( user_ data), 76 GTK_ PROGRESS_ LEFT_ TO_ RIGHT); 77 break; 78 default: 79 break; 80 } 81 } static void 84 cb_ quit ( GtkButton * widget, gpointer data) 85 { 86 g_ source_ remove ( timer); 87 gtk_main_quit (); 88 } int 91 main ( int argc, char ** argv) 92 { 93 GtkWidget * window; 94 GtkWidget * vbox; 95 GtkWidget * progressbar; 96 GtkWidget * button; gtk_init (&argc, &argv); 99 第 7 章 ウィジェットリファレン

213 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 101 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkProgressBar Sample"); 102 gtk_ widget_ set_ size_ request ( window, 300, -1); 103 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 104 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 105 G_ CALLBACK ( cb_ quit), NULL); vbox = gtk_ vbox_ new ( FALSE, 5); 108 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); progressbar = gtk_ progress_ bar_ new (); 111 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), progressbar, FALSE, FALSE, 0); button = gtk_ check_ button_ new_ with_ label (" Show Text"); 114 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), button, FALSE, FALSE, 0); 115 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 116 G_ CALLBACK ( cb_ show_ text), progressbar); button = gtk_ check_ button_ new_ with_ label (" Activity Mode"); 119 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), button, FALSE, FALSE, 0); 120 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 121 G_ CALLBACK ( cb_ activity_ mode), progressbar); button = gtk_ check_ button_ new_ with_ label (" Right to Left"); 124 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), button, FALSE, FALSE, 0); 125 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 126 G_ CALLBACK ( cb_ orientation), progressbar); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 129 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), button, FALSE, FALSE, 0); 130 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 131 G_ CALLBACK ( gtk_ main_ quit), NULL); timer = g_ timeout_ add (100, progressbar_update, progressbar); gtk_ widget_ show_ all ( window); 136 gtk_main (); return 0; 139 } GtkSeparator GUI GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkSeparator +----GtkHSeparator +----GtkVSeparator gtk hseparator new GtkWidget* gtk_ hseparator_ new ( void); gtk vseparator new GtkWidget* gtk_ vseparator_ new ( void); 第 7 章 ウィジェットリファレン

214 GtkScale GUI 7.36 GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkRange +----GtkScale +----GtkHScale +----GtkVScale gtk hscale new GtkAdjustment GtkWidget* gtk_ hscale_ new ( GtkAdjustment * adjustment); gtk hscale new with range GtkWidget* gtk_ hscale_ new_ with_ range ( gdouble min, gdouble max, gdouble step); gtk vscale new GtkAdjustment GtkWidget* gtk_ vscale_ new ( GtkAdjustment * adjustment); gtk vscale new with range GtkWidget* gtk_ vscale_ new_ with_ range ( gdouble min, gdouble max, gdouble step); value-changed value-changed 1 GtkScale GtkRange GtkRange gboolean user_ function ( GtkRange * range, gpointer user_ data); 7.36 第 7 章 ウィジェットリファレン

215 gtk range get value gtk range set value gdouble gtk_ range_ get_ value ( GtkRange * range); void gtk_ range_ set_ value ( GtkRange * range, gdouble value); gtk scale set draw value gtk scale get draw value void gtk_ scale_ set_ draw_ value ( GtkScale * scale, gboolean draw_ value); gboolean gtk_ scale_ get_ draw_ value ( GtkScale * scale); gtk scale set value pos gtk scale get value pos void gtk_ scale_ set_ value_ pos ( GtkScale * scale, GtkPositionType pos); GtkPositionType gtk_ scale_ get_ value_ pos ( GtkScale * scale); void gtk_ scale_ set_ digits ( GtkScale * scale, gint digits); gint gtk_ scale_ get_ digits ( GtkScale * scale); : gtkscale-sample.c 1 # include <gtk/ gtk. h> 2 3 static void 4 cb_ value_ changed ( GtkScale * scale, gpointer user_ data) 5 { 6 g_print ("value = %f\n", gtk_range_get_value (GTK_RANGE (scale))); 7 } 8 9 static void 10 cb_ button ( GtkButton * button, gpointer user_ data) 11 { 12 g_print ("value = %f\n", gtk_range_get_value (GTK_RANGE (user_data))); 13 } int 16 main ( int argc, char ** argv) 17 { 18 GtkWidget * window; 19 GtkWidget * hbox; 20 GtkWidget * label; 21 GtkWidget * scale; 22 GtkWidget * button; 23 gdouble min = 0.0, max = 100.0, step = 0. 1; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 28 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkScale Sample"); 第 7 章 ウィジェットリファレン

216 gtk_ widget_ set_ size_ request ( window, 400, -1); 30 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 31 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 32 G_ CALLBACK ( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( FALSE, 5); 35 gtk_ container_ add ( GTK_ CONTAINER ( window), hbox); label = gtk_label_new ("Input :"); 38 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), label, FALSE, FALSE, 0); scale = gtk_ hscale_ new_ with_ range ( min, max, step); 41 gtk_ scale_ set_ digits ( GTK_ SCALE ( scale), 2); 42 gtk_ scale_ set_ draw_ value ( GTK_ SCALE ( scale), TRUE); 43 gtk_ scale_ set_ value_ pos ( GTK_ SCALE ( scale), GTK_ POS_ BOTTOM); g_ signal_ connect ( G_ OBJECT ( scale), " value - changed", 46 G_ CALLBACK ( cb_ value_ changed), NULL); 47 gtk_box_pack_start (GTK_BOX (hbox), scale, TRUE, TRUE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ APPLY); 50 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 51 G_ CALLBACK ( cb_ button), ( gpointer) scale); 52 gtk_ box_ pack_ start ( GTK_ BOX ( hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 55 gtk_main (); return 0; 58 } GtkIconView GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkIconView gtk icon view new gtk icon view new with model GtkWidget* gtk_ icon_ view_ new ( void); 第 7 章 ウィジェットリファレン

217 item-activated select-all unselect-all 7.18 GtkWidget* gtk_ icon_ view_ new_ with_ model ( GtkTreeModel * model); 2 GtkTreeModel gtk list store new GdkPixbuf GtkListStore * store; store = gtk_ list_ store_ new (2, G_TYPE_STRING, GDK_ TYPE_ PIXBUF); gtk icon view new gtk icon view set model void gtk_ icon_ view_ set_ model ( GtkIconView * icon_view, GtkTreeModel * model); void gtk_ icon_ view_ set_ text_ column ( GtkIconView * icon_view, gint column); void gtk_ icon_ view_ set_ pixbuf_ column ( GtkIconView * icon_view, gint column); 2 0 gtk list store append gtk list store set p item-activated item-activated void user_ function ( GtkIconView * iconview, GtkTreePath * arg1, gpointer user_ data); 2 gtk tree model get iter GtkTreeIter 7.38 第 7 章 ウィジェットリファレン

218 void gtk_ icon_ view_ set_ columns ( GtkIconView * icon_view, gint columns); gint gtk_ icon_ view_ get_ columns ( GtkIconView * icon_ view); margin void gtk_ icon_ view_ set_ margin ( GtkIconView * icon_view, gint margin); gint gtk_ icon_ view_ get_ margin ( GtkIconView * icon_ view); item width 1 void gtk_ icon_ view_ set_ item_ width ( GtkIconView * icon_view, gint item_ width); gint gtk_ icon_ view_ get_ item_ width ( GtkIconView * icon_ view); column spacing void gtk_ icon_ view_ set_ column_ spacing ( GtkIconView * icon_view, gint column_ spacing); gint gtk_ icon_ view_ get_ column_ spacing ( GtkIconView * icon_ view); row spacing void gtk_ icon_ view_ set_ row_ spacing ( GtkIconView * icon_view, gint row_ spacing); gint gtk_ icon_ view_ get_ row_ spacing ( GtkIconView * icon_ view); spacing void gtk_ icon_ view_ set_ spacing ( GtkIconView * icon_view, gint spacing); margin item width column spacing spacing row spacing 7.38 第 7 章 ウィジェットリファレン

219 gint gtk_ icon_ view_ get_ spacing ( GtkIconView * icon_ view); GtkOrientation void gtk_ icon_ view_ set_ orientation ( GtkIconView * icon_view, GtkOrientation orientation); GtkOrientation gtk_ icon_ view_ get_ orientation ( GtkIconView * icon_ view); / void gtk_ icon_ view_ set_ reorderable ( GtkIconView * icon_view, gboolean reorderable); gboolean gtk_ icon_ view_ get_ reorderable ( GtkIconView * icon_ view); GtkSelectionMode void gtk_ icon_ view_ set_ selection_ mode ( GtkIconView * icon_view, GtkSelectionMode mode); GtkSelectionMode gtk_ icon_ view_ get_ selection_ mode ( GtkIconView * icon_ view); typedef enum { GTK_SELECTION_NONE, GTK_SELECTION_SINGLE, GTK_SELECTION_BROWSE, GTK_SELECTION_MULTIPLE, GTK_ SELECTION_ EXTENDED = GTK_ SELECTION_ MULTIPLE } GtkSelectionMode; : gtkiconview-sample1.c 1 # include <gtk/ gtk. h> 2 3 enum 4 { 5 COLUMN_NAME, 6 COLUMN_PIXBUF, 7 N_ COLUMNS 8 }; 9 10 static void 11 add_ data ( GtkIconView * iconview) 12 { 13 GdkPixbuf * folder_ pixbuf; 14 GdkPixbuf * file_ pixbuf; 15 GtkListStore * store; 16 GtkTreeIter iter; file_pixbuf = gdk_pixbuf_new_from_file ("./file.png", NULL); 19 folder_ pixbuf = gdk_ pixbuf_ new_ from_ file ("./ folder. png", NULL); store = GTK_ LIST_ STORE ( gtk_ icon_ view_ get_ model ( iconview)); 第 7 章 ウィジェットリファレン

220 gtk_ list_ store_ clear ( store); gtk_ list_ store_ append ( store, & iter); 26 gtk_list_store_set (store, &iter, 27 COLUMN_NAME, " folder. png", 28 COLUMN_PIXBUF, folder_pixbuf, -1); 29 g_ object_ unref ( folder_ pixbuf); gtk_ list_ store_ append ( store, & iter); 32 gtk_list_store_set (store, &iter, 33 COLUMN_NAME, " file. png", 34 COLUMN_PIXBUF, file_pixbuf, -1); 35 g_ object_ unref ( file_ pixbuf); 36 } static GtkWidget* 39 create_ icon_ view_ widget ( void) 40 { 41 GtkWidget * iconview; 42 GtkListStore * store; store = gtk_ list_ store_ new ( N_COLUMNS, G_TYPE_STRING, GDK_ TYPE_ PIXBUF); 45 iconview = gtk_ icon_ view_ new_ with_ model ( GTK_ TREE_ MODEL ( store)); 46 g_ object_ unref ( store); return iconview; 49 } static void 52 cb_ item_ activated ( GtkIconView * iconview, 53 GtkTreePath * treepath, 54 gpointer user_ data) 55 { 56 GtkListStore * store; 57 GtkTreeIter iter; 58 gchar * name; store = GTK_ LIST_ STORE ( gtk_ icon_ view_ get_ model ( iconview)); 61 gtk_ tree_ model_ get_ iter ( GTK_ TREE_ MODEL ( store), & iter, treepath); 62 gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 63 COLUMN_NAME, &name, -1); 64 g_print ("item %s is clicked.\n", name); 65 g_free (name); 66 } int 69 main ( int argc, char ** argv) 70 { 71 GtkWidget * window; 72 GtkWidget * scroll_ window; 73 GtkWidget * iconview; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 78 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkIconView Sample1"); 79 gtk_ widget_ set_ size_ request ( window, 500, 300); 80 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 81 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 82 G_ CALLBACK ( gtk_ main_ quit), NULL); scroll_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 85 gtk_ scrolled_ window_ set_ shadow_ type ( GTK_ SCROLLED_ WINDOW 86 ( scroll_ window), 87 GTK_ SHADOW_ ETCHED_ IN); 88 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW ( scroll_ window), 89 GTK_POLICY_AUTOMATIC, 90 GTK_ POLICY_ AUTOMATIC); 91 gtk_ container_ add ( GTK_ CONTAINER ( window), scroll_ window); iconview = create_ icon_ view_ widget (); 94 gtk_ icon_ view_ set_ text_ column ( GTK_ ICON_ VIEW ( iconview), 95 COLUMN_ NAME); 96 gtk_ icon_ view_ set_ pixbuf_ column ( GTK_ ICON_ VIEW( iconview), 97 COLUMN_ PIXBUF); 第 7 章 ウィジェットリファレン

221 gtk_ icon_ view_ set_ item_ width ( GTK_ ICON_ VIEW ( iconview), 128); 99 g_ signal_ connect ( G_ OBJECT ( iconview), " item - activated", 100 G_ CALLBACK ( cb_ item_ activated), NULL); gtk_ container_ add ( GTK_ CONTAINER ( scroll_ window), iconview); add_ data ( GTK_ ICON_ VIEW( iconview)); gtk_ widget_ show_ all ( window); 107 gtk_main (); return 0; 110 } gtk tree sortable set default sort func void gtk_ tree_ sortable_ set_ default_ sort_ func ( GtkTreeSortable * sortable, GtkTreeIterCompareFunc sort_func, gpointer user_data, GtkDestroyNotify destroy); gtk tree sortable set sort column id GtkSortType 2 GTK TREE SORTABLE DEFAULT SORT COLUMN ID gtk tree sortable set default sort func void gtk_ tree_ sortable_ set_ sort_ column_ id ( GtkTreeSortable * sortable, gint sort_column_id, GtkSortType order); typedef enum { GTK_SORT_ASCENDING, GTK_ SORT_ DESCENDING } GtkSortType; : gtkiconview-sample2.c 1 # include <gtk/ gtk. h> 2 3 enum 4 { 5 COLUMN_PATH, 6 COLUMN_DISPLAY_NAME, 7 COLUMN_PIXBUF, 8 COLUMN_IS_DIRECTORY, 9 N_ COLUMNS 10 }; 11 第 7 章 ウィジェットリファレン

222 static gchar * currentdir = NULL; static void 15 cb_ quit ( GtkWidget * widget, gpointer user_ data) 16 { 17 g_ free ( currentdir); 18 gtk_main_quit (); 19 } static void 22 add_ data ( GtkIconView * iconview) 23 { 24 GdkPixbuf * folder_ pixbuf; 25 GdkPixbuf * file_ pixbuf; 26 GtkListStore * store; 27 GDir * dir; 28 const gchar * name; 29 GtkTreeIter iter; 30 gchar * path; 31 gchar * display_ name; 32 gboolean is_ dir; file_pixbuf = gdk_pixbuf_new_from_file ("./file.png", NULL); 35 folder_ pixbuf = gdk_ pixbuf_ new_ from_ file ("./ folder. png", NULL); store = GTK_ LIST_ STORE ( gtk_ icon_ view_ get_ model ( iconview)); gtk_ list_ store_ clear ( store); dir = g_ dir_ open ( currentdir, 0, NULL); 42 if (! dir) return; while ( name = g_ dir_ read_ name ( dir)) 45 { 46 if (name[0]!=. ) 47 { 48 path = g_ build_ filename ( currentdir, name, NULL); 49 is_dir = g_file_test (path, G_FILE_TEST_IS_DIR); 50 display_ name = g_ filename_ to_ utf8 ( name, -1, NULL, NULL, NULL); gtk_ list_ store_ append ( store, & iter); 53 gtk_list_store_set (store, &iter, 54 COLUMN_PATH, path, 55 COLUMN_DISPLAY_NAME, display_name, 56 COLUMN_IS_DIRECTORY, is_dir, 57 COLUMN_PIXBUF, 58 ( is_ dir)? folder_ pixbuf : file_pixbuf, 59-1); 60 g_free (path); 61 g_ free ( display_ name); 62 } 63 } 64 g_dir_close (dir); if (g_utf8_collate (currentdir, "/")!= 0) 7.39 第 7 章 ウィジェットリファレン

223 { 68 gtk_ list_ store_ append ( store, & iter); 69 gtk_list_store_set (store, &iter, 70 COLUMN_PATH, g_ path_ get_ dirname ( currentdir), 71 COLUMN_DISPLAY_NAME, "..", 72 COLUMN_IS_DIRECTORY, TRUE, 73 COLUMN_PIXBUF, folder_pixbuf, -1); 74 } 75 g_ object_ unref ( folder_ pixbuf); 76 g_ object_ unref ( file_ pixbuf); 77 } static gint 80 sort_ func ( GtkTreeModel * model, 81 GtkTreeIter * a, 82 GtkTreeIter * b, 83 gpointer user_ data) 84 { 85 gboolean is_dir_a, is_ dir_ b; 86 gchar * name_a, * name_ b; 87 int result; gtk_ tree_ model_ get ( model, a, 90 COLUMN_IS_DIRECTORY, & is_dir_a, 91 COLUMN_DISPLAY_NAME, & name_a, 92-1); 93 gtk_ tree_ model_ get ( model, b, 94 COLUMN_IS_DIRECTORY, & is_dir_b, 95 COLUMN_DISPLAY_NAME, & name_b, 96-1); 97 if (!is_dir_a && is_dir_b) 98 { 99 result = 1; 100 } 101 else if (is_dir_a &&!is_dir_b) 102 { 103 result = -1; 104 } 105 else 106 { 107 result = g_ utf8_ collate ( name_a, name_ b); 108 } 109 return result; 110 } static GtkWidget* 113 create_ icon_ view_ widget ( void) 114 { 115 GtkWidget * iconview; 116 GtkListStore * store; currentdir = g_ get_ current_ dir (); 119 store = gtk_ list_ store_ new ( N_COLUMNS, 120 G_TYPE_STRING, 121 G_TYPE_STRING, 122 GDK_TYPE_PIXBUF, 123 G_ TYPE_ BOOLEAN); 124 gtk_ tree_ sortable_ set_ default_ sort_ func ( GTK_ TREE_ SORTABLE ( store), 125 sort_func, NULL, NULL); 126 gtk_ tree_ sortable_ set_ sort_ column_ id 127 ( GTK_ TREE_ SORTABLE ( store), 128 GTK_ TREE_ SORTABLE_ DEFAULT_ SORT_ COLUMN_ ID, GTK_ SORT_ ASCENDING); iconview = gtk_ icon_ view_ new_ with_ model ( GTK_ TREE_ MODEL ( store)); 131 g_ object_ unref ( store); return iconview; 134 } static void 137 cb_ item_ activated ( GtkIconView * iconview, 138 GtkTreePath * treepath, 139 gpointer user_ data) 140 { 141 GtkListStore * store; 142 GtkTreeIter iter; 第 7 章 ウィジェットリファレン

224 gchar * path; 144 gboolean is_ dir; store = GTK_ LIST_ STORE ( gtk_ icon_ view_ get_ model ( iconview)); 147 gtk_ tree_ model_ get_ iter ( GTK_ TREE_ MODEL ( store), & iter, treepath); 148 gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 149 COLUMN_PATH, & path, 150 COLUMN_IS_DIRECTORY, & is_dir, 151-1); 152 if ( is_ dir) 153 { 154 g_ free ( currentdir); 155 currentdir = g_ strdup ( path); 156 add_ data ( iconview); 157 } 158 g_ free ( path); 159 } int 162 main ( int argc, char ** argv) 163 { 164 GtkWidget * window; 165 GtkWidget * scroll_ window; 166 GtkWidget * iconview; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 171 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkIconView Sample2"); 172 gtk_ widget_ set_ size_ request ( window, 500, 300); 173 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 174 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 175 G_ CALLBACK ( cb_ quit), NULL); scroll_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 178 gtk_ scrolled_ window_ set_ shadow_ type ( GTK_ SCROLLED_ WINDOW 179 ( scroll_ window), 180 GTK_ SHADOW_ ETCHED_ IN); 181 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW ( scroll_ window), 182 GTK_POLICY_AUTOMATIC, 183 GTK_ POLICY_ AUTOMATIC); 184 gtk_ container_ add ( GTK_ CONTAINER ( window), scroll_ window); iconview = create_ icon_ view_ widget (); 187 gtk_ icon_ view_ set_ text_ column ( GTK_ ICON_ VIEW ( iconview), 188 COLUMN_ DISPLAY_ NAME); 189 gtk_ icon_ view_ set_ pixbuf_ column ( GTK_ ICON_ VIEW ( iconview), 190 COLUMN_ PIXBUF); 191 gtk_ icon_ view_ set_ item_ width ( GTK_ ICON_ VIEW ( iconview), 80); 192 g_ signal_ connect ( G_ OBJECT ( iconview), " item - activated", 193 G_ CALLBACK ( cb_ item_ activated), NULL); gtk_ icon_ view_ set_ margin ( GTK_ ICON_ VIEW ( iconview), 16); 196 gtk_ icon_ view_ set_ item_ width ( GTK_ ICON_ VIEW ( iconview), 80); 197 gtk_ icon_ view_ set_ spacing ( GTK_ ICON_ VIEW ( iconview), 16); 198 gtk_ icon_ view_ set_ spacing ( GTK_ ICON_ VIEW ( iconview), 16); 199 gtk_ icon_ view_ set_ column_ spacing ( GTK_ ICON_ VIEW ( iconview), 32); 200 gtk_ icon_ view_ set_ row_ spacing ( GTK_ ICON_ VIEW ( iconview), 32); gtk_ container_ add ( GTK_ CONTAINER ( scroll_ window), iconview); add_ data ( GTK_ ICON_ VIEW ( iconview)); gtk_ widget_ show_ all ( window); 207 gtk_main (); return 0; 210 } GtkEntryCompletion 第 7 章 ウィジェットリファレン

225 GObject +----GtkEntryCompletion gtk entry completion new GtkEntryCompletion* gtk_ entry_ completion_ new ( void); gtk list store new G TYPE STRING gtk entry completion set model void gtk_ entry_ completion_ set_ model ( GtkEntryCompletion * completion, GtkTreeModel * model); void gtk_ entry_ completion_ set_ text_ column ( GtkEntryCompletion * completion, gint column); a, ai, aiu : gtkientrycompletion-sample1.c 1 # include <gtk/ gtk. h> 2 3 enum 4 { 5 COLUMN_COMPLETION_TEXT, 6 N_ COLUMNS 7 }; 8 9 static GtkEntryCompletion* 10 create_ completion_ widget ( void) 11 { 12 GtkEntryCompletion * completion; 13 GtkListStore * store; 14 GtkTreeIter iter; completion = gtk_ entry_ completion_ new (); 17 store = gtk_ list_ store_ new ( N_COLUMNS, G_ TYPE_ STRING); 18 gtk_ entry_ completion_ set_ model ( completion, GTK_ TREE_ MODEL ( store)); 第 7 章 ウィジェットリファレン

226 g_ object_ unref ( store); 20 gtk_ entry_ completion_ set_ text_ column ( completion, 0); gtk_ list_ store_ append ( store, & iter); 23 gtk_ list_ store_ set ( store, & iter, COLUMN_COMPLETION_TEXT, " a", -1); gtk_ list_ store_ append ( store, & iter); 26 gtk_ list_ store_ set ( store, & iter, COLUMN_COMPLETION_TEXT, " ai", -1); gtk_ list_ store_ append ( store, & iter); 29 gtk_ list_ store_ set ( store, & iter, COLUMN_COMPLETION_TEXT, " aiu", -1); return completion; 32 } int 35 main ( int argc, char ** argv) 36 { 37 GtkWidget * window; 38 GtkWidget * entry; 39 GtkEntryCompletion * completion; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 44 gtk_ window_ set_ title ( GTK_ WINDOW ( window), 45 " GtkEntryCompletion Sample1"); 46 gtk_ widget_ set_ size_ request ( window, 320, -1); 47 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 48 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 49 G_ CALLBACK ( gtk_ main_ quit), NULL); entry = gtk_ entry_ new (); 52 gtk_ container_ add ( GTK_ CONTAINER ( window), entry); completion = create_ completion_ widget (); 55 gtk_ entry_ set_ completion ( GTK_ ENTRY ( entry), completion); 56 g_ object_ unref ( completion); gtk_ widget_ show_ all ( window); 59 gtk_main (); return 0; 62 } gtk tree sortable set sort column id : gtkientrycompletion-sample2.c 1 # include <gtk/ gtk. h> 2 3 enum 4 { 5 COLUMN_COMPLETION_TEXT, 6 N_ COMPLETION_ COLUMNS 7 }; 8 9 enum 10 { 11 COLUMN_PATH, 12 COLUMN_DISPLAY_NAME, 13 COLUMN_PIXBUF, 14 COLUMN_IS_DIRECTORY, 15 N_ ICONVIEW_ COLUMNS 16 }; 第 7 章 ウィジェットリファレン

227 static GdkPixbuf * file_pixbuf, * folder_ pixbuf; 19 static gchar* currentdir; static GtkEntryCompletion* 22 create_ completion_ widget ( void) 23 { 24 GtkEntryCompletion * completion; 25 GtkTreeModel * completion_ model; completion = gtk_ entry_ completion_ new (); 28 completion_ model = 29 GTK_ TREE_ MODEL ( gtk_ list_ store_ new ( N_COMPLETION_COLUMNS, 30 G_TYPE_STRING)); 31 gtk_ tree_ sortable_ set_ sort_ column_ id 32 ( GTK_ TREE_ SORTABLE ( completion_ model), 33 COLUMN_COMPLETION_TEXT, GTK_ SORT_ ASCENDING); 34 gtk_ entry_ completion_ set_ model ( completion, completion_ model); 35 g_ object_ unref ( completion_ model); 36 gtk_ entry_ completion_ set_ text_ column ( completion, 0); return completion; 39 } static void 42 load_ pixbuf ( void) 43 { 44 file_ pixbuf = gdk_ pixbuf_ new_ from_ file (" file. png", NULL); 45 folder_ pixbuf = gdk_ pixbuf_ new_ from_ file (" folder. png", NULL); 46 } static void 49 add_ data ( GtkIconView * iconview, 50 GtkEntryCompletion * completion) 51 { 52 GtkListStore * iconview_store, * completion_ store; 53 GDir * dir; 54 const gchar * name; 55 GtkTreeIter iter; 56 gchar * path, * display_ name; 57 gboolean is_ dir; iconview_ store = GTK_ LIST_ STORE ( gtk_ icon_ view_ get_ model ( iconview)); 60 completion_ store 61 = GTK_ LIST_ STORE ( gtk_ entry_ completion_ get_ model ( completion)); gtk_ list_ store_ clear ( iconview_ store); 64 gtk_ list_ store_ clear ( completion_ store); dir = g_ dir_ open ( currentdir, 0, NULL); 67 if (! dir) return; while ( name = g_ dir_ read_ name ( dir)) 70 { 71 if (name[0]!=. ) 第 7 章 ウィジェットリファレン

228 { 73 path = g_ build_ filename ( currentdir, name, NULL); 74 is_dir = g_file_test (path, G_FILE_TEST_IS_DIR); 75 display_ name = g_ filename_ to_ utf8 ( name, -1, NULL, NULL, NULL); gtk_ list_ store_ append ( iconview_store, & iter); 78 gtk_ list_ store_ set ( iconview_store, & iter, 79 COLUMN_PATH, path, 80 COLUMN_DISPLAY_NAME, display_name, 81 COLUMN_IS_DIRECTORY, is_dir, 82 COLUMN_PIXBUF, 83 ( is_ dir)? folder_ pixbuf : file_pixbuf, 84-1); gtk_ list_ store_ append ( completion_store, & iter); 87 gtk_ list_ store_ set ( completion_store, & iter, 88 COLUMN_COMPLETION_TEXT, display_name, -1); 89 g_free (path); 90 g_ free ( display_ name); 91 } 92 } 93 g_dir_close (dir); if (g_utf8_collate (currentdir, "/")!= 0) 96 { 97 gtk_ list_ store_ append ( iconview_store, & iter); 98 gtk_ list_ store_ set ( iconview_store, & iter, 99 COLUMN_PATH, g_ path_ get_ dirname ( currentdir), 100 COLUMN_DISPLAY_NAME, "..", 101 COLUMN_IS_DIRECTORY, TRUE, 102 COLUMN_PIXBUF, folder_pixbuf, -1); 103 } 104 } static gint 107 sort_ func ( GtkTreeModel * model, 108 GtkTreeIter * a, 109 GtkTreeIter * b, 110 gpointer data) 111 { 112 gboolean is_dir_a, is_ dir_ b; 113 gchar * name_a, * name_ b; 114 int result; gtk_ tree_ model_ get ( model, a, 117 COLUMN_IS_DIRECTORY, & is_dir_a, 118 COLUMN_DISPLAY_NAME, & name_a, 119-1); 120 gtk_ tree_ model_ get ( model, b, 121 COLUMN_IS_DIRECTORY, & is_dir_b, 122 COLUMN_DISPLAY_NAME, & name_b, 123-1); 124 if (!is_dir_a && is_dir_b) 125 { 126 result = 1; 127 } 128 else if (is_dir_a &&!is_dir_b) 129 { 130 result = -1; 131 } 132 else 133 { 134 result = g_ utf8_ collate ( name_a, name_ b); 135 } 136 return result; 137 } static GtkWidget* 140 create_ icon_ view_ widget ( void) 141 { 142 GtkWidget * iconview; 143 GtkListStore * store; currentdir = g_ get_ current_ dir (); 146 store = gtk_ list_ store_ new ( N_ICONVIEW_COLUMNS, 147 G_TYPE_STRING, 第 7 章 ウィジェットリファレン

229 G_TYPE_STRING, 149 GDK_TYPE_PIXBUF, 150 G_ TYPE_ BOOLEAN); 151 gtk_ tree_ sortable_ set_ default_ sort_ func ( GTK_ TREE_ SORTABLE ( store), 152 sort_func, NULL, NULL); 153 gtk_ tree_ sortable_ set_ sort_ column_ id 154 ( GTK_ TREE_ SORTABLE ( store), 155 GTK_ TREE_ SORTABLE_ DEFAULT_ SORT_ COLUMN_ ID, GTK_ SORT_ ASCENDING); iconview = gtk_ icon_ view_ new_ with_ model ( GTK_ TREE_ MODEL ( store)); 158 g_ object_ unref ( store); return iconview; 161 } static void 164 cb_ item_ activated ( GtkIconView * iconview, 165 GtkTreePath * treepath, 166 gpointer data) 167 { 168 GtkListStore * store; 169 GtkTreeIter iter; 170 gchar * path; 171 gboolean is_ dir; 172 GtkEntryCompletion * completion; store = GTK_ LIST_ STORE ( gtk_ icon_ view_ get_ model ( iconview)); 175 gtk_ tree_ model_ get_ iter ( GTK_ TREE_ MODEL ( store), & iter, treepath); 176 gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 177 COLUMN_PATH, & path, 178 COLUMN_IS_DIRECTORY, & is_dir, 179-1); 180 if ( is_ dir) 181 { 182 g_ free ( currentdir); 183 currentdir = g_ strdup ( path); 184 add_ data ( iconview, GTK_ ENTRY_ COMPLETION ( data)); 185 } 186 g_ free ( path); 187 } int 190 main ( int argc, char ** argv) 191 { 192 GtkWidget * window; 193 GtkWidget * vbox; 194 GtkWidget * entry; 195 GtkWidget * scrolled_ window; 196 GtkWidget * iconview; 197 GtkEntryCompletion * completion; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 202 gtk_ window_ set_ title ( GTK_ WINDOW ( window), 203 " GtkEntryCompletion Sample2"); 204 gtk_ widget_ set_ size_ request ( window, 500, 300); 205 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 206 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 207 G_ CALLBACK ( gtk_ main_ quit), NULL); vbox = gtk_ vbox_ new ( FALSE, 0); 210 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); entry = gtk_ entry_ new (); 213 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), entry, FALSE, FALSE, 0); completion = create_ completion_ widget (); 216 gtk_ entry_ set_ completion ( GTK_ ENTRY ( entry), completion); 217 g_ object_ unref ( completion); scrolled_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 220 gtk_ scrolled_ window_ set_ shadow_ type ( GTK_ SCROLLED_ WINDOW 221 ( scrolled_ window), 222 GTK_ SHADOW_ ETCHED_ IN); 223 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW ( scrolled_ window), 第 7 章 ウィジェットリファレン

230 GTK_POLICY_AUTOMATIC, 225 GTK_ POLICY_ AUTOMATIC); 226 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), scrolled_window, TRUE, TRUE, 0); load_ pixbuf (); iconview = create_ icon_ view_ widget (); 231 gtk_ icon_ view_ set_ text_ column ( GTK_ ICON_ VIEW ( iconview), 232 COLUMN_ DISPLAY_ NAME); 233 gtk_ icon_ view_ set_ pixbuf_ column ( GTK_ ICON_ VIEW ( iconview), 234 COLUMN_ PIXBUF); 235 gtk_ icon_ view_ set_ item_ width ( GTK_ ICON_ VIEW ( iconview), 80); 236 g_ signal_ connect ( G_ OBJECT ( iconview), " item_ activated", 237 G_ CALLBACK ( cb_ item_ activated), completion); gtk_ container_ add ( GTK_ CONTAINER ( scrolled_ window), iconview); add_ data ( GTK_ ICON_ VIEW ( iconview), completion); gtk_ widget_ show_ all ( window); 244 gtk_main (); return 0; 247 } 第 7 章 ウィジェットリファレン

231 GtkIconButton 4 PNG JPEG GtkImage GdkPixbuf gtk icon button new gtk icon button new from image gtk icon button new from pixbuf gtk icon button new from inline gtk icon button new with label gtk icon button new from image label gtk icon button new from pixbuf label gtk icon button new from inline label gtk icon button new with mnemonic 8.1 第 8 章 拡張ウィジェットの作成

232 220 8 gtk icon button new from image mnemonic gtk icon button new from pixbuf mnemonic gtk icon button new from inline mnemonic gtk icon button get label gtk icon button get icon gtk icon button get text position gtk icon button set label gtk icon button set icon gtk icon button set text position 8.2 gtkbutton.h gtkiconbutton.h gtkbutton.h GTK BUTTON GTK BUTTON GtkIconButton GTK ICON BUTTON C C GtkButton : gtkbutton.h 1 #ifndef GTK_BUTTON_H 2 #define GTK_BUTTON_H 3 4 # include <gtk/ gtkbin. h> 5 # include <gtk/ gtkimage. h> 6 7 G_ BEGIN_ DECLS 8 9 # define GTK_ TYPE_ BUTTON ( gtk_ button_ get_ type ()) 10 # define GTK_ BUTTON( obj) ( G_ TYPE_ CHECK_ INSTANCE_ CAST (( obj), \ 11 GTK_TYPE_BUTTON, GtkButton)) 12 # define GTK_ BUTTON_ CLASS( klass) ( G_ TYPE_ CHECK_ CLASS_ CAST (( klass), \ 13 GTK_TYPE_BUTTON, GtkButtonClass)) 14 # define GTK_ IS_ BUTTON( obj) ( G_ TYPE_ CHECK_ INSTANCE_ TYPE (( obj), \ 15 GTK_ TYPE_ BUTTON)) 16 # define GTK_ IS_ BUTTON_ CLASS( klass) ( G_ TYPE_ CHECK_ CLASS_ TYPE (( klass), \ 17 GTK_ TYPE_ BUTTON)) 18 # define GTK_ BUTTON_ GET_ CLASS( obj) ( G_ TYPE_ INSTANCE_ GET_ CLASS (( obj), \ 19 GTK_TYPE_BUTTON, GtkButtonClass)) G_ END_ DECLS #endif /* GTK_BUTTON_H */ 9 19 GtkIconButton GtkIconButton typedef GtkIconButtonSource 第 8 章 拡張ウィジェットの作成

233 typedef enum { GTK_ ICON_BUTTON_ SOURCE_FILE, GTK_ ICON_BUTTON_ SOURCE_INLINE, GTK_ICON_BUTTON_ SOURCE_IMAGE, GTK_ ICON_ BUTTON_ SOURCE_ PIXBUF } GtkIconButtonSource; GtkPositionType enum { GTK_POS_LEFT, GTK_POS_RIGHT, GTK_POS_TOP, GTK_ POS_ BOTTOM } GtkPositionType; gtkiconbutton.h GtkIconButton : gtkiconbutton.h 1 #ifndef GTK_ICON_BUTTON_H 2 #define GTK_ICON_BUTTON_H 3 4 # include <gtk/ gtk. h> 5 6 G_ BEGIN_ DECLS 7 8 # define GTK_ TYPE_ ICON_ BUTTON ( gtk_ icon_ button_ get_ type ()) 9 # define GTK_ ICON_ BUTTON( obj) ( G_ TYPE_ CHECK_ INSTANCE_ CAST(( obj),\ 10 GTK_TYPE_ICON_BUTTON,\ 11 GtkIconButton)) 12 # define GTK_ ICON_ BUTTON_ CLASS( klass) ( G_ TYPE_ CHECK_ CLASS_ CAST(( klass),\ 13 GTK_TYPE_ICON_BUTTON,\ 14 GtkIconButtonClass)) 15 # define GTK_ IS_ ICON_ BUTTON( obj) ( G_ TYPE_ CHECK_ INSTANCE_ TYPE(( obj),\ 16 GTK_ TYPE_ ICON_ BUTTON)) 17 # define GTK_ IS_ ICON_ BUTTON_ CLASS( klass) ( G_ TYPE_ CHECK_ CLASS_ TYPE\ 18 ((klass), \ 19 GTK_ TYPE_ ICON_ BUTTON)) 20 # define GTK_ ICON_ BUTTON_ GET_ CLASS( obj) ( G_ TYPE_ INSTANCE_ GET_ CLASS(( obj),\ 21 GTK_TYPE_ICON_BUTTON,\ 22 GtkIconButtonClass)) typedef enum 25 { 26 GTK_ ICON_BUTTON_ SOURCE_FILE, 27 GTK_ ICON_BUTTON_ SOURCE_INLINE, 28 GTK_ICON_BUTTON_ SOURCE_IMAGE, 29 GTK_ ICON_ BUTTON_ SOURCE_ PIXBUF 30 } GtkIconButtonSource; G_ END_ DECLS #endif /* GTK_ICON_BUTTON_H */ 8.3 GtkButton GtkButton text position icon source pixbuf 第 8 章 拡張ウィジェットの作成

234 GtkIconButton : gtkiconbutton.h 1 typedef struct _ GtkIconButton GtkIconButton; 2 typedef struct _ GtkIconButtonClass GtkIconButtonClass; 3 4 struct _ GtkIconButton 5 { 6 GtkButton button; 7 }; 8 9 struct _ GtkIconButtonClass 10 { 11 GtkButtonClass parent_ class; 12 }; GtkButton G_DEFINE_TYPE (GtkIconButton, gtk_icon_button, GTK_TYPE_BUTTON) gtk icon button class init gtk icon button init static void 2 gtk_ icon_ button_ class_ init ( GtkIconButtonClass * klass) 3 { 4 GObjectClass * gobject_ class; 5 6 gobject_ class = G_ OBJECT_ CLASS ( klass); 7 8 g_ type_ class_ add_ private ( gobject_class, 9 sizeof ( GtkIconButtonPrivate)); 10 } static void 13 gtk_ icon_ button_ init ( GtkIconButton * button) 14 { 15 GtkIconButtonPrivate * priv = GTK_ ICON_ BUTTON_ GET_ PRIVATE ( button); priv - >pixbuf = NULL; 18 priv - >text_ pos = GTK_ POS_ RIGHT; 19 priv - >icon_ source = GTK_ ICON_ BUTTON_ SOURCE_ FILE; 20 } set icon gtk icon button construct child 第 8 章 拡張ウィジェットの作成

235 static GtkWidget* 2 _ gtk_ icon_ button_ new ( const gchar * label_text, 3 guint use_underline, 4 GtkPositionType text_pos, 5 guint icon_source, 6 gpointer user_ data) 7 { 8 GtkIconButtonPrivate * priv; 9 GtkIconButton * ibutton; 10 GtkWidget * widget; 11 GtkButton * button; widget = g_ object_ new ( GTK_TYPE_ICON_BUTTON, NULL); 14 ibutton = GTK_ ICON_ BUTTON ( widget); 15 button = GTK_ BUTTON( ibutton); 16 priv = GTK_ ICON_ BUTTON_ GET_ PRIVATE ( ibutton); if ( label_ text) 19 { 20 button - >label_ text = g_ strdup ( label_ text); 21 } 22 else 23 { 24 button - >label_ text = NULL; 25 } 26 button - >use_ underline = use_ underline; 27 priv - >text_ pos = text_ pos; 28 priv - >icon_ source = icon_ source; 29 _ set_ icon ( ibutton, user_ data); gtk_ icon_ button_ construct_ child ( ibutton); return widget; 34 } set icon GdkPixbuf static void 2 _ set_ icon ( GtkIconButton * ibutton, gpointer user_ data) 3 { 4 GtkIconButtonPrivate * priv; 5 6 priv = GTK_ ICON_ BUTTON_ GET_ PRIVATE ( ibutton); 7 8 if ( priv - >pixbuf) g_ object_ unref ( priv - >pixbuf); 9 10 switch ( priv - >icon_ source) 11 { 12 case GTK_ ICON_ BUTTON_ SOURCE_ FILE: 13 priv - >pixbuf 14 = gdk_ pixbuf_ new_ from_ file (( gchar *) user_data, NULL); 15 break; 16 case GTK_ ICON_ BUTTON_ SOURCE_ INLINE: 17 priv - >pixbuf 18 = gdk_ pixbuf_ new_ from_ inline ( -1, ( guint8 *) user_data, 19 TRUE, NULL); 20 break; 21 case GTK_ ICON_ BUTTON_ SOURCE_ IMAGE: 22 priv - >pixbuf = gtk_ image_ get_ pixbuf ( GTK_ IMAGE ( user_ data)); 23 break; 24 case GTK_ ICON_ BUTTON_ SOURCE_ PIXBUF: 25 priv - >pixbuf = g_ object_ ref ( user_ data); 26 break; 27 } 28 } 第 8 章 拡張ウィジェットの作成

236 224 8 gtk icon button construct child 8 7 GtkButton gtkbutton.c gtk button construct child GtkButton GtkButton GtkIconButton text position text position 8-7 gtk icon button construct child 1 static void 2 gtk_ icon_ button_ construct_ child ( GtkIconButton * ibutton) 3 { 4 GtkButton * button; 5 GtkIconButtonPrivate * priv; 6 GtkWidget * child; 7 GtkWidget * label = NULL; 8 GtkWidget * box; 9 GtkWidget * align; 10 const gchar * label_ text; button = GTK_ BUTTON ( ibutton); 13 priv = GTK_ ICON_ BUTTON_ GET_ PRIVATE ( ibutton); 14 child = gtk_ bin_ get_ child ( GTK_ BIN ( button)); if ( child) 17 { 18 gtk_ container_ remove ( GTK_ CONTAINER ( button), child); 19 } 20 if ( priv - >text_ pos == GTK_ POS_ TOP 21 priv - >text_ pos == GTK_ POS_ BOTTOM) 22 { 23 box = gtk_ vbox_ new ( FALSE, 2); 24 } 25 else 26 { 27 box = gtk_ hbox_ new ( FALSE, 2); 28 } 29 label_ text = gtk_ button_ get_ label ( button); 30 if ( label_ text) 31 { 32 if ( gtk_ button_ get_ use_ underline ( button)) 33 { 34 label = gtk_ label_ new_ with_ mnemonic ( label_ text); 35 gtk_ label_ set_ mnemonic_ widget ( GTK_ LABEL ( label), 36 GTK_ WIDGET ( button)); 37 } 38 else 39 { 40 label = gtk_ label_ new ( label_ text); 41 } 42 } 43 if ( priv - >pixbuf) 44 { 45 priv - >image = gtk_ image_ new_ from_ pixbuf ( priv - >pixbuf); 46 g_object_set (priv - >image, 47 "visible", show_image (button), "no_show_all", TRUE, 48 NULL); 49 } 50 if ( label_ text && priv - >align_ set) 51 { 52 align = gtk_ alignment_ new ( priv - >xalign, priv - >yalign, 0.0, 0. 0); 53 gtk_ misc_ set_ alignment ( GTK_ MISC ( label), 54 priv - >xalign, priv - >yalign); 55 } 第 8 章 拡張ウィジェットの作成

237 else 57 { 58 align = gtk_ alignment_ new (0.5, 0.5, 0.0, 0. 0); 59 } 60 if ( priv - >text_ pos == GTK_ POS_ TOP 61 priv - >text_ pos == GTK_ POS_ LEFT) 62 { 63 if ( label) 64 { 65 gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); 66 } 67 if ( priv - >image) 68 { 69 gtk_box_pack_end (GTK_BOX (box), priv - >image, FALSE, FALSE, 0); 70 } 71 } 72 else 73 { 74 if ( priv - >image) 75 { 76 gtk_box_pack_start (GTK_BOX (box), 77 priv - >image, FALSE, FALSE, 0); 78 } 79 if ( label) 80 { 81 gtk_box_pack_end (GTK_BOX (box), label, FALSE, FALSE, 0); 82 } 83 } 84 gtk_ container_ add ( GTK_ CONTAINER ( button), align); 85 gtk_ container_ add ( GTK_ CONTAINER ( align), box); 86 gtk_ widget_ show_ all ( align); return; 89 } G_ CONST_ RETURN gchar* 2 gtk_ icon_ button_ get_ label ( GtkIconButton * ibutton) 3 { 4 g_ return_ val_ if_ fail ( GTK_ IS_ ICON_ BUTTON ( ibutton), NULL); 5 6 return gtk_ button_ get_ label ( GTK_ BUTTON ( ibutton)); 7 } 8 9 GdkPixbuf* 10 gtk_ icon_ button_ get_ icon ( GtkIconButton * ibutton) 11 { 12 GtkIconButtonPrivate * priv; g_ return_ val_ if_ fail ( GTK_ IS_ ICON_ BUTTON ( ibutton), NULL); priv = GTK_ ICON_ BUTTON_ GET_ PRIVATE ( ibutton); return g_ object_ ref ( priv - >pixbuf); 19 } GtkPositionType 22 gtk_ icon_ button_ get_ text_ position ( GtkIconButton * ibutton) 23 { 24 GtkIconButtonPrivate * priv; g_return_val_if_fail (GTK_IS_ICON_BUTTON (ibutton), 0); priv = GTK_ ICON_ BUTTON_ GET_ PRIVATE ( ibutton); 第 8 章 拡張ウィジェットの作成

238 return priv - >text_ pos; 31 } 8.7 gtk icon button construct child void 2 gtk_ icon_ button_ set_ label ( GtkIconButton * ibutton, 3 const gchar * label) 4 { 5 g_return_if_fail (GTK_IS_ICON_BUTTON (ibutton)); 6 7 gtk_ button_ set_ label ( GTK_ BUTTON ( ibutton), label); 8 9 gtk_ icon_ button_ construct_ child ( ibutton); 10 g_object_notify (G_OBJECT (ibutton), "label"); 11 } void 14 gtk_ icon_ button_ set_ icon ( GtkIconButton * ibutton, 15 GdkPixbuf * pixbuf) 16 { 17 GtkIconButtonPrivate * priv; g_return_if_fail (GTK_IS_ICON_BUTTON (ibutton)); priv = GTK_ ICON_ BUTTON_ GET_ PRIVATE ( ibutton); 22 if ( priv - >pixbuf) g_ object_ unref ( priv - >pixbuf); 23 priv - >pixbuf = g_ object_ ref ( pixbuf); gtk_ icon_ button_ construct_ child ( ibutton); 26 } void 29 gtk_ icon_ button_ set_ text_ position ( GtkIconButton * ibutton, 30 GtkPositionType text_ pos) 31 { 32 GtkIconButtonPrivate * priv; g_return_if_fail (GTK_IS_ICON_BUTTON (ibutton)); priv = GTK_ ICON_ BUTTON_ GET_ PRIVATE ( ibutton); 37 priv - >text_ pos = text_ pos; gtk_ icon_ button_ construct_ child ( ibutton); 40 } 第 8 章 拡張ウィジェットの作成

239 GtkIconButton 1 # include <gtk/ gtk. h> 2 # include " gtkiconbutton. h" 3 4 static void 5 cb_ click ( GtkWidget * widget, gpointer user_ data) 6 { 7 static guint position = 0; 8 9 position++; 10 if ( position == 4) position = 0; 11 gtk_ icon_ button_ set_ text_ position ( GTK_ ICON_ BUTTON ( widget), 12 ( GtkPositionType) position); 13 } int 16 main ( int argc, char ** argv) 17 { 18 GtkWidget * window; 19 GtkWidget * ibutton; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 24 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkIconButton Test"); 25 gtk_ widget_ set_ size_ request ( window, 300, 100); 26 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 27 G_ CALLBACK ( gtk_ main_ quit), NULL); ibutton = gtk_ icon_ button_ new_ with_ label (" gnome - tigert. png", 30 "Push me!!", 31 GTK_POS_TOP); 32 g_ signal_ connect ( G_ OBJECT ( ibutton), " clicked", 33 G_ CALLBACK( cb_ click), NULL); 34 gtk_ container_ add ( GTK_ CONTAINER ( window), ibutton); gtk_ widget_ show_ all ( window); 37 gtk_main (); return 0; 40 } 第 8 章 拡張ウィジェットの作成

240

241 229 9 GTK+/GNOME Anjuta Anjuta GTK+/GNOME GUI Glade Glade GUI Anjuta Anjuta gnome - - Anjuta IDE Anjuta 9.1 Anjuta (N) (a) GTK+ (F) 9.2(b) ImageOperator 9.2(b) (F) 9.2(c) (F) (A) 9.3 第 9 章 統合開発環境によるソフトウェア開発

242 230 9 (a) (b) (c) (d) Anjuta (B) - (B) GUI src main.c Anjuta src main.c 9.4 main.c 61 #define GLADE_FILE "src/imageoperator.glade" 第 9 章 統合開発環境によるソフトウェア開発

243 9.2 GUI #define GLADE_FILE "imageoperator.glade" (B) - (B) (E) 9.5 (R) GUI Glade GUI GUI Glade Glade Anjuta Glade src imageoperator.glade Anjuta Glade 9.7 Glade GUI Anjuta GUI 第 9 章 統合開発環境によるソフトウェア開発

244 Glade GUI 9.8 Glade GUI OK(O) UI 第 9 章 統合開発環境によるソフトウェア開発

245 9.2 GUI 233 GtkWindow GtkVbox GtkMenubar GtkVbox GtkScrolledWindow GtkViewport GtkDrawingArea GtkAlignment window ImageOperator 2 vbox Glade UI p. 160 menu.c (N) 第 9 章 統合開発環境によるソフトウェア開発

246 (a) menu.c OK(O) 9.11(b) other files (A) 9.11 menu.c 9 1 UI : menu.c 1 # include <gtk/ gtk. h> 2 # include <glade/ glade. h> 3 # include " callbacks. h" 4 # include " image_ operator. h" 5 6 static const gchar* menu_ info = 7 " <ui >" 8 " <menubar name= Menubar >" 9 " <menu action= File >" 10 " <menuitem action= Open / >" 11 " <menuitem action= Save / >" 12 " <menuitem action= SaveAs / >" 13 " <separator/ >" 14 " <menuitem action= Quit / >" 15 " </menu >" 16 " <menu action= Edit >" 17 " <menuitem action= Undo / >" 18 " <menuitem action= Grayscale / >" 19 " </menu >" 20 " <menu action= Help >" 21 " <menuitem action= About / >" 22 " </menu >" 23 " </menubar >" 24 " </ui >"; static GtkActionEntry entries[] = { 27 {"File", NULL, "_File"}, 28 {"Open", GTK_STOCK_OPEN, "_Open", " <control >O", 29 " Open an Image", G_ CALLBACK( cb_ open)}, 30 {"Save", GTK_STOCK_SAVE, "_Save", " <control >S", 31 " Save the Image", G_ CALLBACK( cb_ save)}, 32 {"SaveAs", GTK_STOCK_SAVE_AS, "Save_as", " <control > <shift >S", 33 " Save the Image with other name", G_ CALLBACK( cb_ saveas)}, 34 {"Quit", GTK_STOCK_QUIT, "_Quit", " <control >Q", 35 " Quit this program", G_ CALLBACK( cb_ quit)}, 36 {"Edit", NULL, "_Edit"}, 37 {"Undo", GTK_STOCK_UNDO, "_Undo", " <control >Z", 38 " Undo the operation", G_ CALLBACK( cb_ undo)}, 39 {"Grayscale", NULL, "_Grayscale", NULL, 40 " Convert to grayscale", G_ CALLBACK( cb_ grayscale)}, 41 {"Help", NULL, "_Help"}, 42 {" About", GTK_STOCK_ABOUT, "_ About", NULL, 43 " About this program", G_ CALLBACK( cb_ about)} 44 }; 45 第 9 章 統合開発環境によるソフトウェア開発

247 9.2 GUI void 47 create_ menu ( GtkWidget* parent) 48 { 49 GtkUIManager * ui; 50 GtkActionGroup * actions; 51 GtkWidget * vbox; 52 GtkWidget * menubar; ui = gtk_ ui_ manager_ new (); 55 actions = gtk_ action_ group_ new (" menu"); 56 gtk_ action_ group_ add_ actions ( actions, entries, 57 sizeof( entries)/ sizeof( entries[ 0]), 58 parent); 59 gtk_ ui_ manager_ insert_ action_ group ( ui, actions, 0); 60 gtk_ ui_ manager_ add_ ui_ from_ string ( ui, menu_info, -1, NULL); 61 gtk_ window_ add_ accel_ group ( GTK_ WINDOW( parent), 62 gtk_ui_manager_get_accel_group (ui)); vbox = glade_ xml_ get_ widget ( gxml, " vbox2"); 65 menubar = gtk_ ui_ manager_ get_ widget ( ui, "/ Menubar"); 66 gtk_ box_ pack_ start ( GTK_ BOX( vbox), menubar, FALSE, FALSE, 0); 67 gtk_ widget_ show_ all ( menubar); 68 } 63 libglade glade xml get widget GUI GtkWidget* glade_ xml_ get_ widget ( GladeXML * self, const char * name); 1 2 GladeXML drawingarea menu.c image operator.h 9 2 GladeXML 9-2 image operator.h 1 # include <gtk/ gtk. h> 2 # include <glade/ glade. h> 3 4 GladeXML * gxml; main.c create window GladeXML main.c 2 callback.h : void create_menu (GtkWidget *parent); main gtk main : create_menu (window); callback.c callback.h callback.c : 第 9 章 統合開発環境によるソフトウェア開発

248 236 9 void cb_open (GtkAction* action, gpointer user_data) { } void cb_save (GtkAction* action, gpointer user_data) { } void cb_saveas (GtkAction* action, gpointer user_data) { } void cb_quit (GtkAction* action, gpointer user_data) { } void cb_undo (GtkAction* action, gpointer user_data) { } void cb_grayscale (GtkAction* action, gpointer user_data) { } void cb_about (GtkAction* action, gpointer user_data) { } callback.h : void cb_open (GtkAction* action, gpointer user_data); void cb_save (GtkAction* action, gpointer user_data); void cb_saveas (GtkAction* action, gpointer user_data); void cb_quit (GtkAction* action, gpointer user_data); void cb_undo (GtkAction* action, gpointer user_data); void cb_grayscale (GtkAction* action, gpointer user_data); void cb_about (GtkAction* action, gpointer user_data); Makefile.am imageoperator SOURCES menu.c image operator.h GUI GUI image operator.h 2 pixbuf backup #include <gtk/gtk.h> #include <glade/glade.h> GladeXML *gxml; GdkPixbuf *pixbuf; GdkPixbuf *backup; 第 9 章 統合開発環境によるソフトウェア開発

249 cb open cb save cb saveas cb quit cb undo cb grayscale cb about cb expose cb expose expose-event Anjuta drawingarea1 drawingarea1 expose-event cb expose callbacks.c Gtk- DrawingArea cb canvas expose 1 gboolean 2 cb_ canvas_ expose ( GtkWidget * widget, 3 GdkEventExpose * event, 4 gpointer user_ data) 5 { 6 GdkPixmap* pixmap; 7 8 if ( pixbuf) 9 { 10 gtk_ widget_ set_ size_ request ( widget, 11 gdk_ pixbuf_ get_ width ( pixbuf), 12 gdk_ pixbuf_ get_ height ( pixbuf)); 13 gdk_ pixbuf_ render_ pixmap_ and_ mask ( pixbuf, & pixmap, NULL, 255); 14 gdk_ window_ set_ back_ pixmap ( widget - >window, pixmap, FALSE); 15 gdk_ window_ clear( widget - >window); 16 g_ object_ unref ( pixmap); 17 } 第 9 章 統合開発環境によるソフトウェア開発

250 return FALSE; 19 } GtkFileChooser cb open cb open cb open 9 4 opened filename image operator.h 9-4 : callbacks.c 1 void 2 cb_ open ( GtkAction* action, gpointer user_ data) 3 { 4 GtkWidget * window; 5 GtkWidget * dialog; 6 GtkWidget * drawingarea; 7 gint response; 8 gchar * filename; 9 10 window = GTK_ WIDGET ( user_ data); 11 dialog = gtk_ file_ chooser_ dialog_ new (" Open an image", 12 GTK_ WINDOW ( window), 13 GTK_FILE_CHOOSER_ACTION_ OPEN, 14 GTK_STOCK_CANCEL, 15 GTK_RESPONSE_CANCEL, 16 GTK_STOCK_OPEN, 17 GTK_RESPONSE_ACCEPT, 18 NULL); 19 gtk_ widget_ show_ all ( dialog); response = gtk_ dialog_ run ( GTK_ DIALOG( dialog)); 22 if ( response == GTK_ RESPONSE_ ACCEPT) 23 { 24 filename 25 = gtk_ file_ chooser_ get_ filename ( GTK_ FILE_ CHOOSER( dialog)); 26 if ( pixbuf) 27 { 28 g_ object_ unref ( pixbuf); 29 } 30 pixbuf = gdk_ pixbuf_ new_ from_ file ( filename, NULL); 31 drawingarea = glade_ xml_ get_ widget ( gxml, " drawingarea1"); 32 gtk_ widget_ queue_ draw ( drawingarea); 33 if ( opened_ filename) 34 { 35 g_ free ( opened_ filename); 36 opened_ filename = g_ strdup ( filename); 37 } 38 g_ free ( filename); 39 } 40 gtk_ widget_ destroy ( dialog); 41 } cb open save cb save save 第 9 章 統合開発環境によるソフトウェア開発

251 save gdk pixbuf save JPEG PNG 9-5 : callbacks.c 1 static void 2 _ save ( gchar * filename) 3 { 4 gchar * ext; 5 6 ext = g_strrstr (filename, "."); 7 if (ext) 8 { 9 ext++; 10 if (g_strcmp0 (ext, "png") == 0) 11 { 12 gdk_ pixbuf_ save ( pixbuf, filename, " png", NULL, NULL); 13 } 14 else if ( g_ strcmp0 ( ext, " jpg") == 0) 15 { 16 gdk_ pixbuf_ save ( pixbuf, filename, " jpeg", NULL, NULL); 17 } 18 else 19 { 20 g_ printerr (" Image format %s is not suported\ n", ext); 21 } 22 g_ free ( opened_ filename); 23 opened_ filename = g_ strdup ( filename); 24 } 25 } void 28 cb_ save ( GtkAction* action, gpointer user_ data) 29 { 30 _ save ( opened_ filename); 31 } void 34 cb_ saveas ( GtkAction* action, gpointer user_ data) 35 { 36 GtkWidget * window; 37 GtkWidget * dialog; 38 gint response; 39 gchar * filename; if (! pixbuf) return; window = GTK_ WIDGET ( user_ data); 44 dialog = gtk_ file_ chooser_ dialog_ new (" Save the image", 45 GTK_ WINDOW ( window), 46 GTK_ FILE_CHOOSER_ACTION_SAVE, 47 GTK_STOCK_CANCEL, 48 GTK_RESPONSE_CANCEL, 49 GTK_STOCK_SAVE, 50 GTK_RESPONSE_ACCEPT, 51 NULL); 52 gtk_ widget_ show_ all ( dialog); response = gtk_ dialog_ run ( GTK_ DIALOG( dialog)); 55 if ( response == GTK_ RESPONSE_ ACCEPT) 56 { 57 filename 58 = gtk_ file_ chooser_ get_ filename ( GTK_ FILE_ CHOOSER( dialog)); 59 _save (filename); 60 g_ free ( filename) 61 } 62 gtk_ widget_ destroy ( dialog); 63 } 第 9 章 統合開発環境によるソフトウェア開発

252 GdkPixbuf p : image operator.h 1 #define gdk_pixbuf_get_pixel(pixbuf,x,y,p) \ 2 (*(gdk_pixbuf_get_pixels((pixbuf)) + \ 3 gdk_ pixbuf_ get_ rowstride(( pixbuf)) * ( y) + \ 4 gdk_pixbuf_get_n_channels((pixbuf)) * (x) + (p))) 5 6 #define gdk_pixbuf_put_pixel(pixbuf,x,y,p,val) \ 7 (*(gdk_pixbuf_get_pixels((pixbuf)) + \ 8 gdk_ pixbuf_ get_ rowstride(( pixbuf)) * ( y) + \ 9 gdk_pixbuf_get_n_channels((pixbuf)) * (x) + (p)) = (val)) cb undo do backup 9 7 backup main NULL backup gdk pixbuf copy area gdk pixbuf copy cb undo gdk pixbuf copy area backup pixbuf pixbuf backup backup 9-7 : callbacks.c 1 static void 2 do_ backup ( void) 3 { 4 if ( backup) 5 { 6 gdk_pixbuf_copy_area (pixbuf, 0, 0, 7 gdk_ pixbuf_ get_ width ( pixbuf), 8 gdk_ pixbuf_ get_ height( pixbuf), 9 backup, 0, 0); 10 } 11 else 12 { 13 backup = gdk_ pixbuf_ copy ( pixbuf); 14 } 15 } void 18 cb_ undo ( GtkAction * action, 19 gpointer user_ data) 20 { 21 GtkWidget * drawingarea; 22 GdkPixbuf *_ backup; if ( backup) 25 { 26 _ backup = gdk_ pixbuf_ copy ( pixbuf); 27 gdk_pixbuf_copy_area (backup, 0, 0, 28 gdk_ pixbuf_ get_ width( backup), 29 gdk_ pixbuf_ get_ height( backup), 30 pixbuf, 0, 0); 31 gdk_pixbuf_copy_area (_backup, 0, 0, 32 gdk_ pixbuf_ get_ width(_ backup), 33 gdk_ pixbuf_ get_ height(_ backup), 34 backup, 0, 0); 35 g_ object_ unref (_ backup); 36 drawingarea = glade_ xml_ get_ widget ( gxml, " drawingarea1"); 37 gtk_ widget_ queue_ draw ( drawingarea); 38 } 39 } 第 9 章 統合開発環境によるソフトウェア開発

253 do backup gtk widget queue draw expose-event 9-8 cb grayscale : callbacks.c 1 void 2 cb_ grayscale ( GtkAction * action, 3 gpointer user_ data) 4 { 5 GtkWidget * drawingarea; 6 int x, y; 7 guchar val, r, g, b; 8 9 if ( pixbuf) 10 { 11 do_backup (); 12 for ( y = 0; y < gdk_ pixbuf_ get_ height( pixbuf); y++) 13 { 14 for ( x = 0; x < gdk_ pixbuf_ get_ width( pixbuf); x++) 15 { 16 r = gdk_ pixbuf_ get_ pixel( pixbuf, x, y, 0); 17 g = gdk_ pixbuf_ get_ pixel( pixbuf, x, y, 1); 18 b = gdk_ pixbuf_ get_ pixel( pixbuf, x, y, 2); 19 val = ( guchar) ( * r * g * b); 20 gdk_ pixbuf_ put_ pixel( pixbuf, x, y, 0, val); 21 gdk_ pixbuf_ put_ pixel( pixbuf, x, y, 1, val); 22 gdk_ pixbuf_ put_ pixel( pixbuf, x, y, 2, val); 23 } 24 } 25 drawingarea = glade_ xml_ get_ widget ( gxml, " drawingarea1"); 26 gtk_ widget_ queue_ draw ( canvas); 27 } 28 } p. 169 cb about cb about 1 void 2 cb_ about ( GtkAction* action, gpointer user_ data) 3 { 4 GtkWidget * dialog; 5 gint response; 6 gchar *copyright = "Copyright(C)..."; 7 gchar * message = " is a simple image proccessing application."; 第 9 章 統合開発環境によるソフトウェア開発

254 dialog = gtk_ message_ dialog_ new ( GTK_ WINDOW ( user_ data), 10 GTK_ DIALOG_ MODAL 11 GTK_ DIALOG_ DESTROY_ WITH_ PARENT, 12 GTK_MESSAGE_INFO, 13 GTK_BUTTONS_CLOSE, 14 "%s %s\n%s\n%s %s\n", 15 PACKAGE, VERSION, 16 copyright, PACKAGE, message); 17 gtk_ widget_ show_ all ( dialog); 18 response = gtk_ dialog_ run ( GTK_ DIALOG ( dialog)); 19 gtk_ widget_ destroy ( dialog); 20 } cb quit cb quit 1 void 2 cb_ quit ( GtkAction * action, 3 gpointer user_ data) 4 { 5 if ( pixbuf) g_ object_ unref ( pixbuf); 6 if ( backup) g_ object_ unref ( backup); 7 if ( opened_ filename) g_ free ( opened_ filename); 8 gtk_main_quit (); 9 } 9.4 (B) - (B) (R) 第 9 章 統合開発環境によるソフトウェア開発

255 main.c main.c GUI imageoperator.glade PACKAGE DATA DATA/imageoperator #define GLADE_FILE PACKAGE_DATA_DIR"/imageoperator/imageoperator.glade" (B) - Tarball (T) Tarball tar 1 gzip Tarball imageoperator-0.1.tar.gz tmp make install prefix /tmp/imageoperator/usr $ cd $ mkdir tmp $ cd tmp $ tar xvfz ~/imageoperator/imageoperator-0.1.tar.gz... $ cd imageoperator-0.1 $./configure --prefix=/tmp/imageoperator/usr... $ make... $ make install $ cd /tmp/imageoperator $ ls -R.: usr/./usr: bin/ doc/ share/ 第 9 章 統合開発環境によるソフトウェア開発

256 244 9./usr/bin: imageoperator./usr/doc: imageoperator./usr/doc/imageoperator: AUTHORS COPYING ChangeLog INSTALL NEWS README./usr/share: imageoperator./usr/share/imageoperator/glade: imageoperator.glade 9.6 gettext () callbacks.c menu.c imageoperator.glade imageoperator.glade ImageOperator () N () () main.c main.c image operator.h menu.c image operator.h /* * Standard gettext macros. */ #ifdef ENABLE_NLS # include <libintl.h> # undef _ # define _(String) dgettext (PACKAGE, String) # ifdef gettext_noop # define N_(String) gettext_noop (String) # else # define N_(String) (String) # endif #else # define textdomain(string) (String) # define gettext(string) (String) # define dgettext(domain,message) (Message) # define dcgettext(domain,message,type) (Message) # define bindtextdomain(domain,directory) (Domain) # define _(String) (String) # define N_(String) (String) 第 9 章 統合開発環境によるソフトウェア開発

257 #endif menu.c create menu gtk action group set translation domain actions = gtk_action_group_new ("menu"); gtk_action_group_set_translation_domain (actions, GETTEXT_PACKAGE); imageoperator po LINGUAS ja # please keep this list sorted alphabetically # ja POTFILE.in # List of source files containing translatable strings. src/main.c src/callbacks.c src/menu.c src/imageoperator.glade $ cd imageoperator/po $ intltool-update -p imageoperator.pot ja.po ja.po "Project-Id-Version: imageoperator 0.1\n"... "Last-Translator: GTK <gtk@>\n" "Language-Team:GTK <gtk@>\n"... "Content-Type: text/plain; charset=utf-8\n" 第 9 章 統合開発環境によるソフトウェア開発

258 Emacs gedit gtranslator gtranslator - - Gtranslator PO Editor gtranslator 9.16 (a) (b) (c) (d) (e) 9.16 gtranslator ja.po ja.po 9.17 Original Text Translated Text 9.17 第 9 章 統合開発環境によるソフトウェア開発

259 p Anjuta URL Anjuta IDE Anjuta FAQ 第 9 章 統合開発環境によるソフトウェア開発

260

261 & void gtk_ widget_ set_ events ( GtkWidget * widget, gint events); 1 2 GtkEventMask typedef enum { GDK_ EXPOSURE_ MASK = 1 << 1, GDK_ POINTER_ MOTION_ MASK = 1 << 2, GDK_ POINTER_ MOTION_ HINT_ MASK = 1 << 3, GDK_ BUTTON_ MOTION_ MASK = 1 << 4, GDK_ BUTTON1_ MOTION_ MASK = 1 << 5, GDK_ BUTTON2_ MOTION_ MASK = 1 << 6, GDK_ BUTTON3_ MOTION_ MASK = 1 << 7, GDK_ BUTTON_ PRESS_ MASK = 1 << 8, GDK_ BUTTON_ RELEASE_ MASK = 1 << 9, GDK_ KEY_ PRESS_ MASK = 1 << 10, GDK_ KEY_ RELEASE_ MASK = 1 << 11, GDK_ ENTER_ NOTIFY_ MASK = 1 << 12, 第 10 章プログラミングの小箱

262 GDK_ LEAVE_ NOTIFY_ MASK = 1 << 13, GDK_ FOCUS_ CHANGE_ MASK = 1 << 14, GDK_ STRUCTURE_ MASK = 1 << 15, GDK_ PROPERTY_ CHANGE_ MASK = 1 << 16, GDK_ VISIBILITY_ NOTIFY_ MASK = 1 << 17, GDK_ PROXIMITY_ IN_ MASK = 1 << 18, GDK_ PROXIMITY_ OUT_ MASK = 1 << 19, GDK_ SUBSTRUCTURE_ MASK = 1 << 20, GDK_ SCROLL_ MASK = 1 << 21, GDK_ ALL_ EVENTS_ MASK = 0x3FFFFE } GdkEventMask; GDK BUTTON PRESS MASK button-press-event gboolean user_ function ( GtkWidget * widget, GdkEventButton * event, gpointer user_ data); FALSE TRUE GdkEventButton x y GdkEventButton x y typedef struct { GdkEventType type; GdkWindow * window; gint8 send_ event; guint32 time; gdouble x; gdouble y; gdouble * axes; guint state; guint button; GdkDevice * device; gdouble x_root, y_ root; } GdkEventButton; : mouse-tips1.c 1 # include <gtk/ gtk. h> 2 3 static gboolean 4 cb_ mouse_ press ( GtkWidget * widget, 5 GdkEventButton * event, 6 gpointer user_ data) 7 { 8 g_ print (" The mouse was clicked on the main window at (% 3d, % 3d).\ n", 9 (int) event - >x, (int) event - >y); 10 return FALSE; 第 10 章プログラミングの小箱

263 } int 14 main ( int argc, char * argv[]) 15 { 16 GtkWidget * window; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 21 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Mouse Tips1"); 22 gtk_ widget_ set_ size_ request ( window, 300, 200); 23 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 24 G_ CALLBACK ( gtk_ main_ quit), NULL); gtk_ widget_ add_ events ( window, GDK_ BUTTON_ PRESS_ MASK); 27 g_signal_connect (G_OBJECT (window), "button -press -event", 28 G_ CALLBACK ( cb_ mouse_ press), NULL); gtk_ widget_ show_ all ( window); 31 gtk_main (); return 0; 34 } GDK POINTER MOTION MASK motion-notify-event gboolean user_ function ( GtkWidget * widget, GdkEventMotion * event, gpointer user_ data); GDK BUTTON PRESS MASK : mouse-tips2.c 1 # include <gtk/ gtk. h> 2 3 static gboolean 4 cb_ mouse_ move ( GtkWidget * widget, 5 GdkEventMotion * event, 6 gpointer user_ data) 7 { 8 g_print ("(%3d, %3d)\r", (int) event - >x, (int) event - >y); 9 10 return FALSE; 11 } int 14 main ( int argc, char * argv[]) 15 { 16 GtkWidget * window; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 21 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Mouse Tips2"); 22 gtk_ widget_ set_ size_ request ( window, 300, 200); 23 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 24 G_ CALLBACK ( gtk_ main_ quit), NULL); 25 gtk_ widget_ set_ events ( window, 26 GDK_ BUTTON_ PRESS_ MASK 27 GDK_ POINTER_ MOTION_ MASK); 28 g_signal_connect (G_OBJECT (window), "motion -notify -event", 29 G_ CALLBACK ( cb_ mouse_ move), NULL); 第 10 章プログラミングの小箱

264 gtk_ widget_ show_ all ( window); 32 gtk_main (); return 0; 35 } GdkEventButton button GdkEventButton state button state GdkModifierType GdkEventButton button state : mouse-tips3.c 1 # include <gtk/ gtk. h> 2 3 static gboolean 4 cb_ mouse_ press ( GtkWidget * widget, 5 GdkEventButton * event, 6 gpointer user_ data) 7 { 8 g_print ("Button type=%d, State=%d\n", event - >button, event - >state); 9 return FALSE; 10 } int 13 main ( int argc, char * argv[]) 14 { 15 GtkWidget * window; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 20 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Mouse Tips3"); 21 gtk_ widget_ set_ size_ request ( window, 300, 200); 22 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 23 G_ CALLBACK ( gtk_ main_ quit), NULL); gtk_ widget_ add_ events ( window, GDK_ BUTTON_ PRESS_ MASK); 26 g_signal_connect (G_OBJECT (window), "button -press -event", 27 G_ CALLBACK ( cb_ mouse_ press), NULL); gtk_ widget_ show_ all ( window); 30 gtk_main (); return 0; 33 } GdkEventButton type GdkEventType GDK 2BUTTON PRESS = 第 10 章プログラミングの小箱

265 gdk cursor new for display GdkCursor* gdk_ cursor_ new_ for_ display ( GdkDisplay * display, GdkCursorType cursor_ type); 2 1 GdkDiplay gdk display get default GdkDisplay* gdk_ display_ get_ default ( void); 2 GdkCursorType typedef enum { GDK_X_CURSOR = 0, GDK_ ARROW = 2, GDK_ BASED_ ARROW_ DOWN = 4,... GDK_ XTERM = 152, GDK_LAST_CURSOR, GDK_ CURSOR_ IS_ PIXMAP = -1 } GdkCursorType; : mouse-tips5-1.c 1 # include <gtk/ gtk. h> 2 3 int 4 main ( int argc, char * argv[]) 5 { 6 GtkWidget * window; 7 GdkCursor * cursor; 8 9 gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 12 gtk_window_set_title (GTK_WINDOW (window), "Mouse Tips5-1"); 13 gtk_ widget_ set_ size_ request ( window, 300, 200); 14 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 15 G_ CALLBACK ( gtk_ main_ quit), NULL); 16 gtk_ widget_ show_ all ( window); cursor = gdk_ cursor_ new_ for_ display ( gdk_ display_ get_ default(), 19 GDK_ X_ CURSOR); 20 gdk_ window_ set_ cursor ( window - >window, cursor); gtk_main (); return 0; 25 } char gdk bitmap new from data GdkBitmap* gdk_ bitmap_ create_ from_ data ( GdkDrawable * drawable, const gchar * data, gint width, gint height); gdk cursor new from pixmap GdkCursor* gdk_ cursor_ new_ from_ pixmap ( GdkPixmap * source, GdkPixmap * mask, 第 10 章プログラミングの小箱

266 const GdkColor * fg, const GdkColor * bg, gint x, gint 5 6 (x, y) 3 4 GdkColor GDK BUTTON RELEASE MASK y); : mouse-tips5-2.c 1 # include <gtk/ gtk. h> 2 3 GdkCursor * hand_ open; 4 GdkCursor * hand_ close; 5 6 static char hand_ open_ data[] = 7 { 8 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 9 0x60, 0x36, 0x00, 0x60, 0x36, 0x00, 0xc0, 0x36, 0x01, 0xc0, 0xb6, 0x01, 10 0x80, 0xbf, 0x01, 0x98, 0xff, 0x01, 0xb8, 0xff, 0x00, 0xf0, 0xff, 0x00, 11 0xe0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0x80, 0x3f, 0x00, 12 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 13 }; static char hand_ open_ mask[] = 16 { 17 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x60, 0x3f, 0x00, 18 0xf0, 0x7f, 0x00, 0xf0, 0x7f, 0x01, 0xe0, 0xff, 0x03, 0xe0, 0xff, 0x03, 19 0xd8, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x01, 0xf8, 0xff, 0x01, 20 0xf0, 0xff, 0x01, 0xf0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xc0, 0x7f, 0x00, 21 0x80, 0x7f, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 22 }; static char hand_ close_ data[] = 25 { 26 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 27 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x80, 0x3f, 0x00, 28 0x80, 0xff, 0x00, 0x80, 0xff, 0x00, 0xb0, 0xff, 0x00, 0xf0, 0xff, 0x00, 29 0xe0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0x80, 0x3f, 0x00, 30 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 31 }; static char hand_ close_ mask[] = 34 { 35 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 36 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x80, 0x3f, 37 0x00, 0xc0, 0xff, 0x00, 0xc0, 0xff, 0x01, 0xf0, 0xff, 0x01, 38 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xf0, 0xff, 0x01, 0xf0, 39 0xff, 0x00, 0xe0, 0xff, 0x00, 0xc0, 0x7f, 0x00, 0x80, 0x7f, 40 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 41 }; static GdkCursor* 44 make_ cursor ( char * cursor_data, 45 char * cursor_mask, 46 int width, 47 int height) 48 { 49 GdkBitmap * data; 50 GdkBitmap * mask; 51 GdkColor black = {0, 0, 0, 0}; 52 GdkColor white = {0, 0xffff, 0xffff, 0xffff}; 53 GdkCursor * cursor; data = gdk_ bitmap_ create_ from_ data ( NULL, cursor_data, width, height); 56 mask = gdk_ bitmap_ create_ from_ data ( NULL, cursor_mask, width, height); 57 cursor = gdk_ cursor_ new_ from_ pixmap ( data, mask, & white, & black, 58 width / 2, height / 2); 59 g_ object_ unref ( data); 第 10 章プログラミングの小箱

267 g_ object_ unref ( mask); return cursor; 63 } static gboolean 66 cb_ mouse_ press ( GtkWidget * widget, 67 GdkEventButton * event, 68 gpointer user_ data) 69 { 70 gdk_ window_ set_ cursor ( widget - >window, hand_ close); return FALSE; 73 } static gboolean 76 cb_ mouse_ release ( GtkWidget * widget, 77 GdkEventButton * event, 78 gpointer user_ data) 79 { 80 gdk_ window_ set_ cursor ( widget - >window, hand_ open); return FALSE; 83 } int 86 main ( int argc, char * argv[]) 87 { 88 GtkWidget * window; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 93 gtk_window_set_title (GTK_WINDOW (window), "Mouse Tips5-2"); 94 gtk_ widget_ set_ size_ request ( window, 300, 200); 95 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 96 G_ CALLBACK ( gtk_ main_ quit), NULL); gtk_ widget_ add_ events ( window, 99 GDK_ BUTTON_ PRESS_ MASK 100 GDK_ BUTTON_ RELEASE_ MASK); 101 g_signal_connect (G_OBJECT (window), "button -press -event", 102 G_ CALLBACK ( cb_ mouse_ press), NULL); 103 g_signal_connect (G_OBJECT (window), "button -release -event", 104 G_ CALLBACK ( cb_ mouse_ release), NULL); hand_ open = make_ cursor ( hand_open_data, hand_open_mask, 20, 20); 107 hand_ close = make_ cursor ( hand_close_data, hand_close_mask, 20, 20); gtk_ widget_ show_ all ( window); 110 gdk_ window_ set_ cursor ( window - >window, hand_ open); 111 gtk_main (); return 0; 114 } GDK KEY PRESS MASK GDK KEY RELEASE MASK 第 10 章プログラミングの小箱

268 key-press-event gboolean user_ function ( GtkWidget * widget, GdkEventKey * event, gpointer user_ data); GdkEvenKey GdkEventKey typedef struct { GdkEventType type; GdkWindow * window; gint8 send_ event; guint32 time; guint state; guint keyval; gint length; gchar * string; guint16 hardware_ keycode; guint8 group; } GdkEventKey; keyval state string 10 2 GdkEventKey keyval state string 10-2 : key-tips1.c 1 # include <gtk/ gtk. h> 2 3 static gboolean 4 cb_ key_ press ( GtkWidget * widget, 5 GdkEventKey * event, 6 gpointer user_ data) 7 { 8 g_print ("keyval = %d, state = %d, string = %s\n", 9 event - >keyval, event - >state, event - >string); 10 return FALSE; 11 } int 14 main ( int argc, char * argv[]) 15 { 16 GtkWidget * window; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 21 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Key Tips1"); 22 gtk_ widget_ set_ size_ request ( window, 300, 200); 23 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 24 G_ CALLBACK ( gtk_ main_ quit), NULL); gtk_ widget_ add_ events ( window, GDK_ KEY_ PRESS_ MASK); 27 g_signal_connect (G_OBJECT (window), "key -press -event", 28 G_ CALLBACK ( cb_ key_ press), NULL); gtk_ widget_ show_ all ( window); 31 gtk_main (); 第 10 章プログラミングの小箱

269 return 0; 34 } 10.3 GUI gtk drag dest set void gtk_ drag_ dest_ set ( GtkWidget * widget, GtkDestDefaults flags, const GtkTargetEntry * targets, gint n_targets, GdkDragAction actions); 1 2 GtkDestDefault 10.1 GTK DEST DEFAULT ALL 10.1 GtkDestDefault GTK DEST DEFAULT MOTION GTK DEST DEFAULT HIGHLIGHT GTK DEST DEFAULT DROP GTK DEST DEFAULT ALL 3 GtkTargetEntry 4 typedef struct { gchar * target; guint guint flags; info; } GtkTargetEntry; target MIME flags GtkTargetFlags info 10.2 GTK TARGET SAME APP GTK TARGET SAME WIDGET GTK TARGET OTHER APP GTK TARGET OTHER WIDGET GtkTargetFlags GdkDragAction 10.3 drag-data-received gtk drag dest set 第 10 章プログラミングの小箱

270 GDK ACTION DEFAULT GDK ACTION COPY GDK ACTION MOVE GDK ACTION LINK GDK ACTION PRIVATE GDK ACTION ASK GdkDragAction drag-data-received drag-data-received void user_ function ( GtkWidget * widget, GdkDragContext * drag_context, gint x, gint y, GtkSelectionData * data, guint info, guint time, gpointer user_ data); 6 data 7 info 7 info GtkTargetEntry info GtkSelectionData typedef struct { GdkAtom GdkAtom GdkAtom gint guchar gint selection; target; type; format; * data; length; GdkDisplay * display; } GtkSelectionData; window gtk drag dest set target table Web drag-data-received gtk drag finish void gtk_ drag_ finish ( GdkDragContext * context, gboolean success, gboolean del, guint32 time_); 3 TRUE 第 10 章プログラミングの小箱

271 : dnd-sample1.c 1 # include <gtk/ gtk. h> 2 3 enum 4 { 5 DROP_URI_LIST, 6 DROP_X_MOZ_URL, 7 DROP_HTML, 8 DROP_TEXT_PLAIN, 9 DROP_ STRING 10 }; static GtkTargetEntry target_ table[] = 13 { 14 {"text/uri -list", 0, DROP_URI_LIST}, 15 {"text/x-moz -url", 0, DROP_X_MOZ_URL}, 16 {"text/html", 0, DROP_HTML}, 17 {"text/plain", 0, DROP_TEXT_PLAIN}, 18 {" STRING", 0, DROP_ STRING} 19 }; static guint ntargets = sizeof ( target_ table) / sizeof ( target_ table[ 0]); static void 24 cb_ drag_ data_ received ( GtkWidget * widget, 25 GdkDragContext * context, 26 gint x, 27 gint y, 28 GtkSelectionData * data, 29 guint info, 30 guint time, 31 gpointer user_ data) 32 { 33 gchar * received; 34 int n; g_print ("data - >target = %s\n", gdk_atom_name (data - >target)); 37 g_print ("data - >type = %s\n", gdk_atom_name (data - >type)); 38 g_print ("data - >length = %d\n", data - >length); 39 g_print ("data - >format = %d\n", data - >format); 40 g_ print (" info = % d\ n", info); if ( data - >length > 0 && data - >format == 8) 43 { 44 g_ print (" Received string = "); 45 received = g_ strchomp ( data - >data); 46 for ( n = 0; n < data - >length; n++) 47 { 48 if (received[n]!= \0 ) g_print ("%c", received[n]); 49 } 50 g_print ("\n"); 51 gtk_ drag_ finish ( context, TRUE, FALSE, time); 52 return; 53 } 54 gtk_ drag_ finish ( context, FALSE, FALSE, time); 55 } int 58 main ( int argc, char ** argv) 59 { 第 10 章プログラミングの小箱

272 GtkWidget * window; 61 GtkWidget * label; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 66 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Drag and Drop Sample1"); 67 gtk_ widget_ set_ size_ request ( window, 300, 100); 68 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 69 G_ CALLBACK ( gtk_ main_ quit), NULL); gtk_ drag_ dest_ set ( window, 72 GTK_DEST_DEFAULT_ALL, target_table, ntargets - 1, 73 GDK_ ACTION_ COPY GDK_ ACTION_ MOVE); 74 g_signal_connect (window, "drag -data -received", 75 G_ CALLBACK ( cb_ drag_ data_ received), NULL); label = gtk_ label_ new (" Drop here"); 78 gtk_ container_ add ( GTK_ CONTAINER ( window), label); gtk_ widget_ show_ all ( window); 81 gtk_main (); return 0; 84 } gtk drag source set void gtk_ drag_ source_ set ( GtkWidget * widget, GdkModifierType start_button_mask, const GtkTargetEntry * targets, gint n_targets, GdkDragAction actions); GtkIconView gtk icon view model drag source void gtk_ icon_ view_ enable_ model_ drag_ source ( GtkIconView * icon_view, GdkModifierType start_button_mask, const GtkTargetEntry * targets, gint n_targets, GdkDragAction actions); GdkModifierType 3 5 gtk drag dest set drag-data-get drag-data-get drag-data-get void user_ function ( GtkWidget * widget, GdkDragContext * drag_context, GtkSelectionData * data, guint info, guint time, gpointer user_ data); 3 data gtk selection data set void gtk_ selection_ data_ set ( GtkSelectionData * selection_data, GdkAtom type, 第 10 章プログラミングの小箱

273 gint format, const guchar * data, gint length); 1 drag-data-get 3 data 2 3 data target : dnd-sample2.c 1 # include <gtk/ gtk. h> 2 # include <string. h> 3 4 enum 5 { 6 DROP_URI_LIST, 7 DROP_X_MOZ_URL, 8 DROP_HTML, 9 DROP_TEXT_PLAIN, 10 DROP_ STRING 11 }; static GtkTargetEntry target_ table[] = 14 { 15 {"text/uri -list", 0, DROP_URI_LIST}, 16 {"text/x-moz -url", 0, DROP_X_MOZ_URL}, 17 {"text/html", 0, DROP_HTML}, 18 {"text/plain", 0, DROP_TEXT_PLAIN}, 19 {" STRING", 0, DROP_ STRING} 20 }; static guint ntargets = sizeof ( target_ table) / sizeof ( target_ table[ 0]); enum 25 { 26 COLUMN_NAME, 27 COLUMN_PIXBUF, 28 N_ COLUMNS 29 }; static void 32 add_ data ( GtkIconView * iconview) 33 { 34 GdkPixbuf * folder_ pixbuf; 35 GdkPixbuf * file_ pixbuf; 36 GtkListStore * store; 37 GtkTreeIter iter; folder_ pixbuf = gdk_ pixbuf_ new_ from_ file (" folder. png", NULL); 第 10 章プログラミングの小箱

274 file_ pixbuf = gdk_ pixbuf_ new_ from_ file (" file. png", NULL); store = GTK_ LIST_ STORE ( gtk_ icon_ view_ get_ model ( iconview)); gtk_ list_ store_ clear ( store); gtk_ list_ store_ append ( store, & iter); 47 gtk_list_store_set (store, &iter, 48 COLUMN_NAME, " folder. png", 49 COLUMN_PIXBUF, folder_pixbuf, -1); 50 g_ object_ unref ( folder_ pixbuf); gtk_ list_ store_ append ( store, & iter); 53 gtk_list_store_set (store, &iter, 54 COLUMN_NAME, " file. png", 55 COLUMN_PIXBUF, file_pixbuf, -1); 56 g_ object_ unref ( file_ pixbuf); 57 } static GtkWidget* 60 create_ icon_ view_ widget ( void) 61 { 62 GtkWidget * iconview; 63 GtkListStore * store; store = gtk_ list_ store_ new ( N_COLUMNS, G_TYPE_STRING, GDK_ TYPE_ PIXBUF); 66 iconview = gtk_ icon_ view_ new_ with_ model ( GTK_ TREE_ MODEL( store)); 67 g_ object_ unref ( store); return iconview; 70 } static void 73 source_ drag_ data_ get ( GtkWidget * widget, 74 GdkDragContext * context, 75 GtkSelectionData * data, 76 guint info, 77 guint time, 78 gpointer user_ data) 79 { 80 GList * root, * list, * string_ list = NULL; 81 GtkTreeModel * model; 82 GString * string; model 85 = GTK_TREE_MODEL (gtk_icon_view_get_model (GTK_ICON_VIEW (widget))); 86 root = gtk_ icon_ view_ get_ selected_ items ( GTK_ ICON_ VIEW ( widget)); for ( list = root; list; list = g_ list_ next ( list)) 89 { 90 GtkTreePath * path; 91 GtkTreeIter iter; 92 gchar * name; path = ( GtkTreePath *) list - >data; 95 gtk_tree_model_get_iter (model, &iter, path); 96 gtk_ tree_ model_ get ( model, & iter, COLUMN_NAME, & name, -1); 97 string_ list = g_ list_ append ( string_list, name); 98 } 99 string = g_ string_ new (( const gchar *) string_list - >data); 100 for ( list = g_ list_ next ( string_ list); list; list = g_ list_ next ( list)) 101 { 102 string = g_string_append (string, "\n"); 103 string = g_ string_ append ( string, ( const gchar *) list - >data); 104 } 105 gtk_ selection_ data_ set ( data, data - >target, 8, 106 string - >str, strlen (string - >str)); 107 g_ string_ free ( string, FALSE); 108 } static void 111 cb_ drag_ data_ received ( GtkWidget * widget, 112 GdkDragContext * context, 113 gint x, 114 gint y, 115 GtkSelectionData * data, 第 10 章プログラミングの小箱

275 guint info, 117 guint time) 118 { 119 gchar * received; 120 int n; if ((data - >length >= 0) && (data - >format == 8)) 123 { 124 g_ print (" Received string = "); 125 received = g_ strchomp ( data - >data); 126 for ( n = 0; n < data - >length; n++) 127 { 128 if (data - >data[n]!= \0 ) g_print ("%c", data - >data[n]); 129 } 130 g_print ("\n"); 131 return; 132 } 133 gtk_ drag_ finish ( context, FALSE, FALSE, time); 134 } int 137 main ( int argc, char ** argv) 138 { 139 GtkWidget * window; 140 GtkWidget * vbox; 141 GtkWidget * iconview; 142 GtkWidget * frame; 143 GtkWidget * label; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 148 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Drag and Drop Sameple2"); 149 gtk_ widget_ set_ size_ request ( window, 300, -1); 150 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 151 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 152 G_ CALLBACK ( gtk_ main_ quit), NULL); vbox = gtk_ vbox_ new ( FALSE, 0); 155 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); frame = gtk_frame_new (""); 158 gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); 159 gtk_ frame_ set_ shadow_ type ( GTK_ FRAME ( frame), GTK_ SHADOW_ IN); iconview = create_ icon_ view_ widget (); 162 gtk_ icon_ view_ set_ text_ column ( GTK_ ICON_ VIEW ( iconview), COLUMN_ NAME); 163 gtk_ icon_ view_ set_ pixbuf_ column ( GTK_ ICON_ VIEW ( iconview), 164 COLUMN_ PIXBUF); 165 gtk_ icon_ view_ set_ item_ width ( GTK_ ICON_ VIEW ( iconview), 128); gtk_ icon_ view_ enable_ model_ drag_ source ( GTK_ ICON_ VIEW ( iconview), 168 GDK_BUTTON1_MASK, 169 target_table, 170 ntargets, 171 GDK_ ACTION_ COPY 172 GDK_ ACTION_ MOVE); gtk_ icon_ view_ set_ selection_ mode ( GTK_ ICON_ VIEW ( iconview), 175 GTK_ SELECTION_ MULTIPLE); 176 g_signal_connect (iconview, "drag -data -get", 177 G_ CALLBACK ( source_ drag_ data_ get), NULL); 178 gtk_ container_ add ( GTK_ CONTAINER ( frame), iconview); 179 add_ data ( GTK_ ICON_ VIEW ( iconview)); frame = gtk_frame_new (""); 182 gtk_ widget_ set_ size_ request ( frame, -1, 80); 183 gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); 184 gtk_ frame_ set_ shadow_ type ( GTK_ FRAME ( frame), GTK_ SHADOW_ IN); gtk_ drag_ dest_ set ( frame, 187 GTK_DEST_DEFAULT_ALL, target_table, ntargets, 188 GDK_ ACTION_ COPY GDK_ ACTION_ MOVE); 189 g_signal_connect (frame, "drag -data -received", 190 G_ CALLBACK( cb_ drag_ data_ received), NULL); 191 第 10 章プログラミングの小箱

276 label = gtk_ label_ new (" Drop here"); 193 gtk_ container_ add ( GTK_ CONTAINER ( frame), label); gtk_ widget_ show_ all ( window); 196 gtk_main (); return 0; 199 } GtkIconView GtkTargetEntry flags GTK TARGET SAME APP drag-data-delete GtkIconView : dnd-sample3.c 1 # include <gtk/ gtk. h> 2 # include <string. h> 3 4 static 5 GtkTargetEntry target_ table[] = 6 { 7 {" STRING", GTK_TARGET_SAME_APP, 0}, 8 {" text/ plain", GTK_TARGET_SAME_APP, 0} 9 }; static guint ntargets = sizeof ( target_ table) / sizeof ( target_ table[ 0]); enum 14 { 15 COLUMN_NAME, 16 COLUMN_PIXBUF, 17 N_ COLUMNS 18 }; static void 21 source_ drag_ data_ get ( GtkWidget * widget, 第 10 章プログラミングの小箱

277 GdkDragContext * context, 23 GtkSelectionData * data, 24 guint info, 25 guint time, 26 gpointer user_ data) 27 { 28 GList * root, * list, * string_ list = NULL; 29 GtkTreeModel * model; 30 GString * string; model 33 = GTK_TREE_MODEL (gtk_icon_view_get_model (GTK_ICON_VIEW (widget))); 34 root = gtk_ icon_ view_ get_ selected_ items ( GTK_ ICON_ VIEW ( widget)); for ( list = root; list; list = g_ list_ next ( list)) 37 { 38 GtkTreePath * path; 39 GtkTreeIter iter; 40 gchar * name; path = ( GtkTreePath *) list - >data; 43 gtk_tree_model_get_iter (model, &iter, path); 44 name = gtk_ tree_ model_ get_ string_ from_ iter ( model, & iter); 45 string_ list = g_ list_ append ( string_list, name); 46 } 47 if ( string_ list) 48 { 49 string = g_ string_ new (( const gchar *) string_list - >data); 50 for ( list = g_ list_ next ( string_ list); list; 51 list = g_ list_ next ( list)) 52 { 53 string = g_ string_ append ( string, ","); 54 string = g_ string_ append ( string, ( const gchar *) list - >data); 55 } 56 gtk_selection_data_set (data, data - >target, 8, 57 string - >str, strlen (string - >str)); 58 g_ string_ free ( string, FALSE); 59 } 60 } static void 63 cb_ drag_ data_ received ( GtkWidget * widget, 64 GdkDragContext * context, 65 gint x, 66 gint y, 67 GtkSelectionData * data, 68 guint info, 69 guint time) 70 { 71 GtkWidget * source; source = gtk_ drag_ get_ source_ widget ( context); 74 if ( source == widget) 75 { 76 gtk_ drag_ finish ( context, FALSE, FALSE, time); 77 return; 78 } 79 if ((data - >length >= 0) && (data - >format == 8)) 80 { 81 GtkTreeModel * src_ model; 82 GtkTreeModel * dst_ model; 83 gchar ** strlist; 84 gchar * received; 85 int n; src_ model = gtk_ icon_ view_ get_ model ( GTK_ ICON_ VIEW ( source)); 88 dst_ model = gtk_ icon_ view_ get_ model ( GTK_ ICON_ VIEW ( widget)); received = g_ strchomp (( gchar *) data - >data); 91 strlist = g_ strsplit ( received, ",", 0); for ( n = 0; strlist[ n]; n++) 94 { 95 GtkTreeIter iter; 96 GdkPixbuf * pixbuf; 97 gchar * name; 第 10 章プログラミングの小箱

278 gtk_ tree_ model_ get_ iter_ from_ string ( src_model, 100 &iter, strlist[n]); 101 gtk_ tree_ model_ get ( src_model, & iter, 102 COLUMN_NAME, & name, 103 COLUMN_PIXBUF, & pixbuf, -1); if ( context - >action == GDK_ ACTION_ MOVE) 106 { 107 gtk_ list_ store_ remove ( GTK_ LIST_ STORE ( src_ model), & iter); 108 } gtk_ list_ store_ append ( GTK_ LIST_ STORE ( dst_ model), & iter); 111 gtk_list_store_set (GTK_LIST_STORE (dst_model), &iter, 112 COLUMN_NAME, name, 113 COLUMN_PIXBUF, pixbuf, -1); 114 } 115 g_ strfreev ( strlist); 116 gtk_ drag_ finish ( context, TRUE, FALSE, time); return; 119 } 120 gtk_ drag_ finish ( context, FALSE, FALSE, time); 121 } static void 124 cb_ drag_ data_ delete ( GtkWidget * widget, 125 GdkDragContext * drag_context, 126 gpointer user_ data) 127 { 128 GtkTreeModel * model; 129 GList *root, *list; model 132 = GTK_TREE_MODEL(gtk_icon_view_get_model (GTK_ICON_VIEW(widget))); 133 root = gtk_ icon_ view_ get_ selected_ items ( GTK_ ICON_ VIEW( widget)); 134 for ( list = root; list; list = g_ list_ next( list)) 135 { 136 GtkTreePath * path; 137 GtkTreeIter iter; path = ( GtkTreePath *) list - >data; 140 gtk_tree_model_get_iter (model, &iter, path); 141 gtk_ list_ store_ remove ( GTK_ LIST_ STORE( model), & iter); 142 } 143 } static void 146 add_ data ( GtkIconView * iconview) 147 { 148 GdkPixbuf * folder_ pixbuf; 149 GdkPixbuf * file_ pixbuf; 150 GtkListStore * store; 151 GtkTreeIter iter; folder_ pixbuf = gdk_ pixbuf_ new_ from_ file ("./ folder. png", NULL); 154 file_pixbuf = gdk_pixbuf_new_from_file ("./file.png", NULL); store = GTK_ LIST_ STORE( gtk_ icon_ view_ get_ model ( iconview)); gtk_ list_ store_ clear ( store); gtk_ list_ store_ append ( store, & iter); 161 gtk_list_store_set (store, &iter, 162 COLUMN_NAME, " folder. png", 163 COLUMN_PIXBUF, folder_pixbuf, -1); 164 g_ object_ unref ( folder_ pixbuf); gtk_ list_ store_ append ( store, & iter); 167 gtk_list_store_set (store, &iter, 168 COLUMN_NAME, " file. png", 169 COLUMN_PIXBUF, file_pixbuf, -1); 170 g_ object_ unref ( file_ pixbuf); 171 } static GtkWidget* 第 10 章プログラミングの小箱

279 create_ icon_ view_ widget ( void) 175 { 176 GtkWidget * iconview; 177 GtkListStore * store; store = gtk_ list_ store_ new ( N_COLUMNS, G_TYPE_STRING, GDK_ TYPE_ PIXBUF); 180 iconview = gtk_ icon_ view_ new_ with_ model ( GTK_ TREE_ MODEL ( store)); 181 g_ object_ unref ( store); gtk_ icon_ view_ set_ text_ column ( GTK_ ICON_ VIEW ( iconview), COLUMN_ NAME); 184 gtk_ icon_ view_ set_ pixbuf_ column ( GTK_ ICON_ VIEW ( iconview), 185 COLUMN_ PIXBUF); 186 gtk_ icon_ view_ set_ item_ width ( GTK_ ICON_ VIEW ( iconview), 128); gtk_ icon_ view_ enable_ model_ drag_ source ( GTK_ ICON_ VIEW ( iconview), 189 GDK_ BUTTON1_ MASK 190 GDK_SHIFT_MASK, 191 target_table, 192 ntargets, 193 GDK_ ACTION_ COPY 194 GDK_ ACTION_ MOVE); 195 gtk_ drag_ dest_ set ( iconview, 196 GTK_DEST_DEFAULT_ALL, target_table, ntargets, 197 GDK_ ACTION_ COPY GDK_ ACTION_ MOVE); 198 gtk_ icon_ view_ set_ selection_ mode ( GTK_ ICON_ VIEW ( iconview), 199 GTK_ SELECTION_ MULTIPLE); 200 g_signal_connect (iconview, "drag -data -get", 201 G_ CALLBACK ( source_ drag_ data_ get), NULL); 202 g_signal_connect (iconview, "drag -data -received", 203 G_ CALLBACK ( cb_ drag_ data_ received), NULL); 204 g_signal_connect (iconview, "drag -data -delete", 205 G_ CALLBACK ( cb_ drag_ data_ delete), NULL); return iconview; 208 } int 211 main ( int argc, char ** argv) 212 { 213 GtkWidget * window; 214 GtkWidget * hbox; 215 GtkWidget * iconview; 216 GtkWidget * frame; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 221 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Drag and Drop Sample3"); 222 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 223 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 224 G_ CALLBACK ( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( FALSE, 0); 227 gtk_ container_ add ( GTK_ CONTAINER ( window), hbox); frame = gtk_frame_new (""); 230 gtk_ widget_ set_ size_ request ( frame, 300, -1); 231 gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); 232 gtk_ frame_ set_ shadow_ type ( GTK_ FRAME ( frame), GTK_ SHADOW_ IN); iconview = create_ icon_ view_ widget (); 235 gtk_ container_ add ( GTK_ CONTAINER ( frame), iconview); 236 add_ data ( GTK_ ICON_ VIEW ( iconview)); frame = gtk_frame_new (""); 239 gtk_ widget_ set_ size_ request ( frame, 300, -1); 240 gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); 241 gtk_ frame_ set_ shadow_ type ( GTK_ FRAME ( frame), GTK_ SHADOW_ IN); iconview = create_ icon_ view_ widget (); 244 gtk_ container_ add ( GTK_ CONTAINER ( frame), iconview); gtk_ widget_ show_ all ( window); 247 gtk_main (); return 0; 第 10 章プログラミングの小箱

280 } 10.4 UI UI GtkIconFactory GtkIconFactory GtkIconFactory GtkIconFactory* gtk_ icon_ factory_ new ( void); GdkPixbuf GtkIconSource GtkIconSet GtkIconSource* gtk_ icon_ source_ new ( void); GtkIconSet* gtk_ icon_ set_ new ( void); GdkPixbuf void gtk_ icon_ source_ set_ filename ( GtkIconSource * source, const gchar * filename); void gtk_ icon_ source_ set_ pixbuf ( GtkIconSource * source, GdkPixbuf * pixbuf); GtkIconSource GtkIconSet void gtk_ icon_ set_ add_ source ( GtkIconSet * icon_set, const GtkIconSource * source); GtkIconSet ID GtkIconFactroy void gtk_ icon_ factory_ add ( GtkIconFactory * factory, const gchar * stock_id, GtkIconSet * icon_ set); 第 10 章プログラミングの小箱

281 GtkIconFactory void gtk_ icon_ factory_ add_ default ( GtkIconFactory * factory); (a) (b) : customstockitem-sample.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ quit ( GtkAction * action, gpointer user_ data); 4 5 typedef struct 6 { 7 gchar * location; 8 gchar * stock_ id; 9 } CustomStockIcon; /* 12 * M a k e f i l e I C O N _ P A T H. 13 */ 14 static CustomStockIcon custom_ icon_ list[] = 15 { 16 {ICON_PATH"images/new.png", "custom -stock -new"}, 17 {ICON_PATH"images/open.png", "custom -stock -open"}, 18 {ICON_PATH"images/save.png", "custom -stock -save"}, 19 {ICON_PATH"images/saveas.png", "custom -stock -saveas"}, 20 {ICON_PATH"images/print.png", "custom -stock -print"}, 21 {ICON_PATH"images/quit.png", "custom -stock -quit"}, 22 { NULL, NULL} 23 }; static GtkActionEntry entries[] = 26 { 27 {"FileMenu1", NULL, "_File"}, 28 {"New", GTK_STOCK_NEW, "_New", " <control >N", NULL, NULL}, 29 {"Open", GTK_STOCK_OPEN, "_Open", " <control >O", NULL, NULL}, 30 {"Save", GTK_STOCK_SAVE, "_Save", " <control >S", NULL, NULL}, 31 {" SaveAs", GTK_STOCK_SAVE_AS, " Save _ as", " <shift > <control >S", 32 NULL, NULL}, 33 {"Print", GTK_STOCK_PRINT, "_Print", " <control >P", NULL, NULL}, 34 {"Quit", GTK_STOCK_QUIT, "_Quit", " <control >Q", NULL, 35 G_CALLBACK (cb_quit)}, {"FileMenu2", NULL, "File _Custom"}, 38 {"cnew", "custom -stock -new", 39 "_New", " <alt > <control >N", NULL, NULL}, 40 {"copen", "custom -stock -open", 第 10 章プログラミングの小箱

282 "_Open", " <alt > <control >O", NULL, NULL}, 42 {"csave", "custom -stock -save", 43 "_Save", " <alt > <control >S", NULL, NULL}, 44 {"csaveas", "custom -stock -saveas", 45 "Save _as", " <alt > <shift > <control >S", NULL, NULL}, 46 {"cprint", "custom -stock -print", 47 "_Print", " <alt > <control >P", NULL, NULL}, 48 {"cquit", "custom -stock -quit", 49 "_Quit", " <alt > <control >Q", NULL, G_CALLBACK (cb_quit)}, 50 }; static guint n_ entries = G_ N_ ELEMENTS ( entries); const gchar * ui_ info = 55 " <ui >" 56 " <menubar name= MenuBar >" 57 " <menu action= FileMenu1 >" 58 " <menuitem action= New / >" 59 " <menuitem action= Open / >" 60 " <menuitem action= Save / >" 61 " <menuitem action= SaveAs / >" 62 " <menuitem action= Print / >" 63 " <separator/ >" 64 " <menuitem action= Quit / >" 65 " </menu >" 66 " <menu name= FileMenu2 action= FileMenu2 >" 67 " <menuitem action= cnew / >" 68 " <menuitem action= copen / >" 69 " <menuitem action= csave / >" 70 " <menuitem action= csaveas / >" 71 " <menuitem action= cprint / >" 72 " <separator/ >" 73 " <menuitem action= cquit / >" 74 " </menu >" 75 " </menubar >" 76 " </ui >"; static void 79 cb_ quit ( GtkAction * action, gpointer user_ data) 80 { 81 GObject * window = G_ OBJECT ( user_ data); g_object_unref (g_object_get_data (window, "factory")); 84 g_object_unref (g_object_get_data (window, "ui")); 85 gtk_main_quit (); 86 } static void 89 create_ custom_ stocks ( GtkIconFactory * factory, 90 CustomStockIcon * list) 91 { 92 GtkIconSource * source; 93 GtkIconSet * iconset; 94 int n; for ( n = 0; list[ n]. location! = NULL; n++) 97 { 98 source = gtk_ icon_ source_ new (); 99 iconset = gtk_ icon_ set_ new (); 100 gtk_ icon_ source_ set_ filename ( source, list[ n]. location); 101 gtk_ icon_ set_ add_ source ( iconset, source); 102 gtk_ icon_ factory_ add ( factory, list[ n]. stock_id, iconset); 103 gtk_ icon_ source_ free ( source); 104 gtk_ icon_ set_ unref ( iconset); 105 } 106 gtk_ icon_ factory_ add_ default ( factory); 107 } static GtkUIManager* 110 create_ menu ( GtkWidget * parent) 111 { 112 GtkUIManager * ui; 113 GtkActionGroup * actions; actions = gtk_ action_ group_ new (" Actions"); 116 gtk_ action_ group_ add_ actions ( actions, entries, n_entries, 第 10 章プログラミングの小箱

283 ( gpointer) parent); 118 ui = gtk_ ui_ manager_ new (); 119 gtk_ ui_ manager_ insert_ action_ group ( ui, actions, 0); 120 gtk_ ui_ manager_ set_ add_ tearoffs ( ui, TRUE); 121 gtk_ window_ add_ accel_ group ( GTK_ WINDOW( parent), 122 gtk_ui_manager_get_accel_group (ui)); 123 gtk_ ui_ manager_ add_ ui_ from_ string ( ui, ui_info, -1, NULL); return ui; 126 } int 129 main ( int argc, char ** argv) 130 { 131 GtkWidget * window; 132 GtkIconFactory * factory; 133 GtkWidget * menubar; 134 GtkUIManager * ui; gtk_init (&argc, &argv); 137 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 138 gtk_ window_ set_ title ( GTK_ WINDOW ( window), 139 " Custom GtkStockItem Sample"); 140 gtk_ widget_ set_ size_ request ( window, 320, -1); 141 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 142 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 143 G_ CALLBACK ( gtk_ main_ quit), NULL); factory = gtk_ icon_ factory_ new (); 146 create_ custom_ stocks ( factory, custom_ icon_ list); 147 g_ object_ set_ data ( G_ OBJECT ( window), " factory", factory); ui = create_ menu ( window); 150 g_object_set_data (G_OBJECT (window), "ui", ui); 151 menubar = gtk_ ui_ manager_ get_ widget ( ui, "/ MenuBar"); 152 gtk_ container_ add ( GTK_ CONTAINER ( window), menubar); gtk_ widget_ show_ all ( window); 155 gtk_main (); return 0; 158 } 10.5 GOptionContext GOptionEntry GOptionEntry typedef struct { const gchar * long_ name; gchar gint GOptionArg gpointer short_ name; flags; arg; arg_ data; const gchar * description; const gchar * arg_ description; } GOptionEntry; long name short name long name 2 short name 1 3 flags GOptionFlags 10.4 G OPTION FLAG NOALIAS G OPTION FLAG IN MAIN 第 10 章プログラミングの小箱

284 GOptionFlags G OPTION FLAG HIDDEN G OPTION FLAG IN MAIN G OPTION FLAG REVERSE G OPTION FLAG NO ARG G OPTION FLAG FILENAME G OPTION FLAG OPTION ARG G OPTION FLAG NOALIAS help help G OPTION ARG NONE G OPTION ARG CALLBACK G OPTION ARG CALLBACK G OPTION ARG CALLBACK arg GOptionArg GOptionArg G OPTION ARG NONE G OPTION ARG STRING G OPTION ARG INT G OPTION ARG CALLBACK G OPTION ARG FILENAME G OPTION ARG STRING ARRAY G OPTION ARG FILENAME ARRAY G OPTION ARG DOUBLE G OPTION ARG INT64 64 arg data Option 4 11 G OPTION ARG NONE G OPTION ARG INT G OPTION ARG DOUBLE G OPTION ARG FILENAME G OPTION ARG STRNIG ARRAY G OPTION ARG CALLBACK GOptionArg G OPTION ARG CALLBACK GOptionContext g option context new 10 5 g option context new 第 10 章プログラミングの小箱

285 GOptionContext* g_ option_ context_ new ( const gchar * parameter_ string); g option context add main entries void g_ option_ context_ add_ main_ entries ( GOptionContext * context, const GOptionEntry * entries, const gchar * translation_ domain); g option group new GOptionGroup GOptionGroup* g_ option_ group_ new ( const gchar * name, const gchar * description, const gchar * help_description, gpointer user_data, GDestroyNotify destroy); 1 2 g option group add entries help-name name 1 g option group new 3 void g_ option_ group_ add_ entries ( GOptionGroup * group, const GOptionEntry * entries); g option group set parse hooks g option group new 4 5 void g_ option_ group_ set_ parse_ hooks ( GOptionGroup * group, GOptionParseFunc pre_parse_func, GOptionParseFunc post_ parse_ func); GOptionParseFunc 3 data g option group new 4 gboolean (* GOptionParseFunc) ( GOptionContext * context, GOptionGroup * group, gpointer data, GError **error); g option context add group void g_ option_ context_ add_ group ( GOptionContext * context, GOptionGroup * group); g option context set summary g option context set description g option context parse gboolean g_ option_ context_ parse ( GOptionContext * context, gint *argc, gchar ***argv, GError **error); FALSE g option context get enabled TRUE TRUE help 第 10 章プログラミングの小箱

286 : parse option.c 1 # include <gtk/ gtk. h> 2 # include <stdlib. h> 3 4 typedef struct _ Option 5 { 6 gboolean verbose; 7 gint iterations; 8 gdouble step; 9 gchar * filename; 10 gchar ** string_ array; 11 } Option; Option option; static void 16 option_ free ( gpointer user_ data) 17 { 18 Option * option = ( Option *) user_ data; if ( option - >filename) g_ free ( option - >filename); 21 if ( option - >string_ array) g_ strfreev ( option - >string_ array); 22 } static gboolean 25 special_ option_ parse_ func ( const gchar * option_name, 26 const gchar * value, 27 gpointer user_data, 28 GError * error) 29 { 30 gchar ** option_ strings = NULL; 31 int nargs = 0; option_ strings = g_ strsplit ( value, ":", 0); 34 for ( nargs = 0; option_ strings[ nargs]! = NULL; nargs++); 35 if ( nargs < 2) 36 { 37 g_print ("For %s option, " 38 " please specify two option arguments by separating " 39 "\":\".\n\n", 40 option_ name); 41 return FALSE; 42 } 43 option. step = atof ( option_ strings[ 0]); 44 option. iterations = atoi ( option_ strings[ 1]); g_ strfreev ( option_ strings); return TRUE; 49 } static GOptionEntry entries[] = 52 { 53 {"verbose", v, 54 G_OPTION_FLAG_NOALIAS, G_OPTION_ARG_NONE, 55 & option. verbose, " Verbose mode", NULL}, 56 {"iterations", i, 57 G_OPTION_FLAG_NOALIAS, G_OPTION_ARG_INT, 58 & option. iterations, " Number of iterations ( Default 10)", NULL}, 59 {"step", s, 60 G_OPTION_FLAG_NOALIAS, G_OPTION_ARG_DOUBLE, 61 & option. step, " Step value ( Default 1)", NULL}, 62 {"filename", f, 63 G_OPTION_FLAG_NOALIAS, G_OPTION_ARG_FILENAME, 64 & option. filename, " Specify a filename", NULL}, 65 {"string -array", a, 66 G_OPTION_FLAG_NOALIAS, G_OPTION_ARG_STRING_ARRAY, 67 & option. string_array, 68 " Specify a string. This option can be used multiple times.", NULL}, 69 {"callback", c, 第 10 章プログラミングの小箱

287 G_OPTION_FLAG_NOALIAS, G_OPTION_ARG_CALLBACK, 71 special_option_parse_func, " The sample callback option", 72 " step: iterations"}, 73 NULL 74 }; static gboolean 77 pre_ parse_ func ( GOptionContext * context, 78 GOptionGroup * group, 79 gpointer user_data, 80 GError * error) 81 { 82 Option * option = ( Option *) user_ data; g_print ("\ninitializing option members...\n\n"); option - >verbose = FALSE; 87 option - >iterations = 10; 88 option - >step = 1; 89 option - >filename = NULL; 90 option - >string_ array = NULL; return TRUE; 93 } static gboolean 96 post_ parse_ func ( GOptionContext * context, 97 GOptionGroup * group, 98 gpointer user_data, 99 GError * error) 100 { 101 Option * option = ( Option *) user_ data; if ( option - >verbose) 104 { 105 g_ print (" Parsing option is done.\ n" 106 "( This message is shown if the verbose option is " 107 "specified.)\n\n"); 108 } 109 return TRUE; 110 } int 113 main ( int argc, char * argv[]) 114 { 115 GError * error = NULL; 116 GOptionContext * context; 117 GOptionGroup * option_ group; 118 gint n; 119 gchar * help_ message; 120 gdouble val; 121 gboolean result; context = g_ option_ context_ new ("# start"); 124 g_ option_ context_ add_ main_ entries ( context, entries, NULL); 125 option_ group 126 = g_ option_ group_ new (" example", 127 "Example:./parse -option -s 0.1 -i 5 1", 128 " Show an example", 129 ( gpointer) & option, 130 ( GDestroyNotify) option_ free); 131 g_ option_ group_ add_ entries ( option_group, entries); 132 g_ option_ group_ set_ parse_ hooks ( option_group, 133 ( GOptionParseFunc) pre_parse_func, 134 ( GOptionParseFunc) post_ parse_ func); 135 g_ option_ context_ add_ group ( context, option_ group); 136 g_ option_ context_ set_ summary ( context, 137 " This program is an option parser " 138 "example."); 139 g_ option_ context_ set_ description ( context, 140 " In this line, please describe detailed" 141 " descriptions about this program.\ n"); 142 result = g_ option_ context_ parse ( context, & argc, & argv, & error); if (! result argc! = 2) 145 { 第 10 章プログラミングの小箱

288 help_ message = g_ option_ context_ get_ help ( context, TRUE, NULL); 147 g_print ("%s\n", help_message); 148 g_ free ( help_ message); 149 g_ option_ context_ free ( context); 150 exit (1); 151 } 152 val = atof ( argv[ 1]); if ( option. verbose) 155 { 156 g_print (" n number\n \n"); 157 } 158 for ( n = 0; n < option. iterations; n++) 159 { 160 g_print ("%5d %f\n", n + 1, val); 161 val += option. step; 162 } 163 if ( option. filename) 164 { 165 g_ print (" option filename = % s\ n", option. filename); 166 } 167 if ( option. string_ array) 168 { 169 n = 0; 170 while ( option. string_ array[ n]) 171 { 172 g_print ("option string -array = %s\n", 173 option. string_ array[ n++]); 174 } 175 } 176 g_ option_ context_ free ( context); return 0; 179 } 第 10 章プログラミングの小箱

289 277 付録 A GTK+ の開発環境の構築 A.1 GTK+ 開発環境のインストール Fedora 11 編 Fedora 11 を使用する場合 OS のインストール途中で ソフトウェア開発 をインストールするように選択しておけば 自動 的に GTK+ の開発環境がインストールされます ここでは ソフトウェア開発 がインストールされていない場合について Ubuntu と同様に GUI によるインストール方法とコマンドラインによるインストール方法の 2 つを紹介します GUI によるアプリケーションのインストール Fedora 11 編 Fedora 11 で GUI によって GTK+ の開発環境をインストールするには 以下の手順に従って作業を行ってください 1. メニューバーから システム 管理 ソフトウェアの追加/削除 を選択します 図 A.1 図 A.1 ソフトウェアの追加/削除の起動 2. 次に 表示されたウィンドウの左上の入力ボックスに gtk2-devel と入力し 検出された gtk2-devel をクリックして チェックを入れます 図 A.2(a) 3. 同様に gcc を検索して 検出された gcc をクリックしてチェックを入れます 図 A.2(b) 4. 2 つのパッケージを選択したら ウィンドウ右下の 適用 (A) ボタンをクリックします 図 A.3 のウィンドウが表示さ 付録 A GTK+ の開発環境の開発

290 278 A GTK+ install (a) A.2 (b) A.3 Fedora 11 Fedora 11 yum gtk2-devel gcc yum $ su $ yum install gtk2-devel gcc y -y y Loaded plugins: refresh-packagekit Setting up Install Process Parsing package install arguments Resolving Dependencies... Transaction Summary ================================================================================ Install 38 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 30 M Is this ok [y/n]: y anjuta devhelp gtranslator 付録 A GTK+ の開発環境の開発

291 A.2 GTK+ OpenSUSE $ su $ yum install anjuta devhelp gtranslator A.2 GTK+ OpenSUSE 11.1 OpenSUSE 11.1 Fedora 10 OS GTK+ gcc GUI GTK+ gcc GUI OpenSUSE 11.1 OpenSUSE 11.1 GTK+ GUI 1. A.4 A.5 A.4 2. A.6 3. gtk2-devel gtk2-devel (I) A.7(a) 4. gcc gcc (I) A.7(b) 5. (p) OpenSUSE 11.1 OpenSUSE 11.1 zypper gtk2-devel gcc zypper 付録 A GTK+ の開発環境の開発

292 280 A GTK+ A.5 A.6 (a) A.7 (b) $ su $ zypper install gtk2-devel gcc y Loaded plugins: refresh-packagekit : 20.0 M 89.3 M 付録 A GTK+ の開発環境の開発

293 A.3 GTK+ Windows Vista 281 [ (Y)/ (n)]: y anjuta devhelp gtranslator $ su $ zypper install anjuta devhelp gtranslator A.3 GTK+ Windows Vista Windows GTK+ Glade for Win32 *1 Windows GNOME GNOME 9 Windows GTK+ 1. Web GTK+ Development Environment net/gladewin32/gtk-dev win32-2.exe 2. A.8(a) Next> 3. I Agree A.8(b) (a) (b) A.8 Window 1 4. Next> A.9(a) 5. Next> A.9(b) (a) (b) A.9 Window 2 *1 付録 A GTK+ の開発環境の開発

294 282 A GTK+ 6. Windows Visual Studio 2008 Express A.10(a) Next> 7. C:YGTK Next> A.10(b) (a) A.10 (b) Window 3 8. Install A.11(a) A.11(b) (a) (b) A.11 Window 4 付録 A GTK+ の開発環境の開発

295 283 B Visual Studio 2008 Express Edition Visual Studio 2008 Express Edition GTK+ A GTK+ INCLUDE LIB Visual Studio 2 p Microsoft Visual C Express Edition 2. (F) (N) (P)... B.1 image-viewer OK B.1 3. > B.2(a) 4. (E) B.2(b) B.3 (D) (W) C++.cpp image-viewer.c (A) (P) image-viewer (P)... B.5 付録 B Visual Studio 2008 Express Edition でのビルド方法

296 284 B Visual Studio 2008 Express Edition (a) B.2 (b) B.3 (1) B.4 (2) 8. image-viewer C/C++ GTK+ B.6(a) C:YGTKYINCLUDE C:YGTKYINCLUDEYGTK-2.0 C:YGTKYINCLUDEYGLIB-2.0 C:YGTKYINCLUDEYPANGO-1.0 C:YGTKYINCLUDEYCAIRO C:YGTKYINCLUDEYATK-1.0 C:YGTKYLIBYGTK-2.0YINCLUDE C:YGTKYLIBYGLIB-2.0YINCLUDE 付録 B Visual Studio 2008 Express Edition でのビルド方法

297 285 B.5 (1) INCLUDE B.6(b) 9. c:ygtkylib B.6(c) 10. B.6(d) glib-2.0.lib gobject-2.0.lib gtk-win lib (a) (b) (c) B.6 (2) (d) 11. (B) (B) 付録 B Visual Studio 2008 Express Edition でのビルド方法

298 286 B Visual Studio 2008 Express Edition (D) (S) (H) B.7 OK B.7 Windows image-viewer 付録 B Visual Studio 2008 Express Edition でのビルド方法

299 287 C GtkStockItem GTK+ GtkStockItem C.1 gtk-demo GtkStockItem GTK+ C.1 GtkStockItem A 1 GtkStockItem A-1 GtkStockItem 1 # define GTK_ STOCK_ ABOUT 2 # define GTK_ STOCK_ ADD 3 # define GTK_ STOCK_ APPLY 4 # define GTK_ STOCK_ BOLD 5 # define GTK_ STOCK_ CANCEL 6 # define GTK_ STOCK_ CDROM 7 # define GTK_ STOCK_ CLEAR 8 # define GTK_ STOCK_ CLOSE 9 # define GTK_ STOCK_ COLOR_ PICKER 10 # define GTK_ STOCK_ CONVERT 11 # define GTK_ STOCK_ CONNECT 12 # define GTK_ STOCK_ COPY 13 # define GTK_ STOCK_ CUT 14 # define GTK_ STOCK_ DELETE 付録 C GtkStockItem 一覧

300 288 C GtkStockItem 15 # define GTK_ STOCK_ DIALOG_ AUTHENTICATION 16 # define GTK_ STOCK_ DIALOG_ ERROR 17 # define GTK_ STOCK_ DIALOG_ INFO 18 # define GTK_ STOCK_ DIALOG_ QUESTION 19 # define GTK_ STOCK_ DIALOG_ WARNING 20 # define GTK_ STOCK_ DIRECTORY 21 # define GTK_ STOCK_ DISCONNECT 22 # define GTK_ STOCK_ DND 23 # define GTK_ STOCK_ DND_ MULTIPLE 24 # define GTK_ STOCK_ EDIT 25 # define GTK_ STOCK_ EXECUTE 26 # define GTK_ STOCK_ FILE 27 # define GTK_ STOCK_ FIND 28 # define GTK_ STOCK_ FIND_ AND_ REPLACE 29 # define GTK_ STOCK_ FLOPPY 30 # define GTK_ STOCK_ FULLSCREEN 31 # define GTK_ STOCK_ GOTO_ BOTTOM 32 # define GTK_ STOCK_ GOTO_ FIRST 33 # define GTK_ STOCK_ GOTO_ LAST 34 # define GTK_ STOCK_ GOTO_ TOP 35 # define GTK_ STOCK_ GO_ BACK 36 # define GTK_ STOCK_ GO_ DOWN 37 # define GTK_ STOCK_ GO_ FORWARD 38 # define GTK_ STOCK_ GO_ UP 39 # define GTK_ STOCK_ HARDDISK 40 # define GTK_ STOCK_ HELP 41 # define GTK_ STOCK_ HOME 42 # define GTK_ STOCK_ INDENT 43 # define GTK_ STOCK_ INDEX 44 # define GTK_ STOCK_ INFO 45 # define GTK_ STOCK_ ITALIC 46 # define GTK_ STOCK_ JUMP_ TO 47 # define GTK_ STOCK_ JUSTIFY_ CENTER 48 # define GTK_ STOCK_ JUSTIFY_ FILL 49 # define GTK_ STOCK_ JUSTIFY_ LEFT 50 # define GTK_ STOCK_ JUSTIFY_ RIGHT 51 # define GTK_ STOCK_ LEAVE_ FULLSCREEN 52 # define GTK_ STOCK_ MEDIA_ FORWARD 53 # define GTK_ STOCK_ MEDIA_ NEXT 54 # define GTK_ STOCK_ MEDIA_ PAUSE 55 # define GTK_ STOCK_ MEDIA_ PLAY 56 # define GTK_ STOCK_ MEDIA_ PREVIOUS 57 # define GTK_ STOCK_ MEDIA_ RECORD 58 # define GTK_ STOCK_ MEDIA_ REWIND 59 # define GTK_ STOCK_ MEDIA_ STOP 60 # define GTK_ STOCK_ MISSING_ IMAGE 61 # define GTK_ STOCK_ NETWORK 62 # define GTK_ STOCK_ NEW 63 # define GTK_ STOCK_ NO 64 # define GTK_ STOCK_ OK 65 # define GTK_ STOCK_ OPEN 66 # define GTK_ STOCK_ PASTE 67 # define GTK_ STOCK_ PREFERENCES 68 # define GTK_ STOCK_ PRINT 69 # define GTK_ STOCK_ PRINT_ PREVIEW 70 # define GTK_ STOCK_ PROPERTIES 71 # define GTK_ STOCK_ QUIT 72 # define GTK_ STOCK_ REDO 73 # define GTK_ STOCK_ REFRESH 74 # define GTK_ STOCK_ REMOVE 75 # define GTK_ STOCK_ REVERT_ TO_ SAVED 76 # define GTK_ STOCK_ SAVE 77 # define GTK_ STOCK_ SAVE_ AS 78 # define GTK_ STOCK_ SELECT_ COLOR 79 # define GTK_ STOCK_ SELECT_ FONT 80 # define GTK_ STOCK_ SORT_ ASCENDING 81 # define GTK_ STOCK_ SORT_ DESCENDING 82 # define GTK_ STOCK_ SPELL_ CHECK 83 # define GTK_ STOCK_ STOP 84 # define GTK_ STOCK_ STRIKETHROUGH 85 # define GTK_ STOCK_ UNDELETE 86 # define GTK_ STOCK_ UNDERLINE 87 # define GTK_ STOCK_ UNDO 88 # define GTK_ STOCK_ UNINDENT 89 # define GTK_ STOCK_ YES 90 # define GTK_ STOCK_ ZOOM_ # define GTK_ STOCK_ ZOOM_ FIT 付録 C GtkStockItem 一覧

301 # define GTK_ STOCK_ ZOOM_ IN 93 # define GTK_ STOCK_ ZOOM_ OUT 付録 C GtkStockItem 一覧

302

303 291 D URL sources/ +--- cairo/ +--- arc/ +--- clipping/ +--- composite/ +--- curve/ +--- line_cap/ +--- line_dash/ +--- line_join/ +--- mask/ +--- pattern_ image/ +--- pattern_ linear/ +--- pattern_ radial/ +--- polygon/ +--- rectangle/ +--- source_ image/ +--- source_ image_ surface/ +--- text +--- transform/ +--- transparency/ +--- custom_ widget +--- gtkiconbutton/ +--- gdkpixbuf +--- display1/ +--- display2/ +--- display image_ application/ +--- read/ +--- glib +--- file/ +--- ghashtable/ +--- glist/ +--- timer/ +--- gtk +--- hello_ world/ +--- packing/ +--- signal/ +--- table/ +--- imageoperator +--- tips 付録 D サンプルプログラムのソースコードリスト

304 292 D +--- customstockitem/ +--- dnd/ +--- keyboard/ +--- mouse/ +--- option/ +--- tutorial +--- step1/ +--- step2/ +--- step3/ +--- step4/ +--- step5/ +--- step6/ +--- widget +--- gtkaboutdialog/ +--- gtkbutton/ +--- gtkcheckbutton/ +--- gtkcomboboxentry/ +--- gtkdialog/ +--- gtkentry/ +--- gtkentrycompletion/ +--- gtkexpander/ +--- gtkfilechooser/ +--- gtkfileselection/ +--- gtkframe/ +--- gtkhandlebox/ +--- gtkiconview/ +--- gtkliststore/ +--- gtkmenubar/ +--- gtkmessagedialog/ +--- gtknotebook/ +--- gtkpaned/ +--- gtkpopupmenu/ +--- gtkprogressbar/ +--- gtkradiobutton/ +--- gtkscale/ +--- gtkspinbutton/ +--- gtktextview/ +--- gtktoolbar/ +--- gtktooltips/ +--- gtktreestore/ +--- gtkuimanager/ 付録 D サンプルプログラムのソースコードリスト

305 293 E Gdk E.1 Gdk, Gdk. Gdk, GTK+. Gdk, (GdkDrawable) (GdkGC).,.,. GTK+ GdkWindow GdkPixmap, GdkBitmap., GdkWindow, GtkDrawingArea window..,.,,,.. E.2 E.2.1 ( GC) gdk gc new. GdkGC* gdk_ gc_ new ( GdkWindow * drawable); GdkWindow GdkPixmap. GC, g object unref. GC GObject,. 1, g object ref. g object unref. 0,. gpointer g_ object_ ref void ( gpointer object); g_ object_ unref ( gpointer object); E.2.2, GdkColor, GC. GdkColor. struct GdkColor { guint32 pixel; 付録 E GDK による図形の描画

306 294 E Gdk }; guint16 red; guint16 green; guint16 blue; GdkColor red, green, blue pixel, gdk color alloc. gdk colormap get system. gint gdk_ color_ alloc ( GdkColormap * colormap, GdkColor * color); GdkColormap* gdk_ colormap_ get_ system ( void); GdkColor, gdk gc set foreground gdk gc set background GC. gdk gc set foreground,. gdk gc set background. void gdk_ gc_ set_ foreground ( GdkGC * gc, const GdkColor * color); void gdk_ gc_ set_ background ( GdkGC * gc, const GdkColor * color); E 1. E-1 1 GdkGC *gc; 2 GdkColor color; 3 4 gc = gdk_ gc_ new ( window); 5 6 color. red = 0x0000; 7 color. green = 0x0000; 8 color. blue = 0xffff; 9 10 gdk_ color_ alloc ( gdk_ colormap_ get_ system (), & color); 11 gdk_gc_set_foreground (gc, &color); E.3 E.3.1 gdk draw point gdk draw points. gdk draw point., gdk draw points., GdkPoint. void gdk_ draw_ point ( GdkDrawable * drawable, GdkGC *gc, gint x, gint y); void gdk_ draw_ points ( GdkDrawable * drawable, GdkGC *gc, GdkPoint * points, gint npoints); GdkPoint,. struct GdkPoint { gint x; gint y; }; 付録 E GDK による図形の描画

307 E E gdk draw line 2 (x1, y1), (x2, y2). void gdk_ draw_ line ( GdkDrawable * drawable, GdkGC *gc, gint x1, gint y1, gint x2, gint y2); gdk draw lines GdkPoint. void gdk_ draw_ lines ( GdkDrawable * drawable, GdkGC *gc, GdkPoint * points, gint npoints); gdk draw segments GdkSegment. void gdk_ draw_ segments ( GdkDrawable * drawable, GdkGC *gc, GdkSegment * segs, gint nsegs); GdkSegment,. struct GdkSegment { }; gint x1; gint y1; gint x2; gint y2; gdk draw lines, gdk draw segments E.1 ( ). (segs[0].x1, segs[0].y1) (segs[1].x2, segs[1].y2) (segs[2].x2, segs[2].y2) (segs[1].x1, segs[1].y1) (segs[2].x1, segs[2].y1) (segs[0].x2, segs[0].y2) E.1,., E.1 3.., gdk gc set dashes void gdk_ gc_ set_ dashes ( GdkGC * gc, 付録 E GDK による図形の描画

308 296 E Gdk gint dash_offset, gint8 dash_ list[], gint n); dash offset., dash list.,, 4 (GDK LINE DOUBLE DASH ) n. gint8 dash_list[] = {4, 2, 2, 2};, E.2 4. E.2. GDK_CAP_BUTT GDK_CAP_ROUND GDK_CAP_PROJECTING E.2, E.3 3. E.3., E 2..,, GtkDrawingArea window. 115, expose event.,. expose event.,. E-2 : draw lines.c 1 # include <gtk/ gtk. h> 2 E.1 GDK LINE SOLID GDK LINE ON OFF DASH GDK LINE DOUBLE DASH ( ) GDK_JOIN_MITER GDK_JOIN_ROUND GDK_JOIN_BEVEL E.3 付録 E GDK による図形の描画

309 E GDK CAP NOT LAST GDK CAP BUTT GDK CAP ROUND GDK CAP PROJECTING E.2 GDK CAP BUTT, 0,.... GDK JOIN MITER GDK JOIN ROUND GDK JOIN BEVEL E.3... E.4 3 static void set_ color ( GdkGC * gc, 4 GdkColor * color, 5 guint16 red, 6 guint16 green, 7 guint16 blue, 8 void (*set_function) (GdkGC *gc, 9 const GdkColor * color)) { 10 color - >red = red; 11 color - >green = green; 12 color - >blue = blue; 13 gdk_ color_ alloc ( gdk_ colormap_ get_ system (), color); 14 set_ function ( gc, color); 15 } gboolean cb_ expose_ event ( GtkWidget * widget, 18 GdkEventExpose * event, 19 gpointer user_ data) { 20 GdkWindow * drawable = widget - >window; 21 GdkGC * gc; 22 GdkColor color; 23 GdkPoint point[ 3]; 24 gint line_ width = 10; 25 gint8 dash_ style[] = {40, 10, 10, 10}; gc = gdk_ gc_ new ( drawable); /* */ 30 set_ color ( gc, & color, 0xffff, 0x0000, 0x0000, gdk_ gc_ set_ foreground); 31 gdk_ gc_ set_ line_ attributes ( gc, line_width, 32 GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_ JOIN_ MITER); 33 gdk_draw_line (drawable, gc, 20, 20, 180, 20); gdk_ gc_ set_ line_ attributes ( gc, line_width, 36 GDK_LINE_ON_OFF_DASH, 37 GDK_CAP_BUTT, GDK_ JOIN_ MITER); 38 gdk_draw_line (drawable, gc, 20, 40, 180, 40); set_ color ( gc, & color, 0x0000, 0x0000, 0xffff, gdk_ gc_ set_ background); 付録 E GDK による図形の描画

310 298 E Gdk 41 gdk_ gc_ set_ line_ attributes ( gc, line_width, 42 GDK_LINE_DOUBLE_DASH, 43 GDK_CAP_BUTT, GDK_ JOIN_ MITER); 44 gdk_draw_line (drawable, gc, 20, 60, 180, 60); /* */ 47 gdk_gc_set_dashes (gc, 0, dash_style, 4); 48 gdk_draw_line (drawable, gc, 20, 80, 180, 80); gdk_gc_set_dashes (gc, 20, dash_style, 4); 51 gdk_draw_line (drawable, gc, 20, 100, 180, 100); /* */ 54 set_ color ( gc, & color, 0x0000, 0x8888, 0x0000, gdk_ gc_ set_ foreground); gdk_ gc_ set_ line_ attributes( gc, line_width, 57 GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_ JOIN_ MITER); 58 gdk_draw_line (drawable, gc, 20, 130, 180, 130); gdk_ gc_ set_ line_ attributes( gc, line_width, 61 GDK_LINE_SOLID, 62 GDK_CAP_ROUND, GDK_ JOIN_ MITER); 63 gdk_draw_line (drawable, gc, 20, 150, 180, 150); gdk_ gc_ set_ line_ attributes ( gc, line_width, 66 GDK_LINE_SOLID, 67 GDK_CAP_PROJECTING, GDK_ JOIN_ MITER); 68 gdk_draw_line (drawable, gc, 20, 170, 180, 170); /* */ 71 set_ color ( gc, & color, 0x0000, 0x8888, 0xcccc, gdk_ gc_ set_ foreground); 72 line_ width = 20; gdk_ gc_ set_ line_ attributes ( gc, line_width, 75 GDK_LINE_SOLID, 76 GDK_CAP_BUTT, GDK_ JOIN_ MITER); 77 point[ 0]. x = 220; point[ 0]. y = 90; 78 point[ 1]. x = 300; point[ 1]. y = 20; 79 point[ 2]. x = 380; point[ 2]. y = 90; 80 gdk_ draw_ lines ( drawable, gc, point, 3); gdk_ gc_ set_ line_ attributes ( gc, line_width, 83 GDK_LINE_SOLID, 84 GDK_CAP_BUTT, GDK_ JOIN_ ROUND); 85 point[ 0]. x = 220; point[ 0]. y = 130; 86 point[ 1]. x = 300; point[ 1]. y = 60; 87 point[ 2]. x = 380; point[ 2]. y = 130; 88 gdk_ draw_ lines ( drawable, gc, point, 3); gdk_ gc_ set_ line_ attributes ( gc, line_width, 91 GDK_LINE_SOLID, 92 GDK_CAP_BUTT, GDK_ JOIN_ BEVEL); 93 point[ 0]. x = 220; point[ 0]. y = 170; 94 point[ 1]. x = 300; point[ 1]. y = 100; 95 point[ 2]. x = 380; point[ 2]. y = 170; 96 gdk_ draw_ lines ( drawable, gc, point, 3); g_ object_ unref ( gc); return FALSE; 101 } int main ( int argc, char * argv[]) { 104 GtkWidget * window; 105 GtkWidget * canvas; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 110 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Line Examples"); 111 gtk_ widget_ set_ size_ request ( window, 400, 200); canvas = gtk_ drawing_ area_ new (); 114 gtk_ container_ add ( GTK_ CONTAINER( window), canvas); 115 g_ signal_ connect ( G_ OBJECT( canvas), " expose_ event", 116 G_ CALLBACK ( cb_ expose_ event), NULL); 付録 E GDK による図形の描画

311 E gtk_ widget_ show_ all ( window); 119 gtk_main (); return 0; 122 } E.3.3, gdk draw rectangle. void gdk_ draw_ rectangle ( GdkDrawable * drawable, GdkGC *gc, gboolean filled, gint x, gint y, gint width, gint height); gdk draw rectangle E.5, x, y width, height. filled TRUE. (x, y) height width E.5 E.3.4, gdk draw arc. void gdk_ draw_ arc ( GdkDrawable * drawable, GdkGC *gc, gboolean filled, gint x, gint y, gint width, gint height, gint angle1, gint angle2); x, y., width, height. angle1,. (3 ) 0, 1/64. angle2 angle1 ( E.6). filled TRUE,. E.3.5, gdk draw polygon. void gdk_ draw_ polygon ( GdkDrawable * drawable, GdkGC *gc, 付録 E GDK による図形の描画

312 300 E Gdk (x, y) angle2 angle1 height width E.6 gboolean filled, GdkPoint * points, gint npoints); E.7 GdkPoint. filled TRUE,. E.4 GdkPixmap. GdkWindow. GdkPixmap., GdkWindow. GdkPixmap, GdkWindow. E 3. (5 14 ) configure event. configure event.,. points[0] points[1] points[2] points[0] points[1] points[2] points[3] points[3] points[4] (a) filled FALSE points[4] (b) filled TRUE E.7 付録 E GDK による図形の描画

313 E E.8 (16 37 ),,., gdk window set back pixmap.. gdk window clear,. void gdk_ window_ set_ back_ pixmap ( GdkWindow * window, GdkPixmap * pixmap, gboolean void gdk_ window_ clear ( GdkWindow * window); parent_ relative);, gdk draw drawable. void gdk_ draw_ drawable ( GdkDrawable * drawable, GdkGC *gc, GdkDrawable * src, gint xsrc, gint ysrc, gint xdest, gint ydest, gint width, gint height); E-4 : draw pixmap.c 1 # include <gtk/ gtk. h> 2 3 static GdkPixmap * pixmap = NULL; 4 5 gboolean cb_ configure_ event ( GtkWidget * widget, GdkEventConfigure * event) { 6 pixmap = gdk_ pixmap_ new ( widget - >window, 7 widget - >allocation. width, 8 widget - >allocation. height, 9-1); 10 gdk_ draw_ rectangle ( pixmap, widget - >style - >white_gc, TRUE, 0, 0, 11 widget - >allocation. width, 12 widget - >allocation. height); 13 return TRUE; 14 } gboolean cb_ expose_ event ( GtkWidget * widget, 17 GdkEventExpose * event, 18 gpointer user_ data) { 19 GdkWindow * drawable = widget - >window; 20 GdkGC * gc; 21 GdkColor color; gc = gdk_ gc_ new ( pixmap); 24 color. red = 0x0000; 25 color. green = 0x8888; 26 color. blue = 0x0000; 27 gdk_ color_ alloc ( gdk_ colormap_ get_ system (), & color); 28 gdk_gc_set_foreground (gc, &color); 付録 E GDK による図形の描画

314 302 E Gdk gdk_draw_arc (pixmap, gc, TRUE, 10, 10, 180, 180, 30 * 64, 300 * 64); 31 gdk_ window_ set_ back_ pixmap ( drawable, pixmap, FALSE); gdk_ window_ clear( drawable); 34 g_ object_ unref ( gc); return FALSE; 37 } int main ( int argc, char * argv[]) { 40 GtkWidget * window; 41 GtkWidget * canvas; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 46 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Draw Pixmap"); 47 gtk_ widget_ set_ size_ request ( window, 200, 200); canvas = gtk_ drawing_ area_ new (); 50 gtk_ container_ add ( GTK_ CONTAINER( window), canvas); 51 g_ signal_ connect ( G_ OBJECT( canvas), " configure_ event", 52 G_ CALLBACK ( cb_ configure_ event), NULL); 53 g_ signal_ connect ( G_ OBJECT( canvas), " expose_ event", 54 G_ CALLBACK ( cb_ expose_ event), NULL); gtk_ widget_ show_ all ( window); 57 gtk_main (); return 0; 60 } 付録 E GDK による図形の描画

315 303 F GNOME GNOME, GNOME GUI. GNOME GUI, GTK+,., GNOME. F.1 GNOME F.1, GNOME. F 1. GNOME GTK+. F 1 GNOME : gnome-sample.c 1 # include <gnome. h> 2 3 int 4 main ( int argc, char ** argv) 5 { 6 GnomeProgram * app; 7 GtkWidget * window; 8 GtkWidget * iconlist; 9 int n; app = gnome_ program_ init (" gnome - sample", " ", LIBGNOMEUI_MODULE, 12 argc, argv, NULL); F.1 GNOME 付録 F GNOME プログラミング

316 304 F GNOME window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 15 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 16 gtk_window_set_title (GTK_WINDOW (window), "Gnome -sample"); 17 gtk_ widget_ set_ size_ request ( window, 360, 200); iconlist = gnome_ icon_ list_ new (64, NULL, 0); 20 gtk_ container_ add ( GTK_ CONTAINER ( window), iconlist); for ( n = 0; n < 10; n++) 23 { 24 gnome_ icon_ list_ append ( GNOME_ ICON_ LIST( iconlist), 25 "folder.png", "folder.png"); 26 } 27 gtk_ widget_ show_ all ( window); 28 gtk_main (); 29 return 0; 30 } (1 ) GNOME gnome.h. Ubuntu 9.04 /usr/include/libgnomeui-2.0 gnome.h. GNOME (11-12 ) gnome program init GNOME, ( gtk init ). GnomeProgram* gnome_ program_ init ( const char * app_id, const char * app_version, const GnomeModuleInfo * module_info, int argc, char **argv, const char * first_property_name,...); GnomeProgram, gnome program get app version,. const char* gnome_ program_ get_ app_ version ( GnomeProgram * program); 3 GnomeModuleInfo,, LIBGNOMEUI MODULE. struct GnomeModuleInfo { }; const char const char const char GnomeModuleRequirement GnomeModuleHook GnomeModuleHook struct poptoption GnomeModuleInitHook * name; * version; * description; * requirements; instance_ init; pre_args_parse, post_ args_ parse; * options; init_ pass; GnomeModuleClassInitHook class_ init; const char gpointer * opt_ prefix; expansion1; (14 ). GNOME GTK+ GtkWindow. 付録 F GNOME プログラミング

317 F.2 GNOME 305 (19 26 ) (GnomeIconList) *1. GdkPixbuf., gnome icon list new. GtkWidget* gnome_ icon_ list_ new ( guint icon_width, GtkAdjustment * adj, int flags);, gnome icon list append.. GdkPixbuf, gnome icon list append pixbuf.. int gnome_ icon_ list_ append ( GnomeIconList * gil, const char * icon_filename, const char * text); int gnome_ icon_ list_ append_ pixbuf ( GnomeIconList * gil, GdkPixbuf * im, const char * icon_filename, const char * text);,, gnome icon list insert Pixbuf gnome icon list insert pixbuf. void gnome_ icon_ list_ insert ( GnomeIconList * gil, int pos, const char * icon_filename, const char * text); void gnome_ icon_ list_ insert_ pixbuf ( GnomeIconList * gil, int pos, GdkPixbuf * im, const char * icon_filename, const char * text); GNOME GNOME, GNOME. pkg-config. GNOME pkg-config libgnomeui-2.0. $ gcc gnome-sample.c -o gnome-sample pkg-config libgnomeui cflags --libs F.2 GNOME GNOME 2. F.2.1 (GnomeFileEntry) *2.,., gnome file entry new. *1 GTK+ GtkIconView, GnomeIconList. *2. 付録 F GNOME プログラミング

318 306 F GNOME GtkWidget* gnome_ file_ entry_ new ( const char * history_id, const char * browse_ dialog_ title);, gnome file entry get full path. gnome file entry set filename. char* gnome_ file_ entry_ get_ full_ path ( GnomeFileEntry * fentry, gboolean void gnome_ file_ entry_ set_ filename ( GnomeFileEntry * fentry, const char file_ must_ exist); * filename); F 2. F 2 : gnomefileentry-sample.c 1 # include <gnome. h> 2 3 int 4 main ( int argc, char ** argv) 5 { 6 GtkWidget * window; 7 GtkWidget * fileentry; 8 9 gnome_ program_ init (" gnome_file_entry - sample", " ", LIBGNOMEUI_MODULE, 10 argc, argv, NULL); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 13 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 14 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GnomeFileEntry - Sample"); 15 gtk_ widget_ set_ size_ request ( window, 360, -1); 16 g_ signal_ connect ( G_ OBJECT ( window), " destroy", 17 G_ CALLBACK ( gtk_ main_ quit), NULL); fileentry = gnome_ file_ entry_ new ( NULL, NULL); 20 gtk_ container_ add ( GTK_ CONTAINER ( window), fileentry); gtk_ widget_ show_ all ( window); 23 gtk_main (); return 0; 26 } F.2.2 (GnomeAbout) *3.,., gnome about new.. F.2 *3 GTK+ GtkAboutDialog, GnomeAbout. 付録 F GNOME プログラミング

319 F.2 GNOME 307 GtkWidget* gnome_ about_ new ( const gchar * name, const gchar * version, const gchar * copyright, const gchar * comments, const gchar ** authors, const gchar ** documenters, const gchar * translator_credits, GdkPixbuf * logo_ pixbuf); GdkPixbuf F 3. F 3 : gnomeaboutdialog-sample.c 1 # include <gnome. h> 2 3 static void 4 cb_ show_ dialog ( GtkWidget * widget, gpointer data) 5 { 6 GtkWidget * dialog; 7 const gchar * authors[] = {" Yasuyuki Sugaya", NULL}; 8 const gchar * documenters[] = {" Yasuyuki Sugaya", NULL}; 9 gchar * translators = " Yasuyuki Sugaya"; dialog = gnome_about_new ("GnomeAbout -Sample", "1.0.0", 12 "Copyright (C) ", 13 " This is a GnomeAbout dialog sample program.", 14 authors, documenters, translators, NULL); 15 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( dialog), 5); gtk_ widget_ show_ all ( dialog); 18 } int 21 main ( int argc, char ** argv) 22 { F.3 付録 F GNOME プログラミング

ÆþÌçGTK+

ÆþÌçGTK+ GTK+ 2016 11 1 iii GTK+ GUI GIMP GIMP GTK+ Windows GNOME GTK+ GTK+ GNOME KDE Qt GTK+ GTK+ GUI GUI Glade Anjuta GUI GUI GTK+, GUI GTK+, GTK+ 2 2009., GTK+ 3, 2., 2009 GTK+ 3,. 2016 10 iv C GUI GTK+ GUI

More information

ÆþÌçGTK+

ÆþÌçGTK+ 1 1 GTK+ 1.1 GTK+ GTK+ *1 GUI Graphical User Interface GIMP * 2 1.1 GIMP GNOME *3 GTK+ + GTK+ 2 Pango ATK cairo 2 GTK+ GLib... 1.1 GIMP *1 GTK+ The GIMP Toolkit : http://www.gtk.org/ *2 GIMP The GNU Image

More information

表紙

表紙 GUI Application Programming using GTK+/GNOME GTK+/GNOME による GUI アプリケーションプログラミング 菅谷保之著 THE TEO PROJECT PROGRAMMER S NOTEBOOK GTK+/GNOME GUI THE TEO PROJECT iii GTK+ GIMP (GNU Image Manipulation Program)

More information

TA tani/class/mech enshu/ X Window System GUI(Graphical User Interface) GUI (event driven) 2 Gtk

TA   tani/class/mech enshu/ X Window System GUI(Graphical User Interface) GUI (event driven) 2 Gtk 1 2011 8 TA http://www.cyber.t.u-tokyo.ac.jp/ tani/class/mech enshu/ 2011 7 7 1 X Window System GUI(Graphical User Interface) GUI (event driven) 2 Gtk+ GUI 2.1 GUI GUI GUI (event driven) GUI GUI GUI GUI

More information

2 2 Gtk+ GUI (widget ) GUI Gtk+ GUI Gtk+ GUI 2.2 Gtk GUI sample1.c Web (http://www.cyber.t.u-tokyo.ac.jp/ tani/class/mech enshu/) enshu2009gui1.tar.gz

2 2 Gtk+ GUI (widget ) GUI Gtk+ GUI Gtk+ GUI 2.2 Gtk GUI sample1.c Web (http://www.cyber.t.u-tokyo.ac.jp/ tani/class/mech enshu/) enshu2009gui1.tar.gz 1 2009 B4 GUI TA http://www.cyber.t.u-tokyo.ac.jp/ tani/class/mech enshu/ 2008 6 11 1 1 1 4 C GUI(Graphical User Interface) X Window System GUI 5 GUI 2 Gtk+ GUI 2.1 GUI GUI GUI (event driven) GUI GUI GUI

More information

GLS user s reference 19 8 21 1 3 1.1....................................................... 3 1.2....................................................... 3 1.3.......................................................

More information

はじめに ハンズオンだと思う者にはハンズオンであり もくもく会だと思う者にはもくもく会である

はじめに ハンズオンだと思う者にはハンズオンであり もくもく会だと思う者にはもくもく会である 5 分で学ぶ GTK+ Ruby/GTK2 のサンプルもあるよ! @myokoym Ruby-GNOME2 Project Team デスクトップアプリケーションを作る会 2014/03/16 はじめに ハンズオンだと思う者にはハンズオンであり もくもく会だと思う者にはもくもく会である もくもく会だと思う もくもくしてください 相談などはいつでもどうぞ :-) ハンズオンだと思う スライドにサンプルコードを映すので

More information

LiveCode初心者開発入門サンプル

LiveCode初心者開発入門サンプル / About LiveCode 01:... 11 02: Create... 15 set 03:... 21 name title LiveCode 04:... 29 global local width height 05:... 37 Controls Tools Palette Script Editor message handler 06:... 52 RGB 07:... 63

More information

GUI プログラムは これまでのおさらい 初期化 無限ループ 終了処理 低レベルから高レベルまで Xlib Xt gtk+ 等々 言語も自由自在 C C++ C# VB.NET Python 等々 Shell Script でもできる zenity 使ってね

GUI プログラムは これまでのおさらい 初期化 無限ループ 終了処理 低レベルから高レベルまで Xlib Xt gtk+ 等々 言語も自由自在 C C++ C# VB.NET Python 等々 Shell Script でもできる zenity 使ってね GUI プログラム入門 (3) Makefile を使ってみよう (Windows の話ではありません ) 西尾太 @Momonga Project GUI プログラムは これまでのおさらい 初期化 無限ループ 終了処理 低レベルから高レベルまで Xlib Xt gtk+ 等々 言語も自由自在 C C++ C# VB.NET Python 等々 Shell Script でもできる zenity 使ってね

More information

Qt4.0 GUI Nishio 2007 8 29 3 1 Hello Qt! 5 1.1 Hello Qt!................................. 5 1.2 (QLabel)........................ 7 1.3 (QPushButton)................ 8 1.4 (QFont)................... 9

More information

2 2 GtkWidget* gtk_drawing_area_new ( void ); /* */ void gtk_drawing_area_size ( GtkDrawingArea *darea, gint width, gint height); realize size allocat

2 2 GtkWidget* gtk_drawing_area_new ( void ); /* */ void gtk_drawing_area_size ( GtkDrawingArea *darea, gint width, gint height); realize size allocat 200 B3 GUI TA http://www.cyber.t.u-tokyo.ac.jp/ tani/class/mech enshu/ 200 7 6 X Window System GUI(Graphical User Interface) GUI (event driven) C GUI(Graphical User Interface) X Window System GUI GUI 2

More information

ÆþÌçGTK+

ÆþÌçGTK+ 249 10 & 10.1 10.1.1 void gtk_ widget_ set_ events ( GtkWidget * widget, gint events); 1 2 GtkEventMask typedef enum { GDK_ EXPOSURE_ MASK = 1

More information

untitled

untitled Clutter Overview 2009/09/11 Youngsik Yoon Software Application Engineer Agenda Moblin UI Clutter Clutter 2 Moblin UI Moblin UI Services Customer Provided UI / Apps WM + Clutter Compositor Platform Specific

More information

GUI GUI Ruby GUI Ruby/Tk Ruby/Gtk GUI Ruby GUI

GUI GUI Ruby GUI Ruby/Tk Ruby/Gtk GUI Ruby GUI Ruby Workshop Ruby GUI GUI GUI Ruby GUI Ruby/Tk Ruby/Gtk GUI Ruby GUI GUI Graphical User Interface ( CUI) GUI : Tk, Gtk, Motif, Qt GUI C : : TkMandel : Imlib GUI GUI GUI GUI 7 8 : GUI Ruby GUI GUI Ruby

More information

(pack ) Toplevel

(pack ) Toplevel 1 1 2 2 3 (pack ) 6 3.1................................... 6 3.2 1............................ 8 3.3 Toplevel........................................ 9 3.4............................... 10 3.5 Toplevel..................................

More information

double float

double float 2015 3 13 1 2 2 3 2.1.......................... 3 2.2............................. 3 3 4 3.1............................... 4 3.2 double float......................... 5 3.3 main.......................

More information

r07.dvi

r07.dvi 19 7 ( ) 2019.4.20 1 1.1 (data structure ( (dynamic data structure 1 malloc C free C (garbage collection GC C GC(conservative GC 2 1.2 data next p 3 5 7 9 p 3 5 7 9 p 3 5 7 9 1 1: (single linked list 1

More information

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1 I117 II I117 PROGRAMMING PRACTICE II 2 MEMORY MANAGEMENT 2 Research Center for Advanced Computing Infrastructure (RCACI) / Yasuhiro Ohara yasu@jaist.ac.jp / SCHEDULE 1. 2011/06/07(Tue) / Basic of Programming

More information

ohp07.dvi

ohp07.dvi 19 7 ( ) 2019.4.20 1 (data structure) ( ) (dynamic data structure) 1 malloc C free 1 (static data structure) 2 (2) C (garbage collection GC) C GC(conservative GC) 2 2 conservative GC 3 data next p 3 5

More information

ProVisionaire Control V3.0セットアップガイド

ProVisionaire Control V3.0セットアップガイド ProVisionaire Control V3 1 Manual Development Group 2018 Yamaha Corporation JA 2 3 4 5 NOTE 6 7 8 9 q w e r t r t y u y q w u e 10 3. NOTE 1. 2. 11 4. NOTE 5. Tips 12 2. 1. 13 3. 4. Tips 14 5. 1. 2. 3.

More information

r08.dvi

r08.dvi 19 8 ( ) 019.4.0 1 1.1 (linked list) ( ) next ( 1) (head) (tail) ( ) top head tail head data next 1: NULL nil ( ) NULL ( NULL ) ( 1 ) (double linked list ) ( ) 1 next 1 prev 1 head cur tail head cur prev

More information

たのしいプログラミング Pythonではじめよう!

たのしいプログラミング Pythonではじめよう! Title of English-language original: Python for Kids A Playful Introduction to Programming ISBN 978-1-59327-407-8, published by No Starch Press, Inc. Copyright 2013 by Jason R. Briggs. Japanese-language

More information

(Java/FX ) Java CD Java version Java VC++ Python Ruby Java Java Eclipse Java Java 3 Java for Everyone 2 10 Java Midi Java JavaFX Shape Canvas C

(Java/FX ) Java CD Java version Java VC++ Python Ruby Java Java Eclipse Java Java 3 Java for Everyone 2 10 Java Midi Java JavaFX Shape Canvas C (Java/FX ) Java CD Java version 10.0.1 Java VC++ Python Ruby Java Java Eclipse Java Java 3 Java for Everyone 2 10 Java Midi Java JavaFX Shape Canvas Canvas Eclipse Eclipse M... 1 javafx e(fx)clipse 3.0.0

More information

ohp08.dvi

ohp08.dvi 19 8 ( ) 2019.4.20 1 (linked list) ( ) next ( 1) (head) (tail) ( ) top head tail head data next 1: 2 (2) NULL nil ( ) NULL ( NULL ) ( 1 ) (double linked list ) ( 2) 3 (3) head cur tail head cur prev data

More information

ProVAL Recent Projects, ProVAL Online 3 Recent Projects ProVAL Online Show Online Content on the Start Page Page 13

ProVAL Recent Projects, ProVAL Online 3 Recent Projects ProVAL Online Show Online Content on the Start Page Page 13 ProVAL Unit System Enable Recording Log Preferred Language Default File Type Default Project Path ProVAL : Unit SystemUse SI Units SI SI USCS Enable Recording Log Language Default File Type Default Project

More information

大統一Debian勉強会 gdb+python拡張を使ったデバッグ手法

大統一Debian勉強会 gdb+python拡張を使ったデバッグ手法 Debian 2013 gdb+python nozzy@debian.or.jp 2013 6 29 Level Debian Up Debian Debian debian sid unstable Debian debian sid unstable *-dbg Debian debian sid unstable *-dbg gdb Debian debian sid unstable *-dbg

More information

Condition DAQ condition condition 2 3 XML key value

Condition DAQ condition condition 2 3 XML key value Condition DAQ condition 2009 6 10 2009 7 2 2009 7 3 2010 8 3 1 2 2 condition 2 3 XML key value 3 4 4 4.1............................. 5 4.2...................... 5 5 6 6 Makefile 7 7 9 7.1 Condition.h.............................

More information

Object MenuComponent MenuBar MenuItem Menu CheckboxMenuItem

Object MenuComponent MenuBar MenuItem Menu CheckboxMenuItem Java Object MenuComponent MenuBar MenuItem Menu CheckboxMenuItem 2 MenuComponent MenuComponent setfont() void setfont(font f) MenuBar MenuBar MenuBar() MenuBar add() Menu add(menu m) Menu Menu Menu String

More information

untitled

untitled Visual Basic.NET 1 ... P.3 Visual Studio.NET... P.4 2-1 Visual Studio.NET... P.4 2-2... P.5 2-3... P.6 2-4 VS.NET(VB.NET)... P.9 2-5.NET... P.9 2-6 MSDN... P.11 Visual Basic.NET... P.12 3-1 Visual Basic.NET...

More information

Nios® II HAL API を使用したソフトウェア・サンプル集 「Modular Scatter-Gather DMA Core」

Nios® II HAL API を使用したソフトウェア・サンプル集 「Modular Scatter-Gather DMA Core」 ALTIMA Company, MACNICA, Inc Nios II HAL API Modular Scatter-Gather DMA Core Ver.17.1 2018 8 Rev.1 Nios II HAL API Modular Scatter-Gather DMA Core...3...3...4... 4... 5 3-2-1. msgdma... 6 3-2-2. On-Chip

More information

C

C C 1 2 1.1........................... 2 1.2........................ 2 1.3 make................................................ 3 1.4....................................... 5 1.4.1 strip................................................

More information

¥×¥í¥°¥é¥ß¥ó¥°±é½¬I Exercise on Programming I [1zh] ` `%%%`#`&12_`__~~~ alse

¥×¥í¥°¥é¥ß¥ó¥°±é½¬I  Exercise on Programming I [1zh] ` `%%%`#`&12_`__~~~alse I Exercise on Programming I http://bit.ly/oitprog1 1, 2 of 14 ( RD S ) I 1, 2 of 14 1 / 44 Ruby Ruby ( RD S ) I 1, 2 of 14 2 / 44 7 5 9 2 9 3 3 2 6 5 1 3 2 5 6 4 7 8 4 5 2 7 9 6 4 7 1 3 ( RD S ) I 1, 2

More information

programmingII2019-v01

programmingII2019-v01 II 2019 2Q A 6/11 6/18 6/25 7/2 7/9 7/16 7/23 B 6/12 6/19 6/24 7/3 7/10 7/17 7/24 x = 0 dv(t) dt = g Z t2 t 1 dv(t) dt dt = Z t2 t 1 gdt g v(t 2 ) = v(t 1 ) + g(t 2 t 1 ) v v(t) x g(t 2 t 1 ) t 1 t 2

More information

2

2 1 2 3 4 5 Part I System Requirements 6 1 System Requirements "Planning Large Installations of PRTG Network Monitor 7" 7 PRTG 8 0 9 Part II Installation 10 2 Installation 11 12 13 14 15 16 17 Part III Introduction

More information

3 Ubuntu Linux Ubuntu Linux Debian Linux DistroWatch.com 1 Debian Ubuntu Linux 1 Debian CD(4.1 ) Knoppix Debian CentOS Linux CentOS 1 Ubuntu L

3 Ubuntu Linux Ubuntu Linux Debian Linux DistroWatch.com 1 Debian Ubuntu Linux 1 Debian CD(4.1 ) Knoppix Debian CentOS Linux CentOS 1 Ubuntu L Linux PC #5 29 5 12 1 #1 tdh8025 1 Kadai1 evince kghostview ls -a ( ) 5 19 ( ) 2 Linux Linux distribution CentOS Linux Ubuntu Linux PC Linux Linux (OS) OS ( OS ) Linux 1 Linux Hurd FreeBSD GNU OS OS Linux

More information

Systemwalker IT Service Management Systemwalker IT Service Management V11.0L10 IT Service Management - Centric Manager Windows

Systemwalker IT Service Management Systemwalker IT Service Management V11.0L10 IT Service Management - Centric Manager Windows Systemwalker IT Service Management Systemwalker IT Service Management V11.0L10 IT Service Management - Centric Manager Windows Systemwalker IT Service Management Systemwalker Centric Manager IT Service

More information

2

2 1 2 3 4 5 Part I 6 7 8 9 10 Part II 11 12 13 14 15 Part III 16 17 18 19 20 21 22 23 24 Part IV 25 26 27 28 29 30 31 32 33 34 35 36 Part V 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 Part

More information

WinHPC ppt

WinHPC ppt MPI.NET C# 2 2009 1 20 MPI.NET MPI.NET C# MPI.NET C# MPI MPI.NET 1 1 MPI.NET C# Hello World MPI.NET.NET Framework.NET C# API C# Microsoft.NET java.net (Visual Basic.NET Visual C++) C# class Helloworld

More information

Ver.1 1/17/2003 2

Ver.1 1/17/2003 2 Ver.1 1/17/2003 1 Ver.1 1/17/2003 2 Ver.1 1/17/2003 3 Ver.1 1/17/2003 4 Ver.1 1/17/2003 5 Ver.1 1/17/2003 6 Ver.1 1/17/2003 MALTAB M GUI figure >> guide GUI GUI OK 7 Ver.1 1/17/2003 8 Ver.1 1/17/2003 Callback

More information

Microsoft Word - ChoreonoidStartUpGuide.docx

Microsoft Word - ChoreonoidStartUpGuide.docx Choreonoid 1 ... 4... 4... 4... 4... 4... 5... 5 Choreonoid... 6 Choreonoid... 6 Choreonoid... 6 Choreonid... 8 Choreonoid... 9 Choreonoid Windows... 9...9...13 Choreonoid (Linux )... 21 Ubuntu Linux...21

More information

美唄市広報メロディー2014年1月号

美唄市広報メロディー2014年1月号 1 2014 E-mailkouhoujouhou@city.bibai.lg.jp January May September October November December February March June July August April BIBAI CITY INFORMATION http://db.net-bibai.co.jp/bibai/

More information

slide5.pptx

slide5.pptx ソフトウェア工学入門 第 5 回コマンド作成 1 head コマンド作成 1 早速ですが 次のプログラムを head.c という名前で作成してください #include #include static void do_head(file *f, long nlines); int main(int argc, char *argv[]) { if (argc!=

More information

2 1. Ubuntu 1.1 OS OS OS ( OS ) OS ( OS ) VMware Player VMware Player jp/download/player/ URL VMware Plaeyr VMware

2 1. Ubuntu 1.1 OS OS OS ( OS ) OS ( OS ) VMware Player VMware Player   jp/download/player/ URL VMware Plaeyr VMware 1 2010 k-okada@jsk.t.u-tokyo.ac.jp http://www.jsk.t.u-tokyo.ac.jp/~k-okada/lecture/ 2010 4 5 Linux 1 Ubuntu Ubuntu Linux 1 Ubuntu Ubuntu 3 1. 1 Ubuntu 2. OS Ubuntu OS 3. OS Ubuntu https://wiki.ubuntulinux.jp/ubuntutips/install/installdualboot

More information

para02-2.dvi

para02-2.dvi 2002 2 2002 4 23 : MPI MPI 1 MPI MPI(Message Passing Interface) MPI UNIX Windows Machintosh OS, MPI 2 1 1 2 2.1 1 1 1 1 1 1 Fig. 1 A B C F Fig. 2 A B F Fig. 1 1 1 Fig. 2 2.2 Fig. 3 1 . Fig. 4 Fig. 3 Fig.

More information

LAN Copyright c Daikoku Manabu This tutorial is licensed under a Creative Commons Attribution 2.1 Japan License

LAN Copyright c Daikoku Manabu This tutorial is licensed under a Creative Commons Attribution 2.1 Japan License LAN 2014 3 19 Copyright c 1993 2014 Daikoku Manabu This tutorial is licensed under a Creative Commons Attribution 2.1 Japan License. 1 2 1.1................................... 2 1.2.........................

More information

untitled

untitled JavaFX Mobile 1. JavaFX Mobile... 2 1.1. JavaFX... 2 1.2. JavaFX Script... 3 1.2.1.... 3 1.2.2.... 5 1.2.3.... 5 2.... 7 2.1. JDK 6 Update 13... 7 2.2. NetBeans IDE 6.5.1 for JavaFX 1.1.1... 7 3.... 10

More information

JavaScript の使い方

JavaScript の使い方 JavaScript Release10.5 JavaScript NXJ JavaScript JavaScript JavaScript 2 JavaScript JavaScript JavaScript NXJ JavaScript 1: JavaScript 2: JavaScript 3: JavaScript 4: 1 1: JavaScript JavaScript NXJ Static

More information

Linux XScreenSaver T020074

Linux XScreenSaver T020074 Linux XScreenSaver T020074 Linux XScreenSaver XScreenSaver Linux Linux Linux X Window System X Window System Xlib XScreenSaver X Window System Xlib XScreenSaver Xlib vroot.h Xlib XScreenSaver Linux Linux

More information

III

III III 1 1 2 1 2 3 1 3 4 1 3 1 4 1 3 2 4 1 3 3 6 1 4 6 1 4 1 6 1 4 2 8 1 4 3 9 1 5 10 1 5 1 10 1 5 2 12 1 5 3 12 1 5 4 13 1 6 15 2 1 18 2 1 1 18 2 1 2 19 2 2 20 2 3 22 2 3 1 22 2 3 2 24 2 4 25 2 4 1 25 2

More information

iii iv v vi vii viii ix 1 1-1 1-2 1-3 2 2-1 3 3-1 3-2 3-3 3-4 4 4-1 4-2 5 5-1 5-2 5-3 5-4 5-5 5-6 5-7 6 6-1 6-2 6-3 6-4 6-5 6 6-1 6-2 6-3 6-4 6-5 7 7-1 7-2 7-3 7-4 7-5 7-6 7-7 7-8 7-9 7-10 7-11 8 8-1

More information

Safari AppletViewer Web HTML Netscape Web Web 15-1 Applet Web Applet init Web paint Web start Web HTML stop destroy update init Web paint start Web up

Safari AppletViewer Web HTML Netscape Web Web 15-1 Applet Web Applet init Web paint Web start Web HTML stop destroy update init Web paint start Web up Safari AppletViewer Web HTML Netscape Web Web 15-1 Applet Web Applet init Web paint Web start Web HTML stop destroy update init Web paint start Web update Event Driven paint Signature Overwriting Overriding

More information

untitled

untitled FutureNet Microsoft Corporation Microsoft Windows Windows 95 Windows 98 Windows NT4.0 Windows 2000, Windows XP, Microsoft Internet Exproler (1) (2) (3) COM. (4) (5) ii ... 1 1.1... 1 1.2... 3 1.3... 6...

More information

Java updated

Java updated Java 2003.07.14 updated 3 1 Java 5 1.1 Java................................. 5 1.2 Java..................................... 5 1.3 Java................................ 6 1.3.1 Java.......................

More information

HARK Designer Documentation 0.5.0 HARK support team 2013 08 13 Contents 1 3 2 5 2.1.......................................... 5 2.2.............................................. 5 2.3 1: HARK Designer.................................

More information

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV tutimura@mist.i.u-tokyo.ac.jp kaneko@ipl.t.u-tokyo.ac.jp http://www.misojiro.t.u-tokyo.ac.jp/ tutimura/sem3/ 2002 12 11 p.1/33 10/16 1. 10/23 2. 10/30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20

More information

ohp03.dvi

ohp03.dvi 19 3 ( ) 2019.4.20 CS 1 (comand line arguments) Unix./a.out aa bbb ccc ( ) C main void int main(int argc, char *argv[]) {... 2 (2) argc argv argc ( ) argv (C char ) ( 1) argc 4 argv NULL. / a. o u t \0

More information

1 1.1 (JCPRG) 30 Nuclear Reaction Data File (NRDF) PC GSYS2.4 JCPRG GSYS2.4 Java Windows, Linux, Max OS X, FreeBSD GUI PNG, GIF, JPEG X Y GSYS2

1 1.1 (JCPRG) 30 Nuclear Reaction Data File (NRDF) PC GSYS2.4 JCPRG GSYS2.4 Java Windows, Linux, Max OS X, FreeBSD GUI PNG, GIF, JPEG X Y GSYS2 (GSYS2.4) GSYS2.4 Manual SUZUKI Ryusuke Hokkaido University Hospital Abstract GSYS2.4 is an update version of GSYS version 2. Main features added in this version are Magnifying glass function, Automatically

More information

Adobe Postscript 3 Expansion Unit

Adobe Postscript 3 Expansion Unit 3 ... 4... 4... 4... 4... 4 OS... 4 PDF... 5... 6... 6... 6... 6... 6... 7... 7... 8... 18... 18... 18 PDF... 18 PS... 18... 18 /... 18... 18... 18... 18... 19... 19 PS... 19... 19... 19 Q&A... 19... 19...

More information

BlueJ 2.0.1 BlueJ 2.0.x Michael Kölling Mærsk Institute University of Southern Denmark Toin University of Yokohama Alberto Palacios Pawlovsky 17 4 4 3 1 5 1.1 BlueJ.....................................

More information

program.dvi

program.dvi 2001.06.19 1 programming semi ver.1.0 2001.06.19 1 GA SA 2 A 2.1 valuename = value value name = valuename # ; Fig. 1 #-----GA parameter popsize = 200 mutation rate = 0.01 crossover rate = 1.0 generation

More information

Quark License Administrator 4.0 User Guide

Quark License Administrator 4.0 User Guide Quark License Administrator 2006Quark Inc.Quark Media House Sàrl 2000-2006Quark Inc.Quark Media House Sàrl Quark 5,541,991 5,680,619 5,907,704 6,005,560 6,052,514 6,081,262 6,633,666 6,947,959 B1 6,940,518

More information

2.2 Sage I 11 factor Sage Sage exit quit 1 sage : exit 2 Exiting Sage ( CPU time 0m0.06s, Wall time 2m8.71 s). 2.2 Sage Python Sage 1. Sage.sage 2. sa

2.2 Sage I 11 factor Sage Sage exit quit 1 sage : exit 2 Exiting Sage ( CPU time 0m0.06s, Wall time 2m8.71 s). 2.2 Sage Python Sage 1. Sage.sage 2. sa I 2017 11 1 SageMath SageMath( Sage ) Sage Python Sage Python Sage Maxima Maxima Sage Sage Sage Linux, Mac, Windows *1 2 Sage Sage 4 1. ( sage CUI) 2. Sage ( sage.sage ) 3. Sage ( notebook() ) 4. Sage

More information

r03.dvi

r03.dvi 19 ( ) 019.4.0 CS 1 (comand line arguments) Unix./a.out aa bbb ccc ( ) C main void... argc argv argc ( ) argv (C char ) ( 1) argc 4 argv NULL. / a. o u t \0 a a \0 b b b \0 c c c \0 1: // argdemo1.c ---

More information

A/B (2018/10/19) Ver kurino/2018/soft/soft.html A/B

A/B (2018/10/19) Ver kurino/2018/soft/soft.html A/B A/B (2018/10/19) Ver. 1.0 kurino@math.cst.nihon-u.ac.jp http://edu-gw2.math.cst.nihon-u.ac.jp/ kurino/2018/soft/soft.html 2018 10 19 A/B 1 2018 10 19 2 1 1 1.1 OHP.................................... 1

More information

Oracle Application Server 10g(9

Oracle Application Server 10g(9 Oracle Application Server 10g (9.0.4) for Microsoft Windows J2EE Oracle Application Server 10g (9.0.4) for Microsoft Windows J2EE and Web Cache...2...3...3...4...6...6...6 OS...9...10...12...13...24...24

More information

第5回お試しアカウント付き並列プログラミング講習会

第5回お試しアカウント付き並列プログラミング講習会 qstat -l ID (qstat -f) qscript ID BATCH REQUEST: 253443.batch1 Name: test.sh Owner: uid=32637, gid=30123 Priority: 63 State: 1(RUNNING) Created at: Tue Jun 30 05:36:24 2009 Started at: Tue Jun 30 05:36:27

More information

November 13 June 1 April 23 October 1 December 22 August 6 September 5 July 2 May 2 8 6 11 1 7 01 1516 4 23 4 1995 4 23 1999 4 23 19 2 02 88 5 2 3 03 6 1 6 1 300 4 04 100 7 2 7 2 706 15 2 5 05 8 6 86

More information

B 20 Web

B 20 Web B 20 Web 0753018 21 1 29 1 1 6 2 8 3 UI 10 3.1........................ 10 3.2 Web............ 11 3.3......... 12 4 UI 14 4.1 Web....................... 15 4.2 Web........... 16 4.3 Web....................

More information

fiš„v3.dvi

fiš„v3.dvi (2001) 49 2 261 275 Web 1 1 2001 2 21 2001 4 26 Windows OS Web Windows OS, DELPHI, 1. Windows OS. DELPHI Web DELPHI ALGOL PASCAL VISUAL BASIC C++ JAVA DELPHI Windows OS Linux OS KyLix Mac OS (ver 10) JAVA

More information

:30 12:00 I. I VI II. III. IV. a d V. VI

:30 12:00 I. I VI II. III. IV. a d V. VI 2017 2017 08 03 10:30 12:00 I. I VI II. III. IV. a d V. VI. 80 100 60 1 I. Backus-Naur BNF X [ S ] a S S ; X X X, S [, a, ], ; BNF X (parse tree) (1) [a;a] (2) [[a]] (3) [a;[a]] (4) [[a];a] : [a] X 2 222222

More information

C B

C B C 095707B 2010 6 8 1 LEVE1 2 1.1 LEVEL 1.1................................................ 2 1.1.1 1................................................ 2 1.1.2 1.2..............................................

More information

エクセルカバー入稿用.indd

エクセルカバー入稿用.indd i 1 1 2 3 5 5 6 7 7 8 9 9 10 11 11 11 12 2 13 13 14 15 15 16 17 17 ii CONTENTS 18 18 21 22 22 24 25 26 27 27 28 29 30 31 32 36 37 40 40 42 43 44 44 46 47 48 iii 48 50 51 52 54 55 59 61 62 64 65 66 67 68

More information

2 1 Web Java Android Java 1.2 6) Java Java 7) 6) Java Java (Swing, JavaFX) (JDBC) 7) OS 1.3 Java Java

2 1 Web Java Android Java 1.2 6) Java Java 7) 6) Java Java (Swing, JavaFX) (JDBC) 7) OS 1.3 Java Java 1 Java Java 1.1 Java 1) 2) 3) Java OS Java 1.3 4) Java Web Start Web / 5) Java C C++ Java JSP(Java Server Pages) 1) OS 2) 3) 4) Java Write Once, Run Anywhere 5) Java Web Java 2 1 Web Java Android Java

More information

3 Powered by mod_perl, Apache & MySQL use Item; my $item = Item->new( id => 1, name => ' ', price => 1200,

3 Powered by mod_perl, Apache & MySQL use Item; my $item = Item->new( id => 1, name => ' ', price => 1200, WEB DB PRESS Vol.1 79 3 Powered by mod_perl, Apache & MySQL use Item; my $item = Item->new( id => 1, name => ' ', price => 1200, http://www.postgresql.org/http://www.jp.postgresql.org/ 80 WEB DB PRESS

More information

MEISEI HEROES HERO HERO HERO MEISEI HEROES

MEISEI HEROES HERO HERO HERO MEISEI HEROES MEISEI HEROES MEISEI HEROES HERO HERO HERO MEISEI HEROES 04 INDEX 06 28 08 24 26 10 14 16 22 18 20 MEISEI HEROES 05 04 MEISEI HEROES 2014 SCHOOL GUIDE MEISEI HEROES 1 2 3 4 5 06 MEISEI HEROES 2014 SCHOOL

More information

01_.g.r..

01_.g.r.. I II III IV V VI VII VIII IX X XI I II III IV V I I I II II II I I YS-1 I YS-2 I YS-3 I YS-4 I YS-5 I YS-6 I YS-7 II II YS-1 II YS-2 II YS-3 II YS-4 II YS-5 II YS-6 II YS-7 III III YS-1 III YS-2

More information

ex01.dvi

ex01.dvi ,. 0. 0.0. C () /******************************* * $Id: ex_0_0.c,v.2 2006-04-0 3:37:00+09 naito Exp $ * * 0. 0.0 *******************************/ #include int main(int argc, char **argv) double

More information

B 10 : N ip2003f10.tex B : 9/12/ :02 p.1/71

B 10 : N ip2003f10.tex B : 9/12/ :02 p.1/71 B 10 : ks91@sfc.wide.ad.jp N206 2003 ip2003f10.tex B : 9/12/2003 10:02 p.1/71 : / ip2003f10.tex B : 9/12/2003 10:02 p.2/71 ip2003f10.tex B : 9/12/2003 10:02 p.3/71 1 http://java.sun.com/j2se/1.4.1/docs/api/

More information

Local variable x y i paint public class Sample extends Applet { public void paint( Graphics gc ) { int x, y;... int i=10 ; while ( i < 100 ) {... i +=

Local variable x y i paint public class Sample extends Applet { public void paint( Graphics gc ) { int x, y;... int i=10 ; while ( i < 100 ) {... i += Safari AppletViewer Web HTML Netscape Web Web 13-1 Applet Web Applet init Web paint Web start Web HTML stop destroy update init Web paint start Web update Event Driven paint Signature Overwriting Overriding

More information

2 static final int DO NOTHING ON CLOSE static final int HIDE ON CLOSE static final int DISPOSE ON CLOSE static final int EXIT ON CLOSE void setvisible

2 static final int DO NOTHING ON CLOSE static final int HIDE ON CLOSE static final int DISPOSE ON CLOSE static final int EXIT ON CLOSE void setvisible 12 2013 7 2 12.1 GUI........................... 12 1 12.2............................... 12 4 12.3..................................... 12 7 12.4....................................... 12 9 12.5 : FreeCellPanel.java............................

More information

. IDE JIVE[1][] Eclipse Java ( 1) Java Platform Debugger Architecture [5] 3. Eclipse GUI JIVE 3.1 Eclipse ( ) 1 JIVE Java [3] IDE c 016 Information Pr

. IDE JIVE[1][] Eclipse Java ( 1) Java Platform Debugger Architecture [5] 3. Eclipse GUI JIVE 3.1 Eclipse ( ) 1 JIVE Java [3] IDE c 016 Information Pr Eclipse 1,a) 1,b) 1,c) ( IDE) IDE Graphical User Interface( GUI) GUI GUI IDE View Eclipse Development of Eclipse Plug-in to present an Object Diagram to Debug Environment Kubota Yoshihiko 1,a) Yamazaki

More information

取扱説明書の読み替え一覧表

取扱説明書の読み替え一覧表 SCSI アレイコントローラカード取扱説明書 ( 追補版 ) PG-140BL PG-140C PG-140CL PG-141B PG-142B PG-142C PG-142D GP5-150 GP5-1501 GP5-151 はじめに Linux MicrosoftWindows NTMicrosoft Corporation NetwareNovell Copyright 1985-2001 Microsoft

More information

グラフ数値読み取りシステム (GSYS2.4) 利用の手引

グラフ数値読み取りシステム (GSYS2.4) 利用の手引 (GSYS2.4) GSYS2.4 Manual SUZUKI Ryusuke Hokkaido University Hospital 2011 6 7 Abstract GSYS2.4 is an update version of GSYS version 2. Main features added in this version are Magnifying glass function,

More information

事例に見るSCORMの・・・

事例に見るSCORMの・・・ SCORM 1.2 2005 8 2004, 2005 i 2004 6 1.0 2004 6 1.02 3.1.1 2005 1 1.1 2.1.4, 2.4.9, 2.5.2, 2.5.3, 3.1.3, 3.4.6, 3.5.2, 3.5.3. 2005 8 1.2 2.1.1 BOM 2.2.2, 2.4.10, 3.1.1 BOM 3.2.2, 3.4.7. ii 1. 1 2. 2 2.1

More information

1.... 1 2.... 1 2.1. RATS... 1 2.1.1. expat... 1 2.1.2. expat... 1 2.1.3. expat... 2 2.2. RATS... 2 2.2.1. RATS... 2 2.2.2.... 3 3. RATS... 4 3.1.... 4 3.2.... 4 3.3.... 6 3.3.1.... 6 3.3.2.... 6 3.3.3....

More information

<4D F736F F D B B83578B6594BB2D834A836F815B82D082C88C60202E646F63>

<4D F736F F D B B83578B6594BB2D834A836F815B82D082C88C60202E646F63> デザイン言語 Processing 入門 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. http://www.morikita.co.jp/books/mid/084931 このサンプルページの内容は, 初版 1 刷発行当時のものです. Processing Ben Fry Casey Reas Windows Mac Linux Lesson 1 Processing

More information

<4D6963726F736F667420506F776572506F696E74202D208376838C835B83938365815B835683878393312E707074205B8CDD8AB78382815B83685D>

<4D6963726F736F667420506F776572506F696E74202D208376838C835B83938365815B835683878393312E707074205B8CDD8AB78382815B83685D> i i vi ii iii iv v vi vii viii ix 2 3 4 5 6 7 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

More information

SC-85X2取説

SC-85X2取説 I II III IV V VI .................. VII VIII IX X 1-1 1-2 1-3 1-4 ( ) 1-5 1-6 2-1 2-2 3-1 3-2 3-3 8 3-4 3-5 3-6 3-7 ) ) - - 3-8 3-9 4-1 4-2 4-3 4-4 4-5 4-6 5-1 5-2 5-3 5-4 5-5 5-6 5-7 5-8 5-9 5-10 5-11

More information

<Documents Title Here>

<Documents Title Here> Oracle Application Server 10g Release 2 (10.1.2) for Microsoft Windows Business Intelligence Standalone Oracle Application Server 10g Release 2 (10.1.2) for Microsoft Windows Business Intelligence Standalone

More information

はじめに

はじめに 1 1 Squeak Squeak 1 Squeak Squeak 1.1 Squeak SqueakToys 1 NHK SqueakToys Squeak "Smalltalk" Smalltalker Smalltalk 23 1 Thoru Yamamoto 1 Squeak Smalltalk 1.1.1 Smalltalk Squeak Squeak WindowsMacUNIX Zaurus

More information

gnuplot.dvi

gnuplot.dvi gnuplot gnuplot 1 gnuplot exit 2 10 10 2.1 2 plot x plot sin(x) plot [-20:20] sin(x) plot [-20:20][0.5:1] sin(x), x, cos(x) + - * / ** 5 ** plot 2**x y =2 x sin(x) cos(x) exp(x) e x abs(x) log(x) log10(x)

More information

fx-9860G Manager PLUS_J

fx-9860G Manager PLUS_J fx-9860g J fx-9860g Manager PLUS http://edu.casio.jp k 1 k III 2 3 1. 2. 4 3. 4. 5 1. 2. 3. 4. 5. 1. 6 7 k 8 k 9 k 10 k 11 k k k 12 k k k 1 2 3 4 5 6 1 2 3 4 5 6 13 k 1 2 3 1 2 3 1 2 3 1 2 3 14 k a j.+-(),m1

More information