!!! 背景 * GdkWindowを持つウィジェットに設定できる ** ややこしいがGtkWindowではなく、GdkWindowに対して設定する ** でも、GtkWindowもGdkWindowを内包しているので、GtkWindowにも背景は設定できる *** つまり、GdkWindowは純粋に描画するためのWindowで、GtkWindowはそれ以外の部分(タイトル、サイズ、フォーカスなどなど)を含んだ概念というか構造体 * 次のリンク先に示すウィジェットはGdkWindowを持っていない ** [ウィンドウを持たないウィジット|http://library.gnome.org/devel/gtk-tutorial/stable/x481.html] ** 逆にいえば、上記以外のウィジェットには背景を設定できる(はず) * 一度背景に設定すれば、後はクリアするだけでGTKが背景を描き直してくれる !! 背景の設定 8< void gdk_window_set_back_pixmap (GdkWindow *window, GdkPixmap *pixmap, gboolean parent_relative); >8 * [gdk_window_set_back_pixmap|http://developer.gnome.org/gdk/2.24/gdk-Windows.html#gdk-window-set-back-pixmap] ** 入門GTK+ 3版pdf:72(84)ページ * 第2引数をNULL、第3引数をTRUEにすると、親ウィジェットの背景が透けて見える 8< void gtk_widget_set_app_paintable (GtkWidget *widget, gboolean app_paintable); >8 * [gtk_widget_set_app_paintable|http://developer.gnome.org/gtk/2.24/GtkWidget.html#gtk-widget-set-app-paintable] * GtkWindowとGtkEventBoxの背景は、この命令でTRUEに設定しない限り書き換えることができない !! 背景でクリア 8< void gdk_window_clear (GdkWindow *window); >8 * [gdk_window_clear|http://developer.gnome.org/gdk/2.24/gdk-Windows.html#gdk-window-clear] ** 入門GTK+ 3版pdf:72(84)ページ ! 適当なピックスマップ or 親ウィンドウの背景をドローイングエリアの背景として使用 * my_animation_ball関数 8< /* 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); >8 * cb_configure_event関数 8< if((*(gboolean *)data)) { /* 親ウィジェットの背景を透過 */ gdk_window_set_back_pixmap(widget->window, NULL, TRUE); } else { /* ピックスマップをドローイングエリアの背景に設定 */ gdk_window_set_back_pixmap(widget->window, pixmap, FALSE); } >8 * draw_animation関数 8< /* セットしてある背景でドローイイングエリアをクリア */ gdk_window_clear(anime->drawing_area->window); >8