gir_ffi 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/DESIGN.rdoc +9 -0
- data/History.txt +11 -0
- data/TODO.rdoc +6 -9
- data/examples/01_empty_window.rb +1 -1
- data/examples/02_hello_world.rb +4 -4
- data/examples/03_upgraded_hello_world.rb +7 -8
- data/lib/gir_ffi.rb +0 -4
- data/lib/gir_ffi/arg_helper.rb +27 -2
- data/lib/gir_ffi/builder.rb +13 -86
- data/lib/gir_ffi/builder_helper.rb +2 -15
- data/lib/gir_ffi/class_base.rb +51 -0
- data/lib/gir_ffi/class_builder.rb +178 -52
- data/lib/gir_ffi/function_definition_builder.rb +46 -9
- data/lib/gir_ffi/g_object.rb +37 -0
- data/lib/gir_ffi/i_arg_info.rb +27 -9
- data/lib/gir_ffi/i_base_info.rb +12 -4
- data/lib/gir_ffi/i_callable_info.rb +15 -5
- data/lib/gir_ffi/i_enum_info.rb +9 -3
- data/lib/gir_ffi/i_field_info.rb +12 -4
- data/lib/gir_ffi/i_function_info.rb +24 -8
- data/lib/gir_ffi/i_object_info.rb +63 -21
- data/lib/gir_ffi/i_registered_type_info.rb +11 -0
- data/lib/gir_ffi/i_repository.rb +2 -2
- data/lib/gir_ffi/i_signal_info.rb +1 -1
- data/lib/gir_ffi/i_struct_info.rb +24 -8
- data/lib/gir_ffi/i_type_info.rb +24 -8
- data/lib/gir_ffi/i_union_info.rb +15 -0
- data/lib/gir_ffi/i_value_info.rb +3 -1
- data/lib/gir_ffi/i_vfunc_info.rb +12 -1
- data/lib/gir_ffi/lib.rb +23 -1
- data/lib/gir_ffi/lib_c.rb +1 -1
- data/lib/gir_ffi/module_base.rb +19 -0
- data/lib/gir_ffi/module_builder.rb +67 -20
- data/lib/gir_ffi/overrides/gobject.rb +174 -0
- data/lib/gir_ffi/overrides/gtk.rb +26 -9
- data/test/builder_test.rb +57 -37
- data/test/{base_test.rb → class_base_test.rb} +3 -3
- data/test/class_builder_test.rb +48 -6
- data/test/everything_test.rb +285 -36
- data/test/function_definition_builder_test.rb +11 -9
- data/test/g_object_test.rb +22 -0
- data/test/gobject_overrides_test.rb +216 -0
- data/test/i_object_info_test.rb +21 -0
- data/test/module_builder_test.rb +54 -0
- data/test/test_helper.rb +6 -4
- metadata +18 -14
- data/lib/gir_ffi/base.rb +0 -25
- data/lib/gir_ffi/constructor_definition_builder.rb +0 -20
- data/lib/gir_ffi/g_type.rb +0 -14
- data/lib/gir_ffi/method_missing_definition_builder.rb +0 -59
- data/test/constructor_definition_builder_test.rb +0 -19
- data/test/g_type_test.rb +0 -22
data/lib/gir_ffi/i_base_info.rb
CHANGED
@@ -32,10 +32,18 @@ module GirFFI
|
|
32
32
|
|
33
33
|
private_class_method :new
|
34
34
|
|
35
|
-
def name
|
36
|
-
|
37
|
-
|
38
|
-
def
|
35
|
+
def name
|
36
|
+
Lib.g_base_info_get_name @gobj
|
37
|
+
end
|
38
|
+
def type
|
39
|
+
Lib.g_base_info_get_type @gobj
|
40
|
+
end
|
41
|
+
def namespace
|
42
|
+
Lib.g_base_info_get_namespace @gobj
|
43
|
+
end
|
44
|
+
def deprecated?
|
45
|
+
Lib.g_base_info_is_deprecated @gobj
|
46
|
+
end
|
39
47
|
|
40
48
|
def self.wrap ptr
|
41
49
|
return nil if ptr.null?
|
@@ -6,11 +6,21 @@ module GirFFI
|
|
6
6
|
# Wraps a GICallableInfo struct; represents a callable, either
|
7
7
|
# IFunctionInfo, ICallbackInfo or IVFuncInfo.
|
8
8
|
class ICallableInfo < IBaseInfo
|
9
|
-
def return_type
|
10
|
-
|
11
|
-
|
12
|
-
def
|
13
|
-
|
9
|
+
def return_type
|
10
|
+
ITypeInfo.wrap(Lib.g_callable_info_get_return_type @gobj)
|
11
|
+
end
|
12
|
+
def caller_owns
|
13
|
+
Lib.g_callable_info_get_caller_owns @gobj
|
14
|
+
end
|
15
|
+
def may_return_null?
|
16
|
+
Lib.g_callable_info_may_return_null @gobj
|
17
|
+
end
|
18
|
+
def n_args
|
19
|
+
Lib.g_callable_info_get_n_args @gobj
|
20
|
+
end
|
21
|
+
def arg(index)
|
22
|
+
IArgInfo.wrap(Lib.g_callable_info_get_arg @gobj, index)
|
23
|
+
end
|
14
24
|
##
|
15
25
|
build_array_method :args
|
16
26
|
end
|
data/lib/gir_ffi/i_enum_info.rb
CHANGED
@@ -2,12 +2,18 @@ module GirFFI
|
|
2
2
|
# Wraps a GIEnumInfo struct if it represents an enum.
|
3
3
|
# If it represents a flag, an IFlagsInfo object is used instead.
|
4
4
|
class IEnumInfo < IRegisteredTypeInfo
|
5
|
-
def n_values
|
6
|
-
|
5
|
+
def n_values
|
6
|
+
Lib.g_enum_info_get_n_values @gobj
|
7
|
+
end
|
8
|
+
def value(index)
|
9
|
+
IValueInfo.wrap(Lib.g_enum_info_get_value @gobj, index)
|
10
|
+
end
|
7
11
|
##
|
8
12
|
build_array_method :values
|
9
13
|
|
10
|
-
def storage_type
|
14
|
+
def storage_type
|
15
|
+
Lib.g_enum_info_get_storage_type @gobj
|
16
|
+
end
|
11
17
|
end
|
12
18
|
end
|
13
19
|
|
data/lib/gir_ffi/i_field_info.rb
CHANGED
@@ -2,9 +2,17 @@ module GirFFI
|
|
2
2
|
# Wraps a GIFieldInfo struct.
|
3
3
|
# Represents a field of an IStructInfo or an IUnionInfo.
|
4
4
|
class IFieldInfo < IBaseInfo
|
5
|
-
def flags
|
6
|
-
|
7
|
-
|
8
|
-
def
|
5
|
+
def flags
|
6
|
+
Lib.g_field_info_get_flags @gobj
|
7
|
+
end
|
8
|
+
def size
|
9
|
+
Lib.g_field_info_get_size @gobj
|
10
|
+
end
|
11
|
+
def offset
|
12
|
+
Lib.g_field_info_get_offset @gobj
|
13
|
+
end
|
14
|
+
def type
|
15
|
+
ITypeInfo.wrap(Lib.g_field_info_get_type @gobj)
|
16
|
+
end
|
9
17
|
end
|
10
18
|
end
|
@@ -2,15 +2,31 @@ module GirFFI
|
|
2
2
|
# Wraps a GIFunctioInfo struct.
|
3
3
|
# Represents a function.
|
4
4
|
class IFunctionInfo < ICallableInfo
|
5
|
-
def symbol
|
6
|
-
|
5
|
+
def symbol
|
6
|
+
Lib.g_function_info_get_symbol @gobj
|
7
|
+
end
|
8
|
+
def flags
|
9
|
+
Lib.g_function_info_get_flags @gobj
|
10
|
+
end
|
7
11
|
|
8
12
|
#TODO: Use some sort of bitfield
|
9
|
-
def method
|
10
|
-
|
11
|
-
|
12
|
-
def
|
13
|
-
|
14
|
-
|
13
|
+
def method?
|
14
|
+
flags & 1 != 0
|
15
|
+
end
|
16
|
+
def constructor?
|
17
|
+
flags & 2 != 0
|
18
|
+
end
|
19
|
+
def getter?
|
20
|
+
flags & 4 != 0
|
21
|
+
end
|
22
|
+
def setter?
|
23
|
+
flags & 8 != 0
|
24
|
+
end
|
25
|
+
def wraps_vfunc?
|
26
|
+
flags & 16 != 0
|
27
|
+
end
|
28
|
+
def throws?
|
29
|
+
flags & 32 != 0
|
30
|
+
end
|
15
31
|
end
|
16
32
|
end
|
@@ -2,49 +2,91 @@ module GirFFI
|
|
2
2
|
# Wraps a GIObjectInfo struct.
|
3
3
|
# Represents an object.
|
4
4
|
class IObjectInfo < IRegisteredTypeInfo
|
5
|
-
def type_name
|
6
|
-
|
7
|
-
|
8
|
-
def
|
5
|
+
def type_name
|
6
|
+
Lib.g_object_info_get_type_name @gobj
|
7
|
+
end
|
8
|
+
def type_init
|
9
|
+
Lib.g_object_info_get_type_init @gobj
|
10
|
+
end
|
11
|
+
def abstract?
|
12
|
+
Lib.g_object_info_get_abstract @gobj
|
13
|
+
end
|
14
|
+
def parent
|
15
|
+
IObjectInfo.wrap(Lib.g_object_info_get_parent @gobj)
|
16
|
+
end
|
9
17
|
|
10
|
-
def n_interfaces
|
11
|
-
|
18
|
+
def n_interfaces
|
19
|
+
Lib.g_object_info_get_n_interfaces @gobj
|
20
|
+
end
|
21
|
+
def interface(index)
|
22
|
+
IInterfaceInfo.wrap(Lib.g_object_info_get_interface @gobj, index)
|
23
|
+
end
|
12
24
|
##
|
13
25
|
build_array_method :interfaces
|
14
26
|
|
15
|
-
def n_fields
|
16
|
-
|
27
|
+
def n_fields
|
28
|
+
Lib.g_object_info_get_n_fields @gobj
|
29
|
+
end
|
30
|
+
def field(index)
|
31
|
+
IFieldInfo.wrap(Lib.g_object_info_get_field @gobj, index)
|
32
|
+
end
|
17
33
|
##
|
18
34
|
build_array_method :fields
|
19
35
|
|
20
|
-
def n_properties
|
21
|
-
|
36
|
+
def n_properties
|
37
|
+
Lib.g_object_info_get_n_properties @gobj
|
38
|
+
end
|
39
|
+
def property(index)
|
40
|
+
IPropertyInfo.wrap(Lib.g_object_info_get_property @gobj, index)
|
41
|
+
end
|
22
42
|
##
|
23
43
|
build_array_method :properties, :property
|
24
44
|
|
25
|
-
def n_methods
|
26
|
-
|
45
|
+
def n_methods
|
46
|
+
Lib.g_object_info_get_n_methods @gobj
|
47
|
+
end
|
48
|
+
def method(index)
|
49
|
+
IFunctionInfo.wrap(Lib.g_object_info_get_method @gobj, index)
|
50
|
+
end
|
27
51
|
##
|
28
52
|
build_array_method :methods
|
29
53
|
|
30
|
-
def find_method(name)
|
54
|
+
def find_method(name)
|
55
|
+
IFunctionInfo.wrap(Lib.g_object_info_find_method @gobj, name)
|
56
|
+
end
|
31
57
|
|
32
|
-
def n_signals
|
33
|
-
|
58
|
+
def n_signals
|
59
|
+
Lib.g_object_info_get_n_signals @gobj
|
60
|
+
end
|
61
|
+
def signal(index)
|
62
|
+
ISignalInfo.wrap(Lib.g_object_info_get_signal @gobj, index)
|
63
|
+
end
|
34
64
|
##
|
35
65
|
build_array_method :signals
|
36
66
|
|
37
|
-
def n_vfuncs
|
38
|
-
|
39
|
-
|
67
|
+
def n_vfuncs
|
68
|
+
Lib.g_object_info_get_n_vfuncs @gobj
|
69
|
+
end
|
70
|
+
def vfunc(index)
|
71
|
+
IVFuncInfo.wrap(Lib.g_object_info_get_vfunc @gobj, index)
|
72
|
+
end
|
73
|
+
def find_vfunc name
|
74
|
+
IVFuncInfo.wrap(Lib.g_object_info_find_vfunc @gobj, name)
|
75
|
+
end
|
40
76
|
##
|
41
77
|
build_array_method :vfuncs
|
42
78
|
|
43
|
-
def n_constants
|
44
|
-
|
79
|
+
def n_constants
|
80
|
+
Lib.g_object_info_get_n_constants @gobj
|
81
|
+
end
|
82
|
+
def constant(index)
|
83
|
+
IConstantInfo.wrap(Lib.g_object_info_get_constant @gobj, index)
|
84
|
+
end
|
45
85
|
##
|
46
86
|
build_array_method :constants
|
47
87
|
|
48
|
-
def class_struct
|
88
|
+
def class_struct
|
89
|
+
IStructInfo.wrap(Lib.g_object_info_get_class_struct @gobj)
|
90
|
+
end
|
49
91
|
end
|
50
92
|
end
|
@@ -3,6 +3,17 @@ module GirFFI
|
|
3
3
|
# Represents a registered type.
|
4
4
|
# Not implemented yet.
|
5
5
|
class IRegisteredTypeInfo < IBaseInfo
|
6
|
+
def type_name
|
7
|
+
Lib.g_registered_type_info_get_type_name @gobj
|
8
|
+
end
|
9
|
+
|
10
|
+
def type_init
|
11
|
+
Lib.g_registered_type_info_get_type_init @gobj
|
12
|
+
end
|
13
|
+
|
14
|
+
def g_type
|
15
|
+
Lib.g_registered_type_info_get_g_type @gobj
|
16
|
+
end
|
6
17
|
end
|
7
18
|
end
|
8
19
|
|
data/lib/gir_ffi/i_repository.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'singleton'
|
2
2
|
require 'gir_ffi/lib'
|
3
|
-
require 'gir_ffi/
|
3
|
+
require 'gir_ffi/g_object'
|
4
4
|
require 'gir_ffi/g_error'
|
5
5
|
require 'gir_ffi/i_base_info'
|
6
6
|
require 'gir_ffi/i_callable_info'
|
@@ -52,7 +52,7 @@ module GirFFI
|
|
52
52
|
}
|
53
53
|
|
54
54
|
def initialize
|
55
|
-
|
55
|
+
GObject.type_init
|
56
56
|
@gobj = Lib::g_irepository_get_default
|
57
57
|
end
|
58
58
|
|
@@ -2,21 +2,37 @@ module GirFFI
|
|
2
2
|
# Wraps a GIStructInfo struct.
|
3
3
|
# Represents a struct.
|
4
4
|
class IStructInfo < IRegisteredTypeInfo
|
5
|
-
def n_fields
|
6
|
-
|
5
|
+
def n_fields
|
6
|
+
Lib.g_struct_info_get_n_fields @gobj
|
7
|
+
end
|
8
|
+
def field(index)
|
9
|
+
IFieldInfo.wrap(Lib.g_struct_info_get_field @gobj, index)
|
10
|
+
end
|
7
11
|
|
8
12
|
##
|
9
13
|
build_array_method :fields
|
10
14
|
|
11
|
-
def n_methods
|
12
|
-
|
15
|
+
def n_methods
|
16
|
+
Lib.g_struct_info_get_n_methods @gobj
|
17
|
+
end
|
18
|
+
def method(index)
|
19
|
+
IFunctionInfo.wrap(Lib.g_struct_info_get_method @gobj, index)
|
20
|
+
end
|
13
21
|
|
14
22
|
##
|
15
23
|
build_array_method :methods
|
16
24
|
|
17
|
-
def find_method(name)
|
18
|
-
|
19
|
-
|
20
|
-
def
|
25
|
+
def find_method(name)
|
26
|
+
IFunctionInfo.wrap(Lib.g_struct_info_find_method @gobj, name)
|
27
|
+
end
|
28
|
+
def size
|
29
|
+
Lib.g_struct_info_get_size @gobj
|
30
|
+
end
|
31
|
+
def alignment
|
32
|
+
Lib.g_struct_info_get_alignment @gobj
|
33
|
+
end
|
34
|
+
def gtype_struct?
|
35
|
+
Lib.g_struct_info_is_gtype_struct @gobj
|
36
|
+
end
|
21
37
|
end
|
22
38
|
end
|
data/lib/gir_ffi/i_type_info.rb
CHANGED
@@ -2,18 +2,34 @@ module GirFFI
|
|
2
2
|
# Wraps a GITypeInfo struct.
|
3
3
|
# Represents type information, direction, transfer etc.
|
4
4
|
class ITypeInfo < IBaseInfo
|
5
|
-
def pointer
|
6
|
-
|
7
|
-
|
5
|
+
def pointer?
|
6
|
+
Lib.g_type_info_is_pointer @gobj
|
7
|
+
end
|
8
|
+
def tag
|
9
|
+
Lib.g_type_info_get_tag @gobj
|
10
|
+
end
|
11
|
+
def param_type(index)
|
12
|
+
ITypeInfo.wrap(Lib.g_type_info_get_param_type @gobj, index)
|
13
|
+
end
|
8
14
|
def interface
|
9
15
|
ptr = Lib.g_type_info_get_interface @gobj
|
10
16
|
IRepository.wrap_ibaseinfo_pointer ptr
|
11
17
|
end
|
12
|
-
def array_length
|
13
|
-
|
14
|
-
|
15
|
-
def
|
16
|
-
|
18
|
+
def array_length
|
19
|
+
Lib.g_type_info_get_array_length @gobj
|
20
|
+
end
|
21
|
+
def array_fixed_size
|
22
|
+
Lib.g_type_info_get_array_fixed_size @gobj
|
23
|
+
end
|
24
|
+
def zero_terminated?
|
25
|
+
Lib.g_type_info_is_zero_terminated @gobj
|
26
|
+
end
|
27
|
+
def n_error_domains
|
28
|
+
Lib.g_type_info_get_n_error_domains @gobj
|
29
|
+
end
|
30
|
+
def error_domain(index)
|
31
|
+
IErrorDomainInfo.wrap(Lib.g_type_info_get_error_domain @gobj, index)
|
32
|
+
end
|
17
33
|
##
|
18
34
|
build_array_method :error_domains
|
19
35
|
|
data/lib/gir_ffi/i_union_info.rb
CHANGED
@@ -3,5 +3,20 @@ module GirFFI
|
|
3
3
|
# Represents a union.
|
4
4
|
# Not implemented yet.
|
5
5
|
class IUnionInfo < IRegisteredTypeInfo
|
6
|
+
def n_fields; Lib.g_union_info_get_n_fields @gobj; end
|
7
|
+
def field(index); IFieldInfo.wrap(Lib.g_union_info_get_field @gobj, index); end
|
8
|
+
|
9
|
+
##
|
10
|
+
build_array_method :fields
|
11
|
+
|
12
|
+
def n_methods; Lib.g_union_info_get_n_methods @gobj; end
|
13
|
+
def method(index); IFunctionInfo.wrap(Lib.g_union_info_get_method @gobj, index); end
|
14
|
+
|
15
|
+
##
|
16
|
+
build_array_method :methods
|
17
|
+
|
18
|
+
def find_method(name); IFunctionInfo.wrap(Lib.g_union_info_find_method @gobj, name); end
|
19
|
+
def size; Lib.g_union_info_get_size @gobj; end
|
20
|
+
def alignment; Lib.g_union_info_get_alignment @gobj; end
|
6
21
|
end
|
7
22
|
end
|
data/lib/gir_ffi/i_value_info.rb
CHANGED
data/lib/gir_ffi/i_vfunc_info.rb
CHANGED
@@ -1,7 +1,18 @@
|
|
1
1
|
module GirFFI
|
2
2
|
# Wraps a GIVFuncInfo struct.
|
3
3
|
# Represents a virtual function.
|
4
|
-
# Not implemented yet.
|
5
4
|
class IVFuncInfo < IBaseInfo
|
5
|
+
def flags
|
6
|
+
Lib.g_vfunc_info_get_flags @gobj
|
7
|
+
end
|
8
|
+
def offset
|
9
|
+
Lib.g_vfunc_info_get_offset @gobj
|
10
|
+
end
|
11
|
+
def signal
|
12
|
+
ISignalInfo.wrap(Lib.g_vfunc_info_get_signal @gobj)
|
13
|
+
end
|
14
|
+
def invoker
|
15
|
+
IFunctionInfo.wrap(Lib.g_vfunc_info_get_invoker @gobj)
|
16
|
+
end
|
6
17
|
end
|
7
18
|
end
|
data/lib/gir_ffi/lib.rb
CHANGED
@@ -139,8 +139,18 @@ module GirFFI
|
|
139
139
|
attach_function :g_field_info_get_type, [:pointer], :pointer
|
140
140
|
|
141
141
|
# IUnionInfo
|
142
|
-
|
142
|
+
attach_function :g_union_info_get_n_fields, [:pointer], :int
|
143
|
+
attach_function :g_union_info_get_field, [:pointer, :int], :pointer
|
144
|
+
attach_function :g_union_info_get_n_methods, [:pointer], :int
|
145
|
+
attach_function :g_union_info_get_method, [:pointer, :int], :pointer
|
146
|
+
attach_function :g_union_info_find_method, [:pointer, :string], :pointer
|
147
|
+
attach_function :g_union_info_get_size, [:pointer], :int
|
148
|
+
attach_function :g_union_info_get_alignment, [:pointer], :int
|
149
|
+
|
143
150
|
# IRegisteredTypeInfo
|
151
|
+
attach_function :g_registered_type_info_get_type_name, [:pointer], :string
|
152
|
+
attach_function :g_registered_type_info_get_type_init, [:pointer], :string
|
153
|
+
attach_function :g_registered_type_info_get_g_type, [:pointer], :int
|
144
154
|
|
145
155
|
# IEnumInfo
|
146
156
|
attach_function :g_enum_info_get_storage_type, [:pointer], :ITypeTag
|
@@ -170,5 +180,17 @@ module GirFFI
|
|
170
180
|
attach_function :g_object_info_get_constant, [:pointer, :int], :pointer
|
171
181
|
attach_function :g_object_info_get_class_struct, [:pointer], :pointer
|
172
182
|
|
183
|
+
# IVFuncInfo
|
184
|
+
|
185
|
+
enum :IVFuncInfoFlags, [
|
186
|
+
:must_chain_up, (1 << 0),
|
187
|
+
:must_override, (1 << 1),
|
188
|
+
:must_not_override, (1 << 2)
|
189
|
+
]
|
190
|
+
|
191
|
+
attach_function :g_vfunc_info_get_flags, [:pointer], :IVFuncInfoFlags
|
192
|
+
attach_function :g_vfunc_info_get_offset, [:pointer], :int
|
193
|
+
attach_function :g_vfunc_info_get_signal, [:pointer], :pointer
|
194
|
+
attach_function :g_vfunc_info_get_invoker, [:pointer], :pointer
|
173
195
|
end
|
174
196
|
end
|