私は現在、C を使用して GTK+3/cairo を学習しようとしています。cairo を使用して gtk 描画領域にゲージ面と針を描画する小さなアプリケーションを作成しました。
これはこれまでのところうまく機能します。描画イベントに対して同じコールバック関数を持つ複数の描画領域 (複数のゲージ) を作成しようとしましたが、これは静的な値でもうまく機能します。
私の質問ですが、それぞれ独自の値を持つ複数のゲージを描画できるようにしたいと考えています。しかし、コールバック関数でどのゲージ (描画領域) が描画信号を発したかを知るにはどうすればよいでしょうか? これには、ゲージのデータを「作成して保存」する方法も含まれていると思います。これにより、描画コールバック内からプロパティを取得できます。
おそらく、ゲージのデータを保持する構造体を作成し、それらを複数作成する必要があります。これは、GTK を使用するさまざまなプロジェクトを調べて集めたものですが、複雑すぎて、その仕組みを完全に理解することはできません。
これは、描画領域を作成する方法です:
gaugearea1 = gtk_drawing_area_new();
gtk_box_pack_start(GTK_BOX(hbox), gaugearea1, FALSE, FALSE, 5);
gtk_widget_set_size_request(gaugearea1, 300, 300);
gtk_widget_realize(gaugearea1);
g_signal_connect(gaugearea1, "draw", G_CALLBACK(draw_event), NULL);
コールバック関数はこのように書かれており、かなり標準的です。
static gboolean draw_event(GtkWidget *widget, cairo_t *cr)
{
GdkWindow *win;
win = gtk_widget_get_window(widget);
// Draw all arcs/lines using cr
}
このようなものにアプローチする方法についてのヒントは大歓迎です。