void _rbgst_define_class_if_need(VALUE klass, GType type, const gchar *prefix) { VALUE parent; const gchar *type_name; gchar *class_name = NULL; static ID id_gtype = 0; if (rb_class2name(klass)[0] != '#') return; type_name = g_type_name(type); if (g_str_has_prefix(type_name, "Gst")) type_name += 3; if (prefix) class_name = g_strconcat(prefix, type_name, NULL); G_DEF_CLASS(type, class_name ? class_name : type_name, mGst); g_free(class_name); parent = rb_ary_entry(rb_mod_ancestors(klass), 1); if (!id_gtype) id_gtype = rb_intern("gtype"); if (rb_respond_to(parent, id_gtype)) _rbgst_define_class_if_need(parent, CLASS2GTYPE(parent), prefix); }
static void define_class_if_need(VALUE klass, GType type) { _rbgst_define_class_if_need(klass, type, "Element"); }