ソフトウェア設計及び演習2015

GDK2015::背景

背景

  • GdkWindowを持つウィジェットに設定できる
    • ややこしいがGtkWindowではなく、GdkWindowに対して設定する
    • でも、GtkWindowもGdkWindowを内包しているので、GtkWindowにも背景は設定できる
      • つまり、GdkWindowは純粋に描画するためのWindowで、GtkWindowはそれ以外の部分(タイトル、サイズ、フォーカスなどなど)を含んだ概念というか構造体
  • 一度背景に設定すれば、後はクリアするだけで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);
適当なピックスマップ 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