В настоящее время я пытаюсь изучить GTK + 3/cairo, используя C. Я написал небольшое приложение, которое рисует грань датчика и стрелку в области рисования gtk, используя cairo.
До сих пор это работало хорошо, я пытался создать несколько областей рисования (несколько датчиков), которые имеют одну и ту же функцию обратного вызова для события рисования, это также хорошо работает со статическими значениями.
Теперь мой вопрос: я хотел бы иметь возможность рисовать несколько датчиков, каждый со своими значениями. Но как мне узнать в моей функции обратного вызова, какой датчик (область рисования) испустил сигнал отрисовки? Я предполагаю, что это также включает в себя то, как я «создаю и храню» данные для датчиков, чтобы их свойства можно было получить из обратного вызова отрисовки.
Вероятно, мне следует создать структуру, содержащую данные для датчика, и создать несколько таких. Это то, что я понял, просматривая различные проекты, использующие 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
}
Буду очень признателен за любые советы о том, как подойти к чему-то подобному.