class GirFFI::Builder::Type::UserDefined

Implements the creation of GObject subclasses from Ruby.

Public Class Methods

new(klass, &block) click to toggle source
# File lib/gir_ffi/builder/type/user_defined.rb, line 11
def initialize klass, &block
  @block = block
  @klass_before_set_up = klass
end

Public Instance Methods

instantiate_class() click to toggle source
# 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
setup_class() click to toggle source
# 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