Я намереваюсь создать универсальную функцию обратного вызова для всех configure-event
и g_signal_connect
. Выглядит это так:
int
generic_configure_event(
GtkWidget *widget,
GdkEventConfigure *event,
void *gData)
{
cairo_surface_t *surface = static_cast<cairo_surface_t *>(gData);
...
if (*surface)
cairo_surface_destroy(*surface);
*surface = gdk_window_create_similar_surface(
gtk_widget_get_window(widget), CAIRO_CONTENT_COLOR,
save_w, save_h);
cairo_t *cr = cairo_create(*surface);
return TRUE;
}
int
main(){
g_signal_connect(widget1,"configure-event",G_CALLBACK(generic_configure_event),&surface1);
g_signal_connect(widget2,"configure-event",G_CALLBACK(generic_configure_event),&surface2);
g_signal_connect(widget3,"configure-event",G_CALLBACK(generic_configure_event),&surface3);
...
}
Более сложным является то, что кроме передачи cairo_surface_t
в качестве аргумента, мы также получили возможность обновить эту конкретную поверхность в generic_configure_event
. Использование вышеизложенного дает мне ошибку, какой правильный способ это сделать?