ソフトウェア設計及び演習2016
GDK2016::exposeイベント
exposeイベント
-
画面の再描画が必要になったとき起こるイベント
- ウィンドウが初めて可視化されたとき,
- 他のウィンドウの後ろにあったものが,前に来たとき,など
exposeイベントの設定
void gtk_widget_set_events (GtkWidget *widget, gint events);
-
gtk_widget_set_events
- 入門GTK+ 3版pdf:249(261)ページ
#define g_signal_connect(instance, detailed_signal, c_handler, data)
-
g_signal_connect
- 入門GTK+ 3版pdf:40(52)ページ
void gdk_cairo_set_source_pixmap (cairo_t *cr, GdkPixmap *pixmap, double pixmap_x, double pixmap_y);
ピクスマップをドローイングエリアにコピーする
- main関数
/* exposeイベントのコールバックを設定 */ gtk_widget_set_events(widget, GDK_EXPOSURE_MASK); /* 最後の引数はコールバックの第3引数になる */ g_signal_connect(G_OBJECT(widget), "expose_event", G_CALLBACK(cb_expose_event), pixmap);
- コールバック関数
/* exposeイベントのコールバック */ static gint cb_expose_event(GtkWidget *widget, GdkEventExpose *event, GdkPixmap *pixmap) { cairo_t *cr; /* ピクスマップをドローイングエリアに必要な部分だけコピー */ /* ドローイングエリアからコンテキスト&サーフェスを作成 */ cr = gdk_cairo_create(widget->window); /* ソースをピクスマップにセット */ gdk_cairo_set_source_pixmap(cr, pixmap, 0.0, 0.0); /* 必要な部分だけを塗りつぶす */ cairo_rectangle(cr, event->area.x, event->area.y, event->area.width, event->area.height); cairo_fill(cr); /* 使い終わったコンテキストを破棄 */ cairo_destroy(cr); return FALSE; }
- 再描画が必要な領域の情報は、コールバック関数の第2引数eventに入っている
最終更新日:2015/05/29 09:35:58