ソフトウェア設計及び演習2016
GDK2016::背景
背景
-
GdkWindowを持つウィジェットに設定できる
- ややこしいがGtkWindowではなく、GdkWindowに対して設定する
- でも、GtkWindowもGdkWindowを内包しているので、GtkWindowにも背景は設定できる
- つまり、GdkWindowは純粋に描画するためのWindowで、GtkWindowはそれ以外の部分(タイトル、サイズ、フォーカスなどなど)を含んだ概念というか構造体
-
次のリンク先に示すウィジェットはGdkWindowを持っていない
- ウィンドウを持たないウィジット
- 逆にいえば、上記以外のウィジェットには背景を設定できる(はず)
- 一度背景に設定すれば、後はクリアするだけでGTKが背景を描き直してくれる
背景の設定
void gdk_window_set_back_pixmap (GdkWindow *window, GdkPixmap *pixmap, gboolean parent_relative);
-
gdk_window_set_back_pixmap
- 入門GTK+ 3版pdf:72(84)ページ
- 第2引数をNULL、第3引数をTRUEにすると、親ウィジェットの背景が透けて見える
void gtk_widget_set_app_paintable (GtkWidget *widget, gboolean app_paintable);
- gtk_widget_set_app_paintable
- GtkWindowとGtkEventBoxの背景は、この命令でTRUEに設定しない限り書き換えることができない
背景でクリア
void gdk_window_clear (GdkWindow *window);
-
gdk_window_clear
- 入門GTK+ 3版pdf:72(84)ページ
適当なピックスマップ or 親ウィンドウの背景をドローイングエリアの背景として使用
- my_animation_ball関数
/* configureイベントのコールバックを設定 ドローイングエリア生成時に背景を設定する */ gtk_widget_set_events(drawing_area, GDK_STRUCTURE_MASK); /* 最後の引数はコールバックの第3引数になる */ g_signal_connect(G_OBJECT(drawing_area), "configure_event", G_CALLBACK(cb_configure_event), (gpointer)transp);
- cb_configure_event関数
if((*(gboolean *)data)) { /* 親ウィジェットの背景を透過 */ gdk_window_set_back_pixmap(widget->window, NULL, TRUE); } else { /* ピックスマップをドローイングエリアの背景に設定 */ gdk_window_set_back_pixmap(widget->window, pixmap, FALSE); }
- draw_animation関数
/* セットしてある背景でドローイイングエリアをクリア */ gdk_window_clear(anime->drawing_area->window);
最終更新日:2015/03/05 10:01:29