gray_scott_gtk3 0.4.0 → 0.5.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: f1d2097bd2f581e81bd6b0dd71f30b84b27e95d7fc97fa3dfbb88b08e182681a
4
- data.tar.gz: 5d97e06aec54b53863c1b64c9435fde1a087166c5d13d93778f6931f85106f98
3
+ metadata.gz: 631ab3461313a23f12de24a7416a993a2522364ac3b50d36dabd65a2477e30a1
4
+ data.tar.gz: 9e43e401b1f7719a04ff320e29ef01a87450637087c95cc1f77f6dd6dfd7d2f3
5
5
  SHA512:
6
- metadata.gz: 3d95033c5ea8482b263e145e22dae974483846f186f9cba771a3a3aa4a6513bd2a222bb7dc207a53dc5b4596f30a2059fc9e10f13eeef5749c1c6b79a81fee87
7
- data.tar.gz: 8f272262554650f1dbbfbe71067bd34cac48badbac81b6d0d9dffb2c89a88fbf9c514a1fd3423e4b71c89e4309d4907e16a74ef5116200682fccd50901a046e6
6
+ metadata.gz: dbbf57fdb426ef5c62b859a5df4decae30a090d2f08b031e997f13f8afa3148aa4a5ba20f6eeca372550ad82a6e18b96f99ee3e8bd9718f98a1ae77fdfe51057
7
+ data.tar.gz: 5e6e37d935c7d35dfe1c1644ddb665563a0ab3af3a5849badd8950180af66bf6d927666ebe3ef3e753857d9b9b3dbca7f9bf756ddeaf7c15d8694b9eaa72f7e1
data/README.md CHANGED
@@ -5,7 +5,8 @@
5
5
  ## Requirements
6
6
 
7
7
  * Ruby
8
- * Numo/NArray
8
+ * Numo/NArray (CPU)
9
+ * Cumo/NArray (GPU)
9
10
  * Ruby/Gtk3
10
11
 
11
12
  ## Installation
@@ -21,11 +22,12 @@ $ grayscott 40 -w 256 -h 256 # size of model. display is fixed to 512 x 512 pixe
21
22
  ## Usage with terminal(example)
22
23
 
23
24
  $ bundle install
25
+
24
26
  $ bundle exec bin/console
25
27
 
26
28
  ```ruby
27
- GrayScottGtk3::Controller::MSEC = 50
28
- c = GrayScottGtk3::Controller.new 'resources/', width:1024, height:1024
29
+ GrayScott::Controller::MSEC = 50
30
+ c = GrayScott::Controller.new 'resources/', width:1024, height:1024
29
31
 
30
32
  # custom feed / kill ratio
31
33
  na = Numo::SFloat.new(1024,1).seq + 10 # avoid zero
@@ -36,10 +38,12 @@ k = na.transpose * 0.06 + 0.01
36
38
  c.model.f = f
37
39
  c.model.k = k
38
40
  c.model.v.rand(0.0, 0.15)
39
- c.color = 'green' # colorful is slow.
41
+ c.color = 'reverse_green' # colorful is slow.
40
42
  Gtk.main
41
43
  ```
42
44
 
45
+ ![screenshot](https://raw.githubusercontent.com/kojix2/Gray-Scott/screenshot/screenshot/reverse-green.png)
46
+
43
47
  ## Known issue
44
48
 
45
49
  Glib::Timeout.add(number_of_seconds)
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'gray_scott_gtk3'
4
3
  require 'optparse'
5
4
 
6
5
  opt = {}
@@ -8,20 +7,18 @@ OptionParser.new do |op|
8
7
  op.banner += ' msec'
9
8
  op.on('-h val', '--height', 'height of the model') { |v| opt[:height] = v.to_i }
10
9
  op.on('-w val', '--width', 'width of the model') { |v| opt[:width] = v.to_i }
11
- op.version = GrayScottGtk3::VERSION
10
+ op.on('-g', '--gpu', 'use GPU(Cumo)'){ |v| opt[:gpu] = v }
12
11
  op.parse!(ARGV)
13
12
  end
14
13
 
15
- if ARGV[0]
16
- module GrayScottGtk3
17
- MSEC = ARGV[0].to_i
18
- end
19
- else
20
- puts 'please specify command-line argument. For example `grayscott 40`'
21
- exit
14
+ if opt[:gpu]
15
+ require 'cumo/narray'
22
16
  end
17
+ opt.delete(:gpu)
18
+
19
+ require 'gray_scott'
23
20
 
24
- module GrayScottGtk3
21
+ module GrayScott
25
22
  class << self
26
23
  def run(opt)
27
24
  xml_path = File.expand_path('../resources/', __dir__)
@@ -31,4 +28,4 @@ module GrayScottGtk3
31
28
  end
32
29
  end
33
30
 
34
- GrayScottGtk3.run(opt)
31
+ GrayScott.run(opt)
@@ -1,10 +1,10 @@
1
1
  lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'gray_scott_gtk3/version'
3
+ require 'gray_scott/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'gray_scott_gtk3'
7
- spec.version = GrayScottGtk3::VERSION
7
+ spec.version = GrayScott::VERSION
8
8
  spec.authors = ['kojix2']
9
9
  spec.email = ['2xijok@gmail.com']
10
10
 
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ['lib']
23
23
 
24
- spec.add_dependency 'numo-narray'
25
24
  spec.add_dependency 'gtk3'
25
+ spec.add_dependency 'numo-narray'
26
26
 
27
27
  spec.add_development_dependency 'bundler', '~> 1.17'
28
28
  spec.add_development_dependency 'rake', '~> 10.0'
@@ -0,0 +1,26 @@
1
+ require 'gtk3'
2
+
3
+ unless Object.const_defined? :Cumo
4
+ require 'numo/narray'
5
+ Xumo = Numo
6
+ else
7
+ Xumo = Cumo
8
+ end
9
+
10
+ module XumoShortHand
11
+ class Xumo::SFloat
12
+ alias _ inplace
13
+ end
14
+ SFloat = Xumo::SFloat
15
+ UInt8 = Xumo::UInt8
16
+ end
17
+
18
+ require 'gray_scott/model'
19
+ require 'gray_scott/controller'
20
+ require 'gray_scott/laplacian'
21
+ require 'gray_scott/version'
22
+
23
+ module GrayScott
24
+ class Error < StandardError; end
25
+ # Your code goes here...
26
+ end
@@ -1,8 +1,8 @@
1
1
  require_relative 'controller/aboutdialog'
2
2
 
3
- module GrayScottGtk3
3
+ module GrayScott
4
4
  class Controller
5
- include ShortNumo
5
+ include XumoShortHand
6
6
  attr_accessor :resource_dir, :height, :width, :model, :color
7
7
 
8
8
  def initialize(dir, height: 256, width: 256)
@@ -12,6 +12,8 @@ module GrayScottGtk3
12
12
  @model = Model.new(height: height, width: width)
13
13
  @show_u = false
14
14
  @color = 'colorful'
15
+ @frames = 1
16
+ @msec = 40
15
17
 
16
18
  builder = Gtk::Builder.new
17
19
  builder.add_from_file File.join(resource_dir, 'gray_scott.glade')
@@ -23,7 +25,7 @@ module GrayScottGtk3
23
25
  builder.connect_signals { |handler| method(handler) }
24
26
 
25
27
  @win.show_all # window
26
- on_new_clicked
28
+ on_clear_clicked
27
29
  end
28
30
 
29
31
  def show_about
@@ -38,6 +40,15 @@ module GrayScottGtk3
38
40
  model.k = k.value
39
41
  end
40
42
 
43
+ def on_frames_changed(frames)
44
+ @frames = frames.value.to_i
45
+ end
46
+
47
+ def on_msec_changed(msec)
48
+ @msec = msec.value.to_i
49
+ end
50
+
51
+
41
52
  def display
42
53
  @gimage.pixbuf = to_pixbuf(@show_u ? model.u : model.v)
43
54
  end
@@ -60,8 +71,10 @@ module GrayScottGtk3
60
71
 
61
72
  def execute
62
73
  @doing_now = true
63
- GLib::Timeout.add MSEC do
64
- model.update
74
+ GLib::Timeout.add @msec do
75
+ @frames.times do
76
+ model.update
77
+ end
65
78
  display
66
79
  @doing_now
67
80
  end
@@ -72,9 +85,38 @@ module GrayScottGtk3
72
85
  @execute_button.active = false
73
86
  end
74
87
 
88
+ def on_open_clicked
89
+ stop if doing_now?
90
+ dialog = Gtk::FileChooserDialog.new(title: 'Open Gray-Scott Model',
91
+ action: :open,
92
+ buttons: [%i[open accept], %i[cancel cancel]])
93
+ if dialog.run == :accept
94
+ filename = dialog.filename
95
+ str = File.read(filename)
96
+ # todo: check model
97
+ @model = Marshal.load(str)
98
+ display
99
+ end
100
+ dialog.destroy
101
+ end
102
+
75
103
  def on_save_clicked
76
104
  stop if doing_now?
77
- dialog = Gtk::FileChooserDialog.new(title: 'PNG画像を保存',
105
+ dialog = Gtk::FileChooserDialog.new(title: 'Save Gray-Scott Model',
106
+ action: :save,
107
+ buttons: [%i[save accept], %i[cancel cancel]])
108
+ dialog.do_overwrite_confirmation = true
109
+ if dialog.run == :accept
110
+ filename = dialog.filename
111
+ str = Marshal.dump(model)
112
+ File.write(filename, str)
113
+ end
114
+ dialog.destroy
115
+ end
116
+
117
+ def on_convert_clicked
118
+ stop if doing_now?
119
+ dialog = Gtk::FileChooserDialog.new(title: 'Save PNG image',
78
120
  action: :save,
79
121
  buttons: [%i[save accept], %i[cancel cancel]])
80
122
  dialog.do_overwrite_confirmation = true
@@ -89,7 +131,7 @@ module GrayScottGtk3
89
131
  Gtk.main_quit
90
132
  end
91
133
 
92
- def on_new_clicked
134
+ def on_clear_clicked
93
135
  model.clear
94
136
  display_legend
95
137
  display
@@ -175,6 +217,7 @@ module GrayScottGtk3
175
217
  end
176
218
 
177
219
  private
220
+
178
221
  def debug_p_u
179
222
  p model.u
180
223
  end
@@ -190,6 +233,5 @@ module GrayScottGtk3
190
233
  def debug_p_k
191
234
  p model.k
192
235
  end
193
-
194
236
  end
195
237
  end
@@ -1,4 +1,4 @@
1
- module GrayScottGtk3
1
+ module GrayScott
2
2
  class Controller
3
3
  class AboutDialog
4
4
  def initialize(resource_dir)
@@ -6,7 +6,7 @@ module GrayScottGtk3
6
6
  @a.program_name = 'Gray-Scott'
7
7
  @a.logo = GdkPixbuf::Pixbuf.new(file: File.join(resource_dir, 'about_icon.png'))
8
8
  @a.authors = ['kojix2']
9
- @a.version = GrayScottGtk3::VERSION
9
+ @a.version = GrayScott::VERSION
10
10
  @a.run
11
11
  @a.destroy
12
12
  end
@@ -0,0 +1,29 @@
1
+ module GrayScott
2
+ module Utils
3
+ module Math
4
+ # To avoid mistakes
5
+ A = (1..-1).freeze
6
+ B = (0..-2).freeze
7
+ T = true
8
+
9
+ def self._laplacian2d(uv, dx)
10
+ l_uv = uv.new_zeros
11
+ l_uv[A, T]._ + uv[B, T]
12
+ l_uv[T, A]._ + uv[T, B]
13
+
14
+ l_uv[0, T]._ + uv[-1, T]
15
+ l_uv[T, 0]._ + uv[T, -1]
16
+
17
+ l_uv[B, T]._ + uv[A, T]
18
+ l_uv[T, B]._ + uv[T, A]
19
+
20
+ l_uv[-1, T]._ + uv[0, T]
21
+ l_uv[T, -1]._ + uv[T, 0]
22
+
23
+ l_uv._ - (uv * 4)
24
+ l_uv._ / (dx * dx)
25
+ l_uv
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,6 +1,6 @@
1
- module GrayScottGtk3
1
+ module GrayScott
2
2
  class Model
3
- include ShortNumo
3
+ include XumoShortHand
4
4
 
5
5
  Dx = 0.01
6
6
  Dt = 1
@@ -26,8 +26,8 @@ module GrayScottGtk3
26
26
  end
27
27
 
28
28
  def update
29
- l_u = SFloat._laplacian2d u, Dx
30
- l_v = SFloat._laplacian2d v, Dx
29
+ l_u = Utils::Math._laplacian2d u, Dx
30
+ l_v = Utils::Math._laplacian2d v, Dx
31
31
 
32
32
  uvv = u * v * v
33
33
  dudt = Du * l_u - uvv + f * (1.0 - u)
@@ -38,8 +38,11 @@ module GrayScottGtk3
38
38
  end
39
39
 
40
40
  def immune_surveillance
41
- @u._.clip(0.00001, 1)
42
- @v._.clip(0.00001, 1)
41
+ # clip is better.
42
+ @u[@u.lt 0.00001] = 0.00001
43
+ @u[@u.gt 1] = 1
44
+ @v[@v.lt 0.00001] = 0.00001
45
+ @v[@v.gt 1] = 1
43
46
  end
44
47
  end
45
48
  end
@@ -0,0 +1,3 @@
1
+ module GrayScott
2
+ VERSION = '0.5.0'.freeze
3
+ end
@@ -9,6 +9,13 @@
9
9
  <property name="page_increment">0.01</property>
10
10
  <signal name="value-changed" handler="on_f_changed" swapped="no"/>
11
11
  </object>
12
+ <object class="GtkAdjustment" id="frames">
13
+ <property name="upper">1000</property>
14
+ <property name="value">1</property>
15
+ <property name="step_increment">1</property>
16
+ <property name="page_increment">10</property>
17
+ <signal name="value-changed" handler="on_frames_changed" swapped="no"/>
18
+ </object>
12
19
  <object class="GtkAdjustment" id="k">
13
20
  <property name="upper">0.10000000000000001</property>
14
21
  <property name="value">0.059999999999999998</property>
@@ -16,6 +23,13 @@
16
23
  <property name="page_increment">0.01</property>
17
24
  <signal name="value-changed" handler="on_k_changed" swapped="no"/>
18
25
  </object>
26
+ <object class="GtkAdjustment" id="msec">
27
+ <property name="upper">10000</property>
28
+ <property name="value">40</property>
29
+ <property name="step_increment">1</property>
30
+ <property name="page_increment">10</property>
31
+ <signal name="value-changed" handler="on_msec_changed" swapped="no"/>
32
+ </object>
19
33
  <object class="GtkAdjustment" id="pen_density">
20
34
  <property name="upper">1</property>
21
35
  <property name="value">0.5</property>
@@ -64,7 +78,17 @@
64
78
  <property name="can_focus">False</property>
65
79
  <property name="use_underline">True</property>
66
80
  <property name="use_stock">True</property>
67
- <signal name="activate" handler="on_new_clicked" swapped="no"/>
81
+ <signal name="activate" handler="on_clear_clicked" swapped="no"/>
82
+ </object>
83
+ </child>
84
+ <child>
85
+ <object class="GtkImageMenuItem">
86
+ <property name="label">gtk-open</property>
87
+ <property name="visible">True</property>
88
+ <property name="can_focus">False</property>
89
+ <property name="use_underline">True</property>
90
+ <property name="use_stock">True</property>
91
+ <signal name="activate" handler="on_open_clicked" swapped="no"/>
68
92
  </object>
69
93
  </child>
70
94
  <child>
@@ -77,6 +101,16 @@
77
101
  <signal name="activate" handler="on_save_clicked" swapped="no"/>
78
102
  </object>
79
103
  </child>
104
+ <child>
105
+ <object class="GtkImageMenuItem">
106
+ <property name="label">gtk-convert</property>
107
+ <property name="visible">True</property>
108
+ <property name="can_focus">False</property>
109
+ <property name="use_underline">True</property>
110
+ <property name="use_stock">True</property>
111
+ <signal name="activate" handler="on_convert_clicked" swapped="no"/>
112
+ </object>
113
+ </child>
80
114
  <child>
81
115
  <object class="GtkSeparatorMenuItem">
82
116
  <property name="visible">True</property>
@@ -179,51 +213,103 @@
179
213
  </packing>
180
214
  </child>
181
215
  <child>
182
- <object class="GtkBox">
216
+ <object class="GtkToolbar">
183
217
  <property name="visible">True</property>
184
218
  <property name="can_focus">False</property>
185
- <property name="margin_left">5</property>
186
- <property name="margin_right">5</property>
187
- <property name="spacing">5</property>
188
219
  <child>
189
- <object class="GtkButton" id="new_button">
190
- <property name="label">gtk-new</property>
220
+ <object class="GtkToolButton">
191
221
  <property name="visible">True</property>
192
- <property name="can_focus">True</property>
193
- <property name="receives_default">True</property>
194
- <property name="use_stock">True</property>
195
- <property name="image_position">top</property>
196
- <property name="always_show_image">True</property>
197
- <signal name="clicked" handler="on_new_clicked" swapped="no"/>
222
+ <property name="can_focus">False</property>
223
+ <property name="tooltip_text" translatable="yes">clear</property>
224
+ <property name="label" translatable="yes">clear</property>
225
+ <property name="use_underline">True</property>
226
+ <property name="stock_id">gtk-clear</property>
227
+ <signal name="clicked" handler="on_clear_clicked" swapped="no"/>
198
228
  </object>
199
229
  <packing>
200
230
  <property name="expand">False</property>
201
- <property name="fill">True</property>
202
- <property name="position">0</property>
231
+ <property name="homogeneous">True</property>
232
+ </packing>
233
+ </child>
234
+ <child>
235
+ <object class="GtkToolButton">
236
+ <property name="visible">True</property>
237
+ <property name="can_focus">False</property>
238
+ <property name="tooltip_text" translatable="yes">open</property>
239
+ <property name="label" translatable="yes">open</property>
240
+ <property name="use_underline">True</property>
241
+ <property name="stock_id">gtk-open</property>
242
+ <signal name="clicked" handler="on_open_clicked" swapped="no"/>
243
+ </object>
244
+ <packing>
245
+ <property name="expand">False</property>
246
+ <property name="homogeneous">True</property>
247
+ </packing>
248
+ </child>
249
+ <child>
250
+ <object class="GtkToolButton">
251
+ <property name="visible">True</property>
252
+ <property name="can_focus">False</property>
253
+ <property name="tooltip_text" translatable="yes">save model</property>
254
+ <property name="label" translatable="yes">save</property>
255
+ <property name="use_underline">True</property>
256
+ <property name="stock_id">gtk-save</property>
257
+ </object>
258
+ <packing>
259
+ <property name="expand">False</property>
260
+ <property name="homogeneous">True</property>
203
261
  </packing>
204
262
  </child>
263
+ <child>
264
+ <object class="GtkToolButton">
265
+ <property name="visible">True</property>
266
+ <property name="can_focus">False</property>
267
+ <property name="tooltip_text" translatable="yes">save png image</property>
268
+ <property name="label" translatable="yes">save_png</property>
269
+ <property name="use_underline">True</property>
270
+ <property name="stock_id">gtk-convert</property>
271
+ <signal name="clicked" handler="on_convert_clicked" swapped="no"/>
272
+ </object>
273
+ <packing>
274
+ <property name="expand">False</property>
275
+ <property name="homogeneous">True</property>
276
+ </packing>
277
+ </child>
278
+ <child>
279
+ <object class="GtkToggleToolButton">
280
+ <property name="visible">True</property>
281
+ <property name="can_focus">False</property>
282
+ <property name="tooltip_text" translatable="yes">execute</property>
283
+ <property name="label" translatable="yes">__glade_unnamed_42</property>
284
+ <property name="use_underline">True</property>
285
+ <property name="stock_id">gtk-media-play</property>
286
+ <signal name="toggled" handler="on_execute_toggled" swapped="no"/>
287
+ </object>
288
+ <packing>
289
+ <property name="expand">False</property>
290
+ <property name="homogeneous">True</property>
291
+ </packing>
292
+ </child>
293
+ </object>
294
+ <packing>
295
+ <property name="expand">False</property>
296
+ <property name="fill">True</property>
297
+ <property name="position">1</property>
298
+ </packing>
299
+ </child>
300
+ <child>
301
+ <object class="GtkBox">
302
+ <property name="visible">True</property>
303
+ <property name="can_focus">False</property>
304
+ <property name="margin_left">5</property>
305
+ <property name="margin_right">5</property>
306
+ <property name="spacing">3</property>
205
307
  <child>
206
308
  <object class="GtkGrid">
207
309
  <property name="visible">True</property>
208
310
  <property name="can_focus">False</property>
209
311
  <property name="margin_top">1</property>
210
312
  <property name="border_width">0</property>
211
- <child>
212
- <object class="GtkLabel" id="klabel">
213
- <property name="visible">True</property>
214
- <property name="can_focus">False</property>
215
- <property name="tooltip_text" translatable="yes">Kill is the removal/kill rate of U</property>
216
- <property name="margin_left">5</property>
217
- <property name="margin_right">5</property>
218
- <property name="margin_top">5</property>
219
- <property name="margin_bottom">5</property>
220
- <property name="label" translatable="yes">Kill</property>
221
- </object>
222
- <packing>
223
- <property name="left_attach">0</property>
224
- <property name="top_attach">1</property>
225
- </packing>
226
- </child>
227
313
  <child>
228
314
  <object class="GtkLabel" id="flabel">
229
315
  <property name="visible">True</property>
@@ -260,6 +346,22 @@
260
346
  <property name="top_attach">0</property>
261
347
  </packing>
262
348
  </child>
349
+ <child>
350
+ <object class="GtkLabel" id="klabel">
351
+ <property name="visible">True</property>
352
+ <property name="can_focus">False</property>
353
+ <property name="tooltip_text" translatable="yes">Kill is the removal/kill rate of U</property>
354
+ <property name="margin_left">5</property>
355
+ <property name="margin_right">5</property>
356
+ <property name="margin_top">5</property>
357
+ <property name="margin_bottom">5</property>
358
+ <property name="label" translatable="yes">Kill</property>
359
+ </object>
360
+ <packing>
361
+ <property name="left_attach">0</property>
362
+ <property name="top_attach">1</property>
363
+ </packing>
364
+ </child>
263
365
  <child>
264
366
  <object class="GtkScale" id="kscale">
265
367
  <property name="visible">True</property>
@@ -284,50 +386,15 @@
284
386
  <packing>
285
387
  <property name="expand">True</property>
286
388
  <property name="fill">True</property>
287
- <property name="position">1</property>
288
- </packing>
289
- </child>
290
- <child>
291
- <object class="GtkButton" id="save_button">
292
- <property name="label">gtk-save</property>
293
- <property name="visible">True</property>
294
- <property name="can_focus">True</property>
295
- <property name="receives_default">True</property>
296
- <property name="tooltip_text" translatable="yes">Save as PNG image</property>
297
- <property name="use_stock">True</property>
298
- <property name="image_position">top</property>
299
- <property name="always_show_image">True</property>
300
- <signal name="clicked" handler="on_save_clicked" swapped="no"/>
301
- </object>
302
- <packing>
303
- <property name="expand">False</property>
304
- <property name="fill">True</property>
305
389
  <property name="position">2</property>
306
390
  </packing>
307
391
  </child>
308
- <child>
309
- <object class="GtkToggleButton" id="execute_button">
310
- <property name="label">gtk-execute</property>
311
- <property name="visible">True</property>
312
- <property name="can_focus">True</property>
313
- <property name="receives_default">True</property>
314
- <property name="use_stock">True</property>
315
- <property name="image_position">top</property>
316
- <property name="always_show_image">True</property>
317
- <signal name="toggled" handler="on_execute_toggled" swapped="no"/>
318
- </object>
319
- <packing>
320
- <property name="expand">False</property>
321
- <property name="fill">True</property>
322
- <property name="position">3</property>
323
- </packing>
324
- </child>
325
392
  </object>
326
393
  <packing>
327
394
  <property name="expand">True</property>
328
395
  <property name="fill">True</property>
329
396
  <property name="padding">5</property>
330
- <property name="position">1</property>
397
+ <property name="position">2</property>
331
398
  </packing>
332
399
  </child>
333
400
  <child>
@@ -408,7 +475,7 @@ applications-graphics</property>
408
475
  </child>
409
476
  </object>
410
477
  <packing>
411
- <property name="position">2</property>
478
+ <property name="position">0</property>
412
479
  </packing>
413
480
  </child>
414
481
  <child>
@@ -444,7 +511,37 @@ applications-graphics</property>
444
511
  </child>
445
512
  </object>
446
513
  <packing>
447
- <property name="position">3</property>
514
+ <property name="position">0</property>
515
+ </packing>
516
+ </child>
517
+ <child>
518
+ <object class="GtkSpinButton">
519
+ <property name="visible">True</property>
520
+ <property name="can_focus">True</property>
521
+ <property name="tooltip_text" translatable="yes">frames</property>
522
+ <property name="input_purpose">digits</property>
523
+ <property name="adjustment">frames</property>
524
+ <property name="climb_rate">1</property>
525
+ <property name="numeric">True</property>
526
+ </object>
527
+ <packing>
528
+ <property name="pack_type">end</property>
529
+ <property name="position">0</property>
530
+ </packing>
531
+ </child>
532
+ <child>
533
+ <object class="GtkSpinButton">
534
+ <property name="visible">True</property>
535
+ <property name="can_focus">True</property>
536
+ <property name="tooltip_text" translatable="yes">msec</property>
537
+ <property name="input_purpose">digits</property>
538
+ <property name="adjustment">msec</property>
539
+ <property name="climb_rate">1</property>
540
+ <property name="numeric">True</property>
541
+ </object>
542
+ <packing>
543
+ <property name="pack_type">end</property>
544
+ <property name="position">0</property>
448
545
  </packing>
449
546
  </child>
450
547
  </object>
@@ -469,7 +566,7 @@ applications-graphics</property>
469
566
  <packing>
470
567
  <property name="expand">False</property>
471
568
  <property name="fill">True</property>
472
- <property name="position">2</property>
569
+ <property name="position">3</property>
473
570
  </packing>
474
571
  </child>
475
572
  <child>
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gray_scott_gtk3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kojix2
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-12 00:00:00.000000000 Z
11
+ date: 2018-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: numo-narray
14
+ name: gtk3
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: gtk3
28
+ name: numo-narray
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -97,12 +97,12 @@ files:
97
97
  - bin/setup
98
98
  - exe/grayscott
99
99
  - gray_scott_gtk3.gemspec
100
- - lib/gray_scott_gtk3.rb
101
- - lib/gray_scott_gtk3/controller.rb
102
- - lib/gray_scott_gtk3/controller/aboutdialog.rb
103
- - lib/gray_scott_gtk3/laplacian.rb
104
- - lib/gray_scott_gtk3/model.rb
105
- - lib/gray_scott_gtk3/version.rb
100
+ - lib/gray_scott.rb
101
+ - lib/gray_scott/controller.rb
102
+ - lib/gray_scott/controller/aboutdialog.rb
103
+ - lib/gray_scott/laplacian.rb
104
+ - lib/gray_scott/model.rb
105
+ - lib/gray_scott/version.rb
106
106
  - resources/about_icon.png
107
107
  - resources/gray_scott.glade
108
108
  homepage: https://github.com/kojix2/Gray-Scott
@@ -123,8 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  requirements: []
126
- rubyforge_project:
127
- rubygems_version: 2.7.6
126
+ rubygems_version: 3.0.1
128
127
  signing_key:
129
128
  specification_version: 4
130
129
  summary: Gray-Scott model.
@@ -1,21 +0,0 @@
1
- require 'numo/narray'
2
- require 'gtk3'
3
-
4
- module ShortNumo
5
- N = Numo
6
- class Numo::SFloat
7
- alias _ inplace
8
- end
9
- SFloat = Numo::SFloat
10
- UInt8 = Numo::UInt8
11
- end
12
-
13
- require 'gray_scott_gtk3/model'
14
- require 'gray_scott_gtk3/controller'
15
- require 'gray_scott_gtk3/laplacian'
16
- require 'gray_scott_gtk3/version'
17
-
18
- module GrayScottGtk3
19
- class Error < StandardError; end
20
- # Your code goes here...
21
- end
@@ -1,27 +0,0 @@
1
- module Numo
2
- class SFloat
3
- # To avoid mistakes
4
- A = (1..-1).freeze
5
- B = (0..-2).freeze
6
- T = true
7
-
8
- def self._laplacian2d(uv, dx)
9
- l_uv = uv.new_zeros
10
- l_uv[A, T]._ + uv[B, T]
11
- l_uv[T, A]._ + uv[T, B]
12
-
13
- l_uv[0, T]._ + uv[-1, T]
14
- l_uv[T, 0]._ + uv[T, -1]
15
-
16
- l_uv[B, T]._ + uv[A, T]
17
- l_uv[T, B]._ + uv[T, A]
18
-
19
- l_uv[-1, T]._ + uv[0, T]
20
- l_uv[T, -1]._ + uv[T, 0]
21
-
22
- l_uv._ - (uv * 4)
23
- l_uv._ / (dx * dx)
24
- l_uv
25
- end
26
- end
27
- end
@@ -1,3 +0,0 @@
1
- module GrayScottGtk3
2
- VERSION = '0.4.0'.freeze
3
- end