• 検索結果がありません。

GtkApplication フレームワークへの対応

ドキュメント内 ÆþÌçGTK+ (ページ 32-35)

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の第1引数にはアプリケーションIDとして固有の文字列を与えます. アプリケーションIDとし

て与える文字列にどのような約束があるのかは詳細は不明ですが,ピリオド(.)が含まれている必要があるようです. 第2引数 のアプリケーションフラグには通常0 (G APPLICATION FLAGS NONE)を与えればよいでしょう.

G t k A p p l i c a t i o n * g t k _ a p p l i c a t i o n _ n e w (c o n s t g c h a r * a p p l i c a t i o n _ i d , G A p p l i c a t i o n F l a g s f l a g s ) ;

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

2.6 GtkApplicationフレームワークへの対応 21 第1引数 アプリケーションID.

第2引数 アプリケーションフラグ.

戻り値 生成したGtkApplication

アプリケーションのループを開始するためには,これまでの関数gtk mainの代わりに関数g application run を呼び出し ます.

i n t g _ a p p l i c a t i o n _ r u n ( G A p p l i c a t i o n * a p p l i c a t i o n , i n t ar g c , c h a r * * a r g v ) ;

第1引数 GApplicationクラスの変数. 第2引数 コマンドライン引数の数. 第3引数 コマンドライン引数.

また,プログラムを終了するための方法が関数gtk main quitから関数g application quitに変わります. v o i d g _ a p p l i c a t i o n _ q u i t ( G A p p l i c a t i o n * a p p l i c a t i o n ) ;

第1引数 GApplicationクラスの変数.

2.6.2 GUI の作成

GUIの作成については,これまでに説明した方法に変わりはありませんが,ソース2–5では, GtkApplicationクラスの変数が 有効になったタイミング,すなわち, activateシグナルが発生したときに呼び出されるコールバック関数内でGUIの作成を行っ ています.

もう一つの変更点は,ウィンドウウィジェットを作成する方法が関数gtk window newから関数gtk application window new に変わったことです.

G t k W i d g e t * g t k _ a p p l i c a t i o n _ w i n d o w _ n e w (G t k A p p l i c a t i o n * a p p l i c a t i o n ) ;

第1引数 GtkApplicationクラスの変数.

ソース2–5 GtkAppliction版への変更: image-viewer.c

1 # i n c l u d e <g t k / g t k . h >

2 # i n c l u d e <s t d l i b . h >

3 4 / *

5 ボ タ ン が ク リ ッ ク さ れ た と き に 呼 び 出 さ れ る 関 数 6 * /

7 s t a t i c v o i d

8 c b _ b u t t o n _ c l i c k e d (G t k W i d g e t * b u t t o n , g p o i n t e r u s e r _ d a t a )

9 {

10 / * メ イ ン ル ー プ を 終 了 * /

GTK+ライブラリの初期化

GUIの作成

GUIの表示

アプリケーションの開始

GtkApplicationの作成

GUIの作成

GUIの表示

アプリケーションの開始

g t g t

g t g t

t自動的にg tが呼び出される

図2.9 GtkApplicationを用いたプログラムの流れ

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

11 G A p p l i c a t i o n * a p p = G _ A P P L I C A T I O N ( u s e r _ d a t a ) ;

12 g _ a p p l i c a t i o n _ q u i t ( a p p ) ;

13 }

14 15 / *

16 * ア プ リ ケ ー シ ョ ン が 有 効 に な っ た と き に 呼 び 出 さ れ る 関 数 17 * /

18 s t a t i c v o i d

19 c b _ a c t i v a t e ( G A p p l i c a t i o n * app , g p o i n t e r u s e r _ d a t a )

20 {

21 G t k W i d g e t * w i n d o w ;

22

23 / * ウ ィ ン ド ウ の 作 成 * /

24 w i n d o w = g t k _ a p p l i c a t i o n _ w i n d o w _ n e w ( G T K _ A P P L I C A T I O N ( a p p ) ) ;

25 / * ウ ィ ン ド ウ の 大 き さ の 設 定 * /

26 g t k _ w i d g e t _ s e t _ s i z e _ r e q u e s t ( w i n d o w , 3 0 0 , 2 0 0 ) ;

27 {

28 G t k W i d g e t* v b o x ;

29

30 / * 縦 に ウ ィ ジ ェ ッ ト を 配 置 す る ボ ッ ク ス の 作 成 * /

31 v b o x = g t k _ b o x _ n e w ( G T K _ O R I E N T A T I O N _ V E R T I C A L , 2 ) ;

32 / * ボ ッ ク ス を ウ ィ ン ド ウ に 配 置 * /

33 g t k _ c o n t a i n e r _ a d d ( G T K _ C O N T A I N E R ( w i n d o w ) , v b o x ) ;

34 {

35 G t k W i d g e t * s c r o l l _ w i n d o w ;

36 G t k W i d g e t * b u t t o n ;

37

38 / * ス ク ロ ー ル バ ー 付 き ウ ィ ン ド ウ の 作 成 * /

39 s c r o l l _ w i n d o w = g t k _ s c r o l l e d _ w i n d o w _ n e w ( N U L L , N U L L ) ;

40 / * ス ク ロ ー ル バ ー 付 き ウ ィ ン ド ウ を ボ ッ ク ス に 配 置 * /

41 g t k _ b o x _ p a c k _ s t a r t ( G T K _ B O X ( v b o x ) , s c r o l l _ w i n d o w , T R U E , T R U E , 0 ) ;

42 / * ス ク ロ ー ル バ ー の 表 示 設 定 * /

43 g t k _ s c r o l l e d _ w i n d o w _ s e t _ p o l i c y ( G T K _ S C R O L L E D _ W I N D O W ( s c r o l l _ w i n d o w ) ,

44 G T K _ P O L I C Y _ A U T O M A T I C ,

45 G T K _ P O L I C Y _ A U T O M A T I C ) ;

46 {

47 G t k W i d g e t * i m a g e ;

48

49 / * フ ァ イ ル か ら 画 像 を 読 み 込 ん で イ メ ー ジ の 作 成 * /

50 i m a g e = g t k _ i m a g e _ n e w _ f r o m _ f i l e ( (c h a r * ) u s e r _ d a t a ) ;

51 / * イ メ ー ジ を ス ク ロ ー ル バ ー 付 き ウ ィ ン ド ウ に 配 置 * /

52 g t k _ c o n t a i n e r _ a d d ( G T K _ C O N T A I N E R ( s c r o l l _ w i n d o w ) , i m a g e ) ;

53 }

54 / * ボ タ ン の 作 成 * /

55 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " Q u i t " ) ;

56 / * ボ タ ン が ク リ ッ ク さ れ た と き に 呼 び 出 さ れ る 関 数 の 設 定 * /

57 g _ s i g n a l _ c o n n e c t ( G _ O B J E C T ( b u t t o n ) , " c l i c k e d " ,

58 G _ C A L L B A C K ( c b _ b u t t o n _ c l i c k e d ) , a p p ) ;

59 / * ボ タ ン を ボ ッ ク ス に 配 置 * /

60 g t k _ b o x _ p a c k _ s t a r t ( G T K _ B O X ( v b o x ) , b u t t o n , F A L S E , F A L S E , 0 ) ;

61 }

62 }

63 / * ウ ィ ン ド ウ の 表 示 * /

64 g t k _ w i d g e t _ s h o w _ a l l ( w i n d o w ) ;

65 }

66 67 / *

68 メ イ ン 関 数 69 * /

70 i n t

71 m a i n (i n t ar g c , c h a r * * a r g v )

72 {

73 G t k A p p l i c a t i o n * a p p ;

74

75 / * 引 数 の チ ェ ッ ク * /

76 i f ( a r g c ! = 2 )

77 {

78 g _ p r i n t ( " U s a g e : ␣ % s ␣ i m a g e - f i l e \ n " , a r g v [ 0 ] ) ;

79 e x i t ( 1 ) ;

80 }

81 / * ア プ リ ケ ー シ ョ ン の 作 成 * /

82 a p p = g t k _ a p p l i c a t i o n _ n e w ( " g t k . i m a g e v i e w e r " , 0 ) ;

83 / * シ グ ナ ル ハ ン ド ラ の 登 録 * /

84 g _ s i g n a l _ c o n n e c t ( app , " a c t i v a t e " , G _ C A L L B A C K ( c b _ a c t i v a t e ) , a r g v [ 1 ] ) ;

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

ドキュメント内 ÆþÌçGTK+ (ページ 32-35)

関連したドキュメント