gir_ffi 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|