glimmer-dsl-libui 0.2.24 → 0.3.3

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/README.md +1153 -921
  4. data/VERSION +1 -1
  5. data/examples/area_gallery.rb +19 -19
  6. data/examples/area_gallery2.rb +91 -89
  7. data/examples/area_gallery3.rb +19 -19
  8. data/examples/area_gallery4.rb +91 -89
  9. data/examples/basic_image.rb +19 -0
  10. data/examples/basic_image2.rb +13 -0
  11. data/examples/basic_image3.rb +23 -0
  12. data/examples/basic_image4.rb +17 -0
  13. data/examples/basic_image5.rb +75 -0
  14. data/examples/basic_table_color.rb +1 -11
  15. data/examples/basic_table_color2.rb +39 -0
  16. data/examples/basic_table_image.rb +2 -14
  17. data/examples/basic_table_image2.rb +44 -0
  18. data/examples/basic_table_image_text.rb +2 -13
  19. data/examples/basic_table_image_text2.rb +44 -0
  20. data/examples/basic_transform.rb +3 -6
  21. data/examples/basic_transform2.rb +34 -0
  22. data/examples/color_the_circles.rb +1 -3
  23. data/examples/dynamic_area.rb +1 -3
  24. data/examples/dynamic_area2.rb +5 -7
  25. data/examples/form_table.rb +4 -0
  26. data/examples/grid.rb +4 -4
  27. data/examples/histogram.rb +4 -8
  28. data/examples/meta_example.rb +50 -10
  29. data/examples/snake.rb +1 -3
  30. data/examples/tetris.rb +15 -18
  31. data/examples/tic_tac_toe/board.rb +4 -2
  32. data/examples/tic_tac_toe.rb +1 -3
  33. data/glimmer-dsl-libui.gemspec +0 -0
  34. data/lib/glimmer/dsl/libui/control_expression.rb +1 -1
  35. data/lib/glimmer/dsl/libui/shape_expression.rb +6 -1
  36. data/lib/glimmer/libui/control_proxy/area_proxy.rb +1 -0
  37. data/lib/glimmer/libui/control_proxy/column.rb +2 -2
  38. data/lib/glimmer/libui/control_proxy/image_part_proxy.rb +0 -1
  39. data/lib/glimmer/libui/control_proxy/image_proxy.rb +159 -12
  40. data/lib/glimmer/libui/control_proxy/table_proxy.rb +15 -2
  41. data/lib/glimmer/libui/control_proxy/window_proxy.rb +1 -1
  42. data/lib/glimmer/libui/control_proxy.rb +7 -7
  43. data/lib/glimmer/libui/image_path_renderer.rb +30 -0
  44. data/lib/glimmer/libui/shape.rb +44 -1
  45. metadata +29 -19
@@ -21,6 +21,9 @@
21
21
 
22
22
  require 'glimmer/dsl/expression'
23
23
  require 'glimmer/dsl/parent_expression'
24
+ require 'glimmer/libui/control_proxy/path_proxy'
25
+ require 'glimmer/libui/shape'
26
+ require 'glimmer/libui/control_proxy/area_proxy'
24
27
 
25
28
  module Glimmer
26
29
  module DSL
@@ -32,7 +35,9 @@ module Glimmer
32
35
  Glimmer::LibUI::Shape.exists?(keyword) and
33
36
  (
34
37
  parent.is_a?(Glimmer::LibUI::ControlProxy::PathProxy) or
35
- parent.is_a?(Glimmer::LibUI::Shape)
38
+ parent.is_a?(Glimmer::LibUI::Shape) or
39
+ parent.is_a?(Glimmer::LibUI::ControlProxy::AreaProxy) or
40
+ (parent.nil? && Glimmer::LibUI::ControlProxy::AreaProxy.current_area_draw_params)
36
41
  )
37
42
  end
38
43
 
@@ -218,6 +218,7 @@ module Glimmer
218
218
  {
219
219
  key: key_to_char(area_key_event.Key, modifiers),
220
220
  key_value: area_key_event.Key,
221
+ key_code: area_key_event.Key,
221
222
  ext_key: ext_key_to_symbol(area_key_event.ExtKey),
222
223
  ext_key_value: area_key_event.ExtKey,
223
224
  modifier: modifiers_to_symbols(area_key_event.Modifier).first,
@@ -43,9 +43,9 @@ module Glimmer
43
43
  @column_index ||= @parent_proxy.send(:next_column_index)
44
44
  end
45
45
 
46
- # actual index within table columns (disregarding nil fillings that account for DualColumn instances)
46
+ # actual index within table columns (disregarding extra fillings that account for DualColumn instances)
47
47
  def index
48
- @parent_proxy.columns.compact.index(self)
48
+ @parent_proxy.columns.select {|c| c.is_a?(Column)}.index(self)
49
49
  end
50
50
  end
51
51
  end
@@ -34,7 +34,6 @@ module Glimmer
34
34
  @args = args
35
35
  @block = block
36
36
  @enabled = true
37
- @children = []
38
37
  post_add_content if @block.nil?
39
38
  end
40
39
 
@@ -20,44 +20,191 @@
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
22
  require 'glimmer/libui/control_proxy'
23
+ require 'glimmer/libui/control_proxy/image_part_proxy'
24
+ require 'glimmer/libui/image_path_renderer'
23
25
  require 'glimmer/data_binding/observer'
26
+ require 'glimmer/libui/control_proxy/transformable'
24
27
 
25
28
  using ArrayIncludeMethods
26
29
 
27
30
  module Glimmer
28
31
  module LibUI
29
32
  class ControlProxy
30
- # Proxy for LibUI image objects
33
+ # Proxy for LibUI image object and Glimmer custom control
31
34
  #
32
35
  # Follows the Proxy Design Pattern
33
36
  class ImageProxy < ControlProxy
37
+ include Parent
38
+ prepend Transformable
39
+
40
+ attr_reader :data, :pixels, :shapes
41
+
34
42
  def initialize(keyword, parent, args, &block)
35
43
  @keyword = keyword
36
44
  @parent_proxy = parent
37
45
  @args = args
38
46
  @block = block
39
47
  @enabled = true
40
- @children = []
41
48
  post_add_content if @block.nil?
42
49
  end
43
-
50
+
44
51
  def post_add_content
45
- build_control
46
- super
52
+ if area_image?
53
+ @shapes = nil
54
+ super
55
+ if @parent_proxy.nil? && AreaProxy.current_area_draw_params
56
+ draw(AreaProxy.current_area_draw_params)
57
+ destroy
58
+ end
59
+ @content_added = true
60
+ else # image object not control
61
+ build_control
62
+ super
63
+ end
64
+ end
65
+
66
+ def file(value = nil)
67
+ if value.nil?
68
+ @args[0]
69
+ else
70
+ @args[0] = value
71
+ if @content_added
72
+ post_add_content
73
+ request_auto_redraw
74
+ end
75
+ end
76
+ end
77
+ alias file= file
78
+ alias set_file file
79
+
80
+ def width(value = nil)
81
+ if value.nil?
82
+ @args[1]
83
+ else
84
+ @args[1] = value
85
+ if area_image? && @content_added
86
+ post_add_content
87
+ request_auto_redraw
88
+ end
89
+ end
90
+ end
91
+ alias width= width
92
+ alias set_width width
93
+
94
+ def height(value = nil)
95
+ if value.nil?
96
+ @args[2]
97
+ else
98
+ @args[2] = value
99
+ if area_image? && @content_added
100
+ post_add_content
101
+ request_auto_redraw
102
+ end
103
+ end
104
+ end
105
+ alias height= height
106
+ alias set_height height
107
+
108
+ def redraw
109
+ @parent_proxy&.redraw
110
+ end
111
+
112
+ def request_auto_redraw
113
+ @parent_proxy&.request_auto_redraw if area_image?
114
+ end
115
+
116
+ def draw(area_draw_params)
117
+ if @shapes.nil?
118
+ load_image
119
+ parse_pixels
120
+ calculate_shapes
121
+ end
122
+ ImagePathRenderer.new(@parent_proxy, @shapes).render
47
123
  end
48
-
49
- def post_initialize_child(child)
50
- @children << child
124
+
125
+ def area_image?
126
+ @area_image ||= !!(@parent_proxy&.is_a?(AreaProxy) || AreaProxy.current_area_draw_params)
127
+ end
128
+
129
+ def destroy
130
+ @parent_proxy&.children&.delete(self)
131
+ ControlProxy.control_proxies.delete(self)
51
132
  end
52
133
 
53
134
  private
54
135
 
55
136
  def build_control
56
- @args = [@children.first.args[1], @children.first.args[2]] if @children.size == 1 && (@args[0].nil? || @args[1].nil?)
57
- super
58
- @libui.tap do
59
- @children.each {|child| child&.send(:build_control) }
137
+ unless area_image? # image object
138
+ if file
139
+ load_image
140
+ ImagePartProxy.new('image_part', self, [@data, width, height, width * 4])
141
+ end
142
+ @args[1] = @children.first.args[1] if @children.size == 1 && @args[1].nil?
143
+ @args[2] = @children.first.args[2] if @children.size == 1 && @args[2].nil?
144
+ @libui = ControlProxy.new_control(@keyword, [width, height])
145
+ @libui.tap do
146
+ @children.each {|child| child&.send(:build_control) }
147
+ end
148
+ end
149
+ rescue => e
150
+ Glimmer::Config.logger.error {"Failed to load image file: #{file}"}
151
+ Glimmer::Config.logger.error {e.full_message}
152
+ raise e
153
+ end
154
+
155
+ def load_image
156
+ require 'chunky_png'
157
+ canvas = nil
158
+ if file.start_with?('http')
159
+ require 'net/http'
160
+ require 'open-uri'
161
+ uri = URI(file)
162
+ canvas = ChunkyPNG::Canvas.from_string(Net::HTTP.get(uri))
163
+ else
164
+ f = File.open(file)
165
+ canvas = ChunkyPNG::Canvas.from_io(f)
166
+ f.close
167
+ end
168
+ canvas.resample_nearest_neighbor!(width, height) if width && height
169
+ @data = canvas.to_rgba_stream
170
+ self.width = canvas.width
171
+ self.height = canvas.height
172
+ [@data, width, height]
173
+ end
174
+
175
+ def parse_pixels
176
+ @pixels = height.times.map do |y|
177
+ width.times.map do |x|
178
+ r = @data[(y*width + x)*4].ord
179
+ g = @data[(y*width + x)*4 + 1].ord
180
+ b = @data[(y*width + x)*4 + 2].ord
181
+ a = @data[(y*width + x)*4 + 3].ord
182
+ {x: x, y: y, color: {r: r, g: g, b: b, a: a}}
183
+ end
184
+ end.flatten
185
+ end
186
+
187
+ def calculate_shapes
188
+ @shapes = []
189
+ original_pixels = @pixels.dup
190
+ indexed_original_pixels = Hash[original_pixels.each_with_index.to_a]
191
+ @pixels.each do |pixel|
192
+ index = indexed_original_pixels[pixel]
193
+ @rectangle_start_x ||= pixel[:x]
194
+ @rectangle_width ||= 1
195
+ if pixel[:x] < width - 1 && pixel[:color] == original_pixels[index + 1][:color]
196
+ @rectangle_width += 1
197
+ else
198
+ if pixel[:x] > 0 && pixel[:color] == original_pixels[index - 1][:color]
199
+ @shapes << {x: @rectangle_start_x, y: pixel[:y], width: @rectangle_width, height: 1, color: pixel[:color]}
200
+ else
201
+ @shapes << {x: pixel[:x], y: pixel[:y], width: 1, height: 1, color: pixel[:color]}
202
+ end
203
+ @rectangle_width = 1
204
+ @rectangle_start_x = pixel[:x] == width - 1 ? 0 : pixel[:x] + 1
205
+ end
60
206
  end
207
+ @shapes
61
208
  end
62
209
  end
63
210
  end
@@ -21,6 +21,7 @@
21
21
 
22
22
  require 'glimmer/libui/control_proxy'
23
23
  require 'glimmer/libui/control_proxy/dual_column'
24
+ require 'glimmer/libui/control_proxy/triple_column'
24
25
  require 'glimmer/data_binding/observer'
25
26
  require 'glimmer/fiddle_consumer'
26
27
 
@@ -137,7 +138,7 @@ module Glimmer
137
138
 
138
139
  def build_control
139
140
  @model_handler = ::LibUI::FFI::TableModelHandler.malloc
140
- @model_handler.NumColumns = fiddle_closure_block_caller(4) { @columns.map {|c| c.is_a?(DualColumn) ? 2 : 1}.sum }
141
+ @model_handler.NumColumns = fiddle_closure_block_caller(4) { @columns.map {|c| c.is_a?(DualColumn) ? 2 : (c.is_a?(TripleColumn) ? 3 : 1)}.sum }
141
142
  @model_handler.ColumnType = fiddle_closure_block_caller(4, [1, 1, 4]) do |_, _, column|
142
143
  # TODO consider refactoring to use Glimmer::LibUI.enum_symbols(:table_value_type)
143
144
  case @columns[column]
@@ -193,15 +194,27 @@ module Glimmer
193
194
  column = @columns[column].index
194
195
  @cell_rows[row] ||= []
195
196
  @cell_rows[row][column] = ::LibUI.table_value_string(val).to_s
197
+ when Column::TextColorColumnProxy
198
+ column = @columns[column].index
199
+ @cell_rows[row] ||= []
200
+ @cell_rows[row][column] ||= []
201
+ @cell_rows[row][column][0] = ::LibUI.table_value_string(val).to_s
196
202
  when :text
197
203
  column = @columns[column - 1].index
204
+ @cell_rows[row] ||= []
205
+ @cell_rows[row][column] ||= []
198
206
  @cell_rows[row][column][1] = ::LibUI.table_value_string(val).to_s
199
207
  when Column::ButtonColumnProxy
200
208
  @columns[column].notify_listeners(:on_clicked, row)
201
- when Column::CheckboxColumnProxy, Column::CheckboxTextColumnProxy
209
+ when Column::CheckboxColumnProxy
202
210
  column = @columns[column].index
203
211
  @cell_rows[row] ||= []
204
212
  @cell_rows[row][column] = ::LibUI.table_value_int(val).to_i == 1
213
+ when Column::CheckboxTextColumnProxy
214
+ column = @columns[column].index
215
+ @cell_rows[row] ||= []
216
+ @cell_rows[row][column] ||= []
217
+ @cell_rows[row][column][0] = ::LibUI.table_value_int(val).to_i == 1
205
218
  end
206
219
  on_edited.each {|listener| listener.call(row, @cell_rows[row])}
207
220
  end
@@ -45,7 +45,7 @@ module Glimmer
45
45
 
46
46
  def destroy
47
47
  super
48
- ControlProxy.image_proxies.each { |image_proxy| ::LibUI.free_image(image_proxy.libui) }
48
+ ControlProxy.image_proxies.each { |image_proxy| ::LibUI.free_image(image_proxy.libui) unless image_proxy.area_image? }
49
49
  @on_destroy_procs&.each { |on_destroy_proc| on_destroy_proc.call(self)}
50
50
  end
51
51
 
@@ -27,8 +27,8 @@ module Glimmer
27
27
  class ControlProxy
28
28
  class << self
29
29
  def exists?(keyword)
30
- ::LibUI.respond_to?("new_#{keyword}") ||
31
- ::LibUI.respond_to?(keyword) ||
30
+ ::LibUI.respond_to?("new_#{keyword}") or
31
+ ::LibUI.respond_to?(keyword) or
32
32
  descendant_keyword_constant_map.keys.include?(keyword)
33
33
  end
34
34
 
@@ -207,11 +207,11 @@ module Glimmer
207
207
  end
208
208
 
209
209
  def respond_to_libui?(method_name, *args, &block)
210
- ::LibUI.respond_to?("control_#{method_name}") ||
211
- (::LibUI.respond_to?("control_#{method_name.to_s.sub(/\?$/, '')}") && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, '')) ) ||
212
- ::LibUI.respond_to?("control_set_#{method_name.to_s.sub(/=$/, '')}") ||
213
- ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name}") ||
214
- (::LibUI.respond_to?("#{libui_api_keyword}_#{method_name.to_s.sub(/\?$/, '')}") && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, '')) ) ||
210
+ ::LibUI.respond_to?("control_#{method_name}") or
211
+ (::LibUI.respond_to?("control_#{method_name.to_s.sub(/\?$/, '')}") && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, '')) ) or
212
+ ::LibUI.respond_to?("control_set_#{method_name.to_s.sub(/=$/, '')}") or
213
+ ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name}") or
214
+ (::LibUI.respond_to?("#{libui_api_keyword}_#{method_name.to_s.sub(/\?$/, '')}") && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, '')) ) or
215
215
  ::LibUI.respond_to?("#{libui_api_keyword}_set_#{method_name.to_s.sub(/=$/, '')}")
216
216
  end
217
217
 
@@ -0,0 +1,30 @@
1
+ module Glimmer
2
+ module LibUI
3
+ class ImagePathRenderer
4
+ include Glimmer
5
+
6
+ def initialize(area_proxy, shapes)
7
+ @area_proxy = area_proxy
8
+ @shapes = shapes
9
+ end
10
+
11
+ def render
12
+ work = Proc.new do
13
+ @shapes.each do |shape|
14
+ path {
15
+ rectangle(shape[:x], shape[:y], shape[:width], shape[:height])
16
+
17
+ fill shape[:color]
18
+ }
19
+ end
20
+ end
21
+ if @area_proxy.nil?
22
+ # Ensure it renders without a parent
23
+ Glimmer::DSL::Engine.add_content(nil, Glimmer::DSL::Libui::ControlExpression.new, 'image', &work)
24
+ else
25
+ work.call
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -73,12 +73,22 @@ module Glimmer
73
73
  @args = args
74
74
  @block = block
75
75
  set_parameter_defaults
76
+ build_control if implicit_path?
76
77
  post_add_content if @block.nil?
77
78
  end
78
79
 
79
80
  # Subclasses may override to perform post add_content work (normally must call super)
80
81
  def post_add_content
81
82
  @parent&.post_initialize_child(self)
83
+ @parent.post_add_content if implicit_path? && dynamic?
84
+ end
85
+
86
+ def post_initialize_child(child, add_child: true)
87
+ if child.is_a?(ControlProxy::MatrixProxy)
88
+ path_proxy.post_initialize_child(child, add_child: add_child)
89
+ else
90
+ super(child, add_child: add_child)
91
+ end
82
92
  end
83
93
 
84
94
  # Subclasses must override to perform draw work and call super afterwards to ensure calling destroy when semi-declarative in an on_draw method
@@ -105,6 +115,24 @@ module Glimmer
105
115
  def path_proxy
106
116
  find_parent_in_ancestors { |parent| parent.nil? || parent.is_a?(ControlProxy::PathProxy) }
107
117
  end
118
+
119
+ def fill(*args)
120
+ path_proxy.fill(*args)
121
+ end
122
+ alias fill= fill
123
+ alias set_fill fill
124
+
125
+ def stroke(*args)
126
+ path_proxy.stroke(*args)
127
+ end
128
+ alias stroke= stroke
129
+ alias set_stroke stroke
130
+
131
+ def transform(matrix = nil)
132
+ path_proxy.transform(matrix)
133
+ end
134
+ alias transform= transform
135
+ alias set_transform transform
108
136
 
109
137
  def respond_to?(method_name, *args, &block)
110
138
  self.class.parameters.include?(method_name.to_s.sub(/=$/, '').sub(/^set_/, '').to_sym) or
@@ -117,6 +145,7 @@ module Glimmer
117
145
  method_name = method_name.to_s
118
146
  parameter_index = self.class.parameters.index(method_name_parameter)
119
147
  if method_name.start_with?('set_') || method_name.end_with?('=') || !args.empty?
148
+ args = [args] if args.size > 1
120
149
  if args.first != @args[parameter_index]
121
150
  @args[parameter_index] = args.first
122
151
  request_auto_redraw
@@ -124,13 +153,27 @@ module Glimmer
124
153
  else
125
154
  @args[parameter_index]
126
155
  end
127
- else
156
+ else # TODO consider if there is a need to redirect anything to path proxy or delete this TODO
128
157
  super
129
158
  end
130
159
  end
131
160
 
132
161
  private
133
162
 
163
+ def build_control
164
+ block = Proc.new {} if dynamic?
165
+ @parent = Glimmer::LibUI::ControlProxy::PathProxy.new('path', @parent, [], &block)
166
+ end
167
+
168
+ # indicates if nested directly under area or on_draw event (having an implicit path not an explicit path parent)
169
+ def implicit_path?
170
+ @implicit_path ||= !!(@parent.is_a?(Glimmer::LibUI::ControlProxy::AreaProxy) || (@parent.nil? && Glimmer::LibUI::ControlProxy::AreaProxy.current_area_draw_params))
171
+ end
172
+
173
+ def dynamic?
174
+ ((@parent.nil? || (@parent.is_a?(ControlProxy::PathProxy) && @parent.parent_proxy.nil?)) && Glimmer::LibUI::ControlProxy::AreaProxy.current_area_draw_params)
175
+ end
176
+
134
177
  def set_parameter_defaults
135
178
  self.class.parameter_defaults.each_with_index do |default, i|
136
179
  @args[i] ||= default
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.2.24
4
+ version: 0.3.3
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-11-14 00:00:00.000000000 Z
11
+ date: 2021-11-21 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.4.0
19
+ version: 2.5.0
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.4.0
26
+ version: 2.5.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: os
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -72,6 +72,20 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: 0.0.12
75
+ - !ruby/object:Gem::Dependency
76
+ name: chunky_png
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 1.4.0
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 1.4.0
75
89
  - !ruby/object:Gem::Dependency
76
90
  name: juwelier
77
91
  requirement: !ruby/object:Gem::Requirement
@@ -176,20 +190,6 @@ dependencies:
176
190
  - - "~>"
177
191
  - !ruby/object:Gem::Version
178
192
  version: 0.7.0
179
- - !ruby/object:Gem::Dependency
180
- name: chunky_png
181
- requirement: !ruby/object:Gem::Requirement
182
- requirements:
183
- - - "~>"
184
- - !ruby/object:Gem::Version
185
- version: 1.4.0
186
- type: :development
187
- prerelease: false
188
- version_requirements: !ruby/object:Gem::Requirement
189
- requirements:
190
- - - "~>"
191
- - !ruby/object:Gem::Version
192
- version: 1.4.0
193
193
  description: Glimmer DSL for LibUI (Prerequisite-Free Ruby Desktop Development GUI
194
194
  Library) - No need to pre-install any prerequisites. Just install the gem and have
195
195
  platform-independent native GUI that just works! Glimmer DSL for LibUI aims to provide
@@ -221,15 +221,24 @@ files:
221
221
  - examples/basic_draw_text.rb
222
222
  - examples/basic_draw_text2.rb
223
223
  - examples/basic_entry.rb
224
+ - examples/basic_image.rb
225
+ - examples/basic_image2.rb
226
+ - examples/basic_image3.rb
227
+ - examples/basic_image4.rb
228
+ - examples/basic_image5.rb
224
229
  - examples/basic_table.rb
225
230
  - examples/basic_table_button.rb
226
231
  - examples/basic_table_checkbox.rb
227
232
  - examples/basic_table_checkbox_text.rb
228
233
  - examples/basic_table_color.rb
234
+ - examples/basic_table_color2.rb
229
235
  - examples/basic_table_image.rb
236
+ - examples/basic_table_image2.rb
230
237
  - examples/basic_table_image_text.rb
238
+ - examples/basic_table_image_text2.rb
231
239
  - examples/basic_table_progress_bar.rb
232
240
  - examples/basic_transform.rb
241
+ - examples/basic_transform2.rb
233
242
  - examples/basic_window.rb
234
243
  - examples/basic_window2.rb
235
244
  - examples/color_button.rb
@@ -347,6 +356,7 @@ files:
347
356
  - lib/glimmer/libui/control_proxy/transformable.rb
348
357
  - lib/glimmer/libui/control_proxy/triple_column.rb
349
358
  - lib/glimmer/libui/control_proxy/window_proxy.rb
359
+ - lib/glimmer/libui/image_path_renderer.rb
350
360
  - lib/glimmer/libui/parent.rb
351
361
  - lib/glimmer/libui/shape.rb
352
362
  - lib/glimmer/libui/shape/arc.rb
@@ -385,7 +395,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
385
395
  - !ruby/object:Gem::Version
386
396
  version: '0'
387
397
  requirements: []
388
- rubygems_version: 3.2.22
398
+ rubygems_version: 3.2.31
389
399
  signing_key:
390
400
  specification_version: 4
391
401
  summary: Glimmer DSL for LibUI