簡単に言えば、あなたはカイロのコンテキストを提供します引き分け信号をオーバーライドする必要があります。 C APIから
:
GtkDrawingAreaウィジェットはカスタムユーザーインターフェイスに 要素を作成するために使用されます。基本的に空白のウィジェットです。あなたはそれを描くことができます。 描画領域を作成した後、アプリケーションは次の場所に接続したいことがあります。
ユーザーからの入力に応答するためのマウスとボタンの押下信号。 (あなたが受け取りたいイベントを有効にする gtk_widget_add_events()を使用してください。)
「実現」信号をウィジェットが特定のディスプレイ上でインスタンス化されるときに必要なアクションを取ること。
ウィジェットのサイズが変更されたときに必要なアクションを実行するための「サイズ割り当て」信号。
ウィジェットの内容を再描画するための "draw"シグナル。ウィジェットの変更は、例えば、サイズに再度itsef描画するウィジェットを強制的にgtk_widget_queue_draw
を使用する必要があります割り当てる際に一部をキューに入れる必要があります
ウィジェットを描画します。
例 - 描画領域を使用していないサブとしてそれをクラス分けが、コンセプトが残る: はGtkWidget
に
gboolean
draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data)
{
guint width, height;
GdkRGBA color;
GtkStyleContext *context;
context = gtk_widget_get_style_context (widget);
width = gtk_widget_get_allocated_width (widget);
height = gtk_widget_get_allocated_height (widget);
gtk_render_background (context, cr, 0, 0, width, height);
cairo_arc (cr,
width/2.0, height/2.0,
MIN (width, height)/2.0,
0, 2 * G_PI);
gtk_style_context_get_color (context,
gtk_style_context_get_state (context),
&color);
gdk_cairo_set_source_rgba (cr, &color);
cairo_fill (cr);
return FALSE;
}
[...]
GtkWidget *drawing_area = gtk_drawing_area_new();
gtk_widget_set_size_request (drawing_area, 100, 100);
g_signal_connect (G_OBJECT (drawing_area), "draw",
G_CALLBACK (draw_callback), NULL);
あなたはまた、高さ - のための幅のジオメトリ管理についてお読みください(Gnome C APIから撮影)
私はあなたの質問にプログラミング言語への参照がなく、同時に他のすべてが書かれている元のAPIなので、Cを使用しました。
インターネット上にGtk +カスタムウィジェットを作成する例がいくつかあります。