glimmer-dsl-libui 0.1.7 → 0.1.11

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.
@@ -36,7 +36,18 @@ module Glimmer
36
36
  child.halign = 0 if child.halign.nil?
37
37
  child.vexpand = false if child.vexpand.nil?
38
38
  child.valign = 0 if child.valign.nil?
39
- ::LibUI.grid_append(@libui, child.libui, child.left, child.top, child.xspan, child.yspan, Glimmer::LibUI.boolean_to_integer(child.hexpand), child.halign, Glimmer::LibUI.boolean_to_integer(child.vexpand), child.valign)
39
+ ::LibUI.grid_append(
40
+ @libui,
41
+ child.libui,
42
+ child.left,
43
+ child.top,
44
+ child.xspan,
45
+ child.yspan,
46
+ Glimmer::LibUI.boolean_to_integer(child.hexpand),
47
+ Glimmer::LibUI.enum_symbol_to_value(:align, child.halign),
48
+ Glimmer::LibUI.boolean_to_integer(child.vexpand),
49
+ Glimmer::LibUI.enum_symbol_to_value(:align, child.valign)
50
+ )
40
51
  children << child
41
52
  end
42
53
 
@@ -128,25 +128,11 @@ module Glimmer
128
128
  end
129
129
 
130
130
  def draw_line_cap
131
- case @stroke && @stroke[:cap].to_s
132
- when 'round'
133
- 1
134
- when 'square'
135
- 2
136
- else # 'flat'
137
- 0
138
- end
131
+ Glimmer::LibUI.enum_symbol_to_value(:draw_line_cap, @stroke && @stroke[:cap])
139
132
  end
140
133
 
141
134
  def draw_line_join
142
- case @stroke && @stroke[:join].to_s
143
- when 'round'
144
- 1
145
- when 'bevel'
146
- 2
147
- else # 'miter'
148
- 0
149
- end
135
+ Glimmer::LibUI.enum_symbol_to_value(:draw_line_join, @stroke && @stroke[:join])
150
136
  end
151
137
 
152
138
  def destroy
@@ -165,20 +151,7 @@ module Glimmer
165
151
  end
166
152
 
167
153
  def init_draw_brush(draw_brush, draw_brush_args)
168
- case draw_brush_args[:type]
169
- when Integer
170
- draw_brush.Type = draw_brush_args[:type]
171
- when :solid, 'solid'
172
- draw_brush.Type = 0
173
- when :linear_gradient, 'linear_gradient'
174
- draw_brush.Type = 1
175
- when :radial_gradient, 'radial_gradient'
176
- draw_brush.Type = 2
177
- when :image, 'image'
178
- draw_brush.Type = 3
179
- else
180
- draw_brush.Type = 0
181
- end
154
+ draw_brush.Type = Glimmer::LibUI.enum_symbol_to_value(:draw_brush_type, draw_brush_args[:type])
182
155
  draw_brush.R = (draw_brush_args[:r] || draw_brush_args[:red]).to_f / 255.0
183
156
  draw_brush.G = (draw_brush_args[:g] || draw_brush_args[:green]).to_f / 255.0
184
157
  draw_brush.B = (draw_brush_args[:b] || draw_brush_args[:blue]).to_f / 255.0
@@ -141,7 +141,8 @@ module Glimmer
141
141
 
142
142
  def can_handle_listener?(listener_name)
143
143
  ::LibUI.respond_to?("#{libui_api_keyword}_#{listener_name}") ||
144
- ::LibUI.respond_to?("control_#{listener_name}")
144
+ ::LibUI.respond_to?("control_#{listener_name}") ||
145
+ has_custom_listener?(listener_name)
145
146
  end
146
147
 
147
148
  def handle_listener(listener_name, &listener)
@@ -150,6 +151,34 @@ module Glimmer
150
151
  ::LibUI.send("#{libui_api_keyword}_#{listener_name}", @libui, &safe_listener)
151
152
  elsif ::LibUI.respond_to?("control_#{listener_name}")
152
153
  ::LibUI.send("control_#{listener_name}", @libui, &safe_listener)
154
+ elsif has_custom_listener?(listener_name)
155
+ handle_custom_listener(listener_name, &listener)
156
+ end
157
+ end
158
+
159
+ def has_custom_listener?(listener_name)
160
+ listener_name = listener_name.to_s
161
+ custom_listeners.include?(listener_name) || custom_listener_aliases.stringify_keys.keys.include?(listener_name)
162
+ end
163
+
164
+ def custom_listeners
165
+ self.class.constants.include?(:LISTENERS) ? self.class::LISTENERS : []
166
+ end
167
+
168
+ def custom_listener_aliases
169
+ self.class.constants.include?(:LISTENER_ALIASES) ? self.class::LISTENER_ALIASES : {}
170
+ end
171
+
172
+ def handle_custom_listener(listener_name, &listener)
173
+ listener_name = listener_name.to_s
174
+ listener_name = custom_listener_aliases.stringify_keys[listener_name] || listener_name
175
+ instance_variable_name = "@#{listener_name}_procs"
176
+ instance_variable_set(instance_variable_name, []) if instance_variable_get(instance_variable_name).nil?
177
+ if listener.nil?
178
+ instance_variable_get(instance_variable_name)
179
+ else
180
+ instance_variable_get(instance_variable_name) << listener
181
+ listener
153
182
  end
154
183
  end
155
184
 
@@ -160,6 +189,7 @@ module Glimmer
160
189
  (append_properties.include?(method_name.to_s.sub(/\?$/, '')) && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, ''))) ||
161
190
  append_properties.include?(method_name.to_s.sub(/=$/, ''))
162
191
  ) ||
192
+ can_handle_listener?(method_name.to_s) ||
163
193
  super(method_name, true)
164
194
  end
165
195
 
@@ -178,6 +208,8 @@ module Glimmer
178
208
  elsif append_properties.include?(method_name.to_s) ||
179
209
  append_properties.include?(method_name.to_s.sub(/(=|\?)$/, ''))
180
210
  append_property(method_name, *args)
211
+ elsif can_handle_listener?(method_name.to_s)
212
+ handle_listener(method_name.to_s, &block)
181
213
  else
182
214
  super
183
215
  end
@@ -248,6 +280,7 @@ module Glimmer
248
280
  if value.nil?
249
281
  @enabled
250
282
  elsif value != @enabled
283
+ @enabled = value == 1 || value
251
284
  if value == 1 || value
252
285
  send_to_libui('enable')
253
286
  else
data/lib/glimmer/libui.rb CHANGED
@@ -87,6 +87,23 @@ module Glimmer
87
87
  end
88
88
  value
89
89
  end
90
+
91
+ # Returns ruby underscored symbols for enum values starting with enum name (camelcase, e.g. 'ext_key')
92
+ def enum_symbols(enum_name)
93
+ enum_name = enum_name.to_s.underscore.to_sym
94
+ @enum_symbols ||= {}
95
+ @enum_symbols[enum_name] ||= ::LibUI.constants.select { |c| c.to_s.start_with?(enum_name.to_s.camelcase(:upper)) }.map { |c| c.to_s.underscore.sub("#{enum_name}_", '').to_sym }
96
+ end
97
+
98
+ def enum_symbol_to_value(enum_name, enum_symbol, default_index: 0)
99
+ if enum_symbol.is_a?(Integer)
100
+ enum_symbol
101
+ elsif enum_symbols(enum_name).include?(enum_symbol.to_s.to_sym)
102
+ ::LibUI.const_get("#{enum_name}_#{enum_symbol}".camelcase(:upper))
103
+ else
104
+ enum_symbol_to_value(enum_name, enum_symbols(enum_name)[default_index])
105
+ end
106
+ end
90
107
  end
91
108
  end
92
109
  end
@@ -29,6 +29,7 @@ require 'glimmer'
29
29
  require 'color'
30
30
  require 'os'
31
31
  require 'array_include_methods'
32
+ require 'facets/hash/stringify_keys'
32
33
  require 'libui'
33
34
 
34
35
  # Internal requires
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-libui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-01 00:00:00.000000000 Z
11
+ date: 2021-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.2.0
19
+ version: 2.2.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.2.0
26
+ version: 2.2.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: os
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -64,14 +64,14 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 0.0.10
67
+ version: 0.0.11
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 0.0.10
74
+ version: 0.0.11
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: juwelier
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -238,6 +238,7 @@ files:
238
238
  - examples/form_table.rb
239
239
  - examples/grid.rb
240
240
  - examples/histogram.rb
241
+ - examples/login.rb
241
242
  - examples/meta_example.rb
242
243
  - examples/midi_player.rb
243
244
  - examples/simple_notepad.rb
@@ -256,6 +257,7 @@ files:
256
257
  - lib/glimmer/libui.rb
257
258
  - lib/glimmer/libui/control_proxy.rb
258
259
  - lib/glimmer/libui/control_proxy/area_proxy.rb
260
+ - lib/glimmer/libui/control_proxy/area_proxy/scrolling_area_proxy.rb
259
261
  - lib/glimmer/libui/control_proxy/box.rb
260
262
  - lib/glimmer/libui/control_proxy/box/horizontal_box_proxy.rb
261
263
  - lib/glimmer/libui/control_proxy/box/vertical_box_proxy.rb
@@ -278,6 +280,9 @@ files:
278
280
  - lib/glimmer/libui/control_proxy/editable_column.rb
279
281
  - lib/glimmer/libui/control_proxy/editable_combobox_proxy.rb
280
282
  - lib/glimmer/libui/control_proxy/enableable_column.rb
283
+ - lib/glimmer/libui/control_proxy/entry_proxy.rb
284
+ - lib/glimmer/libui/control_proxy/entry_proxy/password_entry_proxy.rb
285
+ - lib/glimmer/libui/control_proxy/entry_proxy/search_entry_proxy.rb
281
286
  - lib/glimmer/libui/control_proxy/font_button_proxy.rb
282
287
  - lib/glimmer/libui/control_proxy/form_proxy.rb
283
288
  - lib/glimmer/libui/control_proxy/grid_proxy.rb