首页 > 解决方案 > 如何将 cairo_surface_t 作为 g_signal_connect 中的参数传递?

问题描述

我打算为所有configure-eventg_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. 使用上面的方法给我一个段错误,这样做的正确方法是什么?

标签: c++gtkgnomecairo

解决方案


推荐阅读