libui 0.0.9 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dbb5362886495f17bf74055bf1ad4cbc96bb7f0e4518e8db0b18f9572559adf2
4
- data.tar.gz: 19040d301c6cb135a3e5ef1270f211f48f007f02ec3e5fe7edcbc3be03f275da
3
+ metadata.gz: 6de141936b3efcb92a52161f0426d62485efe1e5aad3117f76cf97d0ddc8031b
4
+ data.tar.gz: b7ce62745c0c8dc93fc8ba0555a5240f0f56d73b68b6f6ba238153d6478d4f83
5
5
  SHA512:
6
- metadata.gz: 27a0c320d8592b2e6a6531b66ed0de3a83a3f606058d16469af530d0633a02d2d13e848e5ca4dd8d6c184015449a2ba56b4eb6c7e63ede1ccb7bfa6d447b5f1b
7
- data.tar.gz: '033190ef229e3f567db9c7a7d338da4107072a6120e79c928a5e03dffcca922ffe75ac76f631fda810133cd6316d6af55ea234eb3fce214540fe1e92fd7d6eaf'
6
+ metadata.gz: 8caad6d8235897aa9b1c1c0782a425f85c4b7016d57464d69bfba9c3a1716eb5d3ea8520157ecc1a9209a299e863fc178c21897256e26e80b02a3beeff1be894
7
+ data.tar.gz: 2c328acfbc5862157124d6f31cf66950b07af1dacbbb81ee1f50340bb837bdb08e1d3b6abfaa9bfa5b8ecd81fe5e80a9d10e239c3489e534160ddb720135c502
data/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  ![build](https://github.com/kojix2/libui/workflows/build/badge.svg)
4
4
  [![Gem Version](https://badge.fury.io/rb/libui.svg)](https://badge.fury.io/rb/libui)
5
+ <a href="https://github.com/AndyObtiva/glimmer-dsl-libui"><img alt="glimmer-dsl-libui" src="https://github.com/AndyObtiva/glimmer/blob/master/images/glimmer-logo-hi-res.svg" width="50" height="50" align="right"></a>
5
6
 
6
7
  :radio_button: [libui](https://github.com/andlabs/libui) - a portable GUI library - for Ruby
7
8
 
@@ -64,11 +65,18 @@ Compared to original libui written in C,
64
65
  * You can pass a block as a callback.
65
66
  * The block will be converted to a Proc object and added to the last argument.
66
67
  * Even in that case, it is possible to omit the last argument nil.
67
-
68
+
69
+ You can use [the documentation for libui's Go bindings](https://pkg.go.dev/github.com/andlabs/ui) as a reference.
70
+
68
71
  ### Not object oriented?
69
72
 
70
- * At the moment, it is not object-oriented.
71
- * Instead of providing a half-baked object-oriented approach, leave it as is.
73
+ LibUI is not object-oriented, but provides high portability with minimal implementation.
74
+ If you want to write in an object-oriented way, please use the following DSLs built on top of LibUI.
75
+
76
+ ### DSLs for LibUI
77
+
78
+ * [Glimmer DSL for LibUI](https://github.com/AndyObtiva/glimmer-dsl-libui)
79
+ * [libui_paradise](https://rubygems.org/gems/libui_paradise)
72
80
 
73
81
  ### How to use fiddle pointers?
74
82
 
@@ -93,6 +101,8 @@ font_button = UI.new_font_button
93
101
 
94
102
  # Allocate memory
95
103
  font_descriptor = UI::FFI::FontDescriptor.malloc
104
+ font_descriptor.to_ptr.free = Fiddle::RUBY_FREE
105
+ # font_descriptor = UI::FFI::FontDescriptor.malloc(Fiddle::RUBY_FREE) # fiddle 1.0.1 or higher
96
106
 
97
107
  UI.font_button_on_changed(font_button) do
98
108
  UI.font_button_font(font_button, font_descriptor)
data/lib/libui/ffi.rb CHANGED
@@ -1,78 +1,10 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'fiddle/import'
4
-
5
- module Fiddle
6
- # Change the Function to hold a little more information.
7
- class Function
8
- # Note:
9
- # Ruby 2.7 Fiddle::Function dose not have @argument_types
10
- # Ruby 3.0 Fiddle::Function has @argument_types
11
- attr_accessor :callback_argument_types, :argument_types
12
- end
13
-
14
- module Importer
15
- def parse_signature(signature, tymap = nil)
16
- tymap ||= {}
17
- ctype, func, args = case compact(signature)
18
- when /^(?:[\w\*\s]+)\(\*(\w+)\((.*?)\)\)(?:\[\w*\]|\(.*?\));?$/
19
- [TYPE_VOIDP, Regexp.last_match(1), Regexp.last_match(2)]
20
- when /^([\w\*\s]+[*\s])(\w+)\((.*?)\);?$/
21
- [parse_ctype(Regexp.last_match(1).strip, tymap), Regexp.last_match(2), Regexp.last_match(3)]
22
- else
23
- raise("can't parserake the function prototype: #{signature}")
24
- end
25
- symname = func
26
- callback_argument_types = {} # Added
27
- argtype = split_arguments(args).collect.with_index do |arg, idx| # Added with_index
28
- # Check if it is a function pointer or not
29
- if arg =~ /\(\*.*\)\(.*\)/ # Added
30
- # From the arguments, create a notation that looks like a function declaration
31
- # int(*f)(int *, void *) -> int f(int *, void *)
32
- func_arg = arg.sub('(*', ' ').sub(')', '') # Added
33
- # Use Fiddle's parse_signature method again.
34
- callback_argument_types[idx] = parse_signature(func_arg) # Added
35
- end
36
- parse_ctype(arg, tymap)
37
- end
38
- # Added callback_argument_types. Original method return only 3 values.
39
- [symname, ctype, argtype, callback_argument_types]
40
- end
41
-
42
- def extern(signature, *opts)
43
- symname, ctype, argtype, callback_argument_types = parse_signature(signature, type_alias)
44
- opt = parse_bind_options(opts)
45
- func = import_function(symname, ctype, argtype, opt[:call_type])
46
-
47
- func.callback_argument_types = callback_argument_types # Added
48
- # Ruby 2.7 Fiddle::Function dose not have @argument_types
49
- # Ruby 3.0 Fiddle::Function has @argument_types
50
- func.argument_types = argtype
51
-
52
- name = symname.gsub(/@.+/, '')
53
- @func_map[name] = func
54
- # define_method(name){|*args,&block| f.call(*args,&block)}
55
- begin
56
- /^(.+?):(\d+)/ =~ caller.first
57
- file = Regexp.last_match(1)
58
- line = Regexp.last_match(2).to_i
59
- rescue StandardError
60
- file, line = __FILE__, __LINE__ + 3
61
- end
62
- module_eval(<<-EOS, file, line)
63
- def #{name}(*args, &block)
64
- @func_map['#{name}'].call(*args,&block)
65
- end
66
- EOS
67
- module_function(name)
68
- func
69
- end
70
- end
71
- end
2
+ require_relative 'fiddle_patch'
72
3
 
73
4
  module LibUI
74
5
  module FFI
75
6
  extend Fiddle::Importer
7
+ extend FiddlePatch
76
8
 
77
9
  begin
78
10
  dlload LibUI.ffi_lib
@@ -100,6 +32,9 @@ module LibUI
100
32
  'size_t Size'
101
33
  ]
102
34
 
35
+ # https://github.com/andlabs/libui/blob/master/ui.h
36
+ # keep same order
37
+
103
38
  try_extern 'const char *uiInit(uiInitOptions *options)'
104
39
  try_extern 'void uiUninit(void)'
105
40
  try_extern 'void uiFreeInitError(const char *err)'
@@ -280,17 +215,33 @@ module LibUI
280
215
  # uiDateTimePicker
281
216
 
282
217
  # time.h
283
- TM = struct [
284
- 'int tm_sec',
285
- 'int tm_min',
286
- 'int tm_hour',
287
- 'int tm_mday',
288
- 'int tm_mon',
289
- 'int tm_year',
290
- 'int tm_wday',
291
- 'int tm_yday',
292
- 'int tm_isdst'
293
- ]
218
+ TM = if Fiddle::WINDOWS
219
+ struct [
220
+ 'int tm_sec',
221
+ 'int tm_min',
222
+ 'int tm_hour',
223
+ 'int tm_mday',
224
+ 'int tm_mon',
225
+ 'int tm_year',
226
+ 'int tm_wday',
227
+ 'int tm_yday',
228
+ 'int tm_isdst'
229
+ ]
230
+ else # The GNU C Library (glibc)
231
+ struct [
232
+ 'int tm_sec',
233
+ 'int tm_min',
234
+ 'int tm_hour',
235
+ 'int tm_mday',
236
+ 'int tm_mon',
237
+ 'int tm_year',
238
+ 'int tm_wday',
239
+ 'int tm_yday',
240
+ 'int tm_isdst',
241
+ 'long tm_gmtoff',
242
+ 'const char *tm_zone'
243
+ ]
244
+ end
294
245
 
295
246
  try_extern 'void uiDateTimePickerTime(uiDateTimePicker *d, struct tm *time)'
296
247
  try_extern 'void uiDateTimePickerSetTime(uiDateTimePicker *d, const struct tm *time)'
@@ -0,0 +1,79 @@
1
+ module LibUI
2
+ module FiddlePatch
3
+ def parse_signature(signature, tymap = nil)
4
+ tymap ||= {}
5
+ ctype, func, args = case compact(signature)
6
+ when /^(?:[\w\*\s]+)\(\*(\w+)\((.*?)\)\)(?:\[\w*\]|\(.*?\));?$/
7
+ [TYPE_VOIDP, Regexp.last_match(1), Regexp.last_match(2)]
8
+ when /^([\w\*\s]+[*\s])(\w+)\((.*?)\);?$/
9
+ [parse_ctype(Regexp.last_match(1).strip, tymap), Regexp.last_match(2), Regexp.last_match(3)]
10
+ else
11
+ raise("can't parserake the function prototype: #{signature}")
12
+ end
13
+ symname = func
14
+ callback_argument_types = {} # Added
15
+ argtype = split_arguments(args).collect.with_index do |arg, idx| # Added with_index
16
+ # Check if it is a function pointer or not
17
+ if arg =~ /\(\*.*\)\(.*\)/ # Added
18
+ # From the arguments, create a notation that looks like a function declaration
19
+ # int(*f)(int *, void *) -> int f(int *, void *)
20
+ func_arg = arg.sub('(*', ' ').sub(')', '') # Added
21
+ # Use Fiddle's parse_signature method again.
22
+ callback_argument_types[idx] = parse_signature(func_arg) # Added
23
+ end
24
+ parse_ctype(arg, tymap)
25
+ end
26
+ # Added callback_argument_types. Original method return only 3 values.
27
+ [symname, ctype, argtype, callback_argument_types]
28
+ end
29
+
30
+ def extern(signature, *opts)
31
+ symname, ctype, argtype, callback_argument_types = parse_signature(signature, type_alias)
32
+ opt = parse_bind_options(opts)
33
+ func = import_function(symname, ctype, argtype, opt[:call_type])
34
+
35
+ # callback_argument_types
36
+ func.instance_variable_set(:@callback_argument_types,
37
+ callback_argument_types) # Added
38
+ # attr_reader
39
+ def func.callback_argument_types
40
+ @callback_argument_types
41
+ end
42
+
43
+ # argument_types
44
+ # Ruby 2.7 Fiddle::Function dose not have @argument_types
45
+ # Ruby 3.0 Fiddle::Function has @argument_types
46
+ if func.instance_variable_defined?(:@argument_types)
47
+ # check if @argument_types are the same
48
+ if func.instance_variable_get(:@argument_types) != argtype
49
+ warn "#{symname} func.argument_types:#{func.argument_types} != argtype #{argtype}"
50
+ end
51
+ else
52
+ func.instance_variable_set(:@argument_types, argtype)
53
+ end
54
+ # attr_reader
55
+ def func.argument_types
56
+ @argument_types
57
+ end
58
+
59
+ name = symname.gsub(/@.+/, '')
60
+ @func_map[name] = func
61
+ # define_method(name){|*args,&block| f.call(*args,&block)}
62
+ begin
63
+ /^(.+?):(\d+)/ =~ caller.first
64
+ file = Regexp.last_match(1)
65
+ line = Regexp.last_match(2).to_i
66
+ rescue StandardError
67
+ file, line = __FILE__, __LINE__ + 3
68
+ end
69
+ module_eval(<<-EOS, file, line)
70
+ def #{name}(*args, &block)
71
+ @func_map['#{name}'].call(*args,&block)
72
+ end
73
+ EOS
74
+ module_function(name)
75
+ func
76
+ end
77
+ end
78
+ private_constant :FiddlePatch
79
+ end
@@ -0,0 +1,52 @@
1
+ module LibUI
2
+ module LibUIBase
3
+ FFI.func_map.each_key do |original_method_name|
4
+ name = Utils.convert_to_ruby_method(original_method_name)
5
+ func = FFI.func_map[original_method_name]
6
+
7
+ define_method(name) do |*args, &blk|
8
+ # Assume that block is the last argument.
9
+ args << blk if blk
10
+
11
+ # The proc object is converted to a Closure::BlockCaller object.
12
+ args.map!.with_index do |arg, idx|
13
+ next arg unless arg.is_a?(Proc)
14
+
15
+ # now arg must be Proc
16
+
17
+ # The types of the function arguments are stored in advance.
18
+ # See the monkey patch in ffi.rb.
19
+ _f, ret_type, arg_types = func.callback_argument_types[idx]
20
+ # TODO: raise some nice error if _f is nil.
21
+
22
+ callback = Fiddle::Closure::BlockCaller.new(
23
+ ret_type, arg_types, &arg
24
+ )
25
+ # Protect from GC
26
+ # by giving the owner object a reference to the callback.
27
+ # See https://github.com/kojix2/LibUI/issues/8
28
+ owner = if idx == 0 or # UI.queue_main{}
29
+ owner.frozen? # UI.timer(100) {}
30
+ LibUIBase # or UI is better?
31
+ else
32
+ args[0] # receiver
33
+ end
34
+ if owner.instance_variable_defined?(:@callbacks)
35
+ owner.instance_variable_get(:@callbacks) << callback
36
+ else
37
+ owner.instance_variable_set(:@callbacks, [callback])
38
+ end
39
+ callback
40
+ end
41
+
42
+ # Make it possible to omit the last nil. This may be an over-optimization.
43
+ siz = func.argument_types.size - 1
44
+ args[siz] = nil if args.size == siz
45
+
46
+ FFI.public_send(original_method_name, *args)
47
+ end
48
+ end
49
+ end
50
+
51
+ private_constant :LibUIBase
52
+ end
data/lib/libui/version.rb CHANGED
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module LibUI
4
- VERSION = '0.0.9'
2
+ VERSION = '0.0.13'
5
3
  end
data/lib/libui.rb CHANGED
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require_relative 'libui/version'
4
2
  require_relative 'libui/utils'
5
3
 
@@ -10,7 +8,7 @@ module LibUI
10
8
  attr_accessor :ffi_lib
11
9
  end
12
10
 
13
- lib_name = "libui.#{RbConfig::CONFIG["SOEXT"]}"
11
+ lib_name = "libui.#{RbConfig::CONFIG['SOEXT']}"
14
12
 
15
13
  self.ffi_lib = if ENV['LIBUIDIR'] && !ENV['LIBUIDIR'].empty?
16
14
  File.expand_path(lib_name, ENV['LIBUIDIR'])
@@ -19,56 +17,204 @@ module LibUI
19
17
  end
20
18
 
21
19
  require_relative 'libui/ffi'
20
+ require_relative 'libui/libui_base'
21
+
22
+ extend LibUIBase
22
23
 
23
24
  class << self
24
- FFI.func_map.each_key do |original_method_name|
25
- name = Utils.convert_to_ruby_method(original_method_name)
26
- func = FFI.func_map[original_method_name]
27
-
28
- define_method(name) do |*args, &blk|
29
- # Assume that block is the last argument.
30
- args << blk if blk
31
-
32
- # The proc object is converted to a Closure::BlockCaller object.
33
- args.map!.with_index do |arg, idx|
34
- if arg.is_a?(Proc)
35
- # The types of the function arguments are recorded beforehand.
36
- # See the monkey patch in ffi.rb.
37
- callback = Fiddle::Closure::BlockCaller.new(
38
- *func.callback_argument_types[idx][1..2], &arg
39
- )
40
- # Protect from GC
41
- # See https://github.com/kojix2/LibUI/issues/8
42
- receiver = args[0]
43
- if receiver.instance_variable_defined?(:@callbacks)
44
- receiver.instance_variable_get(:@callbacks) << callback
45
- else
46
- receiver.instance_variable_set(:@callbacks, [callback])
47
- end
48
- callback
49
- else
50
- arg
51
- end
52
- end
53
-
54
- # Make it possible to omit the last nil. This may be an over-optimization.
55
- siz = func.argument_types.size - 1
56
- args[siz] = nil if args.size == siz
57
-
58
- FFI.public_send(original_method_name, *args)
25
+ def init(opt = nil)
26
+ unless opt
27
+ opt = FFI::InitOptions.malloc
28
+ opt.to_ptr.free = Fiddle::RUBY_FREE
59
29
  end
30
+ i = super(opt)
31
+ return if i.size.zero?
32
+
33
+ warn 'error'
34
+ warn UI.free_init_error(init)
60
35
  end
61
36
 
62
- module CustomMethods
63
- def init(opt = FFI::InitOptions.malloc)
64
- i = super(opt)
65
- return if i.size.zero?
37
+ def open_type_features_add(otf, a, b, c, d, value)
38
+ a, b, c, d = [a, b, c, d].map { |s| s.is_a?(String) ? s.ord : s }
39
+ super(otf, a, b, c, d, value)
40
+ end
66
41
 
67
- warn 'error'
68
- warn UI.free_init_error(init)
69
- end
42
+ def open_type_features_remove(otf, a, b, c, d)
43
+ a, b, c, d = [a, b, c, d].map { |s| s.is_a?(String) ? s.ord : s }
44
+ super(otf, a, b, c, d)
70
45
  end
71
46
 
72
- prepend CustomMethods
47
+ def open_type_features_get(otf, a, b, c, d, value)
48
+ a, b, c, d = [a, b, c, d].map { |s| s.is_a?(String) ? s.ord : s }
49
+ super(otf, a, b, c, d, value)
50
+ end
73
51
  end
52
+
53
+ # UI_ENUM
54
+ # https://github.com/andlabs/libui/blob/master/ui.h
55
+
56
+ # ForEach
57
+ ForEachContinue = 0
58
+ ForEachStop = 1
59
+
60
+ # WindowResizeEdge
61
+ WindowResizeEdgeLeft = 0
62
+ WindowResizeEdgeTop = 1
63
+ WindowResizeEdgeRight = 2
64
+ WindowResizeEdgeBottom = 3
65
+ WindowResizeEdgeTopLeft = 4
66
+ WindowResizeEdgeTopRight = 5
67
+ WindowResizeEdgeBottomLeft = 6
68
+ WindowResizeEdgeBottomRight = 7
69
+
70
+ # DrawBrushType
71
+ DrawBrushTypeSolid = 0
72
+ DrawBrushTypeLinearGradient = 1
73
+ DrawBrushTypeRadialGradient = 2
74
+ DrawBrushTypeImage = 3
75
+
76
+ # DrawLineCap
77
+ DrawLineCapFlat = 0
78
+ DrawLineCapRound = 1
79
+ DrawLineCapSquare = 2
80
+
81
+ # DrawLineJoin
82
+ DrawLineJoinMiter = 0
83
+ DrawLineJoinRound = 1
84
+ DrawLineJoinBevel = 2
85
+
86
+ DrawDefaultMiterLimit = 10.0
87
+
88
+ # DrawFillMode
89
+ DrawFillModeWinding = 0
90
+ DrawFillModeAlternate = 1
91
+
92
+ # AttributeType
93
+ AttributeTypeFamily = 0
94
+ AttributeTypeSize = 1
95
+ AttributeTypeWeight = 2
96
+ AttributeTypeItalic = 3
97
+ AttributeTypeStretch = 4
98
+ AttributeTypeColor = 5
99
+ AttributeTypeBackground = 6
100
+ AttributeTypeUnderline = 7
101
+ AttributeTypeUnderlineColor = 8
102
+ AttributeTypeFeatures = 9
103
+
104
+ # TextWeight
105
+ TextWeightMinimum = 0
106
+ TextWeightThin = 100
107
+ TextWeightUltraLight = 200
108
+ TextWeightLight = 300
109
+ TextWeightBook = 350
110
+ TextWeightNormal = 400
111
+ TextWeightMedium = 500
112
+ TextWeightSemiBold = 600
113
+ TextWeightBold = 700
114
+ TextWeightUltraBold = 800
115
+ TextWeightHeavy = 900
116
+ TextWeightUltraHeavy = 950
117
+ TextWeightMaximum = 1000
118
+
119
+ # TextItalic
120
+ TextItalicNormal = 0
121
+ TextItalicOblique = 1
122
+ TextItalicItalic = 2
123
+
124
+ # TextStretch
125
+ TextStretchUltraCondensed = 0
126
+ TextStretchExtraCondensed = 1
127
+ TextStretchCondensed = 2
128
+ TextStretchSemiCondensed = 3
129
+ TextStretchNormal = 4
130
+ TextStretchSemiExpanded = 5
131
+ TextStretchExpanded = 6
132
+ TextStretchExtraExpanded = 7
133
+ TextStretchUltraExpanded = 8
134
+
135
+ # Underline
136
+ UnderlineNone = 0
137
+ UnderlineSingle = 1
138
+ UnderlineDouble = 2
139
+ UnderlineSuggestion = 3
140
+
141
+ # UnderlineColor
142
+ UnderlineColorCustom = 0
143
+ UnderlineColorSpelling = 1
144
+ UnderlineColorGrammar = 2
145
+ UnderlineColorAuxiliary = 3
146
+
147
+ # DrawTextAlign
148
+ DrawTextAlignLeft = 0
149
+ DrawTextAlignCenter = 1
150
+ DrawTextAlignRight = 2
151
+
152
+ # Modifiers
153
+ ModifierCtrl = (1 << 0)
154
+ ModifierAlt = (1 << 1)
155
+ ModifierShift = (1 << 2)
156
+ ModifierSuper = (1 << 3)
157
+
158
+ # ExtKey
159
+ ExtKeyEscape = 1
160
+ ExtKeyInsert = 2
161
+ ExtKeyDelete = 3
162
+ ExtKeyHome = 4
163
+ ExtKeyEnd = 5
164
+ ExtKeyPageUp = 6
165
+ ExtKeyPageDown = 7
166
+ ExtKeyUp = 8
167
+ ExtKeyDown = 9
168
+ ExtKeyLeft = 10
169
+ ExtKeyRight = 11
170
+ ExtKeyF1 = 12
171
+ ExtKeyF2 = 13
172
+ ExtKeyF3 = 14
173
+ ExtKeyF4 = 15
174
+ ExtKeyF5 = 16
175
+ ExtKeyF6 = 17
176
+ ExtKeyF7 = 18
177
+ ExtKeyF8 = 19
178
+ ExtKeyF9 = 20
179
+ ExtKeyF10 = 21
180
+ ExtKeyF11 = 22
181
+ ExtKeyF12 = 23
182
+ ExtKeyN0 = 24
183
+ ExtKeyN1 = 25
184
+ ExtKeyN2 = 26
185
+ ExtKeyN3 = 27
186
+ ExtKeyN4 = 28
187
+ ExtKeyN5 = 29
188
+ ExtKeyN6 = 30
189
+ ExtKeyN7 = 31
190
+ ExtKeyN8 = 32
191
+ ExtKeyN9 = 33
192
+ ExtKeyNDot = 34
193
+ ExtKeyNEnter = 35
194
+ ExtKeyNAdd = 36
195
+ ExtKeyNSubtract = 37
196
+ ExtKeyNMultiply = 38
197
+ ExtKeyNDivide = 39
198
+
199
+ # Align
200
+ AlignFill = 0
201
+ AlignStart = 1
202
+ AlignCenter = 2
203
+ AlignEnd = 3
204
+
205
+ # At
206
+ AtLeading = 0
207
+ AtTop = 1
208
+ AtTrailing = 2
209
+ AtBottom = 3
210
+
211
+ # TableValueType
212
+ TableValueTypeString = 0
213
+ TableValueTypeImage = 1
214
+ TableValueTypeInt = 2
215
+ TableValueTypeColor = 3
216
+
217
+ # editable
218
+ TableModelColumnNeverEditable = -1
219
+ TableModelColumnAlwaysEditable = -2
74
220
  end
metadata CHANGED
@@ -1,85 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - kojix2
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-25 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: minitest
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rake
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rubocop
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rubyzip
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
11
+ date: 2021-11-23 00:00:00.000000000 Z
12
+ dependencies: []
83
13
  description:
84
14
  email:
85
15
  - 2xijok@gmail.com
@@ -91,6 +21,8 @@ files:
91
21
  - README.md
92
22
  - lib/libui.rb
93
23
  - lib/libui/ffi.rb
24
+ - lib/libui/fiddle_patch.rb
25
+ - lib/libui/libui_base.rb
94
26
  - lib/libui/utils.rb
95
27
  - lib/libui/version.rb
96
28
  - vendor/LICENSE