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 +4 -4
- data/.github/FUNDING.yml +0 -1
- data/.github/workflows/ci.yml +7 -5
- data/README.md +11 -3
- data/exe/grayscott +10 -2
- data/gray_scott_gtk3.gemspec +1 -1
- data/lib/gray_scott/color.rb +4 -4
- data/lib/gray_scott/controller/aboutdialog.rb +2 -2
- data/lib/gray_scott/controller.rb +72 -13
- data/lib/gray_scott/model.rb +7 -3
- data/lib/gray_scott/version.rb +1 -1
- data/renovate.json +6 -0
- data/resources/gray_scott.glade +169 -175
- metadata +5 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 179cfc87ecf774d201705002979b4cfa98100c68cff099787a4c743af0d91927
|
|
4
|
+
data.tar.gz: 90c0a010a021a31aaaeacbd1de9ac96c9a646547746aec8291d377f81d61c07d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5fc89498db5aff1cffd9ad6562dcc9d03198019a52d71de9429c7a90cf2bb5806786b213c64a83424568c05cb820a4aab4bf86221a45f3741f77f971c56e2b4a
|
|
7
|
+
data.tar.gz: cf051081312ad9ac1455abac4f147ec74f76bd8ce6ee91dedfd32841f87aad56d97ef410b2339824dd7c6cafb2d3850b7284ad86bf7aed0e352c1e94cc8cd7ac
|
data/.github/FUNDING.yml
CHANGED
data/.github/workflows/ci.yml
CHANGED
|
@@ -6,16 +6,18 @@ jobs:
|
|
|
6
6
|
runs-on: ${{ matrix.os }}-latest
|
|
7
7
|
strategy:
|
|
8
8
|
matrix:
|
|
9
|
-
os:
|
|
10
|
-
ruby: [
|
|
9
|
+
os: ["ubuntu"]
|
|
10
|
+
ruby: ["3.2", "3.3"]
|
|
11
11
|
steps:
|
|
12
|
-
-
|
|
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
|
-
#
|
|
1
|
+
# gray_scott_gtk3
|
|
2
2
|
|
|
3
3
|
[](https://rubygems.org/gems/gray_scott_gtk3)
|
|
4
|
-
[](https://github.com/kojix2/Gray-Scott/actions/workflows/ci.yml)
|
|
5
5
|
[](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
|

|
|
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
|
-
|
|
15
|
-
|
|
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
|
|
data/gray_scott_gtk3.gemspec
CHANGED
|
@@ -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'
|
data/lib/gray_scott/color.rb
CHANGED
|
@@ -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) *
|
|
43
|
-
t = f *
|
|
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 *
|
|
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/
|
|
15
|
-
d.website_label = 'Github kojix2/
|
|
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
|
-
|
|
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
|
|
79
|
+
@timeout_id = GLib::Timeout.add([@msec, 1].max) do
|
|
76
80
|
@frames.times do
|
|
77
|
-
model.
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
|
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
|
data/lib/gray_scott/model.rb
CHANGED
|
@@ -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
|
|
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
|
-
|
|
51
|
+
sanitize
|
|
48
52
|
end
|
|
49
53
|
|
|
50
|
-
def
|
|
54
|
+
def sanitize
|
|
51
55
|
# clip is better.
|
|
52
56
|
@u[@u.lt 0.00001] = 0.00001
|
|
53
57
|
@u[@u.gt 1] = 1
|
data/lib/gray_scott/version.rb
CHANGED
data/renovate.json
ADDED
data/resources/gray_scott.glade
CHANGED
|
@@ -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">
|
|
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">
|
|
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">
|
|
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">
|
|
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">
|
|
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">
|
|
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">
|
|
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">
|
|
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">
|
|
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">
|
|
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">
|
|
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">
|
|
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
|
-
|
|
435
|
-
|
|
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="
|
|
439
|
-
<
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
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">
|
|
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">
|
|
515
|
+
<property name="expand">False</property>
|
|
521
516
|
<property name="fill">True</property>
|
|
522
|
-
<property name="
|
|
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">
|
|
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.
|
|
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:
|
|
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:
|
|
128
|
-
signing_key:
|
|
126
|
+
rubygems_version: 4.0.20
|
|
129
127
|
specification_version: 4
|
|
130
128
|
summary: Gray-Scott model.
|
|
131
129
|
test_files: []
|