gray_scott_gtk3 0.4.0 → 0.5.0

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: 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