gray_scott_gtk3 0.5.7 → 0.6.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b05f0ded43ea9aacb610353610ceee7467ea79e9780910b99aca883268a2e5a
4
- data.tar.gz: 478e33120c796fa6c4d05f353d7e5193b83d94cabd94936966df41d128fcf84e
3
+ metadata.gz: 179cfc87ecf774d201705002979b4cfa98100c68cff099787a4c743af0d91927
4
+ data.tar.gz: 90c0a010a021a31aaaeacbd1de9ac96c9a646547746aec8291d377f81d61c07d
5
5
  SHA512:
6
- metadata.gz: 48b77d17fce3734b60a27521f478bad40a8fb7caada166ddcf7f49a6f95529366220eb1d8880a869c6464c8c595129a86fda68a84b2f2f826c68ac96179053b4
7
- data.tar.gz: 586fb519f89010e7c72decfcb9610c5348d17597c258e1997d5bc131f2b57d40df7e682daf55dd9403cd0ea04ab3db23fb65cdfd18c671cfb3b588a02f45fd51
6
+ metadata.gz: 5fc89498db5aff1cffd9ad6562dcc9d03198019a52d71de9429c7a90cf2bb5806786b213c64a83424568c05cb820a4aab4bf86221a45f3741f77f971c56e2b4a
7
+ data.tar.gz: cf051081312ad9ac1455abac4f147ec74f76bd8ce6ee91dedfd32841f87aad56d97ef410b2339824dd7c6cafb2d3850b7284ad86bf7aed0e352c1e94cc8cd7ac
data/.github/FUNDING.yml CHANGED
@@ -1,2 +1 @@
1
- github: kojix2
2
1
  ko_fi: kojix2
@@ -6,16 +6,18 @@ jobs:
6
6
  runs-on: ${{ matrix.os }}-latest
7
7
  strategy:
8
8
  matrix:
9
- os: [ 'ubuntu' ]
10
- ruby: [ '2.6', '2.7', '3.0' ]
9
+ os: ["ubuntu"]
10
+ ruby: ["3.2", "3.3"]
11
11
  steps:
12
- - uses: actions/checkout@v2
12
+ - run: |
13
+ sudo apt-get update -yq
14
+ sudo apt-get install -y libgtkd-3-dev libgirepository1.0-dev at-spi2-core xvfb
15
+ - uses: actions/checkout@v7
13
16
  - uses: ruby/setup-ruby@v1
14
17
  with:
15
18
  ruby-version: ${{ matrix.ruby }}
19
+ bundler-cache: true
16
20
  - run: |
17
- sudo apt install -y xvfb libgtk-3-0
18
- - run: |
19
21
  bundle install
20
22
  - run: |
21
23
  xvfb-run bundle exec rake spec
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
- # Gray-Scott
1
+ # gray_scott_gtk3
2
2
 
3
3
  [![Gem](https://img.shields.io/gem/v/gray_scott_gtk3)](https://rubygems.org/gems/gray_scott_gtk3)
4
- [![build status](https://travis-ci.com/kojix2/Gray-Scott.svg?branch=master)](https://travis-ci.com/github/kojix2/Gray-Scott)
4
+ [![test](https://github.com/kojix2/Gray-Scott/actions/workflows/ci.yml/badge.svg)](https://github.com/kojix2/Gray-Scott/actions/workflows/ci.yml)
5
5
  [![DOI](https://zenodo.org/badge/158914232.svg)](https://zenodo.org/badge/latestdoi/158914232)
6
6
 
7
- Ruby implementation of the Reaction diffusion system (Gray-Scott model).
7
+ Ruby implementation of the [Reaction diffusion system](https://en.wikipedia.org/wiki/Reaction%E2%80%93diffusion_system) (Gray-Scott model).
8
8
 
9
9
  ![screenshot](https://raw.githubusercontent.com/kojix2/Gray-Scott/screenshot/screenshot/screenshot.gif)
10
10
 
@@ -14,6 +14,10 @@ Ruby implementation of the Reaction diffusion system (Gray-Scott model).
14
14
  gem install gray_scott_gtk3
15
15
  ```
16
16
 
17
+ GPGPU support requires installing [Cumo](https://github.com/sonots/cumo) separately in a compatible CUDA environment.
18
+
19
+ Saved models use JSON. Models saved by older releases in the unsafe `Marshal` format cannot be opened.
20
+
17
21
  ## Usage
18
22
 
19
23
  ```bash
@@ -41,3 +45,7 @@ In this case, you should increase the number of seconds.
41
45
  ## Contributing
42
46
 
43
47
  Bug reports and pull requests are welcome on GitHub at https://github.com/kojix2/Gray-Scott.
48
+
49
+ Do you need commit rights to my repository?
50
+ Do you want to get admin rights and take over the project?
51
+ If so, please feel free to contact me @kojix2.
data/exe/grayscott CHANGED
@@ -8,11 +8,19 @@ OptionParser.new do |op|
8
8
  op.on('-h val', '--height', 'height of the model', Integer) { |v| opt[:height] = v }
9
9
  op.on('-w val', '--width', 'width of the model', Integer) { |v| opt[:width] = v }
10
10
  op.on('-g', '--gpu', 'use GPU(Cumo)') { |v| opt[:gpu] = v }
11
+ op.on_tail('--help', 'show this message') { puts op; exit }
11
12
  op.parse!(ARGV)
12
13
  end
13
14
 
14
- require 'cumo/narray' if opt[:gpu]
15
- opt.delete(:gpu)
15
+ abort 'width and height must be integers greater than or equal to 2' unless opt[:width] >= 2 && opt[:height] >= 2
16
+
17
+ if opt.delete(:gpu)
18
+ begin
19
+ require 'cumo/narray'
20
+ rescue LoadError
21
+ abort 'GPU support requires the optional cumo gem and a compatible CUDA environment'
22
+ end
23
+ end
16
24
 
17
25
  require 'gray_scott'
18
26
 
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ['lib']
21
21
 
22
22
  spec.add_dependency 'gtk3'
23
- spec.add_dependency 'numo-narray'
23
+ spec.add_dependency 'numo-narray-alt'
24
24
 
25
25
  spec.add_development_dependency 'bundler'
26
26
  spec.add_development_dependency 'rake'
@@ -35,14 +35,14 @@ module GrayScott
35
35
  end
36
36
 
37
37
  def hsv2rgb(h)
38
+ h = h - h.floor
38
39
  i = UInt8.cast(h * 6)
39
40
  f = (h * 6.0) - i
40
41
  p = UInt8.zeros(*h.shape)
41
42
  v = UInt8.new(*h.shape).fill 255
42
- q = (1.0 - f) * 256
43
- t = f * 256
43
+ q = UInt8.cast((1.0 - f) * 255)
44
+ t = UInt8.cast(f * 255)
44
45
  rgb = UInt8.zeros(*h.shape, 3)
45
- t = UInt8.cast(t)
46
46
  i = uInt8_dstack([i, i, i])
47
47
  rgb[i.eq 0] = uInt8_dstack([v, t, p])[i.eq 0]
48
48
  rgb[i.eq 1] = uInt8_dstack([q, v, p])[i.eq 1]
@@ -86,7 +86,7 @@ module GrayScott
86
86
 
87
87
  def uint8_zeros_256(ch, ar)
88
88
  d = UInt8.zeros(*ar.shape, 3)
89
- d[true, true, ch] = UInt8.cast(ar * 256)
89
+ d[true, true, ch] = UInt8.cast(ar * 255)
90
90
  d
91
91
  end
92
92
  end
@@ -11,8 +11,8 @@ module GrayScott
11
11
  d.copyright = 'Copyright (C) kojix2'
12
12
  d.authors = ['kojix2']
13
13
  d.version = GrayScott::VERSION
14
- d.website = 'https://github.com/kojix2/Gray-Scott'
15
- d.website_label = 'Github kojix2/Gray-Scott'
14
+ d.website = 'https://github.com/kojix2/gray_scott_gtk3'
15
+ d.website_label = 'Github kojix2/gray_scott_gtk3'
16
16
  d.run
17
17
  d.destroy
18
18
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'json'
4
+
3
5
  require_relative 'controller/aboutdialog'
4
6
 
5
7
  module GrayScott
@@ -47,7 +49,7 @@ module GrayScott
47
49
  end
48
50
 
49
51
  def on_msec_changed(msec)
50
- @msec = msec.value.to_i
52
+ @msec = [msec.value.to_i, 1].max
51
53
  end
52
54
 
53
55
  def display
@@ -66,23 +68,34 @@ module GrayScott
66
68
  if widget.active?
67
69
  execute
68
70
  else
69
- @doing_now = false
71
+ stop
70
72
  end
71
73
  end
72
74
 
73
75
  def execute
76
+ return if @timeout_id
77
+
74
78
  @doing_now = true
75
- GLib::Timeout.add @msec do
79
+ @timeout_id = GLib::Timeout.add([@msec, 1].max) do
76
80
  @frames.times do
77
- model.update
81
+ model.step
78
82
  end
79
83
  display
80
- @doing_now
84
+ if @doing_now
85
+ true
86
+ else
87
+ @timeout_id = nil
88
+ false
89
+ end
81
90
  end
82
91
  end
83
92
 
84
93
  def stop
85
94
  @doing_now = false
95
+ if @timeout_id
96
+ GLib::Source.remove(@timeout_id)
97
+ @timeout_id = nil
98
+ end
86
99
  @execute_button.active = false
87
100
  end
88
101
 
@@ -92,11 +105,13 @@ module GrayScott
92
105
  action: :open,
93
106
  buttons: [%i[open accept], %i[cancel cancel]])
94
107
  if dialog.run == :accept
95
- filename = dialog.filename
96
- str = File.read(filename)
97
- # TODO: check model
98
- @model = Marshal.load(str)
99
- display
108
+ begin
109
+ @model = load_model(File.read(dialog.filename))
110
+ @height, @width = @model.u.shape
111
+ display
112
+ rescue JSON::ParserError, ArgumentError, KeyError, TypeError => e
113
+ warn "Unable to open model: #{e.message}"
114
+ end
100
115
  end
101
116
  dialog.destroy
102
117
  end
@@ -108,9 +123,7 @@ module GrayScott
108
123
  buttons: [%i[save accept], %i[cancel cancel]])
109
124
  dialog.do_overwrite_confirmation = true
110
125
  if dialog.run == :accept
111
- filename = dialog.filename
112
- str = Marshal.dump(model)
113
- File.write(filename, str)
126
+ File.write(dialog.filename, JSON.generate(model_data))
114
127
  end
115
128
  dialog.destroy
116
129
  end
@@ -172,6 +185,52 @@ module GrayScott
172
185
 
173
186
  private
174
187
 
188
+ def model_data
189
+ height, width = model.u.shape
190
+ {
191
+ version: 1,
192
+ width: width,
193
+ height: height,
194
+ f: model.f,
195
+ k: model.k,
196
+ u: model.u.to_a,
197
+ v: model.v.to_a
198
+ }
199
+ end
200
+
201
+ def load_model(serialized)
202
+ data = JSON.parse(serialized)
203
+ version = data.fetch('version')
204
+ width = data.fetch('width')
205
+ height = data.fetch('height')
206
+ f = data.fetch('f')
207
+ k = data.fetch('k')
208
+ u = data.fetch('u')
209
+ v = data.fetch('v')
210
+
211
+ unless version == 1 &&
212
+ [width, height].all? { |dimension| dimension.is_a?(Integer) && dimension >= 2 } &&
213
+ [f, k].all? { |value| value.is_a?(Numeric) && value.finite? } &&
214
+ [u, v].all? { |array| valid_model_array?(array, height, width) }
215
+ raise ArgumentError, 'invalid model data'
216
+ end
217
+
218
+ Model.new(width: width, height: height).tap do |loaded_model|
219
+ loaded_model.f = f
220
+ loaded_model.k = k
221
+ loaded_model.u = SFloat.cast(u)
222
+ loaded_model.v = SFloat.cast(v)
223
+ end
224
+ end
225
+
226
+ def valid_model_array?(array, height, width)
227
+ array.is_a?(Array) && array.length == height &&
228
+ array.all? do |row|
229
+ row.is_a?(Array) && row.length == width &&
230
+ row.all? { |value| value.is_a?(Numeric) && value.finite? }
231
+ end
232
+ end
233
+
175
234
  def debug_p_u
176
235
  p model.u
177
236
  end
@@ -17,6 +17,10 @@ module GrayScott
17
17
  attr_accessor :f, :k, :u, :v
18
18
 
19
19
  def initialize(width: 256, height: 256)
20
+ unless [width, height].all? { |dimension| dimension.is_a?(Integer) && dimension >= 2 }
21
+ raise ArgumentError, 'width and height must be integers greater than or equal to 2'
22
+ end
23
+
20
24
  # Feed rate
21
25
  @f = 0.04
22
26
 
@@ -35,7 +39,7 @@ module GrayScott
35
39
  v.fill 0.0
36
40
  end
37
41
 
38
- def update
42
+ def step
39
43
  l_u = Utils::Math._laplacian2d u, Dx
40
44
  l_v = Utils::Math._laplacian2d v, Dx
41
45
 
@@ -44,10 +48,10 @@ module GrayScott
44
48
  dvdt = Dv * l_v + uvv - (f + k) * v
45
49
  u._ + (Dt * dudt)
46
50
  v._ + (Dt * dvdt)
47
- immune_surveillance
51
+ sanitize
48
52
  end
49
53
 
50
- def immune_surveillance
54
+ def sanitize
51
55
  # clip is better.
52
56
  @u[@u.lt 0.00001] = 0.00001
53
57
  @u[@u.gt 1] = 1
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GrayScott
4
- VERSION = '0.5.7'
4
+ VERSION = '0.6.0'
5
5
  end
data/renovate.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": [
4
+ "config:recommended"
5
+ ]
6
+ }
@@ -25,6 +25,7 @@
25
25
  <signal name="value-changed" handler="on_k_changed" swapped="no"/>
26
26
  </object>
27
27
  <object class="GtkAdjustment" id="msec">
28
+ <property name="lower">1</property>
28
29
  <property name="upper">10000</property>
29
30
  <property name="value">40</property>
30
31
  <property name="step-increment">1</property>
@@ -73,7 +74,7 @@
73
74
  <object class="GtkMenuItem">
74
75
  <property name="visible">True</property>
75
76
  <property name="can-focus">False</property>
76
- <property name="label" translatable="yes">gtk-new</property>
77
+ <property name="label" translatable="yes">Clear</property>
77
78
  <property name="use-underline">True</property>
78
79
  <signal name="activate" handler="on_clear_clicked" swapped="no"/>
79
80
  </object>
@@ -82,7 +83,7 @@
82
83
  <object class="GtkMenuItem">
83
84
  <property name="visible">True</property>
84
85
  <property name="can-focus">False</property>
85
- <property name="label" translatable="yes">gtk-open</property>
86
+ <property name="label" translatable="yes">Open</property>
86
87
  <property name="use-underline">True</property>
87
88
  <signal name="activate" handler="on_open_clicked" swapped="no"/>
88
89
  </object>
@@ -91,7 +92,7 @@
91
92
  <object class="GtkMenuItem">
92
93
  <property name="visible">True</property>
93
94
  <property name="can-focus">False</property>
94
- <property name="label" translatable="yes">gtk-save-as</property>
95
+ <property name="label" translatable="yes">Save model</property>
95
96
  <property name="use-underline">True</property>
96
97
  <signal name="activate" handler="on_save_clicked" swapped="no"/>
97
98
  </object>
@@ -100,7 +101,7 @@
100
101
  <object class="GtkMenuItem">
101
102
  <property name="visible">True</property>
102
103
  <property name="can-focus">False</property>
103
- <property name="label" translatable="yes">gtk-convert</property>
104
+ <property name="label" translatable="yes">Save PNG image</property>
104
105
  <property name="use-underline">True</property>
105
106
  <signal name="activate" handler="on_convert_clicked" swapped="no"/>
106
107
  </object>
@@ -115,7 +116,7 @@
115
116
  <object class="GtkMenuItem">
116
117
  <property name="visible">True</property>
117
118
  <property name="can-focus">False</property>
118
- <property name="label" translatable="yes">gtk-quit</property>
119
+ <property name="label" translatable="yes">Quit</property>
119
120
  <property name="use-underline">True</property>
120
121
  <signal name="activate" handler="main_quit" swapped="no"/>
121
122
  </object>
@@ -124,29 +125,6 @@
124
125
  </child>
125
126
  </object>
126
127
  </child>
127
- <child>
128
- <object class="GtkMenuItem">
129
- <property name="visible">True</property>
130
- <property name="can-focus">False</property>
131
- <property name="label" translatable="yes">Help</property>
132
- <property name="use-underline">True</property>
133
- <child type="submenu">
134
- <object class="GtkMenu">
135
- <property name="visible">True</property>
136
- <property name="can-focus">False</property>
137
- <child>
138
- <object class="GtkMenuItem">
139
- <property name="visible">True</property>
140
- <property name="can-focus">False</property>
141
- <property name="label" translatable="yes">gtk-about</property>
142
- <property name="use-underline">True</property>
143
- <signal name="activate" handler="show_about" swapped="no"/>
144
- </object>
145
- </child>
146
- </object>
147
- </child>
148
- </object>
149
- </child>
150
128
  <child>
151
129
  <object class="GtkMenuItem">
152
130
  <property name="visible">True</property>
@@ -197,6 +175,29 @@
197
175
  </child>
198
176
  </object>
199
177
  </child>
178
+ <child>
179
+ <object class="GtkMenuItem">
180
+ <property name="visible">True</property>
181
+ <property name="can-focus">False</property>
182
+ <property name="label" translatable="yes">Help</property>
183
+ <property name="use-underline">True</property>
184
+ <child type="submenu">
185
+ <object class="GtkMenu">
186
+ <property name="visible">True</property>
187
+ <property name="can-focus">False</property>
188
+ <child>
189
+ <object class="GtkMenuItem">
190
+ <property name="visible">True</property>
191
+ <property name="can-focus">False</property>
192
+ <property name="label" translatable="yes">About</property>
193
+ <property name="use-underline">True</property>
194
+ <signal name="activate" handler="show_about" swapped="no"/>
195
+ </object>
196
+ </child>
197
+ </object>
198
+ </child>
199
+ </object>
200
+ </child>
200
201
  </object>
201
202
  <packing>
202
203
  <property name="expand">False</property>
@@ -295,59 +296,11 @@
295
296
  <property name="visible">True</property>
296
297
  <property name="can-focus">False</property>
297
298
  <property name="orientation">vertical</property>
299
+ <property name="homogeneous">True</property>
298
300
  <child>
299
301
  <object class="GtkActionBar">
300
302
  <property name="visible">True</property>
301
303
  <property name="can-focus">False</property>
302
- <child>
303
- <object class="GtkScaleButton" id="pen_density_scale">
304
- <property name="visible">True</property>
305
- <property name="can-focus">True</property>
306
- <property name="receives-default">True</property>
307
- <property name="tooltip-text" translatable="yes">pen density</property>
308
- <property name="relief">none</property>
309
- <property name="orientation">vertical</property>
310
- <property name="adjustment">pen_density</property>
311
- <property name="icons">applications-graphics
312
- applications-graphics
313
- applications-graphics</property>
314
- </object>
315
- <packing>
316
- <property name="position">0</property>
317
- </packing>
318
- </child>
319
- <child>
320
- <object class="GtkScaleButton" id="pen_radius_scale">
321
- <property name="visible">True</property>
322
- <property name="can-focus">True</property>
323
- <property name="receives-default">True</property>
324
- <property name="tooltip-text" translatable="yes">pen radius</property>
325
- <property name="relief">none</property>
326
- <property name="orientation">vertical</property>
327
- <property name="adjustment">pen_radius</property>
328
- <property name="icons">applications-graphics
329
- applications-graphics
330
- applications-graphics</property>
331
- </object>
332
- <packing>
333
- <property name="position">0</property>
334
- </packing>
335
- </child>
336
- <child>
337
- <object class="GtkComboBoxText" id="uv_combobox">
338
- <property name="visible">True</property>
339
- <property name="can-focus">False</property>
340
- <property name="active">1</property>
341
- <items>
342
- <item translatable="yes">U</item>
343
- <item translatable="yes">V</item>
344
- </items>
345
- <signal name="changed" handler="on_uv_combobox_changed" swapped="no"/>
346
- </object>
347
- <packing>
348
- <property name="position">0</property>
349
- </packing>
350
- </child>
351
304
  <child>
352
305
  <object class="GtkComboBoxText">
353
306
  <property name="visible">True</property>
@@ -367,37 +320,54 @@ applications-graphics</property>
367
320
  <signal name="changed" handler="on_color_combobox_changed" swapped="no"/>
368
321
  </object>
369
322
  <packing>
370
- <property name="position">0</property>
323
+ <property name="position">3</property>
324
+ </packing>
325
+ </child>
326
+ <child>
327
+ <object class="GtkComboBoxText" id="uv_combobox">
328
+ <property name="visible">True</property>
329
+ <property name="can-focus">False</property>
330
+ <property name="active">1</property>
331
+ <items>
332
+ <item translatable="yes">U</item>
333
+ <item translatable="yes">V</item>
334
+ </items>
335
+ <signal name="changed" handler="on_uv_combobox_changed" swapped="no"/>
336
+ </object>
337
+ <packing>
338
+ <property name="position">4</property>
371
339
  </packing>
372
340
  </child>
373
341
  <child>
374
342
  <object class="GtkSpinButton">
375
343
  <property name="visible">True</property>
376
344
  <property name="can-focus">True</property>
377
- <property name="tooltip-text" translatable="yes">frames</property>
345
+ <property name="tooltip-text" translatable="yes">msec</property>
346
+ <property name="has-frame">False</property>
378
347
  <property name="input-purpose">digits</property>
379
- <property name="adjustment">frames</property>
348
+ <property name="adjustment">msec</property>
380
349
  <property name="climb-rate">1</property>
381
350
  <property name="numeric">True</property>
382
351
  </object>
383
352
  <packing>
384
353
  <property name="pack-type">end</property>
385
- <property name="position">0</property>
354
+ <property name="position">6</property>
386
355
  </packing>
387
356
  </child>
388
357
  <child>
389
358
  <object class="GtkSpinButton">
390
359
  <property name="visible">True</property>
391
360
  <property name="can-focus">True</property>
392
- <property name="tooltip-text" translatable="yes">msec</property>
361
+ <property name="tooltip-text" translatable="yes">frames</property>
362
+ <property name="has-frame">False</property>
393
363
  <property name="input-purpose">digits</property>
394
- <property name="adjustment">msec</property>
364
+ <property name="adjustment">frames</property>
395
365
  <property name="climb-rate">1</property>
396
366
  <property name="numeric">True</property>
397
367
  </object>
398
368
  <packing>
399
369
  <property name="pack-type">end</property>
400
- <property name="position">0</property>
370
+ <property name="position">5</property>
401
371
  </packing>
402
372
  </child>
403
373
  </object>
@@ -407,17 +377,6 @@ applications-graphics</property>
407
377
  <property name="position">0</property>
408
378
  </packing>
409
379
  </child>
410
- <child>
411
- <object class="GtkSeparator">
412
- <property name="visible">True</property>
413
- <property name="can-focus">False</property>
414
- </object>
415
- <packing>
416
- <property name="expand">False</property>
417
- <property name="fill">True</property>
418
- <property name="position">1</property>
419
- </packing>
420
- </child>
421
380
  </object>
422
381
  <packing>
423
382
  <property name="expand">False</property>
@@ -425,102 +384,137 @@ applications-graphics</property>
425
384
  <property name="position">2</property>
426
385
  </packing>
427
386
  </child>
387
+ <child>
388
+ <object class="GtkSeparator">
389
+ <property name="visible">True</property>
390
+ <property name="can-focus">False</property>
391
+ </object>
392
+ <packing>
393
+ <property name="expand">False</property>
394
+ <property name="fill">True</property>
395
+ <property name="position">3</property>
396
+ </packing>
397
+ </child>
428
398
  <child>
429
399
  <object class="GtkBox">
430
400
  <property name="visible">True</property>
431
401
  <property name="can-focus">False</property>
432
402
  <property name="spacing">3</property>
433
403
  <child>
434
- <!-- n-columns=4 n-rows=1 -->
435
- <object class="GtkGrid">
404
+ <object class="GtkScaleButton" id="pen_density_scale">
405
+ <property name="visible">True</property>
406
+ <property name="can-focus">True</property>
407
+ <property name="receives-default">True</property>
408
+ <property name="tooltip-text" translatable="yes">pen density</property>
409
+ <property name="relief">none</property>
410
+ <property name="orientation">vertical</property>
411
+ <property name="size">button</property>
412
+ <property name="adjustment">pen_density</property>
413
+ </object>
414
+ <packing>
415
+ <property name="expand">False</property>
416
+ <property name="fill">True</property>
417
+ <property name="position">0</property>
418
+ </packing>
419
+ </child>
420
+ <child>
421
+ <object class="GtkScaleButton" id="pen_radius_scale">
422
+ <property name="visible">True</property>
423
+ <property name="can-focus">True</property>
424
+ <property name="receives-default">True</property>
425
+ <property name="tooltip-text" translatable="yes">pen radius</property>
426
+ <property name="relief">none</property>
427
+ <property name="orientation">vertical</property>
428
+ <property name="size">button</property>
429
+ <property name="adjustment">pen_radius</property>
430
+ </object>
431
+ <packing>
432
+ <property name="expand">False</property>
433
+ <property name="fill">True</property>
434
+ <property name="position">1</property>
435
+ </packing>
436
+ </child>
437
+ <child>
438
+ <object class="GtkLabel" id="flabel">
436
439
  <property name="visible">True</property>
437
440
  <property name="can-focus">False</property>
438
- <property name="border-width">0</property>
439
- <child>
440
- <object class="GtkLabel" id="flabel">
441
- <property name="visible">True</property>
442
- <property name="can-focus">False</property>
443
- <property name="tooltip-text" translatable="yes">Feed is the feed rate of V</property>
444
- <property name="margin-start">5</property>
445
- <property name="margin-end">5</property>
446
- <property name="margin-top">5</property>
447
- <property name="margin-bottom">5</property>
448
- <property name="label" translatable="yes">Feed</property>
449
- </object>
450
- <packing>
451
- <property name="left-attach">0</property>
452
- <property name="top-attach">0</property>
453
- </packing>
454
- </child>
455
- <child>
456
- <object class="GtkScale" id="fscale">
457
- <property name="visible">True</property>
458
- <property name="can-focus">True</property>
459
- <property name="tooltip-text" translatable="yes">Feed is the feed rate of V</property>
460
- <property name="margin-start">5</property>
461
- <property name="margin-end">5</property>
462
- <property name="hexpand">True</property>
463
- <property name="adjustment">f</property>
464
- <property name="restrict-to-fill-level">False</property>
465
- <property name="fill-level">0</property>
466
- <property name="round-digits">0</property>
467
- <property name="digits">4</property>
468
- <property name="value-pos">left</property>
469
- </object>
470
- <packing>
471
- <property name="left-attach">1</property>
472
- <property name="top-attach">0</property>
473
- </packing>
474
- </child>
475
- <child>
476
- <object class="GtkScale" id="kscale">
477
- <property name="visible">True</property>
478
- <property name="can-focus">True</property>
479
- <property name="tooltip-text" translatable="yes">Kill is the removal/kill rate of U</property>
480
- <property name="margin-start">5</property>
481
- <property name="margin-end">5</property>
482
- <property name="hexpand">True</property>
483
- <property name="adjustment">k</property>
484
- <property name="restrict-to-fill-level">False</property>
485
- <property name="fill-level">0</property>
486
- <property name="round-digits">0</property>
487
- <property name="digits">4</property>
488
- <property name="value-pos">left</property>
489
- </object>
490
- <packing>
491
- <property name="left-attach">3</property>
492
- <property name="top-attach">0</property>
493
- </packing>
494
- </child>
495
- <child>
496
- <object class="GtkLabel" id="klabel">
497
- <property name="visible">True</property>
498
- <property name="can-focus">False</property>
499
- <property name="tooltip-text" translatable="yes">Kill is the removal/kill rate of U</property>
500
- <property name="margin-start">5</property>
501
- <property name="margin-end">5</property>
502
- <property name="margin-top">5</property>
503
- <property name="margin-bottom">5</property>
504
- <property name="label" translatable="yes">Kill</property>
505
- </object>
506
- <packing>
507
- <property name="left-attach">2</property>
508
- <property name="top-attach">0</property>
509
- </packing>
510
- </child>
441
+ <property name="tooltip-text" translatable="yes">Feed is the feed rate of V</property>
442
+ <property name="margin-start">5</property>
443
+ <property name="margin-end">5</property>
444
+ <property name="margin-top">5</property>
445
+ <property name="margin-bottom">5</property>
446
+ <property name="label" translatable="yes">Feed</property>
511
447
  </object>
512
448
  <packing>
513
- <property name="expand">True</property>
449
+ <property name="expand">False</property>
514
450
  <property name="fill">True</property>
515
451
  <property name="position">2</property>
516
452
  </packing>
517
453
  </child>
454
+ <child>
455
+ <object class="GtkScale" id="fscale">
456
+ <property name="visible">True</property>
457
+ <property name="can-focus">True</property>
458
+ <property name="tooltip-text" translatable="yes">Feed is the feed rate of V</property>
459
+ <property name="margin-start">5</property>
460
+ <property name="margin-end">5</property>
461
+ <property name="hexpand">True</property>
462
+ <property name="adjustment">f</property>
463
+ <property name="restrict-to-fill-level">False</property>
464
+ <property name="fill-level">0</property>
465
+ <property name="round-digits">0</property>
466
+ <property name="digits">4</property>
467
+ <property name="value-pos">left</property>
468
+ </object>
469
+ <packing>
470
+ <property name="expand">False</property>
471
+ <property name="fill">True</property>
472
+ <property name="position">3</property>
473
+ </packing>
474
+ </child>
475
+ <child>
476
+ <object class="GtkLabel" id="klabel">
477
+ <property name="visible">True</property>
478
+ <property name="can-focus">False</property>
479
+ <property name="tooltip-text" translatable="yes">Kill is the removal/kill rate of U</property>
480
+ <property name="margin-start">5</property>
481
+ <property name="margin-end">5</property>
482
+ <property name="margin-top">5</property>
483
+ <property name="margin-bottom">5</property>
484
+ <property name="label" translatable="yes">Kill</property>
485
+ </object>
486
+ <packing>
487
+ <property name="expand">False</property>
488
+ <property name="fill">True</property>
489
+ <property name="position">4</property>
490
+ </packing>
491
+ </child>
492
+ <child>
493
+ <object class="GtkScale" id="kscale">
494
+ <property name="visible">True</property>
495
+ <property name="can-focus">True</property>
496
+ <property name="tooltip-text" translatable="yes">Kill is the removal/kill rate of U</property>
497
+ <property name="margin-start">5</property>
498
+ <property name="margin-end">5</property>
499
+ <property name="hexpand">True</property>
500
+ <property name="adjustment">k</property>
501
+ <property name="restrict-to-fill-level">False</property>
502
+ <property name="fill-level">0</property>
503
+ <property name="round-digits">0</property>
504
+ <property name="digits">4</property>
505
+ <property name="value-pos">left</property>
506
+ </object>
507
+ <packing>
508
+ <property name="expand">False</property>
509
+ <property name="fill">True</property>
510
+ <property name="position">5</property>
511
+ </packing>
512
+ </child>
518
513
  </object>
519
514
  <packing>
520
- <property name="expand">True</property>
515
+ <property name="expand">False</property>
521
516
  <property name="fill">True</property>
522
- <property name="padding">5</property>
523
- <property name="position">3</property>
517
+ <property name="position">4</property>
524
518
  </packing>
525
519
  </child>
526
520
  <child>
@@ -587,7 +581,7 @@ applications-graphics</property>
587
581
  <packing>
588
582
  <property name="expand">False</property>
589
583
  <property name="fill">True</property>
590
- <property name="position">4</property>
584
+ <property name="position">5</property>
591
585
  </packing>
592
586
  </child>
593
587
  </object>
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gray_scott_gtk3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kojix2
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2021-09-22 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: gtk3
@@ -25,7 +24,7 @@ dependencies:
25
24
  - !ruby/object:Gem::Version
26
25
  version: '0'
27
26
  - !ruby/object:Gem::Dependency
28
- name: numo-narray
27
+ name: numo-narray-alt
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - ">="
@@ -104,12 +103,12 @@ files:
104
103
  - lib/gray_scott/model.rb
105
104
  - lib/gray_scott/utils/math.rb
106
105
  - lib/gray_scott/version.rb
106
+ - renovate.json
107
107
  - resources/about_icon.png
108
108
  - resources/gray_scott.glade
109
109
  homepage: https://github.com/kojix2/Gray-Scott
110
110
  licenses: []
111
111
  metadata: {}
112
- post_install_message:
113
112
  rdoc_options: []
114
113
  require_paths:
115
114
  - lib
@@ -124,8 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
123
  - !ruby/object:Gem::Version
125
124
  version: '0'
126
125
  requirements: []
127
- rubygems_version: 3.2.22
128
- signing_key:
126
+ rubygems_version: 4.0.20
129
127
  specification_version: 4
130
128
  summary: Gray-Scott model.
131
129
  test_files: []