Sha256: bde6fa633f83bec1307b2b6afecf588bdb6fcf48f5d8d027ba5ff27db49bae0d

Contents?: true

Size: 1.91 KB

Versions: 4

Compression:

Stored size: 1.91 KB

Contents

# frozen_string_literal: true

require "gir_ffi/class_base"

module GirFFI
  # Base class for all generated classes of type :object.
  class ObjectBase < ClassBase
    extend FFI::DataConverter

    def object_class
      self.class.object_class
    end

    def self.native_type
      FFI::Type::POINTER
    end

    def self.to_ffi_type
      self
    end

    def self.to_native(obj, _context)
      obj.to_ptr
    end

    def self.get_value_from_pointer(pointer, offset = 0)
      pointer.get_pointer offset
    end

    def self.copy_value_to_pointer(value, pointer, offset = 0)
      pointer.put_pointer offset, value.to_ptr
    end

    # Wrap the passed pointer in an instance of its type's corresponding class,
    # generally assumed to be a descendant of the current type.
    def self.wrap(ptr)
      ptr.to_object
    end

    def self.copy_from(val)
      val&.ref
    end

    #
    # Find property info for the named property.
    #
    # @param name The property's name
    #
    # @return [GObjectIntrospection::IPropertyInfo] The property's info
    #
    def self.find_property(name)
      gir_ffi_builder.find_property name
    end

    #
    # Find signal info for the named signal.
    #
    # @param name The signal's name
    #
    # @return [GObjectIntrospection::ISignalInfo] The signal's info
    #
    def self.find_signal(name)
      gir_ffi_builder.find_signal name or
        raise GirFFI::SignalNotFoundError.new(name, self)
    end

    def self.object_class
      @object_class ||=
        begin
          ptr = GObject::Lib.g_type_class_ref(gtype)
          gir_ffi_builder.object_class_struct.wrap ptr
        end
    end

    def self.included_interfaces
      included_modules.select { |it| it.singleton_class.include? InterfaceBase }
    end

    def self.registered_ancestors
      ancestors.select do |it|
        it < GirFFI::ObjectBase || it.singleton_class.include?(InterfaceBase)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
gir_ffi-0.15.3 lib/gir_ffi/object_base.rb
gir_ffi-0.15.2 lib/gir_ffi/object_base.rb
gir_ffi-0.15.1 lib/gir_ffi/object_base.rb
gir_ffi-0.15.0 lib/gir_ffi/object_base.rb