ruby-processing 2.5.1 → 2.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
  SHA1:
3
- metadata.gz: 2afd84f1f31d6bb5a7646833da3198a47d36c288
4
- data.tar.gz: eb51a2021e9294b6976de2b755e5b0ff90a81d9e
3
+ metadata.gz: b0e7df4d8034c02dcfe15463749d38214bbe608f
4
+ data.tar.gz: e4a17499eeb39eadc078e071eb05b277afd2c03f
5
5
  SHA512:
6
- metadata.gz: f4fa0f3ac500132fcd125e67adc181de0706464431809fe96369d73432b2379b40a9edfef07a1dc19dfa030eafa77be5757920e22877088ab51ef8256d108ebe
7
- data.tar.gz: 395804d382878458e4e9e2dc001c35cc1c6d81367ab4604a850ed636c1b334c2401e3c1cc6c68963178cc597c4422483dd51ce50665156cb310c7ddf673caf18
6
+ metadata.gz: 8bfc1d032a6c94051c9a727f4daa0523dc4429cb02744a34c0f6f20c84a220a653d3ba1b6716a9745622a1fd1465d9ce5506b1fe1f238980dfb64181c2f03686
7
+ data.tar.gz: d555e878a9d35ea17fc64ae4f713413364c943e92be126e2b9683b503ab4db7d03b3ac8c1b68a775770a7c9a636e059614f4a4109b8e9757ec1a10865e5f93ab
data/lib/rpextras.jar CHANGED
Binary file
@@ -29,4 +29,4 @@ module Processing
29
29
  autoload :Runner, 'ruby-processing/runner'
30
30
  autoload :Watcher, 'ruby-processing/runners/watch'
31
31
 
32
- end
32
+ end
@@ -10,7 +10,8 @@ require_relative '../ruby-processing/config'
10
10
  Dir["#{Processing::RB_CONFIG["PROCESSING_ROOT"]}/core/library/\*.jar"].each { |jar| require jar }
11
11
 
12
12
  # Include some core processing classes that we'd like to use:
13
- %w(PApplet PConstants PFont PImage PShape PShapeOBJ PShapeSVG PStyle PGraphicsJava2D PGraphics PFont PVector PMatrix2D PMatrix3D).each do |klass|
13
+ %w(PApplet PConstants PFont PImage PShape PShapeOBJ PShapeSVG PStyle
14
+ PGraphicsJava2D PGraphics PFont PVector PMatrix2D PMatrix3D).each do |klass|
14
15
  java_import "processing.core.#{klass}"
15
16
  end
16
17
 
@@ -50,26 +51,11 @@ module Processing
50
51
  key_released: :keyReleased,
51
52
  key_typed: :keyTyped
52
53
  }
53
- if methods_to_alias.keys.include?(method_name)
54
+ if methods_to_alias.key?(method_name)
54
55
  alias_method methods_to_alias[method_name], method_name
55
56
  end
56
57
  end
57
-
58
- # Some class methods made available in the instance.
59
- [:day, :month, :year, :sq, :mag, :println, :hex, :abs, :binary, :ceil,
60
- :nf, :nfc, :nfp, :nfs, :round, :trim, :unbinary, :unhex ].each do |meth|
61
- method = <<-EOS
62
- def #{meth}(*args)
63
- self.class.#{meth}(*args)
64
- end
65
- EOS
66
- eval method
67
- end
68
-
69
- # Above block deprecated from processing-2.5.1, you should in general prefer
70
- # ruby alternatives (eg t = Time.now and t.sec to second):-
71
- # constrain, dist, map, norm, lerp and blend_color are implemented directly
72
-
58
+
73
59
  # Handy getters and setters on the class go here:
74
60
  def self.sketch_class; @sketch_class; end
75
61
  @@full_screen = false
@@ -55,7 +55,7 @@ module Processing
55
55
  cp_r(@libraries, File.join(@dest, @prefix, 'library')) unless @libraries.empty?
56
56
  # Then move the icon
57
57
  potential_icon = Dir.glob(File.join(@dest, @prefix, 'data/*.icns'))[0]
58
- move(potential_icon, File.join(@dest, 'Contents/Resources/sketch.icns'), force: true) if potential_icon
58
+ move(potential_icon, File.join(@dest, 'Contents/Resources/sketch.icns'), force: true) if potential_icon
59
59
  end
60
60
 
61
61
  def calculate_substitutions
@@ -66,7 +66,7 @@ module Processing
66
66
  end
67
67
 
68
68
  def create_executables
69
- render_erb_in_path_with_binding(@dest, binding, :delete => true)
69
+ render_erb_in_path_with_binding(@dest, binding, delete: true)
70
70
  rm Dir.glob(@dest + '/**/*.java')
71
71
  runnable = @dest + '/' + File.basename(@main_file, '.rb')
72
72
  move @dest + '/run', runnable
@@ -4,10 +4,9 @@ require_relative '../../ruby-processing/library_loader'
4
4
 
5
5
  module Processing
6
6
  # This base exporter implements some of the common
7
- # code-munging needed to generate apps.
7
+ # code-munging needed to generate apps/ blank sketches.
8
8
  class BaseExporter
9
9
  include FileUtils
10
- ## hashes with strings as keys need to retain old hash syntax
11
10
  DEFAULT_DIMENSIONS = { 'width' => '100', 'height' => '100' }
12
11
  DEFAULT_DESCRIPTION = ''
13
12
  NECESSARY_FOLDERS = %w(data lib vendor)
@@ -43,17 +42,20 @@ module Processing
43
42
 
44
43
  # Searches the source for a title.
45
44
  def extract_title(source)
46
- match = source.match(/#{@info[:class_name]}\.new.*?:title\s=>\s["'](.+?)["']/m)
45
+ filter = /#{@info[:class_name]}\.new.*?:title\s=>\s["'](.+?)["']/m
46
+ match = source.match(filter)
47
47
  match ? match[1] : File.basename(@file, '.rb').titleize
48
48
  end
49
49
 
50
50
  # Searches the source for the width and height of the sketch.
51
51
  def extract_dimension(source, dimension)
52
- match = source.match(/#{@info[:class_name]}\.new.*?:#{dimension}\s?=>\s?(\d+)/m)
53
- size_match = source.match(/^[^#]*size\(?\s*(\d+)\s*,\s*(\d+)\s*\)?/)
52
+ filter = /#{@info[:class_name]}\.new.*?:#{dimension}\s?=>\s?(\d+)/m
53
+ match = source.match(filter)
54
+ sz_match = source.match(/^[^#]*size\(?\s*(\d+)\s*,\s*(\d+)\s*\)?/)
54
55
  return match[1] if match
55
- return (dimension == 'width' ? size_match[1] : size_match[2]) if size_match
56
- warn 'using default dimensions for export, please use constants integer values in size() call instead of computed ones'
56
+ return (dimension == 'width' ? sz_match[1] : sz_match[2]) if sz_match
57
+ warn 'using default dimensions for export, please use constants integer'\
58
+ 'values in size() call instead of computed ones'
57
59
  DEFAULT_DIMENSIONS[dimension]
58
60
  end
59
61
 
@@ -83,11 +85,14 @@ module Processing
83
85
  requirements = []
84
86
  partial_paths = []
85
87
  loop do
86
- matchdata = code.match(/^.*[^::\.\w](require_relative|require|load)\b.*$/)
88
+ matchdata = code.match(
89
+ /^.*[^::\.\w](require_relative|require|load)\b.*$/
90
+ )
87
91
  break unless matchdata
88
92
  line = matchdata[0].gsub('__FILE__', "'#{@main_file_path}'")
89
- if (line =~ /\b(require_relative|require|load)\b/)
90
- ln = line.gsub(/\b(require_relative|require|load)\b/, '')
93
+ req = /\b(require_relative|require|load)\b/
94
+ if req =~ line
95
+ ln = line.gsub(req, '')
91
96
  partial_paths << ln
92
97
  where = "{#{local_dir}/,}{#{partial_paths.join(',')}}"
93
98
  where += '.{rb,jar}' unless line =~ /\.[^.]+$/
@@ -1,56 +1,113 @@
1
1
  module Processing
2
2
  require_relative '../../ruby-processing/exporters/base_exporter'
3
- # This class creates blank sketches, with the boilerplate filled in.
3
+ Param = Struct.new(:name, :file_name, :title, :width, :height, :mode)
4
+ # An abstract class providing common methods for real creators
4
5
  class Creator < BaseExporter
5
6
 
6
7
  ALL_DIGITS = /\A\d+\Z/
7
8
 
8
- # Create a blank sketch, given a path.
9
- # @TODO reduce cyclomatic complexity
10
- def create!(path, args, p3d)
11
- usage if /\?/ =~ path || /--help/ =~ path
12
- main_file = File.basename(path, '.rb')
13
- # Check to make sure that the main file doesn't exist already
14
- already_exists(path)
9
+ def already_exist(path)
10
+ new_file = "#{File.dirname(path)}/#{path.underscore}.rb"
11
+ if !File.exist?(path) && !File.exist?(new_file)
12
+ return
13
+ else
14
+ puts 'That file already exists!'
15
+ exit
16
+ end
17
+ end
15
18
 
16
- # Get the substitutions
17
- @name = main_file.camelize
18
- @file_name = main_file.underscore
19
- @title = main_file.titleize
19
+ # Show the help/usage message for create.
20
+ def usage
21
+ puts <<-USAGE
20
22
 
21
- @width, @height = args[0], args[1]
22
- @with_size = @width && @width.match(ALL_DIGITS) &&
23
- @height && @height.match(ALL_DIGITS)
23
+ Usage: rp5 create <sketch_to_generate> <width> <height> <mode>
24
+ mode can be P2D / P3D.
25
+ Use --wrap for a sketch wrapped as a class
26
+ Use --inner to generated a ruby version of 'java' Inner class
27
+ Examples: rp5 create fancy_drawing/app 800 600
28
+ rp5 create fancy_drawing/app 800 600 P3D --wrap
29
+ rp5 create inner_class --inner
24
30
 
31
+ USAGE
32
+ end
33
+
34
+ def create_file(path, param, rendered, type)
25
35
  # Make the file
26
36
  dir = File.dirname path
27
37
  mkdir_p dir
28
- template_name = p3d ? 'p3d_sketch.rb.erb' : 'blank_sketch.rb.erb'
38
+ ful_path = File.join(dir, "#{param.file_name}.rb")
39
+ File.open(ful_path, 'w') { |f| f.print(rendered) }
40
+ puts "Created #{type} \"#{param.title}\" in #{ful_path.sub(/\A\.\//, '')}"
41
+ end
42
+ end
43
+
44
+ # This class creates bare sketches, with an optional render mode
45
+ class BasicSketch < Creator
46
+ # Create a blank sketch, given a path.
47
+ def create!(path, args)
48
+ return usage if /\?/ =~ path || /--help/ =~ path
49
+ main_file = File.basename(path, '.rb')
50
+ # Check to make sure that the main file doesn't exist already
51
+ already_exist(path)
52
+ @param = Param.new(
53
+ main_file.camelize,
54
+ main_file.underscore,
55
+ main_file.titleize,
56
+ args[0],
57
+ args[1],
58
+ args[2]
59
+ )
60
+ @with_size = @param.width && @param.width.match(ALL_DIGITS) &&
61
+ @param.height && @param.height.match(ALL_DIGITS)
62
+ template_name = @param.mode.nil? ? 'basic.rb.erb' : 'basic_mode.rb.erb'
29
63
  template = File.new("#{RP5_ROOT}/lib/templates/create/#{template_name}")
30
64
  rendered = render_erb_from_string_with_binding(template.read, binding)
31
- full_path = File.join(dir, "#{@file_name}.rb")
32
- File.open(full_path, 'w') { |f| f.print(rendered) }
33
- puts "Created a new Sketch in #{full_path.sub(/\A\.\//, '')}"
65
+ create_file(path, @param, rendered, 'Sketch')
34
66
  end
67
+ end
35
68
 
36
- def already_exist(path)
37
- if File.exist?(path) || File.exist?("#{File.dirname(path)}/#{main_file.underscore}.rb")
38
- puts 'That sketch already exists.'
39
- end
40
- exit
69
+ # This class creates class wrapped sketches, with an optional render mode
70
+ class ClassSketch < Creator
71
+ # Create a bare blank sketch, given a path.
72
+ def create!(path, args)
73
+ return usage if /\?/ =~ path || /--help/ =~ path
74
+ main_file = File.basename(path, '.rb')
75
+ # Check to make sure that the main file doesn't exist already
76
+ already_exist(path)
77
+ @param = Param.new(
78
+ main_file.camelize,
79
+ main_file.underscore,
80
+ main_file.titleize,
81
+ args[0],
82
+ args[1],
83
+ args[2]
84
+ )
85
+ @with_size = @param.width && @param.width.match(ALL_DIGITS) &&
86
+ @param.height && @param.height.match(ALL_DIGITS)
87
+ t_name = @param.mode.nil? ? 'basic_wrap.rb.erb' : 'mode_wrap.rb.erb'
88
+ template = File.new("#{RP5_ROOT}/lib/templates/create/#{t_name}")
89
+ rendered = render_erb_from_string_with_binding(template.read, binding)
90
+ create_file(path, @param, rendered, 'Sketch')
41
91
  end
92
+ end
42
93
 
43
- # Show the help/usage message for create.
44
- def usage
45
- puts <<-USAGE
46
-
47
- Usage: script/generate <sketch_to_generate> <width> <height>
48
- Width and Height are optional.
49
-
50
- Example: script/generate fancy_drawing/app 800 600
51
-
52
- USAGE
53
- exit
94
+ # This class creates a ruby-processing class that mimics java inner class
95
+ class Inner < Creator
96
+ # Create a blank sketch, given a path.
97
+ def create!(path, _args_)
98
+ return usage if /\?/ =~ path || /--help/ =~ path
99
+ main_file = File.basename(path, '.rb')
100
+ # Check to make sure that the main file doesn't exist already
101
+ already_exist(path)
102
+ @param = Param.new(
103
+ main_file.camelize,
104
+ main_file.underscore,
105
+ main_file.titleize
106
+ )
107
+ template_name = 'inner_class.rb.erb'
108
+ template = File.new("#{RP5_ROOT}/lib/templates/create/#{template_name}")
109
+ rendered = render_erb_from_string_with_binding(template.read, binding)
110
+ create_file(path, @param, rendered, "\"Inner Class\"")
54
111
  end
55
112
  end
56
113
  end
@@ -33,7 +33,7 @@ module Processing
33
33
  # convert to signed int
34
34
  if args.length == 1
35
35
  if a.is_a?(Fixnum) && a >= 2**31
36
- args = [ a - 2**32 ]
36
+ args = [a - 2**32]
37
37
  elsif a.is_a?(String) && a[0].eql?('#')
38
38
  h = a[1..-1].rjust(6, '0').prepend('ff')
39
39
  return color(h.hex)
@@ -64,7 +64,13 @@ module Processing
64
64
  end
65
65
  end
66
66
 
67
- # explicitly provide 'processing.org' map instance method
67
+ # Explicitly provides 'processing.org' map instance method, in which
68
+ # value is mapped from range 1, to range 2 (NB: values are not clamped to
69
+ # range 1). It may be better to explicitly write your own interpolate function
70
+ # @param [float] value input
71
+ # @param [range] start1, stop1
72
+ # @param [range] start1, stop2
73
+ # @return [float] mapped value
68
74
  def map(value, start1, stop1, start2, stop2)
69
75
  start2 + (stop2 - start2) * ((value - start1).to_f / (stop1 - start1))
70
76
  end
@@ -92,6 +98,24 @@ module Processing
92
98
  def max(*args)
93
99
  args.max { |a, b| a <=> b }
94
100
  end
101
+
102
+ # explicitly provide 'processing.org' abs instance method
103
+ def abs(val)
104
+ warn 'abs(val) is deprecated use val.abs to avoid this warning'
105
+ val.abs
106
+ end
107
+
108
+ # explicitly provide 'processing.org' ceil instance method
109
+ def ceil(val)
110
+ warn 'ceil(val) is deprecated use val.ceil to avoid this warning'
111
+ val.ceil
112
+ end
113
+
114
+ # explicitly provide 'processing.org' round instance method
115
+ def round(val)
116
+ warn 'round(val) is deprecated use val.round to avoid this warning'
117
+ val.round
118
+ end
95
119
 
96
120
  # explicitly provide 'processing.org' dist instance method
97
121
  def dist(*args)
@@ -111,28 +135,98 @@ module Processing
111
135
 
112
136
  # explicitly provide 'processing.org' pow instance method
113
137
  def pow(x, exp)
114
- # warn 'pow(x, exp) is deprecated use x**exp to avoid this warning'
138
+ warn 'pow(x, exp) is deprecated use x**exp to avoid this warning'
115
139
  x**exp
116
140
  end
117
141
 
118
142
  # explicitly provide 'processing.org' radians instance method
119
143
  def radians(theta)
120
- # warn 'radians(theta) is deprecated use theta.radians to avoid this warning'
144
+ warn 'radians(theta) is deprecated use theta.radians to avoid this warning'
121
145
  theta.radians
122
146
  end
123
147
 
148
+ # explicitly provide 'processing.org' degrees instance method
149
+ def degrees(theta)
150
+ warn 'degrees(theta) is deprecated use theta.radians to avoid this warning'
151
+ theta.degrees
152
+ end
153
+
154
+ # explicitly provide 'processing.org' hex instance method
155
+ def hex(x)
156
+ warn 'hex(x) is deprecated use x.hex to avoid this warning'
157
+ x.hex
158
+ end
159
+
160
+ # explicitly provide 'processing.org' unhex instance method
161
+ def unhex(str)
162
+ warn 'unhex(str) is deprecated use str.to_i(base=16)'
163
+ str.to_i(base=16)
164
+ end
165
+
166
+ # explicitly provide 'processing.org' binary instance method
167
+ def binary(x)
168
+ warn 'binary(x) is deprecated use x.to_s(2) to avoid this warning'
169
+ x.to_s(2)
170
+ end
171
+
172
+ # explicitly provide 'processing.org' unbinary instance method
173
+ def unhex(str)
174
+ warn 'unbinary(str) is deprecated use str.to_i(base=2)'
175
+ str.to_i(base=2)
176
+ end
177
+
178
+ # explicitly provide 'processing.org' nf instance method
179
+ def nf(*args)
180
+ warn 'nf(num, digits) is deprecated use num.to_s.rjust(digits) '\
181
+ 'to avoid this warning'
182
+ if args.length == 2
183
+ return args[0].to_s.rjust(args[1], '0')
184
+ elsif args.length == 3
185
+ return args[0].to_s.rjust(args[1], '0').ljust(args[1] + args[2], '0')
186
+ else
187
+ fail ArgumentError, 'takes 2 or 3 parameters'
188
+ end
189
+ end
190
+
191
+ # explicitly provide 'processing.org' mag instance method
192
+ def mag(*vec)
193
+ warn 'mag(x, y) is deprecated use hypot(x, y)'
194
+ if vec.length == 2
195
+ return hypot(vec[0], vec[1])
196
+ elsif vec.length == 3
197
+ return Math.sqrt(vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2])
198
+ else
199
+ fail ArgumentError, 'takes 2 or 3 parameters'
200
+ end
201
+ end
202
+
203
+ # explicitly provide 'processing.org' trim instance method
204
+ def trim(str)
205
+ warn 'deprecated use str.strip'
206
+ str.strip
207
+ end
208
+
209
+ # explicitly provide 'processing.org' println instance method
210
+ def println(str)
211
+ warn 'deprecated use puts(str)'
212
+ puts str
213
+ end
214
+
215
+ # explicitly provide 'processing.org' hour instance method
124
216
  def hour
125
- # warn 'deprecated use t = Time.now and t.hour'
217
+ warn 'deprecated use t = Time.now and t.hour'
126
218
  PApplet.hour
127
219
  end
128
220
 
221
+ # explicitly provide 'processing.org' second instance method
129
222
  def second
130
- # warn 'deprecated use t = Time.now and t.sec'
223
+ warn 'deprecated use t = Time.now and t.sec'
131
224
  PApplet.second
132
225
  end
133
226
 
227
+ # explicitly provide 'processing.org' minute instance method
134
228
  def minute
135
- # warn 'deprecated use t = Time.now and t.min'
229
+ 'deprecated use t = Time.now and t.min'
136
230
  PApplet.minute
137
231
  end
138
232
 
@@ -218,4 +312,4 @@ module Processing
218
312
  @declared_fields['keyPressed'].value(java_self)
219
313
  end
220
314
  end
221
- end
315
+ end
@@ -1,5 +1,4 @@
1
- class Numeric #:nodoc
2
-
1
+ class Numeric #:nodoc:
3
2
  def degrees
4
3
  self * 180 / Math::PI
5
4
  end
@@ -1,26 +1,25 @@
1
1
  class String #:nodoc:
2
-
3
2
  def titleize
4
- self.underscore.humanize.gsub(/\b([a-z])/) { $1.capitalize }
3
+ underscore.humanize.gsub(/\b([a-z])/) { $1.capitalize }
5
4
  end
6
5
 
7
- def humanize()
8
- self.gsub(/_id$/, '').gsub(/_/, ' ').capitalize
6
+ def humanize
7
+ gsub(/_id$/, '').gsub(/_/, ' ').capitalize
9
8
  end
10
9
 
11
10
  def camelize(first_letter_in_uppercase = true)
12
11
  if first_letter_in_uppercase
13
- self.gsub(/\/(.?)/) { '::' + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
12
+ gsub(/\/(.?)/) { '::' + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
14
13
  else
15
- self.first + self.camelize[1..-1]
14
+ first + camelize[1..-1]
16
15
  end
17
16
  end
18
17
 
19
18
  def underscore
20
- self.gsub(/::/, '/')
19
+ gsub(/::/, '/')
21
20
  .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
22
21
  .gsub(/([a-z\d])([A-Z])/, '\1_\2')
23
22
  .tr('-', '_')
24
23
  .downcase
25
24
  end
26
- end
25
+ end
@@ -23,7 +23,7 @@ module Processing
23
23
  run: run sketch once
24
24
  watch: watch for changes on the file and relaunch it on the fly
25
25
  live: launch sketch and give an interactive IRB shell
26
- create [width height]: create a new sketch.
26
+ create [width height][mode][flag]: create a new sketch.
27
27
  app: create an application version of the sketch
28
28
  setup: check setup, install jruby-complete, unpack samples
29
29
 
@@ -34,8 +34,8 @@ module Processing
34
34
  Examples:
35
35
  rp5 setup unpack_samples
36
36
  rp5 run samples/contributed/jwishy.rb
37
- rp5 create some_new_sketch 640 480
38
- rp5 create some_new_sketch --p3d 640 480
37
+ rp5 create some_new_sketch 640 480 p3d (P3D mode example)
38
+ rp5 create some_new_sketch 640 480 --wrap (a class wrapped default sketch)
39
39
  rp5 watch some_new_sketch.rb
40
40
 
41
41
  Everything Else:
@@ -56,7 +56,7 @@ module Processing
56
56
  when 'run' then run(@options.path, @options.args)
57
57
  when 'watch' then watch(@options.path, @options.args)
58
58
  when 'live' then live(@options.path, @options.args)
59
- when 'create' then create(@options.path, @options.args, @options.p3d)
59
+ when 'create' then create(@options.path, @options.args)
60
60
  when 'app' then app(@options.path)
61
61
  when 'setup' then setup(@options.path)
62
62
  when /-v/ then show_version
@@ -69,7 +69,8 @@ module Processing
69
69
  # Parse the command-line options. Keep it simple.
70
70
  def parse_options(args)
71
71
  @options = OpenStruct.new
72
- @options.p3d = !args.delete('--p3d').nil?
72
+ @options.wrap = !args.delete('--wrap').nil?
73
+ @options.inner = !args.delete('--inner').nil?
73
74
  @options.jruby = !args.delete('--jruby').nil?
74
75
  @options.nojruby = !args.delete('--nojruby').nil?
75
76
  @options.action = args[0] || nil
@@ -79,9 +80,14 @@ module Processing
79
80
 
80
81
  # Create a fresh Ruby-Processing sketch, with the necessary
81
82
  # boilerplate filled out.
82
- def create(sketch, args, p3d)
83
+ def create(sketch, args)
83
84
  require_relative '../ruby-processing/exporters/creator'
84
- Processing::Creator.new.create!(sketch, args, p3d)
85
+ return Processing::Inner.new.create!(sketch, args) if @options.inner
86
+ if @options.wrap
87
+ Processing::ClassSketch.new.create!(sketch, args)
88
+ else
89
+ Processing::BasicSketch.new.create!(sketch, args)
90
+ end
85
91
  end
86
92
 
87
93
  # Just simply run a ruby-processing sketch.
@@ -1,11 +1,9 @@
1
1
  require_relative '../runners/base'
2
2
 
3
3
  module Processing
4
-
5
4
  # A sketch loader, observer, and reloader, to tighten
6
5
  # the feedback between code and effect.
7
6
  class Watcher
8
-
9
7
  # Sic a new Processing::Watcher on the sketch
10
8
  def initialize
11
9
  reload_files_to_watch
@@ -13,7 +11,6 @@ module Processing
13
11
  start_watching
14
12
  end
15
13
 
16
-
17
14
  # Kicks off a thread to watch the sketch, reloading Ruby-Processing
18
15
  # and restarting the sketch whenever it changes.
19
16
  def start_watching
@@ -1,3 +1,3 @@
1
1
  module RubyProcessing
2
- VERSION = '2.5.1'
2
+ VERSION = '2.6.0'
3
3
  end
@@ -0,0 +1,10 @@
1
+ # <%= @param.file_name %>.rb
2
+
3
+ def setup
4
+ <%= "size #{@param.width}, #{@param.height}" if @with_size %>
5
+
6
+ end
7
+
8
+ def draw
9
+
10
+ end
@@ -0,0 +1,10 @@
1
+ # <%= @param.file_name %>.rb
2
+
3
+ def setup
4
+ <%= "size #{@param.width}, #{@param.height}, #{@param.mode.upcase}" if @with_size %>
5
+
6
+ end
7
+
8
+ def draw
9
+
10
+ end
@@ -0,0 +1,15 @@
1
+ # <%= @param.file_name %>.rb
2
+
3
+ class <%= @param.name %> < Processing::App
4
+
5
+ def setup
6
+ <%= "size #{@param.width}, #{@param.height}" if @with_size %>
7
+
8
+ end
9
+
10
+ def draw
11
+
12
+ end
13
+ end
14
+
15
+ <%= @param.name %>.new(x: 20, y: 30)
@@ -0,0 +1,9 @@
1
+ # <%= @param.file_name %>.rb
2
+
3
+ class <%= @param.name %>
4
+ include Processing::Proxy
5
+
6
+ def initialize
7
+
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ # <%= @param.file_name %>.rb
2
+
3
+ class <%= @param.name %> < Processing::App
4
+
5
+ def setup
6
+ <%= "size #{@param.width}, #{@param.height}, #{@param.mode.upcase}" if @with_size %>
7
+
8
+ end
9
+
10
+ def draw
11
+
12
+ end
13
+ end
14
+
15
+ <%= @param.name %>.new(x: 20, y: 30)
@@ -6,15 +6,17 @@
6
6
  # (optionally) pass the range and default value.
7
7
 
8
8
  module ControlPanel
9
-
9
+ # class used to create slider elements for control_panel
10
10
  class Slider < javax.swing.JSlider
11
- def initialize(control_panel, name, range, initial_value, proc=nil)
11
+ def initialize(control_panel, name, range, initial_value, proc = nil)
12
12
  min = range.begin * 100
13
- max = ((range.exclude_end? && range.begin.respond_to?(:succ)) ? range.max : range.end) * 100
13
+ max = (
14
+ (range.exclude_end? && range.begin.respond_to?(:succ)) ?
15
+ range.max : range.end) * 100
14
16
  super(min, max)
15
17
  set_minor_tick_spacing((max - min).abs / 10)
16
18
  set_paint_ticks true
17
- paint_labels = true
19
+ # paint_labels = true
18
20
  set_preferred_size(java.awt.Dimension.new(190, 30))
19
21
  label = control_panel.add_element(self, name)
20
22
  add_change_listener do
@@ -22,22 +24,22 @@ module ControlPanel
22
24
  $app.instance_variable_set("@#{name}", value) unless value.nil?
23
25
  proc.call(value) if proc
24
26
  end
25
- set_value(initial_value ? initial_value*100 : min)
27
+ set_value(initial_value ? initial_value * 100 : min)
26
28
  fire_state_changed
27
29
  end
28
-
30
+
29
31
  def value
30
32
  get_value / 100.0
31
33
  end
32
-
34
+
33
35
  def update_label(label, name, value)
34
36
  value = value.to_s
35
37
  value << '0' if value.length < 4
36
- label.set_text "<html><br><b>#{name.to_s}: #{value}</b></html>"
38
+ label.set_text "<html><br><b>#{name}: #{value}</b></html>"
37
39
  end
38
40
  end
39
-
40
-
41
+
42
+ # class used to combo_box menu elements for control_panel
41
43
  class Menu < javax.swing.JComboBox
42
44
  def initialize(control_panel, name, elements, initial_value, proc = nil)
43
45
  super(elements.to_java(:String))
@@ -49,13 +51,13 @@ module ControlPanel
49
51
  end
50
52
  set_selected_index(initial_value ? elements.index(initial_value) : 0)
51
53
  end
52
-
54
+
53
55
  def value
54
56
  get_selected_item
55
57
  end
56
58
  end
57
-
58
-
59
+
60
+ # Creates check-box elements for control_panel
59
61
  class Checkbox < javax.swing.JCheckBox
60
62
  def initialize(control_panel, name, proc=nil)
61
63
  @control_panel = control_panel
@@ -68,15 +70,15 @@ module ControlPanel
68
70
  proc.call(value) if proc
69
71
  end
70
72
  end
71
-
73
+
72
74
  def value
73
75
  is_selected
74
76
  end
75
77
  end
76
-
77
-
78
+
79
+ # Creates button elements for control_panel
78
80
  class Button < javax.swing.JButton
79
- def initialize(control_panel, name, proc=nil)
81
+ def initialize(control_panel, name, proc = nil)
80
82
  super(name.to_s)
81
83
  set_preferred_size(java.awt.Dimension.new(170, 64))
82
84
  control_panel.add_element(self, name, false, true)
@@ -86,19 +88,20 @@ module ControlPanel
86
88
  end
87
89
  end
88
90
  end
89
-
90
-
91
+
92
+ # class used to contain control_panel elements
91
93
  class Panel < javax.swing.JFrame
92
94
  java_import javax.swing.UIManager
93
-
95
+
94
96
  attr_accessor :elements, :panel
95
-
96
- def initialize
97
+
98
+ def initialize
97
99
  super()
98
100
  @elements = []
99
101
  @panel = javax.swing.JPanel.new(java.awt.FlowLayout.new(1, 0, 0))
102
+ set_feel
100
103
  end
101
-
104
+
102
105
  def display
103
106
  add panel
104
107
  set_size 200, 30 + (64 * elements.size)
@@ -107,49 +110,57 @@ module ControlPanel
107
110
  set_location($app.width + 10, 0) unless ($app.width + 10 > $app.displayWidth)
108
111
  panel.visible = true
109
112
  end
110
-
111
- def add_element(element, name, has_label=true, button=false)
113
+
114
+ def add_element(element, name, has_label = true, _button_ = false)
112
115
  if has_label
113
116
  label = javax.swing.JLabel.new("<html><br><b>#{name}</b></html>")
114
117
  panel.add label
115
118
  end
116
119
  elements << element
117
120
  panel.add element
118
- return has_label ? label : nil
121
+ has_label ? label : nil
119
122
  end
120
-
123
+
121
124
  def remove
122
125
  remove_all
123
126
  dispose
124
127
  end
125
-
126
- def slider(name, range=0..100, initial_value = nil, &block)
127
- slider = Slider.new(self, name, range, initial_value, block || nil)
128
+
129
+ def slider(name, range = 0..100, initial_value = nil, &block)
130
+ Slider.new(self, name, range, initial_value, block || nil)
128
131
  end
129
-
132
+
130
133
  def menu(name, elements, initial_value = nil, &block)
131
- menu = Menu.new(self, name, elements, initial_value, block || nil)
134
+ Menu.new(self, name, elements, initial_value, block || nil)
132
135
  end
133
-
136
+
134
137
  def checkbox(name, initial_value = nil, &block)
135
138
  checkbox = Checkbox.new(self, name, block || nil)
136
139
  checkbox.do_click if initial_value == true
137
140
  end
138
-
141
+
139
142
  def button(name, &block)
140
- button = Button.new(self, name, block || nil)
143
+ Button.new(self, name, block || nil)
141
144
  end
142
-
143
- def look_feel(lf = 'Metal')
144
- lafs = javax.swing.UIManager::getInstalledLookAndFeels.select { |info| info.getName.eql? lf }
145
- javax.swing.UIManager::setLookAndFeel(lafs[0].getClassName) if lafs.size > 0
145
+
146
+ def look_feel(lf)
147
+ set_feel(lf)
146
148
  end
147
149
 
150
+ private
151
+
152
+ def set_feel(lf = 'metal')
153
+ lafinfo = javax.swing.UIManager.getInstalledLookAndFeels
154
+ laf = lafinfo.select do |info|
155
+ info.getName.eql? lf.capitalize
156
+ end
157
+ javax.swing.UIManager.setLookAndFeel(laf[0].getClassName)
158
+ end
148
159
  end
149
-
150
-
160
+
161
+ # instance methods module
151
162
  module InstanceMethods
152
- def control_panel
163
+ def control_panel
153
164
  @control_panel = ControlPanel::Panel.new unless @control_panel
154
165
  return @control_panel unless block_given?
155
166
  yield(@control_panel)
@@ -158,5 +169,4 @@ module ControlPanel
158
169
  end
159
170
  end
160
171
 
161
-
162
172
  Processing::App.send :include, ControlPanel::InstanceMethods
@@ -1,33 +1,32 @@
1
1
  # Here's a little library for using swing JFileChooser.
2
- # in ruby-processing, borrose heavily from control_panel
2
+ # in ruby-processing, borrows heavily from control_panel
3
3
 
4
4
  module FileChooser
5
5
  ##
6
6
  # FileFilter is abstract, requires accept and getDescription
7
7
  ##
8
-
8
+
9
9
  require 'pathname'
10
10
  JXChooser = Java::javax::swing::JFileChooser
11
- JFile = Java::java::io::File
11
+ JFile = Java::java::io::File
12
12
  System = Java::JavaLang::System
13
-
13
+
14
14
  class Filter < Java::javax::swing::filechooser::FileFilter
15
15
  attr_reader :description, :extensions
16
16
  def define(description, extensions)
17
17
  @description, @extensions = description, extensions
18
18
  end
19
-
19
+
20
20
  def accept(fobj)
21
- return true if extensions.include?(File.extname(fobj.to_s).downcase)
21
+ return true if extensions.include? File.extname(fobj.to_s).downcase
22
22
  return true if fobj.isDirectory
23
23
  end
24
24
 
25
-
26
25
  def getDescription
27
26
  description
28
27
  end
29
28
  end
30
-
29
+
31
30
  class RXChooser
32
31
  java_import javax.swing.UIManager
33
32
  require 'rbconfig'
@@ -39,29 +38,25 @@ module FileChooser
39
38
  when /darwin/ then OS = :mac
40
39
  when /mswin|mingw/ then OS = :windows
41
40
  end
42
-
41
+
43
42
  def initialize
43
+ javax.swing.UIManager.setLookAndFeel(
44
+ javax.swing.UIManager.getSystemLookAndFeelClassName)
44
45
  @chooser = JXChooser.new
45
46
  end
46
-
47
- def look_feel(lf = 'Metal')
48
- lafs = javax.swing.UIManager::getInstalledLookAndFeels.select{ |info|
49
- info.getName.eql? lf }
50
- javax.swing.UIManager::setLookAndFeel(lafs[0].getClassName) if lafs.size > 0
51
- end
52
-
47
+
53
48
  def set_filter(description, extensions)
54
49
  filter = FileChooser::Filter.new
55
50
  filter.define(description, extensions)
56
51
  @chooser.setFileFilter(filter)
57
52
  end
58
-
53
+
59
54
  def display
60
55
  if :windows == OS
61
56
  @chooser.setCurrentDirectory(JFile.new(System.getProperty(UDIR)))
62
57
  else
63
58
  @chooser.setCurrentDirectory(JFile.new(System.getProperty(UHOME)))
64
- end
59
+ end
65
60
  success = @chooser.show_open_dialog($app)
66
61
  if success == JXChooser::APPROVE_OPTION
67
62
  return Pathname.new(@chooser.get_selected_file.get_absolute_path).to_s
@@ -73,9 +68,8 @@ module FileChooser
73
68
  def dispose
74
69
  @chooser = nil
75
70
  end
76
-
77
71
  end
78
-
72
+
79
73
  module InstanceMethods
80
74
  def file_chooser
81
75
  @chooser = RXChooser.new
@@ -0,0 +1,54 @@
1
+ load_library :guido
2
+ import 'de.bezier.guido'
3
+
4
+ def setup
5
+ size 400, 400
6
+ Interactive.make self
7
+ @slider = Slider.new 10, height - 20, width - 20, 10
8
+ end
9
+
10
+ def draw
11
+ background 180
12
+ fill 255
13
+ v = 10 + @slider.value * (width - 30)
14
+ ellipse width / 2, height / 2, v, v
15
+ end
16
+
17
+ class Slider < ActiveElement
18
+
19
+ attr_reader :value
20
+
21
+ def initialize (x, y, w, h)
22
+ super x, y, w, h
23
+ @x = x
24
+ @y = y
25
+ @width = w
26
+ @height = h
27
+ @hover = false
28
+ @value = 0
29
+ @value_x = x
30
+ end
31
+
32
+ def mouseEntered(mx, my)
33
+ @hover = true
34
+ end
35
+
36
+ def mouseExited(mx, my)
37
+ @hover = false
38
+ end
39
+
40
+ def mouseDragged(mx, my, dx, dy)
41
+ @value_x = mx - @height / 2
42
+ @value_x = @x if (@value_x < @x)
43
+ @value_x = @x + @width - @height if (@value_x > @x + @width - @height)
44
+ @value = map(@value_x, @x, @x + @width - @height, 0, 1)
45
+ end
46
+
47
+ def draw
48
+ no_stroke
49
+ fill @hover ? 220 : 150
50
+ rect @x, @y, @width, @height
51
+ fill 120
52
+ rect @value_x, @y, @height, @height
53
+ end
54
+ end
@@ -11,7 +11,6 @@ attr_reader :img
11
11
 
12
12
  def setup
13
13
  file_chooser do |fc|
14
- fc.look_feel "Metal" # optional, "Metal" might be best linux (Gtk+ theme)
15
14
  fc.set_filter "Image Files", [".png", ".jpg"] # easily customizable chooser
16
15
  @img = load_image(fc.display) # fc.display returns a path String
17
16
  size(img.width, img.height)
@@ -0,0 +1 @@
1
+ retained menger requires compat.version=2.0 (jruby-1.7.xx)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-processing
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.1
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Ashkenas
@@ -18,7 +18,7 @@ authors:
18
18
  autorequire:
19
19
  bindir: bin
20
20
  cert_chain: []
21
- date: 2014-08-04 00:00:00.000000000 Z
21
+ date: 2014-08-14 00:00:00.000000000 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
24
  name: bundler
@@ -130,8 +130,11 @@ files:
130
130
  - lib/templates/application/lib/library/library.txt
131
131
  - lib/templates/application/run.erb
132
132
  - lib/templates/application/run.exe
133
- - lib/templates/create/blank_sketch.rb.erb
134
- - lib/templates/create/p3d_sketch.rb.erb
133
+ - lib/templates/create/basic.rb.erb
134
+ - lib/templates/create/basic_mode.rb.erb
135
+ - lib/templates/create/basic_wrap.rb.erb
136
+ - lib/templates/create/inner_class.rb.erb
137
+ - lib/templates/create/mode_wrap.rb.erb
135
138
  - library/boids/boids.rb
136
139
  - library/control_panel/control_panel.rb
137
140
  - library/fastmath/fastmath.rb
@@ -195,6 +198,7 @@ files:
195
198
  - samples/external_library/java_processing/grafica/default_plot.rb
196
199
  - samples/external_library/java_processing/grafica/multiple_panels.rb
197
200
  - samples/external_library/java_processing/grafica/oktoberfest_example.rb
201
+ - samples/external_library/java_processing/guido/slider.rb
198
202
  - samples/external_library/java_processing/hemesh/data/java_args.txt
199
203
  - samples/external_library/java_processing/hemesh/library/vbo/mesh_to_vbo.rb
200
204
  - samples/external_library/java_processing/hemesh/twin_iso.rb
@@ -464,6 +468,7 @@ files:
464
468
  - samples/processing_app/library/vecmath/vec3d/library/geometry/lib/mat4.rb
465
469
  - samples/processing_app/library/vecmath/vec3d/library/geometry/lib/plane.rb
466
470
  - samples/processing_app/library/vecmath/vec3d/library/hilbert/hilbert.rb
471
+ - samples/processing_app/library/vecmath/vec3d/note.txt
467
472
  - samples/processing_app/library/vecmath/vec3d/retained_menger.rb
468
473
  - samples/processing_app/topics/advanced_data/README
469
474
  - samples/processing_app/topics/advanced_data/Rakefile
@@ -1,7 +0,0 @@
1
- def setup
2
- <%= "size #{@width}, #{@height}" if @with_size %>
3
- end
4
-
5
- def draw
6
-
7
- end
@@ -1,7 +0,0 @@
1
- def setup
2
- <%= "size #{@width}, #{@height}, P3D" if @with_size %>
3
- end
4
-
5
- def draw
6
-
7
- end