Implements the creation of GObject subclasses from Ruby.
# File lib/gir_ffi/builder/type/user_defined.rb, line 11 def initialize klass, &block @block = block @klass_before_set_up = klass end
# File lib/gir_ffi/builder/type/user_defined.rb, line 16 def instantiate_class @klass = @klass_before_set_up @info = GirFFI::UserDefined::IObjectInfo.new self.instance_eval(&@block) if @block parent_type = @klass.get_gtype @parent = gir.find_by_gtype(parent_type) query_result = GObject.type_query parent_type type_info = GObject::TypeInfo.new type_info.class_size = query_result.class_size type_info.instance_size = query_result.instance_size properties.each do type_info.instance_size += FFI.type_size(:int32) end new_type = GObject.type_register_static parent_type, @klass.name, type_info, 0 # TODO: Check that class ultimately derives from GObject. @gtype = new_type @structklass = get_or_define_class @klass, :Struct, layout_superclass setup_class unless already_set_up CACHE[@gtype] = @klass end
# File lib/gir_ffi/builder/type/user_defined.rb, line 42 def setup_class setup_layout setup_constants #stub_methods setup_gtype_getter setup_property_accessors #setup_vfunc_invokers #setup_interfaces setup_constructor end