glimmer-dsl-libui 0.4.13 → 0.4.14

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: e1f51ecb1e42d70d4081b671b3ba4ee277a35cc5f75372536a826802f2766124
4
- data.tar.gz: 949069cd28522b6480ae3095cd4056aaeb26c90758429a393a5ee325a5e29c4c
3
+ metadata.gz: d51961908ec1315a42fe183bc79cbe86bc8d86e2dea9ac9a35d2dfaefaf3912d
4
+ data.tar.gz: af6c03eb6d451816d32242c7f7d99ce3ed28755f363f3620faea2a590c3e0ea8
5
5
  SHA512:
6
- metadata.gz: 9f0f791fe044894e4aa300f9642b2703e1774e0bb02bb98044056306e6e06ae32d58296301c0e6b6c0ede7bd2236ce2c2793ee56beb5e9f7db2ea772e427811d
7
- data.tar.gz: 8d11e1478a7c6a317a1a176cf464faaff5947231f01635c69d9771baf643ef80afba40ae92fdff551959f81f17eab2effa6edfe7dc40085ee020c789e1baf586
6
+ metadata.gz: cb828f87dfbc9c56fd15123ecb29a3c499f22c315ef6582d47c629353e444f16c2b0755b958abe8d77f0506ee25c1cffbafa0a682ea2bfb1e9d649fa49cb7e9f
7
+ data.tar.gz: ff5f76d4c7868c28d223a95bff04a5a3b9cf01879eec9231a709afd2e67a6ce6bb2a4df8a8ccf41406a1cf69aaf7250a40c7c726952f8e8b8cc280b0e8e77175
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.4.14
4
+
5
+ - Support passing width or height alone to `image` keyword, calculating the other dimension automatically while preserving original aspect ratio
6
+ - Support passing x and y coordinates to `image` keyword as 2nd and 3rd arguments of 5 arguments (file, x, y, width, height)
7
+ - Support passing x, y, width, height to `image` keyword as options kwargs
8
+
3
9
  ## 0.4.13
4
10
 
5
11
  - Shorten height of examples/cpu_percentage.rb
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for LibUI 0.4.13
1
+ # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for LibUI 0.4.14
2
2
  ## Prerequisite-Free Ruby Desktop Development GUI Library
3
3
  [![Gem Version](https://badge.fury.io/rb/glimmer-dsl-libui.svg)](http://badge.fury.io/rb/glimmer-dsl-libui)
4
4
  [![Join the chat at https://gitter.im/AndyObtiva/glimmer](https://badges.gitter.im/AndyObtiva/glimmer.svg)](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
@@ -180,7 +180,7 @@ class FormTable
180
180
  text_column('State')
181
181
 
182
182
  editable true
183
- cell_rows <=> [self, :contacts] # explicit data-binding to Model Array
183
+ cell_rows <=> [self, :contacts] # explicit data-binding to self.contacts Modal Array, auto-inferring model attribute names from underscored table column names by convention
184
184
 
185
185
  on_changed do |row, type, row_data|
186
186
  puts "Row #{row} #{type}: #{row_data}"
@@ -500,7 +500,7 @@ gem install glimmer-dsl-libui
500
500
  Or install via Bundler `Gemfile`:
501
501
 
502
502
  ```ruby
503
- gem 'glimmer-dsl-libui', '~> 0.4.13'
503
+ gem 'glimmer-dsl-libui', '~> 0.4.14'
504
504
  ```
505
505
 
506
506
  Test that installation worked by running the [Meta-Example](#examples):
@@ -1027,7 +1027,8 @@ Given that it is very new and is not a [libui](https://github.com/andlabs/libui)
1027
1027
  - It only supports the `.png` file format.
1028
1028
  - [libui](https://github.com/andlabs/libui) pixel-by-pixel rendering performance is slow.
1029
1029
  - Including an `image` inside an `area` `on_draw` listener improves performance due to not retaining pixel/line data in memory.
1030
- - Supplying `width` and `height` (2nd and 3rd arguments) greatly improves performance when shrinking image.
1030
+ - Supplying `width` and `height` options greatly improves performance when shrinking image (e.g. `image('somefile.png', width: 24, height: 24)`). You can also supply one of the two dimensions, and the other one gets calculated automatically while preserving original aspect ratio (e.g. `image('somefile.png', height: 24)`)
1031
+ - [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) lets you optionally specify `x` and `y` in addition to `file`, `width` and `height` (5 arguments total) to offset image location.
1031
1032
 
1032
1033
  Currently, it is recommended to use `image` with very small `width` and `height` values only (e.g. 24x24).
1033
1034
 
@@ -1046,7 +1047,11 @@ include Glimmer
1046
1047
 
1047
1048
  window('Basic Image', 96, 96) {
1048
1049
  area {
1049
- image(File.expand_path('icons/glimmer.png', __dir__), 96, 96)
1050
+ image(File.expand_path('icons/glimmer.png', __dir__), height: 96) # width is automatically calculated from height while preserving original aspect ratio
1051
+ # image(File.expand_path('icons/glimmer.png', __dir__), width: 96, height: 96) # you can specify both width and height options
1052
+ # image(File.expand_path('icons/glimmer.png', __dir__), 96, 96) # you can specify width, height as args
1053
+ # image(File.expand_path('../icons/glimmer.png', __dir__), 0, 0, 96, 96) # you can specify x, y, width, height args as alternative
1054
+ # image(File.expand_path('../icons/glimmer.png', __dir__), x: 0, y: 0, width: 96, height: 96) # you can specify x, y, width, height options as alternative
1050
1055
  }
1051
1056
  }.show
1052
1057
  ```
@@ -1078,6 +1083,8 @@ window('Basic Image', 96, 96) {
1078
1083
  area {
1079
1084
  image {
1080
1085
  file File.expand_path('icons/glimmer.png', __dir__)
1086
+ # x 0 # default
1087
+ # y 0 # default
1081
1088
  width 96
1082
1089
  height 96
1083
1090
  }
@@ -1623,7 +1630,7 @@ class SomeTable
1623
1630
  text_column('City')
1624
1631
  text_column('State')
1625
1632
 
1626
- cell_rows <=> [self, :contacts] # explicit data-binding to Model Array auto-inferring model attribute names from underscored table column names by convention
1633
+ cell_rows <=> [self, :contacts] # explicit data-binding to self.contacts Model Array, auto-inferring model attribute names from underscored table column names by convention
1627
1634
  }
1628
1635
  }.show
1629
1636
  end
@@ -4098,7 +4105,11 @@ window('Basic Image', 96, 96) {
4098
4105
  # image pixel rendered. Check basic_image2.rb for a faster alternative using on_draw manually.
4099
4106
  #
4100
4107
  # It is recommended to pass width/height args to shrink image and achieve faster performance.
4101
- image(File.expand_path('../icons/glimmer.png', __dir__), 96, 96)
4108
+ image(File.expand_path('../icons/glimmer.png', __dir__), height: 96) # width is automatically calculated from height while preserving original aspect ratio
4109
+ # image(File.expand_path('../icons/glimmer.png', __dir__), width: 96, height: 96) # you can specify both width, height options as alternative
4110
+ # image(File.expand_path('../icons/glimmer.png', __dir__), 96, 96) # you can specify width, height args as alternative
4111
+ # image(File.expand_path('../icons/glimmer.png', __dir__), 0, 0, 96, 96) # you can specify x, y, width, height args as alternative
4112
+ # image(File.expand_path('../icons/glimmer.png', __dir__), x: 0, y: 0, width: 96, height: 96) # you can specify x, y, width, height options as alternative
4102
4113
  }
4103
4114
  }.show
4104
4115
  ```
@@ -4106,8 +4117,6 @@ window('Basic Image', 96, 96) {
4106
4117
  New [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version 2 (better performance via `on_draw`):
4107
4118
 
4108
4119
  ```ruby
4109
- # frozen_string_literal: true
4110
-
4111
4120
  require 'glimmer-dsl-libui'
4112
4121
 
4113
4122
  include Glimmer
@@ -4115,7 +4124,7 @@ include Glimmer
4115
4124
  window('Basic Image', 96, 96) {
4116
4125
  area {
4117
4126
  on_draw do |area_draw_params|
4118
- image(File.expand_path('../icons/glimmer.png', __dir__), 96, 96)
4127
+ image(File.expand_path('../icons/glimmer.png', __dir__), height: 96)
4119
4128
  end
4120
4129
  }
4121
4130
  }.show
@@ -4124,8 +4133,6 @@ window('Basic Image', 96, 96) {
4124
4133
  New [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version 3 (explicit properties):
4125
4134
 
4126
4135
  ```ruby
4127
- # frozen_string_literal: true
4128
-
4129
4136
  require 'glimmer-dsl-libui'
4130
4137
 
4131
4138
  include Glimmer
@@ -4142,7 +4149,9 @@ window('Basic Image', 96, 96) {
4142
4149
  # It is recommended to pass width/height args to shrink image and achieve faster performance.
4143
4150
  image {
4144
4151
  file File.expand_path('../icons/glimmer.png', __dir__)
4145
- width 96
4152
+ # x 0 # default
4153
+ # y 0 # default
4154
+ # width 96 # gets calculated from height while preserving original aspect ratio of 512x512
4146
4155
  height 96
4147
4156
  }
4148
4157
  }
@@ -4152,8 +4161,6 @@ window('Basic Image', 96, 96) {
4152
4161
  New [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version 4 (better performance with `on_draw` when setting explicit properties):
4153
4162
 
4154
4163
  ```ruby
4155
- # frozen_string_literal: true
4156
-
4157
4164
  require 'glimmer-dsl-libui'
4158
4165
 
4159
4166
  include Glimmer
@@ -4163,7 +4170,6 @@ window('Basic Image', 96, 96) {
4163
4170
  on_draw do |area_draw_params|
4164
4171
  image {
4165
4172
  file File.expand_path('../icons/glimmer.png', __dir__)
4166
- width 96
4167
4173
  height 96
4168
4174
  }
4169
4175
  end
@@ -6896,7 +6902,7 @@ class FormTable
6896
6902
  text_column('State')
6897
6903
 
6898
6904
  editable true
6899
- cell_rows <=> [self, :contacts] # explicit data-binding to Model Array auto-inferring model attribute names from underscored table column names by convention
6905
+ cell_rows <=> [self, :contacts] # explicit data-binding to self.contacts Model Array, auto-inferring model attribute names from underscored table column names by convention
6900
6906
 
6901
6907
  on_changed do |row, type, row_data|
6902
6908
  puts "Row #{row} #{type}: #{row_data}"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.13
1
+ 0.4.14
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'glimmer-dsl-libui'
4
2
 
5
3
  include Glimmer
@@ -14,6 +12,10 @@ window('Basic Image', 96, 96) {
14
12
  # image pixel rendered. Check basic_image2.rb for a faster alternative using on_draw manually.
15
13
  #
16
14
  # It is recommended to pass width/height args to shrink image and achieve faster performance.
17
- image(File.expand_path('../icons/glimmer.png', __dir__), 96, 96)
15
+ image(File.expand_path('../icons/glimmer.png', __dir__), height: 96) # width is automatically calculated from height while preserving original aspect ratio
16
+ # image(File.expand_path('../icons/glimmer.png', __dir__), width: 96, height: 96) # you can specify both width, height options as alternative
17
+ # image(File.expand_path('../icons/glimmer.png', __dir__), 96, 96) # you can specify width, height args as alternative
18
+ # image(File.expand_path('../icons/glimmer.png', __dir__), 0, 0, 96, 96) # you can specify x, y, width, height args as alternative
19
+ # image(File.expand_path('../icons/glimmer.png', __dir__), x: 0, y: 0, width: 96, height: 96) # you can specify x, y, width, height options as alternative
18
20
  }
19
21
  }.show
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'glimmer-dsl-libui'
4
2
 
5
3
  include Glimmer
@@ -7,7 +5,7 @@ include Glimmer
7
5
  window('Basic Image', 96, 96) {
8
6
  area {
9
7
  on_draw do |area_draw_params|
10
- image(File.expand_path('../icons/glimmer.png', __dir__), 96, 96)
8
+ image(File.expand_path('../icons/glimmer.png', __dir__), height: 96)
11
9
  end
12
10
  }
13
11
  }.show
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'glimmer-dsl-libui'
4
2
 
5
3
  include Glimmer
@@ -16,7 +14,9 @@ window('Basic Image', 96, 96) {
16
14
  # It is recommended to pass width/height args to shrink image and achieve faster performance.
17
15
  image {
18
16
  file File.expand_path('../icons/glimmer.png', __dir__)
19
- width 96
17
+ # x 0 # default
18
+ # y 0 # default
19
+ # width 96 # gets calculated from height while preserving original aspect ratio of 512x512
20
20
  height 96
21
21
  }
22
22
  }
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require 'glimmer-dsl-libui'
4
2
 
5
3
  include Glimmer
@@ -9,7 +7,6 @@ window('Basic Image', 96, 96) {
9
7
  on_draw do |area_draw_params|
10
8
  image {
11
9
  file File.expand_path('../icons/glimmer.png', __dir__)
12
- width 96
13
10
  height 96
14
11
  }
15
12
  end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  # This is the manual way of rendering an image unto an area control.
4
2
  # It could come in handy in special situations.
5
3
  # Otherwise, it is recommended to simply utilize the `image` control that
@@ -98,7 +98,7 @@ class FormTable
98
98
  text_column('State')
99
99
 
100
100
  editable true
101
- cell_rows <=> [self, :contacts] # explicit data-binding to Model Array
101
+ cell_rows <=> [self, :contacts] # explicit data-binding to self.contacts Model Array, auto-inferring model attribute names from underscored table column names by convention
102
102
 
103
103
  on_changed do |row, type, row_data|
104
104
  puts "Row #{row} #{type}: #{row_data}"
Binary file
@@ -53,11 +53,12 @@ module Glimmer
53
53
  include Parent
54
54
  prepend Transformable
55
55
 
56
- attr_reader :data, :pixels, :shapes
56
+ attr_reader :data, :pixels, :shapes, :options
57
57
 
58
58
  def initialize(keyword, parent, args, &block)
59
59
  @keyword = keyword
60
60
  @parent_proxy = parent
61
+ @options = args.last.is_a?(Hash) ? args.pop : {}
61
62
  @args = args
62
63
  @block = block
63
64
  @enabled = true
@@ -92,11 +93,47 @@ module Glimmer
92
93
  alias file= file
93
94
  alias set_file file
94
95
 
96
+ def x(value = nil)
97
+ if value.nil?
98
+ @args.size > 3 ? @args[1] : (@options[:x] || 0)
99
+ else
100
+ if @args.size > 3
101
+ @args[1] = value
102
+ else
103
+ @options[:x] = value
104
+ end
105
+ if area_image? && @content_added
106
+ post_add_content
107
+ request_auto_redraw
108
+ end
109
+ end
110
+ end
111
+ alias x= x
112
+ alias set_x x
113
+
114
+ def y(value = nil)
115
+ if value.nil?
116
+ @args.size > 3 ? @args[2] : (@options[:y] || 0)
117
+ else
118
+ if @args.size > 3
119
+ @args[2] = value
120
+ else
121
+ @options[:y] = value
122
+ end
123
+ if area_image? && @content_added
124
+ post_add_content
125
+ request_auto_redraw
126
+ end
127
+ end
128
+ end
129
+ alias y= y
130
+ alias set_y y
131
+
95
132
  def width(value = nil)
96
133
  if value.nil?
97
- @args[1]
134
+ @args.size > 3 ? @args[3] : (@options[:width] || @args[1])
98
135
  else
99
- @args[1] = value
136
+ set_width_variable(value)
100
137
  if area_image? && @content_added
101
138
  post_add_content
102
139
  request_auto_redraw
@@ -108,9 +145,9 @@ module Glimmer
108
145
 
109
146
  def height(value = nil)
110
147
  if value.nil?
111
- @args[2]
148
+ @args.size > 3 ? @args[4] : (@options[:height] || @args[2])
112
149
  else
113
- @args[2] = value
150
+ set_height_variable(value)
114
151
  if area_image? && @content_added
115
152
  post_add_content
116
153
  request_auto_redraw
@@ -148,6 +185,26 @@ module Glimmer
148
185
 
149
186
  private
150
187
 
188
+ def set_width_variable(value)
189
+ if @args.size > 3
190
+ @args[3] = value
191
+ elsif @options[:width]
192
+ @options[:width] = value
193
+ else
194
+ @args[1] = value
195
+ end
196
+ end
197
+
198
+ def set_height_variable(value)
199
+ if @args.size > 3
200
+ @args[4] = value
201
+ elsif @options[:height]
202
+ @options[:height] = value
203
+ else
204
+ @args[2] = value
205
+ end
206
+ end
207
+
151
208
  def build_control
152
209
  unless area_image? # image object
153
210
  if file
@@ -180,10 +237,15 @@ module Glimmer
180
237
  canvas = ChunkyPNG::Canvas.from_io(f)
181
238
  f.close
182
239
  end
183
- canvas.resample_nearest_neighbor!(width, height) if width && height
240
+ original_width = canvas.width
241
+ original_height = canvas.height
242
+ require 'bigdecimal'
243
+ calculated_width = ((BigDecimal(height)/BigDecimal(original_height))*original_width).to_i if height && !width
244
+ calculated_height = ((BigDecimal(width)/BigDecimal(original_width))*original_height).to_i if width && !height
245
+ canvas.resample_nearest_neighbor!(calculated_width || width, calculated_height || height) if width || height
184
246
  @data = canvas.to_rgba_stream
185
- @args[1] = canvas.width
186
- @args[2] = canvas.height
247
+ set_width_variable(canvas.width) unless width
248
+ set_height_variable(canvas.height) unless height
187
249
  [@data, width, height]
188
250
  end
189
251
 
@@ -203,6 +265,8 @@ module Glimmer
203
265
  @shapes = []
204
266
  original_pixels = @pixels.dup
205
267
  indexed_original_pixels = Hash[original_pixels.each_with_index.to_a]
268
+ x_offset = x
269
+ y_offset = y
206
270
  @pixels.each do |pixel|
207
271
  index = indexed_original_pixels[pixel]
208
272
  @rectangle_start_x ||= pixel[:x]
@@ -211,9 +275,9 @@ module Glimmer
211
275
  @rectangle_width += 1
212
276
  else
213
277
  if pixel[:x] > 0 && pixel[:color] == original_pixels[index - 1][:color]
214
- @shapes << {x: @rectangle_start_x, y: pixel[:y], width: @rectangle_width, height: 1, color: pixel[:color]}
278
+ @shapes << {x: x_offset + @rectangle_start_x, y: y_offset + pixel[:y], width: @rectangle_width, height: 1, color: pixel[:color]}
215
279
  else
216
- @shapes << {x: pixel[:x], y: pixel[:y], width: 1, height: 1, color: pixel[:color]}
280
+ @shapes << {x: x_offset + pixel[:x], y: y_offset + pixel[:y], width: 1, height: 1, color: pixel[:color]}
217
281
  end
218
282
  @rectangle_width = 1
219
283
  @rectangle_start_x = pixel[:x] == width - 1 ? 0 : pixel[:x] + 1
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.4.13
4
+ version: 0.4.14
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-12-03 00:00:00.000000000 Z
11
+ date: 2021-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer