ÆþÌçGTK+

Similar documents
ÆþÌçGTK+

ÆþÌçGTK+

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

2 2 Gtk+ GUI (widget ) GUI Gtk+ GUI Gtk+ GUI 2.2 Gtk GUI sample1.c Web ( tani/class/mech enshu/) enshu2009gui1.tar.gz

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

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

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

untitled


EnSight UGM

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

r07.dvi

ohp07.dvi

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

Object MenuComponent MenuBar MenuItem Menu CheckboxMenuItem

double float

II

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

はしがき・目次・事例目次・凡例.indd

C

2

ÆþÌçGTK+

グローバル タイトル変換テーブルの編集

Condition DAQ condition condition 2 3 XML key value

2

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

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

01_.g.r..

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

<4D F736F F D B B83578B6594BB2D834A836F815B82D082C88C60202E646F63>

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

untitled

<4D F736F F F696E74202D C835B B E B8CDD8AB B83685D>

SC-85X2取説


DCL intro Manual for Ubuntu11.10

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

SystemC言語概論

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

Java演習(4) -- 変数と型 --

結婚生活を強める



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

困ったときのQ&A

活用ガイド (ソフトウェア編)

OpenCV IS Report No Report Medical Information System Labratry

活用ガイド (ハードウェア編)

programmingII2019-v01

untitled

linux_apli02.dvi

ii

Microsoft Word - ChoreonoidStartUpGuide.docx

SonicDICOM Cloud Connector インストール手順書 SonicDICOM Cloud Connector とは 検査装置が撮影した画像を自動的にクラウドへアップロー ドするためのソフトウェアです 1 前準備 クラウド上に PACS を作成する SonicDICOM Cloud

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. Docker の基本的な操作 1 docker hub の参照 2 DockerHub の Explorer リンクからアプリケーションを参照 3 アプリケーション検索 4 tag について 3. docker 基本コマンド 1 docker の


Java言語 第1回

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

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

図 1: 場所をクリックし ホームフォルダーをクリックすると (上図) ホーム フォルダー下にあるファイルやディレクトリの一覧を見ることができる 下図 2

MathLibre KNOPPIX (next generation) 2012 KNOPPIX/Math MathLibre KNOPPIX , KNOPPIX 6.0, next generation. KNOPPIX/Math KDE,

活用ガイド (ソフトウェア編)

I

(pack ) Toplevel

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

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー

r08.dvi

これわかWord2010_第1部_ indd

パワポカバー入稿用.indd

これでわかるAccess2010

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Oracle Application Server 10g(9

SystemC 2.0を用いた簡易CPUバスモデルの設計

パソコン機能ガイド

パソコン機能ガイド

新 EasyISTR の紹介紹介 ver /9 VersionUp の紹介内容 FrontISTR ver 5.0 が近々リリースさ近々リリースされるリリースされるが これされるが近々リリースさ これに伴い伴いい GUI の紹介変更が必要 が近々リリースさ必要 現状 GUI

Transcription:

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 GTK+ GTK+ GTK+ GTK+ 1 GTK+ GTK+ Ubuntu 16.04 Remix GTK+ 2 GTK+ GTK+ GTK+ GTK+ 3 GTK+ GUI 4 GLib GLib C GLib 5 cairo cairo GTK+ cairo 6 GdkPixbuf GTK+ 2 GdkPixbuf GdkPixbuf PNG JPEG, GTK+. 7 GTK+ GUI 8 9 GTK+ 10 GTK+/GNOME anjuta anjuta glade GUI GTK+ 11 GTK+, GTK+,.

v A Visual Studio Windows Visual Studio B GTK+ gtk3-icon-browser. C Web Ubuntu 16.04 Remix OS GTK+ $ $ sudo apt-get install libgtk-3-dev GNU 2 1 : image-viewer.c 1 # include <gtk/ gtk. h> 2 3 /* 4 5 */ 6 int main ( int argc, char * argv[]) 7 { 8 GtkWidget* window; 9 10 /* GTK+ */ 11 gtk_init (&argc, &argv); Web http://www.iim.cs.tut.ac.jp/~sugaya/wiki/wiki/index.php?%c6%fe%cc%e7gtk%2b Web

vi sugaya@iim.cs.tut.ac.jp

vii iii 1 GTK+ 1 1.1 GTK+....................................................... 1 1.2 GUI................................................. 2 1.3 GTK+................................................... 3 1.4.......................................... 4 1.4.1......................... 4 1.4.2 GUI............................... 4 2 GTK+ 7 2.1............................................... 7 2.2................................................. 8 2.2.1................................. 8 2.2.2......................................... 9 2.2.3............................................. 9 2.2.4............................................ 10 2.2.5 devhelp.......................................... 11 2.2.6................................................... 11 2.3.................................................... 12 2.3.1......................................... 12 2.3.2................................................ 12 2.3.3.......................................... 13 2.3.4.......................................... 13 2.3.5........................................... 14 2.3.6................................................... 15 2.4..................................................... 15 2.4.1....................................... 15 2.4.2....................................... 15 2.4.3........................................... 16 2.4.4................................................... 17 2.5............................................... 18 2.5.1................................. 18 2.5.2....................................... 18 2.5.3......................................... 18 2.5.4........................................... 18 2.5.5................................................... 20 2.6 GtkApplication..................................... 20 2.6.1 GtkApplication............................... 20 2.6.2 GUI................................................ 21 2.7................................................ 23 2.7.1............................................ 23 2.7.2............................................ 24 2.7.3........................... 24 2.7.4.......................................... 25 2.7.5..................................... 25

viii 2.7.6..................................... 26 2.7.7........................................... 26 2.7.8................................................... 28 2.8.......................................... 28 2.8.1...................................... 29 2.8.2...................................... 29 2.8.3........................................... 30 2.8.4................................................... 33 3 GTK+ 35 3.1.............................................. 35 3.2................................................ 35 3.2.1.................................................. 35 3.2.2............................................ 37 3.2.3.................................................. 39 3.3........................................ 41 3.3.1....................................... 41 3.3.2.......................................... 41 3.3.3.......................................... 46 3.3.4.............................................. 48 4 GLib 51 4.1 GLib......................................... 51 4.2..................................................... 52 4.2.1.............................................. 52 4.2.2......................................... 53 4.2.3........................................... 53 4.2.4 Unicode........................................... 55 4.2.5............................................. 57 4.2.6............................................ 58 4.3..................................................... 59 4.3.1 GList............................................ 59 4.3.2 :.......................................... 62 4.3.3 :................................... 63 4.4...................................................... 64 4.4.1 GHashTable........................................ 64 4.4.2........................................... 65 4.5................................................... 66 5 cairo 69 5.1 cairo...................................................... 69 5.2............................................... 69 5.3................................................. 70 5.3.1 GTK+................................. 70 5.3.2............................................ 71 5.3.3 PS EPS............................................ 72 5.3.4 SVG............................................... 72 5.4................................................ 73 5.5..................................................... 73 5.6............................................. 73 5.6.1................................................. 74 5.6.2................................................. 74 5.6.3................................................. 75 5.6.4................................................. 76 5.7..................................................... 78

ix 5.8.................................................... 79 5.9..................................................... 80 5.10..................................................... 82 5.11.................................................... 83 5.11.1................................................ 83 5.11.2..................................... 84 5.11.3......................................... 88 5.11.4......................................... 90 5.12.................................................... 92 5.13................................................... 94 5.14.................................................... 95 5.15....................................................... 97 5.16......................................................... 98 6 GdkPixbuf 103 6.1.............................................. 103 6.1.1.............................................. 103 6.1.2.............................................. 106 6.2................................................... 106 6.3..................................................... 107 6.3.1 GtkImage................................ 107 6.3.2 GtkDrawingArea............................ 108 6.4........................................... 109 6.4.1............................................. 110 6.4.2........................................... 111 6.4.3 gdk pixbuf cv image load.......................... 112 6.4.4 gdk pixbuf cv image load increment.................... 113 6.4.5.................................... 116 6.4.6....................................... 116 7 131 7.1................................................ 131 7.1.1................................................ 131 7.1.2.............................................. 134 7.1.3................................................ 136 7.2............................................... 139 7.2.1................................................. 139 7.2.2.................................................. 141 7.2.3................................................... 142 7.2.4................................................. 143 7.2.5................................................ 148 7.2.6................................................ 153 7.3................................................. 155 7.3.1.................................................. 155 7.3.2.......................................... 157 7.3.3................................................ 160 7.3.4.............................................. 163 7.4............................................... 166 7.4.1................................................ 166 7.4.2........................................... 171 7.4.3 GtkBuilder.................................... 174 7.5..................................................... 180 7.5.1............................................ 180 7.5.2...................................... 183 7.5.3.......................................... 186

x 7.5.4............................................ 191 7.6.................................................... 194 7.6.1............................................. 195 7.6.2......................................... 198 7.6.3............................................ 200 7.6.4...................................... 201 7.6.5................................................ 203 7.6.6 GtkCellRenderer......................... 204 7.6.7.............................................. 206 7.6.8............................................ 207 7.6.9.................................... 209 7.6.10.................................... 211 7.7........................................... 212 7.7.1................................................ 212 7.7.2.............................................. 213 7.7.3................................................. 216 7.7.4.................................................. 216 7.7.5.............................................. 219 7.7.6......................................... 227 7.7.7................................................ 233 7.7.8................................................. 235 8 239 8.1........................................ 239 8.1.1........................................... 239 8.1.2.................................... 240 8.1.3.......................................... 240 8.1.4.......................................... 241 8.1.5...................................... 242 8.1.6......................................... 242 8.1.7......................................... 242 8.2.......................................... 245 8.2.1........................................... 245 8.2.2........................................... 245 8.2.3.............................................. 245 8.3................................................ 246 8.3.1............................................ 246 8.3.2............................................ 249 8.3.3 GtkIconView....................... 254 8.4........................................... 258 8.4.1..................................... 258 8.4.2...................................... 259 8.4.3............................................. 260 8.4.4......................................... 262 8.4.5................................. 263 9 269 9.1........................................ 269 9.2............................................... 269 9.3 Private............................... 270 9.4................................................. 271 9.5............................................... 273 9.6............................................. 273 9.7............................................. 274 9.8.......................................... 275

xi 10 281 10.1.............................................. 281 10.2................................................ 282 10.2.1 anjuta............................................... 282 10.2.2.......................................... 282 10.2.3.......................................... 282 10.2.4.............................................. 282 10.2.5...................................... 282 10.2.6........................................... 283 10.3 GUI..................................................... 284 10.3.1 glade................................................ 284 10.3.2 GUI................................................ 285 10.3.3.............................................. 285 10.4.............................................. 289 10.4.1.............................. 289 10.4.2................................. 291 10.4.3................................. 292 10.4.4....................................... 293 10.4.5........................ 294 10.4.6............................................ 296 10.5............................................... 297 10.5.1.......................................... 297 10.5.2........................................... 297 10.5.3....................................... 297 10.6................................................ 298 10.6.1........................................... 298 10.6.2............................................. 299 10.6.3.......................................... 300 10.7......................................................... 300 11 GTK+ 301 11.1 Pango....................................................... 301 11.1.1................................................. 301 11.1.2................................................ 303 11.1.3 pango...................................... 303 11.1.4................................................. 306 11.1.5.......................................... 308 11.2 gio......................................................... 309 11.2.1 GApplication................................... 309 11.2.2.......................................... 310 A Visual Studio 313 A.1 Windows GTK+................................. 313 A.2................................................... 314 A.3 Visual Studio..................................... 315 A.3.1............................................ 315 A.3.2 GTK+............................. 316 A.3.3............................................ 319 B 321 C 323 325

1 1 GTK+ 1.1 GTK+ GTK+ *1 GUI Graphical User Interface GIMP * 2 1.1 GIMP GNOME *3 GTK+ 1.1 GIMP *1 GTK+ The GIMP Toolkit : http://www.gtk.org/ *2 GIMP The GNU Image Manipulation Program: http://www.gimp.org/ *3 GNOME: The Free Software Desktop Project: http://www.gnome.org/ 第 1 章 GTK+ って何だろう

2 1 GTK+ + GTK+ 2 Pango ATK cairo 2 GTK+ GLib... Pango... ATK... GDK... GdkPixbuf... cairo... GTK+ Web http://www.gtk.org/ 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 1.2 gtk.org GTK+ 第 1 章 GTK+ って何だろう

1.3 GTK+ の特徴 (a) テキストエディタ gedit 図 1.3 3 (b) 画像ビューワ eog GTK+ を使用して作成されたアプリケーション Motif... Motif は X Window System の見た目 ルック フィール を統一するために定められた GUI 規格で この規 格に沿って開発されたツールキットを Motif ツールキットと呼びます 単に Motif と言った場合 多くは Motif ツール キットを指します LessTif... Motif をオープンソースのライブラリとして実装したツールキットです Swing... Java で実装された GUI ツールキットです Tk... スクリプト言語 Tcl などで使用されている GUI ツールキットです Qt... C++ で書かれた GUI ツールキットです GNOME デスクトップ環境と並ぶ KDE デスクトップ環境に使用され ているツールキットとして有名です 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 上でも動作するマルチプラット フォームなライブラリです *4 *5 第1章 GNU Lesser General Public License: http://www.gnu.org/copyleft/lesser.html binding: 他の言語から利用するためのインターフェイス GTK+ って何だろう

4 1 GTK+ 1.4 GTK+ GTK+ OS Linux Unix OS Ubuntu 16.04 Remix Ubuntu 16.04 Remix GTK+ Windows A p. 313 Ubuntu 16.04 Remix Ubuntu Japanese Local Community Team Web http://www. ubuntulinux.jp/ Ubuntu 16.04 Remix GTK+ Ubuntu GTK+ GUI 2 1.4.1 Ubuntu apt-get apt-get GTK+ 3 libgtk-3-dev. apt-get $ sudo apt-get install libgtk-3-dev y -y y...... :... : 2 : 89 : 0 : 22 15.3 MB 80.8 MB? [Y/n] y Anjuta glade, gtranslator devhelp $ sudo apt-get install anjuta glade devhelp gtranslator 1.4.2 GUI Synaptic Synaptic, Ubuntu16.04, Synaptic. apt-get. 第 1 章 GTK+ って何だろう

1.4 5 $ sudo apt-get install synaptic Synaptic, GTK+ 1. Synaptic. $ sudo synaptic 2. Synaptic libgtk-3-dev (S) 1.4(a) 3. libgtk-3-dev,,. 1.4(b) 4. libgtk-3-dev (M). 1.4(c) 5. 1.4(d) (A) (a) (b) (c) 1.4 (d) Synaptic GTK+ 10 Anjuta gtranslator 2.2.5 devhelp 第 1 章 GTK+ って何だろう

7 2 GTK+ 2.1 GTK+ 2.1 GTK+ GTK+ Windows A p. 313 2.1

8 2 GTK+ 2.2 GTK+ 2.2.1 tutorial tutorial $ mkdir tutorial $ cd tutorial tutorial 2 1 tutorial image-viewer.c Ubuntu gedit 2.2 $ gedit image-viewer.c 2.2 gedit 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; 10 11 /* 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 9 17 /* */ 18 gtk_ widget_ show ( window); 19 /* */ 20 gtk_main (); 21 22 return 0; 23 } 2.2.2 GTK+ pkg-config pkg-config $ pkg-config --cflags gtk+-3.0 -pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at -spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I /usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/mirclient -I/us r/include/mircommon -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include /harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo - I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/i nclude/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib /x86_64-linux-gnu/glib-2.0/include GTK+ pkg-config $ gcc image-viewer.c -o image-viewer pkg-config --cflags --libs gtk+-3.0 pkg-config @ Shift+@ 2.2.3 image-viewer $./image-viewer 2.3

10 2 GTK+ 2.3 2.2.4 1 GTK+ gtk.h GTK+ GTK+ 12 gtk init GTK+ GTK+ GTK+ void gtk_init (int *argc, char *argv[]); 1 2 1 2 14 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 1 2 3 void gtk_ widget_ set_ size_ request ( GtkWidget * widget, gint width, gint height); 1 2 3

2.2 11 18 gtk widget show void gtk_ widget_ show ( GtkWidget * widget); 1 20 void gtk_ main ( void); 2.2.5 devhelp GTK+ devhelp devhelp gtk window new devhelp gtk window new gtk window gtk window 2.4 2.4 devhelp 2.2.6 GTK+ GTK+

12 2 GTK+ 2.5 2.3 2.3.1 gtk button new with label Quit GtkWidget *button; button = gtk_button_new_with_label ("Quit"); 2.3.2 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

2.3 13 gtk_widget_show_all (window); void gtk_ widget_ show_ all ( GtkWidget * widget); 1 2.3.3 clicked cb button clicked g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_button_clicked), NULL); g signal connect 1 2 3 4 GTK+ C++ GObject 1 G OBJECT() GObject 4 2.3.4 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);

14 2 GTK+ 2.3.5 2 2 $ gcc image-viewer.c -o image-viewer pkg-config --cflags --libs gtk+-3.0 2 2 : image-viewer.c 1 # include <gtk/ gtk. h> 2 3 /* 4 5 */ 6 static void 7 cb_ button_ clicked ( GtkWidget * button, gpointer user_ data) 8 { 9 /* */ 10 gtk_main_quit (); 11 } 12 13 /* 14 15 */ 16 int 17 main ( int argc, char ** argv) 18 { 19 GtkWidget * window; 20 21 /* 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; 29 30 /* */ 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 (); 42 43 return 0; 44 } $./image-viewer 2.6 Quit 39 gtk widget show gtk widget show all

2.4 15 2.6 2.3.6 2.4 2.4.1 6.3 p. 107 GtkWidget *image; image = gtk_image_new_from_file (argv[1]); gtk image new from file 6.1 p. 104 argv[1] 1 image GtkWidget* gtk_ image_ new_ from_ file ( const gchar * filename); 1 2.4.2 1 1

16 2 GTK+ GtkWidget *vbox; vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 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 box new, GTK ORIENTATION VERTICAL, GTK ORIENTATION HORIZONTAL GtkWidget* gtk_ box_ new ( GtkOrientation orientation, gint spacing); 1 2 gtk box pack start 3.2.2 p. 37 2.4.3 2 3 23 27 2 3 : 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 } 13 14 /* 15 16 */ 17 int 18 main ( int argc, char ** argv) 19 { 20 GtkWidget * window; 21 22 /* */ 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; 36

2.4 17 37 /* */ 38 vbox = gtk_ box_ new ( GTK_ORIENTATION_VERTICAL, 2); 39 /* */ 40 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); 41 { 42 GtkWidget * image; 43 GtkWidget * button; 44 45 /* */ 46 image = gtk_ image_ new_ from_ file ( argv[ 1]); 47 /* */ 48 gtk_box_pack_start (GTK_BOX (vbox), image, TRUE, TRUE, 0); 49 50 /* */ 51 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 (); 63 64 return 0; 65 } 2.2.2 p. 9 $./image-viewer ~/images/parrots.png 2.7,.,,. 2.7 2.4.4

18 2 GTK+ 2.5 1 2.5.1 GTK+ GtkWidget *scroll_window; scroll_window = gtk_scrolled_window_new (NULL, NULL); gtk scrolled window new NULL OK 2.5.2 gtk container add 2.5.3 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk scrolled window set policy GTK POLICY AUTOMATIC 2.5.4 2 4 2 4 : image-viewer.c 1 # include <gtk/ gtk. h> 2 # include <stdlib. h> 3 4 /* 5

2.5 19 6 */ 7 static void 8 cb_ button_ clicked ( GtkWidget * button, gpointer user_ data) 9 { 10 /* */ 11 gtk_main_quit (); 12 } 13 14 /* 15 16 */ 17 int 18 main ( int argc, char ** argv) 19 { 20 GtkWidget * window; 21 22 /* */ 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 /* */ 32 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 33 /* */ 34 gtk_ widget_ set_ size_ request ( window, 300, 200); 35 { 36 GtkWidget* vbox; 37 38 /* */ 39 vbox = gtk_ box_ new ( GTK_ORIENTATION_VERTICAL, 2); 40 /* */ 41 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); 42 { 43 GtkWidget * scroll_ window; 44 GtkWidget * button; 45 46 /* */ 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 ( scroll_ window), 52 GTK_POLICY_AUTOMATIC, 53 GTK_ POLICY_ AUTOMATIC); 54 { 55 GtkWidget * image; 56 57 /* */ 58 image = gtk_ image_ new_ from_ file ( argv[ 1]); 59 /* */ 60 gtk_ container_ add ( GTK_ CONTAINER( scroll_ window), image); 61 } 62 /* */ 63 button = gtk_ button_ new_ with_ label (" Quit"); 64 /* */ 65 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 66 G_ CALLBACK ( cb_ button_ clicked), NULL); 67 /* */ 68 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), button, FALSE, FALSE, 0); 69 } 70 } 71 /* */ 72 gtk_ widget_ show_ all ( window); 73 /* */ 74 gtk_main (); 75 76 return 0; 77 }

20 2 GTK+ 2.8 $./image-viewer ~/images/parrots.png 2.8 2.5.5 2.6 GtkApplication GTK+-3.0, GtkAppliction., GTK+,., GtkApplication., 2 4 GtkApplication,. 2 5., 2.7,. 2.6.1 GtkApplication 2.9 GtkApplication., 1 gtk init GTK+, gtk application new, GtkApplication 2 5 83., gtk init,. gtk application new ID. ID, (.). 2 0 (G APPLICATION FLAGS NONE). GtkApplication * gtk_ application_ new ( const gchar * application_id, GApplicationFlags flags);

2.6 GtkApplication 21 1 2 ID. GtkApplication, gtk main g application run. int g_ application_ run ( GApplication * application, int argc, char ** argv); 1 2 3 GApplication..., gtk main quit g application quit. void g_ application_ quit ( GApplication * application); 1 GApplication. 2.6.2 GUI GUI,, 2 5, GtkApplication,, activate GUI., gtk window new gtk application window new. GtkWidget * gtk_ application_ window_ new ( GtkApplication * application); 1 GtkApplication. 2 5 GtkAppliction : 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 /* */ GTK+ ライブラリの初期化 g t g t GtkApplication の作成 t 自動的に g t が呼び出される GUI の作成 GUI の作成 GUI の表示 GUI の表示 アプリケーションの開始 g t g t アプリケーションの開始 2.9 GtkApplication

22 2 GTK+ 11 GApplication * app = G_ APPLICATION ( user_ data); 12 g_ application_ quit ( app); 13 } 14 15 /* 16 * 17 */ 18 static void 19 cb_ activate ( GApplication * app, gpointer user_ data) 20 { 21 GtkWidget * window; 22 23 /* */ 24 window = gtk_ application_ window_ new ( GTK_ APPLICATION ( app)); 25 /* */ 26 gtk_ widget_ set_ size_ request ( window, 300, 200); 27 { 28 GtkWidget* vbox; 29 30 /* */ 31 vbox = gtk_ box_ new ( GTK_ORIENTATION_VERTICAL, 2); 32 /* */ 33 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); 34 { 35 GtkWidget * scroll_ window; 36 GtkWidget * button; 37 38 /* */ 39 scroll_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 40 /* */ 41 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), scroll_window, TRUE, TRUE, 0); 42 /* */ 43 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW ( scroll_ window), 44 GTK_POLICY_AUTOMATIC, 45 GTK_ POLICY_ AUTOMATIC); 46 { 47 GtkWidget * image; 48 49 /* */ 50 image = gtk_ image_ new_ from_ file (( char *) user_ data); 51 /* */ 52 gtk_ container_ add ( GTK_ CONTAINER( scroll_ window), image); 53 } 54 /* */ 55 button = gtk_ button_ new_ with_ label (" Quit"); 56 /* */ 57 g_ signal_ connect ( G_ OBJECT ( button), " clicked", 58 G_ CALLBACK ( cb_ button_ clicked), app); 59 /* */ 60 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), button, FALSE, FALSE, 0); 61 } 62 } 63 /* */ 64 gtk_ widget_ show_ all ( window); 65 } 66 67 /* 68 69 */ 70 int 71 main ( int argc, char ** argv) 72 { 73 GtkApplication * app; 74 75 /* */ 76 if (argc!= 2) 77 { 78 g_print ("Usage: %s image -file\n", argv[0]); 79 exit (1); 80 } 81 /* */ 82 app = gtk_ application_ new (" gtk. imageviewer", 0); 83 /* */ 84 g_ signal_ connect ( app, " activate", G_ CALLBACK( cb_ activate), argv[ 1]);

2.7 23 85 /* */ 86 g_ application_ run ( G_ APPLICATION( app), 0, NULL); 87 88 return 0; 89 } 2.7, Open Quit 2 Quit Quit Open 2.7.1,. 1., 2. GtkBuiler XML, 2.,. 2.10. 1. XML 2. GActionEntry 3. g action map add action entries 4. GtkBuilder XML, 2.10 GtkBuilder

24 2 GTK+ 2.7.2 XML XML "<interface>" " <menu id= appmenu >" " <submenu>" " <attribute name= label >File</attribute>" " <section>" " <item>" " <attribute name= label >Open</attribute>" " <attribute name= action >app.open</attribute>" " <attribute name= accel ><Primary>o</attribute>" " </item>" " </section>" " <section>" " <item>" " <attribute name= label >Quit</attribute>" " <attribute name= action >app.quit</attribute>" " <attribute name= accel ><Primary>q</attribute>" " </item>" " </section>" " </submenu>" " </menu>" "</interface>"; <interface>, <menu></menu>. <menu> ID GtkBuiler. File Open Quit, File <submenu>, <attribute name= label >., Open Quit <item>. <attribute>, name=.. label... action... GActionEntry accel... action, GtkApplication GtkWidget GActionMap GActionEntry name, GActionMap.GActionEntry name., Open Quit, <section>. 2.7.3 GActionEntry, 5 1. 2.

2.7 25 3. 4. 5. static GActionEntry entries[] = { {"open", cb_open, NULL, NULL, NULL}, {"quit", cb_quit, NULL, NULL, NULL}, }; 3 5, NULL. 2.7.4 GActionEntry GActionMap. g action map add action entries. GtkApplication, GtkApplication GActioMap 2 6 132 134. void g_ action_ map_ add_ action_ entries ( GActionMap * action_map, const GActionEntry * entries, gint n_entries, gpointer user_ data); 1 2 3 4 GActionMap GActionEntry GActionEntry 2.7.5 GtkBuiler,., gtk builder add from file.,, gtk builder add from string., GtkBuilder. GtkBuilder *builder = gtk_builder_new (); gtk_builder_add_from_string (builder, menu_info, -1, NULL); gtk builder add from string 3 1 guint gtk_ builder_ add_ from_ string ( GtkBuilder * builder, const gchar * buffer, gsize length, GError **error); 1 GtkBuilder 2 3 4, 0

26 2 GTK+ 2.7.6 GtkBuilder gtk builder get object GObject * gtk_ builder_ get_ object ( GtkBuilder * builder, const gchar * name); 1 2 GtkBuilder, gtk builder get object GMenuModel, gtk application set menubar. GMenuModel *menubar; menubar = (GMenuModel *) gtk_builder_get_object (builder, "appmenu"); gtk_application_set_menubar (GTK_APPLICATION (app), menubar); 2.7.7 $./image-viewer ~/images/parrots.png 2.11 2 6 18 26, 3 user data GtkApplication., 2 6 122 124 GActionMap, 3 GtkApplication app. 2.11 2 6 : image-viewer.c 1 # include <gtk/ gtk. h> 2 # include <stdlib. h> 3 4 /* 5 O p e n

2.7 27 6 */ 7 static void 8 cb_ open ( GSimpleAction * action, 9 GVariant * paramter, 10 gpointer user_ data) 11 { 12 g_ print (" This function is not implemented yet.\ n"); 13 } 14 15 /* 16 17 */ 18 static void 19 cb_ quit ( GSimpleAction * action, 20 GVariant * parameter, 21 gpointer user_ data) 22 { 23 /* */ 24 GApplication * app = G_ APPLICATION ( user_ data); 25 g_ application_ quit ( app); 26 } 27 28 /* 29 * 30 */ 31 static const gchar menu_ info[] = 32 " <interface >" 33 " <menu id= appmenu >" 34 " <submenu >" 35 " <attribute name= label >File </ attribute >" 36 " <section >" 37 " <item >" 38 " <attribute name= label >Open </ attribute >" 39 " <attribute name= action >app. open </ attribute >" 40 " <attribute name= accel >< Primary& gt; o</ attribute >" 41 " </item >" 42 " </section >" 43 " <section >" 44 " <item >" 45 " <attribute name= label >Quit </ attribute >" 46 " <attribute name= action >app. quit </ attribute >" 47 " <attribute name= accel >< Primary& gt; q</ attribute >" 48 " </item >" 49 " </section >" 50 " </submenu >" 51 " </menu >" 52 " </interface >"; 53 54 /* 55 * 56 */ 57 static GActionEntry entries[] = { 58 {"open", cb_open, NULL, NULL, NULL}, 59 {"quit", cb_quit, NULL, NULL, NULL}, 60 }; 61 62 /* 63 * 64 */ 65 static void cb_ activate ( GApplication * app, 66 gpointer user_ data) 67 { 68 GtkWidget * window; 69 70 /* */ 71 window = gtk_ application_ window_ new ( GTK_ APPLICATION ( app)); 72 /* */ 73 gtk_ widget_ set_ size_ request ( window, 300, 200); 74 /* */ 75 GtkBuilder * builder; 76 builder = gtk_ builder_ new (); 77 gtk_ builder_ add_ from_ string ( builder, menu_info, -1, NULL); 78 GMenuModel * menubar; 79 menubar = ( GMenuModel *) gtk_ builder_ get_ object ( builder, " appmenu"); 80 gtk_ application_ set_ menubar ( GTK_ APPLICATION ( app), menubar); 81 {

28 2 GTK+ 82 /* */ 83 GtkWidget * scroll_ window; 84 scroll_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 85 /* */ 86 gtk_ container_ add ( GTK_ CONTAINER ( window), scroll_ window); 87 /* */ 88 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW ( scroll_ window), 89 GTK_POLICY_AUTOMATIC, 90 GTK_ POLICY_ AUTOMATIC); 91 { 92 GtkWidget * image; 93 94 /* */ 95 image = gtk_ image_ new_ from_ file (( char *) user_ data); 96 /* */ 97 gtk_ container_ add ( GTK_ CONTAINER( scroll_ window), image); 98 } 99 } 100 /* */ 101 gtk_ widget_ show_ all ( window); 102 } 103 104 /* 105 106 */ 107 int 108 main ( int argc, char ** argv) 109 { 110 GtkApplication * app; 111 GtkWidget * window; 112 113 /* */ 114 if (argc!= 2) 115 { 116 g_print ("Usage: %s image -file\n", argv[0]); 117 exit (1); 118 } 119 /* */ 120 app = gtk_ application_ new (" test. gtk. imageviewer", 0); 121 /* */ 122 g_ action_ map_ add_ action_ entries ( G_ ACTION_ MAP ( app), 123 entries, G_ N_ ELEMENTS ( entries), 124 app); 125 /* */ 126 g_ signal_ connect ( app, " activate", G_ CALLBACK( cb_ activate), argv[ 1]); 127 /* */ 128 g_ application_ run ( G_ APPLICATION( app), 0, NULL); 129 130 return 0; 131 } 2.7.8 GtkBuilder 1. 2. 3. 4. 2.8 GTK+

2.8 29 2.8.1 gtk file chooser dialog new GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new ("Open an image", GTK_WINDOW (window), GTK_FILE_CHOOSER_ACTION_OPEN, "_Cancel", GTK_RESPONSE_CANCEL, "_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,...); 1 2 3 4 5 ID 2 3 GTK FILE CHOOSER ACTION OPEN GTK FILE CHOOSER ACTION SAVE 4 5 2 1 ID GTK RESPONSE CANCEL ID GTK RESPONSE ACCEPT NULL 2.8.2 gtk dialog run gint response; response = gtk_dialog_run (GTK_DIALOG (dialog)); ID gint gtk_ dialog_ run ( GtkDialog * dialog); 1 ID

30 2 GTK+ 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 2.8.3 2 7 131 gtk image new 2.12 2 7 : 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 ( GSimpleAction * action, 9 GVariant * paramter, 10 gpointer user_ data) 11 { 12 GtkApplication * app; 13 GtkWindow * window; 14 GtkWidget * dialog; 15 gint response; 16 17 /* */ 18 app = GTK_ APPLICATION ( user_ data); 19 window = gtk_ application_ get_ active_ window ( app); 20 /* */ 21 dialog = gtk_ file_ chooser_ dialog_ new (" Open an image", 22 GTK_ WINDOW ( window), 23 GTK_FILE_CHOOSER_ACTION_ OPEN, 24 "_Cancel", 25 GTK_RESPONSE_CANCEL, 26 "_Open", 27 GTK_RESPONSE_ACCEPT, 28 NULL); 29 /* */ 30 gtk_ widget_ show_ all ( dialog); 31 /* */ 32 response = gtk_ dialog_ run ( GTK_ DIALOG ( dialog)); 33 if ( response == GTK_ RESPONSE_ ACCEPT) 34 { 35 gchar * filename; 36 GtkWidget * image; 37 38 /* */ 39 filename = gtk_ file_ chooser_ get_ filename ( GTK_ FILE_ CHOOSER ( dialog));

2.8 31 (a) (b) 2.12 40 /* */ 41 image = GTK_WIDGET (g_object_get_data (G_OBJECT (window), "image")); 42 /* */ 43 gtk_ image_ set_ from_ file ( GTK_ IMAGE ( image), filename); 44 /* */ 45 g_ free ( filename); 46 } 47 /* */ 48 gtk_ widget_ destroy ( dialog); 49 } 50 51 /* 52 53 */ 54 static void 55 cb_ quit ( GSimpleAction * action, 56 GVariant * parameter, 57 gpointer user_ data)

32 2 GTK+ 58 { 59 /* */ 60 GApplication * app = G_ APPLICATION ( user_ data); 61 g_ application_ quit ( app); 62 } 63 64 /* 65 * 66 */ 67 static const gchar menu_ info[] = 68 " <interface >" 69 " <menu id= appmenu >" 70 " <submenu >" 71 " <attribute name= label >File </ attribute >" 72 " <section >" 73 " <item >" 74 " <attribute name= label >Open </ attribute >" 75 " <attribute name= action >app. open </ attribute >" 76 " <attribute name= accel >< Primary& gt; o</ attribute >" 77 " </item >" 78 " </section >" 79 " <section >" 80 " <item >" 81 " <attribute name= label >Quit </ attribute >" 82 " <attribute name= action >app. quit </ attribute >" 83 " <attribute name= accel >< Primary& gt; q</ attribute >" 84 " </item >" 85 " </section >" 86 " </submenu >" 87 " </menu >" 88 " </interface >"; 89 90 /* 91 * 92 */ 93 static GActionEntry entries[] = { 94 {"open", cb_open, NULL, NULL, NULL}, 95 {"quit", cb_quit, NULL, NULL, NULL}, 96 }; 97 98 /* 99 * 100 */ 101 static void cb_ activate ( GApplication * app, 102 gpointer user_ data) 103 { 104 GtkWidget * window; 105 106 /* */ 107 window = gtk_ application_ window_ new ( GTK_ APPLICATION ( app)); 108 /* */ 109 gtk_ widget_ set_ size_ request ( window, 300, 200); 110 /* */ 111 GtkBuilder * builder; 112 builder = gtk_ builder_ new (); 113 gtk_ builder_ add_ from_ string ( builder, menu_info, -1, NULL); 114 GMenuModel * menubar; 115 menubar = ( GMenuModel *) gtk_ builder_ get_ object ( builder, " appmenu"); 116 gtk_ application_ set_ menubar ( GTK_ APPLICATION ( app), menubar); 117 { 118 /* */ 119 GtkWidget * scroll_ window; 120 scroll_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 121 /* */ 122 gtk_ container_ add ( GTK_ CONTAINER ( window), scroll_ window); 123 /* */ 124 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW ( scroll_ window), 125 GTK_POLICY_AUTOMATIC, 126 GTK_ POLICY_ AUTOMATIC); 127 { 128 GtkWidget * image; 129 130 /* */ 131 image = gtk_ image_ new (); 132 /* */

2.8 33 133 g_ object_ set_ data ( G_ OBJECT ( window), " image", ( gpointer) image); 134 /* */ 135 gtk_ container_ add ( GTK_ CONTAINER( scroll_ window), image); 136 } 137 } 138 /* */ 139 gtk_ widget_ show_ all ( window); 140 } 141 142 /* 143 144 */ 145 int 146 main ( int argc, char ** argv) 147 { 148 GtkApplication * app; 149 150 /* */ 151 app = gtk_ application_ new (" test. gtk. imageviewer", 0); 152 /* */ 153 g_ action_ map_ add_ action_ entries ( G_ ACTION_ MAP ( app), 154 entries, G_ N_ ELEMENTS ( entries), 155 app); 156 /* */ 157 g_ signal_ connect ( app, " activate", G_ CALLBACK( cb_ activate), NULL); 158 /* */ 159 g_ application_ run ( G_ APPLICATION( app), 0, NULL); 160 161 return 0; 162 } 2.8.4 GTK+ GTK+