ruby-processing 2.6.0 → 2.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rpextras.jar +0 -0
- data/lib/ruby-processing/app.rb +11 -10
- data/lib/ruby-processing/config.rb +4 -4
- data/lib/ruby-processing/exporters/application_exporter.rb +6 -5
- data/lib/ruby-processing/exporters/base_exporter.rb +4 -7
- data/lib/ruby-processing/exporters/creator.rb +124 -50
- data/lib/ruby-processing/helper_methods.rb +19 -21
- data/lib/ruby-processing/library_loader.rb +13 -13
- data/lib/ruby-processing/runner.rb +14 -14
- data/lib/ruby-processing/version.rb +1 -1
- data/lib/templates/create/blank_sketch.rb.erb +7 -0
- data/lib/templates/create/p3d_sketch.rb.erb +7 -0
- data/samples/contributed/fibonacci_sphere.rb +2 -2
- data/samples/processing_app/basics/form/pie_chart.rb +1 -1
- data/samples/processing_app/basics/form/triangle_strip.rb +1 -1
- data/samples/processing_app/library/vecmath/vec3d/library/hilbert/hilbert.rb +2 -2
- data/samples/processing_app/topics/gui/handles.rb +3 -3
- data/samples/processing_app/topics/gui/scrollbar.rb +2 -7
- data/samples/processing_app/topics/image_processing/histogram.rb +7 -7
- data/samples/processing_app/topics/simulate/spring.rb +1 -2
- data/vendors/Rakefile +2 -2
- metadata +4 -7
- data/lib/templates/create/basic.rb.erb +0 -10
- data/lib/templates/create/basic_mode.rb.erb +0 -10
- data/lib/templates/create/basic_wrap.rb.erb +0 -15
- data/lib/templates/create/inner_class.rb.erb +0 -9
- data/lib/templates/create/mode_wrap.rb.erb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0aaf568197ed0c33de6d5ee76ee799e488dbf7c
|
4
|
+
data.tar.gz: 141086257f20b9b623a7092ba17b857e22e0e694
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4dcfc3f5a0ae54e209ffd00ce00844287a3c5811ba352b657a42d9e47d526466a6ab97ed535b4a50d4fe6f615fc81f686008b54fe3ecb80cf2a6e95e149fe4e0
|
7
|
+
data.tar.gz: 05c8de38b6678bcbb3ee193306deed6c8f4d9d45a3b9762bd62465ef27b6b1ef0581fdf2e5e035d083b049086b899ea9d4897b2507be605ae41d6f0c9beca0de
|
data/lib/rpextras.jar
CHANGED
Binary file
|
data/lib/ruby-processing/app.rb
CHANGED
@@ -7,10 +7,10 @@ require_relative '../ruby-processing/helper_methods'
|
|
7
7
|
require_relative '../ruby-processing/library_loader'
|
8
8
|
require_relative '../ruby-processing/config'
|
9
9
|
|
10
|
-
Dir["#{Processing::
|
10
|
+
Dir["#{Processing::RP_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
|
13
|
+
%w(PApplet PConstants PFont PImage PShape PShapeOBJ PShapeSVG PStyle
|
14
14
|
PGraphicsJava2D PGraphics PFont PVector PMatrix2D PMatrix3D).each do |klass|
|
15
15
|
java_import "processing.core.#{klass}"
|
16
16
|
end
|
@@ -54,8 +54,8 @@ module Processing
|
|
54
54
|
if methods_to_alias.key?(method_name)
|
55
55
|
alias_method methods_to_alias[method_name], method_name
|
56
56
|
end
|
57
|
-
end
|
58
|
-
|
57
|
+
end
|
58
|
+
|
59
59
|
# Handy getters and setters on the class go here:
|
60
60
|
def self.sketch_class; @sketch_class; end
|
61
61
|
@@full_screen = false
|
@@ -92,15 +92,15 @@ module Processing
|
|
92
92
|
|
93
93
|
def library_loaded?(library_name)
|
94
94
|
self.class.library_loaded?(library_name)
|
95
|
-
end
|
95
|
+
end
|
96
96
|
|
97
|
-
# It is 'NOT' usually necessary to directly pass options to a sketch, it
|
97
|
+
# It is 'NOT' usually necessary to directly pass options to a sketch, it
|
98
98
|
# gets done automatically for you. Since processing-2.0 you should prefer
|
99
99
|
# setting the sketch width and height and renderer using the size method,
|
100
|
-
# in the sketch (as with vanilla processing), which should be the first
|
100
|
+
# in the sketch (as with vanilla processing), which should be the first
|
101
101
|
# argument in setup. Sensible options to pass are x and y to locate sketch
|
102
102
|
# on the screen, or full_screen: true (prefer new hash syntax)
|
103
|
-
|
103
|
+
|
104
104
|
def initialize(options={})
|
105
105
|
super()
|
106
106
|
$app = self
|
@@ -161,6 +161,7 @@ module Processing
|
|
161
161
|
# Provide a loggable string to represent this sketch.
|
162
162
|
def inspect
|
163
163
|
"#<Processing::App:#{self.class}:#{@title}>"
|
164
|
+
#"#<Processing::App:#{self.class}>"
|
164
165
|
end
|
165
166
|
|
166
167
|
# Cleanly close and shutter a running sketch.
|
@@ -202,8 +203,8 @@ module Processing
|
|
202
203
|
|
203
204
|
# Proxy methods through to the sketch.
|
204
205
|
def self.proxy_methods(inner_class)
|
205
|
-
code = desired_method_names(inner_class).inject('') do |
|
206
|
-
|
206
|
+
code = desired_method_names(inner_class).inject('') do |rcode, method|
|
207
|
+
rcode << <<-EOS
|
207
208
|
def #{method}(*args, &block) # def rect(*args, &block)
|
208
209
|
if block_given? # if block_given?
|
209
210
|
$app.send :'#{method}', *args, &block # $app.send(:rect, *args, &block)
|
@@ -3,13 +3,13 @@ require 'psych'
|
|
3
3
|
module Processing
|
4
4
|
|
5
5
|
if Processing.exported?
|
6
|
-
|
6
|
+
RP_CONFIG = { 'PROCESSING_ROOT' => RP5_ROOT, 'JRUBY' => 'false' }
|
7
7
|
end
|
8
8
|
|
9
|
-
unless defined?
|
9
|
+
unless defined? RP_CONFIG
|
10
10
|
begin
|
11
|
-
CONFIG_FILE_PATH=File.expand_path('~/.rp5rc')
|
12
|
-
|
11
|
+
CONFIG_FILE_PATH = File.expand_path('~/.rp5rc')
|
12
|
+
RP_CONFIG = (Psych.load_file(CONFIG_FILE_PATH))
|
13
13
|
rescue
|
14
14
|
warn('WARNING: you need to set PROCESSING_ROOT in ~/.rp5rc')
|
15
15
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'rbconfig'
|
2
|
+
require_relative 'base_exporter'
|
2
3
|
|
3
4
|
module Processing
|
4
|
-
|
5
|
+
|
5
6
|
# A utility class to export Ruby-Processing sketches as
|
6
7
|
# Mac/Win/Nix Applications.
|
7
8
|
class ApplicationExporter < BaseExporter
|
@@ -43,7 +44,7 @@ module Processing
|
|
43
44
|
@prefix = 'lib'
|
44
45
|
cp_r(Dir["#{RP5_ROOT}/lib/templates/application/{*,**}"], @dest)
|
45
46
|
@necessary_files = [@main_file_path]
|
46
|
-
@necessary_files += Dir["#{
|
47
|
+
@necessary_files += Dir["#{RP_CONFIG['PROCESSING_ROOT']}/core/library/{*,**}"]
|
47
48
|
@necessary_files += Dir["#{RP5_ROOT}/lib/{*,**}"]
|
48
49
|
@necessary_files += @real_requires
|
49
50
|
NECESSARY_FOLDERS.each do |folder|
|
@@ -55,19 +56,19 @@ module Processing
|
|
55
56
|
cp_r(@libraries, File.join(@dest, @prefix, 'library')) unless @libraries.empty?
|
56
57
|
# Then move the icon
|
57
58
|
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
|
59
|
+
move(potential_icon, File.join(@dest, 'Contents/Resources/sketch.icns'), force: true) if potential_icon
|
59
60
|
end
|
60
61
|
|
61
62
|
def calculate_substitutions
|
62
63
|
file_list = ['lib/ruby/jruby-complete.jar']
|
63
|
-
@class_path = file_list.map { |f| '$JAVAROOT/' + f.sub(@prefix+
|
64
|
+
@class_path = file_list.map { |f| '$JAVAROOT/' + f.sub(@prefix + "/", '') }.join(":")
|
64
65
|
@linux_class_path = '.:../lib/ruby/*:../lib/*:../lib/library/*'
|
65
66
|
@windows_class_path = '.;../lib/ruby/*;../lib/*;../lib/library/*'
|
66
67
|
end
|
67
68
|
|
68
69
|
def create_executables
|
69
70
|
render_erb_in_path_with_binding(@dest, binding, delete: true)
|
70
|
-
rm Dir.glob(@dest +
|
71
|
+
rm Dir.glob(@dest + "/**/*.java")
|
71
72
|
runnable = @dest + '/' + File.basename(@main_file, '.rb')
|
72
73
|
move @dest + '/run', runnable
|
73
74
|
move @dest + '/run.exe', "#{runnable}.exe"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'erb'
|
3
|
-
require_relative '
|
3
|
+
require_relative '../library_loader'
|
4
4
|
|
5
5
|
module Processing
|
6
6
|
# This base exporter implements some of the common
|
@@ -42,8 +42,7 @@ module Processing
|
|
42
42
|
|
43
43
|
# Searches the source for a title.
|
44
44
|
def extract_title(source)
|
45
|
-
|
46
|
-
match = source.match(filter)
|
45
|
+
match = source.match(/#{@info[:class_name]}\.new.*?:title\s=>\s["'](.+?)["']/m)
|
47
46
|
match ? match[1] : File.basename(@file, '.rb').titleize
|
48
47
|
end
|
49
48
|
|
@@ -103,7 +102,6 @@ module Processing
|
|
103
102
|
requirements
|
104
103
|
end
|
105
104
|
|
106
|
-
|
107
105
|
protected
|
108
106
|
|
109
107
|
def read_source_code
|
@@ -115,7 +113,7 @@ module Processing
|
|
115
113
|
end
|
116
114
|
|
117
115
|
def hash_to_ivars(hash)
|
118
|
-
hash.each { |k, v| instance_variable_set(
|
116
|
+
hash.each { |k, v| instance_variable_set("@#{k}", v) }
|
119
117
|
end
|
120
118
|
|
121
119
|
def wipe_and_recreate_destination
|
@@ -124,7 +122,7 @@ module Processing
|
|
124
122
|
end
|
125
123
|
|
126
124
|
def render_erb_in_path_with_binding(path, some_binding, opts = {})
|
127
|
-
erbs = Dir.glob(path +
|
125
|
+
erbs = Dir.glob(path + "/**/*.erb") # double quotes required
|
128
126
|
erbs.each do |erb|
|
129
127
|
string = File.open(erb) { |f| f.read }
|
130
128
|
rendered = render_erb_from_string_with_binding(string, some_binding)
|
@@ -138,4 +136,3 @@ module Processing
|
|
138
136
|
end
|
139
137
|
end
|
140
138
|
end
|
141
|
-
|
@@ -1,8 +1,33 @@
|
|
1
1
|
module Processing
|
2
|
-
|
3
|
-
|
2
|
+
require 'erb'
|
3
|
+
|
4
|
+
class SketchWriter
|
5
|
+
include ERB::Util
|
6
|
+
|
7
|
+
def initialize(template, param = {})
|
8
|
+
@name = param[:name]
|
9
|
+
@file_name = param[:file_name]
|
10
|
+
@title = param[:title]
|
11
|
+
@width = param[:width]
|
12
|
+
@height = param[:height]
|
13
|
+
@mode = param[:mode].upcase unless param[:mode].nil?
|
14
|
+
@template = template
|
15
|
+
save(@file_name)
|
16
|
+
end
|
17
|
+
|
18
|
+
def render
|
19
|
+
ERB.new(@template).result(binding)
|
20
|
+
end
|
21
|
+
|
22
|
+
def save(file)
|
23
|
+
File.open(file, 'w+') do |f|
|
24
|
+
f.write(render)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
4
29
|
# An abstract class providing common methods for real creators
|
5
|
-
class Creator
|
30
|
+
class Creator
|
6
31
|
|
7
32
|
ALL_DIGITS = /\A\d+\Z/
|
8
33
|
|
@@ -24,90 +49,139 @@ module Processing
|
|
24
49
|
mode can be P2D / P3D.
|
25
50
|
Use --wrap for a sketch wrapped as a class
|
26
51
|
Use --inner to generated a ruby version of 'java' Inner class
|
27
|
-
Examples: rp5 create
|
28
|
-
rp5 create
|
52
|
+
Examples: rp5 create app 800 600
|
53
|
+
rp5 create app 800 600 p3d --wrap
|
29
54
|
rp5 create inner_class --inner
|
30
55
|
|
31
56
|
USAGE
|
32
57
|
end
|
33
58
|
|
34
|
-
def create_file(path, param, rendered, type)
|
35
|
-
# Make the file
|
36
|
-
dir = File.dirname path
|
37
|
-
mkdir_p dir
|
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
59
|
end
|
43
60
|
|
44
61
|
# This class creates bare sketches, with an optional render mode
|
45
62
|
class BasicSketch < Creator
|
46
63
|
# Create a blank sketch, given a path.
|
64
|
+
def basic_template
|
65
|
+
%{
|
66
|
+
def setup
|
67
|
+
size <%=@width%>, <%=@height%>
|
68
|
+
end
|
69
|
+
|
70
|
+
def draw
|
71
|
+
|
72
|
+
end
|
73
|
+
}
|
74
|
+
end
|
75
|
+
|
76
|
+
def basic_template_mode
|
77
|
+
%{
|
78
|
+
def setup
|
79
|
+
size <%=@width%>, <%=@height%>, <%=@mode%>
|
80
|
+
end
|
81
|
+
|
82
|
+
def draw
|
83
|
+
|
84
|
+
end
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
47
88
|
def create!(path, args)
|
48
89
|
return usage if /\?/ =~ path || /--help/ =~ path
|
49
90
|
main_file = File.basename(path, '.rb')
|
50
91
|
# Check to make sure that the main file doesn't exist already
|
51
92
|
already_exist(path)
|
52
|
-
@param =
|
53
|
-
main_file.camelize,
|
54
|
-
|
55
|
-
main_file.titleize,
|
56
|
-
args[0],
|
57
|
-
args[1],
|
58
|
-
args[2]
|
59
|
-
|
60
|
-
@with_size = @param
|
61
|
-
@param
|
62
|
-
|
63
|
-
|
64
|
-
rendered = render_erb_from_string_with_binding(template.read, binding)
|
65
|
-
create_file(path, @param, rendered, 'Sketch')
|
93
|
+
@param = {
|
94
|
+
name: main_file.camelize,
|
95
|
+
file_name: "#{File.dirname(path)}/#{path.underscore}.rb",
|
96
|
+
title: main_file.titleize,
|
97
|
+
width: args[0],
|
98
|
+
height: args[1],
|
99
|
+
mode: args[2]
|
100
|
+
}
|
101
|
+
@with_size = @param[:width] && @param[:width].match(ALL_DIGITS) &&
|
102
|
+
@param[:height] && @param[:height].match(ALL_DIGITS)
|
103
|
+
template = @param[:mode].nil? ? basic_template : basic_template_mode
|
104
|
+
SketchWriter.new(template, @param)
|
66
105
|
end
|
67
106
|
end
|
68
107
|
|
69
108
|
# This class creates class wrapped sketches, with an optional render mode
|
70
109
|
class ClassSketch < Creator
|
110
|
+
|
111
|
+
def class_template
|
112
|
+
%{
|
113
|
+
class <%=@name%> < Processing::App
|
114
|
+
def setup
|
115
|
+
size <%=@width%>, <%=@height%>
|
116
|
+
end
|
117
|
+
|
118
|
+
def draw
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# <%=@name%>.new(x: 20, y: 20)
|
124
|
+
}
|
125
|
+
end
|
126
|
+
|
127
|
+
def class_template_mode
|
128
|
+
%{
|
129
|
+
class <%=@name%> < Processing::App
|
130
|
+
def setup
|
131
|
+
size <%=@width%>, <%=@height%>, <%=@mode%>
|
132
|
+
end
|
133
|
+
|
134
|
+
def draw
|
135
|
+
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
# <%=@name%>.new(x: 20, y: 20)
|
140
|
+
}
|
141
|
+
end
|
71
142
|
# Create a bare blank sketch, given a path.
|
72
143
|
def create!(path, args)
|
73
144
|
return usage if /\?/ =~ path || /--help/ =~ path
|
74
145
|
main_file = File.basename(path, '.rb')
|
75
146
|
# Check to make sure that the main file doesn't exist already
|
76
147
|
already_exist(path)
|
77
|
-
@param =
|
78
|
-
main_file.camelize,
|
79
|
-
|
80
|
-
main_file.titleize,
|
81
|
-
args[0],
|
82
|
-
args[1],
|
83
|
-
args[2]
|
84
|
-
|
85
|
-
@with_size = @param
|
86
|
-
@param
|
87
|
-
|
88
|
-
|
89
|
-
rendered = render_erb_from_string_with_binding(template.read, binding)
|
90
|
-
create_file(path, @param, rendered, 'Sketch')
|
148
|
+
@param = {
|
149
|
+
name: main_file.camelize,
|
150
|
+
file_name: "#{File.dirname(path)}/#{path.underscore}.rb",
|
151
|
+
title: main_file.titleize,
|
152
|
+
width: args[0],
|
153
|
+
height: args[1],
|
154
|
+
mode: args[2]
|
155
|
+
}
|
156
|
+
@with_size = @param[:width] && @param[:width].match(ALL_DIGITS) &&
|
157
|
+
@param[:height] && @param[:height].match(ALL_DIGITS)
|
158
|
+
template = @param[:mode].nil? ? class_template : class_template_mode
|
159
|
+
SketchWriter.new(template, @param)
|
91
160
|
end
|
92
161
|
end
|
93
162
|
|
94
163
|
# This class creates a ruby-processing class that mimics java inner class
|
95
164
|
class Inner < Creator
|
165
|
+
def inner_class_template
|
166
|
+
%{
|
167
|
+
class <%=@name%>
|
168
|
+
include_module Processing::Proxy
|
169
|
+
|
170
|
+
end
|
171
|
+
}
|
172
|
+
end
|
96
173
|
# Create a blank sketch, given a path.
|
97
174
|
def create!(path, _args_)
|
98
175
|
return usage if /\?/ =~ path || /--help/ =~ path
|
99
176
|
main_file = File.basename(path, '.rb')
|
100
177
|
# Check to make sure that the main file doesn't exist already
|
101
178
|
already_exist(path)
|
102
|
-
@param =
|
103
|
-
main_file.camelize,
|
104
|
-
|
105
|
-
main_file.titleize
|
106
|
-
|
107
|
-
|
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\"")
|
179
|
+
@param = {
|
180
|
+
name: main_file.camelize,
|
181
|
+
file_name: "#{File.dirname(path)}/#{path.underscore}.rb",
|
182
|
+
title: main_file.titleize
|
183
|
+
}
|
184
|
+
SketchWriter.new(inner_class_template, @param)
|
111
185
|
end
|
112
186
|
end
|
113
187
|
end
|
@@ -56,14 +56,14 @@ module Processing
|
|
56
56
|
|
57
57
|
# Overrides Processing convenience function thread, which takes a String
|
58
58
|
# arg (for a function) to more rubylike version, takes a block...
|
59
|
-
def thread(
|
59
|
+
def thread(&block)
|
60
60
|
if block_given?
|
61
|
-
Thread.new
|
61
|
+
Thread.new(&block)
|
62
62
|
else
|
63
63
|
fail ArgumentError, 'thread must be called with a block' , caller
|
64
64
|
end
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
# Explicitly provides 'processing.org' map instance method, in which
|
68
68
|
# value is mapped from range 1, to range 2 (NB: values are not clamped to
|
69
69
|
# range 1). It may be better to explicitly write your own interpolate function
|
@@ -98,7 +98,7 @@ module Processing
|
|
98
98
|
def max(*args)
|
99
99
|
args.max { |a, b| a <=> b }
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
# explicitly provide 'processing.org' abs instance method
|
103
103
|
def abs(val)
|
104
104
|
warn 'abs(val) is deprecated use val.abs to avoid this warning'
|
@@ -110,7 +110,7 @@ module Processing
|
|
110
110
|
warn 'ceil(val) is deprecated use val.ceil to avoid this warning'
|
111
111
|
val.ceil
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
# explicitly provide 'processing.org' round instance method
|
115
115
|
def round(val)
|
116
116
|
warn 'round(val) is deprecated use val.round to avoid this warning'
|
@@ -144,37 +144,37 @@ module Processing
|
|
144
144
|
warn 'radians(theta) is deprecated use theta.radians to avoid this warning'
|
145
145
|
theta.radians
|
146
146
|
end
|
147
|
-
|
147
|
+
|
148
148
|
# explicitly provide 'processing.org' degrees instance method
|
149
149
|
def degrees(theta)
|
150
150
|
warn 'degrees(theta) is deprecated use theta.radians to avoid this warning'
|
151
151
|
theta.degrees
|
152
152
|
end
|
153
|
-
|
153
|
+
|
154
154
|
# explicitly provide 'processing.org' hex instance method
|
155
155
|
def hex(x)
|
156
156
|
warn 'hex(x) is deprecated use x.hex to avoid this warning'
|
157
157
|
x.hex
|
158
158
|
end
|
159
|
-
|
159
|
+
|
160
160
|
# explicitly provide 'processing.org' unhex instance method
|
161
161
|
def unhex(str)
|
162
162
|
warn 'unhex(str) is deprecated use str.to_i(base=16)'
|
163
163
|
str.to_i(base=16)
|
164
164
|
end
|
165
|
-
|
165
|
+
|
166
166
|
# explicitly provide 'processing.org' binary instance method
|
167
167
|
def binary(x)
|
168
168
|
warn 'binary(x) is deprecated use x.to_s(2) to avoid this warning'
|
169
169
|
x.to_s(2)
|
170
170
|
end
|
171
|
-
|
171
|
+
|
172
172
|
# explicitly provide 'processing.org' unbinary instance method
|
173
|
-
def
|
173
|
+
def unbinary(str)
|
174
174
|
warn 'unbinary(str) is deprecated use str.to_i(base=2)'
|
175
175
|
str.to_i(base=2)
|
176
176
|
end
|
177
|
-
|
177
|
+
|
178
178
|
# explicitly provide 'processing.org' nf instance method
|
179
179
|
def nf(*args)
|
180
180
|
warn 'nf(num, digits) is deprecated use num.to_s.rjust(digits) '\
|
@@ -199,37 +199,35 @@ module Processing
|
|
199
199
|
fail ArgumentError, 'takes 2 or 3 parameters'
|
200
200
|
end
|
201
201
|
end
|
202
|
-
|
203
202
|
# explicitly provide 'processing.org' trim instance method
|
204
203
|
def trim(str)
|
205
204
|
warn 'deprecated use str.strip'
|
206
205
|
str.strip
|
207
206
|
end
|
208
|
-
|
207
|
+
|
209
208
|
# explicitly provide 'processing.org' println instance method
|
210
209
|
def println(str)
|
211
210
|
warn 'deprecated use puts(str)'
|
212
211
|
puts str
|
213
212
|
end
|
214
|
-
|
213
|
+
|
215
214
|
# explicitly provide 'processing.org' hour instance method
|
216
215
|
def hour
|
217
216
|
warn 'deprecated use t = Time.now and t.hour'
|
218
217
|
PApplet.hour
|
219
218
|
end
|
220
|
-
|
219
|
+
|
221
220
|
# explicitly provide 'processing.org' second instance method
|
222
221
|
def second
|
223
222
|
warn 'deprecated use t = Time.now and t.sec'
|
224
223
|
PApplet.second
|
225
224
|
end
|
226
|
-
|
225
|
+
|
227
226
|
# explicitly provide 'processing.org' minute instance method
|
228
227
|
def minute
|
229
|
-
'deprecated use t = Time.now and t.min'
|
230
228
|
PApplet.minute
|
231
229
|
end
|
232
|
-
|
230
|
+
|
233
231
|
# Uses PImage class method under hood
|
234
232
|
def blend_color(c1, c2, mode)
|
235
233
|
PImage.blendColor(c1, c2, mode)
|
@@ -252,9 +250,9 @@ module Processing
|
|
252
250
|
|
253
251
|
# By default, your sketch path is the folder that your sketch is in.
|
254
252
|
# If you'd like to do something fancy, feel free.
|
255
|
-
def set_sketch_path(
|
253
|
+
def set_sketch_path(spath = nil)
|
256
254
|
field = @declared_fields['sketchPath']
|
257
|
-
field.set_value(java_self,
|
255
|
+
field.set_value(java_self, spath || SKETCH_ROOT)
|
258
256
|
end
|
259
257
|
|
260
258
|
# Fix java conversion problems getting the last key
|
@@ -53,14 +53,14 @@ module Processing
|
|
53
53
|
def load_java_library(library_name)
|
54
54
|
library_name = library_name.to_sym
|
55
55
|
return true if @loaded_libraries[library_name]
|
56
|
-
|
56
|
+
jpath = get_library_directory_path(library_name, 'jar')
|
57
57
|
jars = get_library_paths(library_name, 'jar')
|
58
58
|
return false if jars.empty?
|
59
59
|
jars.each {|jar| require jar }
|
60
60
|
|
61
|
-
platform_specific_library_paths = get_platform_specific_library_paths(
|
62
|
-
platform_specific_library_paths = platform_specific_library_paths.select do |
|
63
|
-
test(?d,
|
61
|
+
platform_specific_library_paths = get_platform_specific_library_paths(jpath)
|
62
|
+
platform_specific_library_paths = platform_specific_library_paths.select do |ppath|
|
63
|
+
test(?d, ppath) && !Dir.glob(File.join(ppath, '*.{so,dll,jnilib}')).empty?
|
64
64
|
end
|
65
65
|
|
66
66
|
if !platform_specific_library_paths.empty?
|
@@ -106,14 +106,14 @@ module Processing
|
|
106
106
|
extensions = extension ? [extension] : %w{jar rb}
|
107
107
|
extensions.each do |ext|
|
108
108
|
[ "#{SKETCH_ROOT}/library/#{library_name}",
|
109
|
-
"#{Processing::
|
109
|
+
"#{Processing::RP_CONFIG['PROCESSING_ROOT']}/modes/java/libraries/#{library_name}/library",
|
110
110
|
"#{RP5_ROOT}/library/#{library_name}/library",
|
111
111
|
"#{RP5_ROOT}/library/#{library_name}",
|
112
112
|
"#{@sketchbook_library_path}/#{library_name}/library",
|
113
113
|
"#{@sketchbook_library_path}/#{library_name}"
|
114
|
-
].each do |
|
115
|
-
if File.exist?(
|
116
|
-
return
|
114
|
+
].each do |jpath|
|
115
|
+
if File.exist?(jpath) && !Dir.glob(jpath + "/*.#{ext}").empty?
|
116
|
+
return jpath
|
117
117
|
end
|
118
118
|
end
|
119
119
|
end
|
@@ -123,19 +123,19 @@ module Processing
|
|
123
123
|
def find_sketchbook_path
|
124
124
|
preferences_paths = []
|
125
125
|
sketchbook_paths = []
|
126
|
-
if sketchbook_path = Processing::
|
126
|
+
if sketchbook_path = Processing::RP_CONFIG['sketchbook_path']
|
127
127
|
return File.expand_path(sketchbook_path)
|
128
128
|
else
|
129
129
|
["'Application Data/Processing'", 'AppData/Roaming/Processing',
|
130
130
|
'Library/Processing', 'Documents/Processing',
|
131
131
|
'.processing', 'sketchbook'].each do |prefix|
|
132
|
-
|
133
|
-
pref_path =
|
132
|
+
spath = "#{ENV['HOME']}/#{prefix}"
|
133
|
+
pref_path = spath + '/preferences.txt'
|
134
134
|
if test(?f, pref_path)
|
135
135
|
preferences_paths << pref_path
|
136
136
|
end
|
137
|
-
if test(?d,
|
138
|
-
sketchbook_paths <<
|
137
|
+
if test(?d, spath)
|
138
|
+
sketchbook_paths << spath
|
139
139
|
end
|
140
140
|
end
|
141
141
|
if !preferences_paths.empty?
|
@@ -34,7 +34,7 @@ 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 p3d (P3D mode example)
|
37
|
+
rp5 create some_new_sketch 640 480 p3d (P3D mode example)
|
38
38
|
rp5 create some_new_sketch 640 480 --wrap (a class wrapped default sketch)
|
39
39
|
rp5 watch some_new_sketch.rb
|
40
40
|
|
@@ -69,13 +69,13 @@ 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.wrap
|
73
|
-
@options.inner
|
74
|
-
@options.jruby
|
75
|
-
@options.nojruby
|
76
|
-
@options.action = args[0]
|
77
|
-
@options.path
|
78
|
-
@options.args
|
72
|
+
@options.wrap = !args.delete('--wrap').nil?
|
73
|
+
@options.inner = !args.delete('--inner').nil?
|
74
|
+
@options.jruby = !args.delete('--jruby').nil?
|
75
|
+
@options.nojruby = !args.delete('--nojruby').nil?
|
76
|
+
@options.action = args[0] || nil
|
77
|
+
@options.path = args[1] || File.basename(Dir.pwd + '.rb')
|
78
|
+
@options.args = args[2..-1] || []
|
79
79
|
end
|
80
80
|
|
81
81
|
# Create a fresh Ruby-Processing sketch, with the necessary
|
@@ -139,9 +139,9 @@ module Processing
|
|
139
139
|
def check(proc_root, installed)
|
140
140
|
show_version
|
141
141
|
root = ' PROCESSING_ROOT = Not Set!!!' unless proc_root
|
142
|
-
root ||= " PROCESSING_ROOT = #{Processing::
|
142
|
+
root ||= " PROCESSING_ROOT = #{Processing::RP_CONFIG['PROCESSING_ROOT']}"
|
143
143
|
puts root
|
144
|
-
puts " JRUBY = #{Processing::
|
144
|
+
puts " JRUBY = #{Processing::RP_CONFIG['JRUBY']}"
|
145
145
|
puts " jruby-complete installed = #{installed}"
|
146
146
|
end
|
147
147
|
|
@@ -167,7 +167,7 @@ module Processing
|
|
167
167
|
def spin_up(starter_script, sketch, args)
|
168
168
|
runner = "#{RP5_ROOT}/lib/ruby-processing/runners/#{starter_script}"
|
169
169
|
warn('The --jruby flag is no longer required') if @options.jruby
|
170
|
-
@options.nojruby = true if Processing::
|
170
|
+
@options.nojruby = true if Processing::RP_CONFIG['JRUBY'] == 'false'
|
171
171
|
java_args = discover_java_args(sketch)
|
172
172
|
command = @options.nojruby ?
|
173
173
|
['java', java_args, '-cp', jruby_complete, 'org.jruby.Main', runner, sketch, args].flatten :
|
@@ -185,8 +185,8 @@ module Processing
|
|
185
185
|
args += dock_icon
|
186
186
|
if File.exist?(arg_file)
|
187
187
|
args += File.read(arg_file).split(/\s+/)
|
188
|
-
elsif Processing::
|
189
|
-
args += Processing::
|
188
|
+
elsif Processing::RP_CONFIG['java_args']
|
189
|
+
args += Processing::RP_CONFIG['java_args'].split(/\s+/)
|
190
190
|
end
|
191
191
|
args.map! { |arg| "-J#{arg}" } unless @options.nojruby
|
192
192
|
args
|
@@ -231,7 +231,7 @@ module Processing
|
|
231
231
|
data = {}
|
232
232
|
path = File.expand_path("#{ENV['HOME']}/.rp5rc")
|
233
233
|
if @os == :macosx
|
234
|
-
data['PROCESSING_ROOT'] = %q(/Applications/Processing.app/Contents/Java
|
234
|
+
data['PROCESSING_ROOT'] = %q(/Applications/Processing.app/Contents/Java)
|
235
235
|
else
|
236
236
|
root = "#{ENV['HOME']}/processing-2.2.1"
|
237
237
|
data['PROCESSING_ROOT'] = root
|
@@ -34,7 +34,7 @@ end
|
|
34
34
|
def draw
|
35
35
|
if add_points
|
36
36
|
@nbr_points += 1
|
37
|
-
@nbr_points =
|
37
|
+
@nbr_points = [nbr_points, KMAX_POINTS].min
|
38
38
|
init_sphere(nbr_points)
|
39
39
|
end
|
40
40
|
|
@@ -52,7 +52,7 @@ end
|
|
52
52
|
|
53
53
|
def render_globe
|
54
54
|
push_matrix
|
55
|
-
(0 ..
|
55
|
+
(0 .. [nbr_points, pts.length].min).each do |i|
|
56
56
|
lat = pts[i].lat
|
57
57
|
lon = pts[i].lon
|
58
58
|
push_matrix
|
@@ -45,8 +45,8 @@ class Hilbert
|
|
45
45
|
@grammar = Grammar.new(axiom, rule)
|
46
46
|
@production = grammar.generate gen
|
47
47
|
@distance = size / (gen**2 - 1)
|
48
|
-
@theta = radians
|
49
|
-
@phi = radians
|
48
|
+
@theta = 90.radians
|
49
|
+
@phi = 90.radians
|
50
50
|
@adj_array = [0, 0.5, 1.5, 3.5, 7.5, 15].map { |x| Vec3D.new(x * -1, x, x * -1) }
|
51
51
|
end
|
52
52
|
|
@@ -102,7 +102,7 @@ class Handle
|
|
102
102
|
(mouse_x >= x && mouse_x <= x + width && mouse_y >= y && mouse_y <= y + height)
|
103
103
|
end
|
104
104
|
|
105
|
-
def lock(val,
|
106
|
-
|
107
|
-
end
|
105
|
+
def lock(val, first, last)
|
106
|
+
constrain(val, first, last)
|
107
|
+
end
|
108
108
|
end
|
@@ -42,12 +42,11 @@ def draw
|
|
42
42
|
end
|
43
43
|
|
44
44
|
|
45
|
-
class HScrollbar
|
46
|
-
|
45
|
+
class HScrollbar
|
46
|
+
include Processing::Proxy
|
47
47
|
attr_reader :swidth, :sheight, :xpos, :ypos, :spos, :newspos
|
48
48
|
attr_reader :spos_max, :spos_min, :loose, :over, :locked, :ratio
|
49
49
|
def initialize(xp, yp, sw, sh, l)
|
50
|
-
super
|
51
50
|
@swidth = sw
|
52
51
|
@sheight = sh
|
53
52
|
widthtoheight = sw - sh
|
@@ -68,10 +67,6 @@ class HScrollbar
|
|
68
67
|
@spos = spos + (newspos - spos) / loose if (newspos - spos).abs > 1
|
69
68
|
end
|
70
69
|
|
71
|
-
def constrain(val, minv, maxv)
|
72
|
-
min(max(val, minv), maxv)
|
73
|
-
end
|
74
|
-
|
75
70
|
def over_event?
|
76
71
|
(mouse_x > xpos && mouse_x < xpos + swidth && mouse_y > ypos && mouse_y < ypos + sheight)
|
77
72
|
end
|
@@ -14,30 +14,30 @@ def setup
|
|
14
14
|
|
15
15
|
# Load an image from the data directory
|
16
16
|
# Load a different image by modifying the comments
|
17
|
-
img =
|
17
|
+
img = load_image('frontier.jpg')
|
18
18
|
image(img, 0, 0)
|
19
|
+
img.load_pixels
|
19
20
|
@hist = Array.new(256, 0)
|
20
21
|
|
21
22
|
# Calculate the histogram
|
22
23
|
(0 ... img.width).each do |i|
|
23
24
|
(0 ... img.height).each do |j|
|
24
|
-
bright = (brightness(
|
25
|
+
bright = (brightness(img.pixels[j * img.width + i]))
|
25
26
|
hist[bright] += 1
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
|
-
# Find the largest value in the histogram using
|
30
|
-
|
31
|
-
histMax = max(hist.to_java Java::int)
|
30
|
+
# Find the largest value in the histogram using ruby array max function
|
31
|
+
hist_max = hist.max
|
32
32
|
|
33
33
|
stroke(255)
|
34
34
|
# Draw half of the histogram (skip every second value)
|
35
35
|
(0 ... img.width).step(2) do |i|
|
36
36
|
# Map i (from 0..img.width) to a location in the histogram (0..255)
|
37
|
-
which =
|
37
|
+
which = map(i, 0, img.width, 0, 255)
|
38
38
|
# Convert the histogram value to a location between
|
39
39
|
# the bottom and the top of the picture
|
40
|
-
y =
|
40
|
+
y = map(hist[which], 0, hist_max, img.height, 0)
|
41
41
|
line(i, img.height, i, y)
|
42
42
|
end
|
43
43
|
end
|
data/vendors/Rakefile
CHANGED
@@ -8,7 +8,7 @@ WARNING = <<-EOS
|
|
8
8
|
|
9
9
|
EOS
|
10
10
|
|
11
|
-
JRUBY_VERSION = "1.7.
|
11
|
+
JRUBY_VERSION = "1.7.14"
|
12
12
|
|
13
13
|
CLOBBER.include("jruby-complete-#{JRUBY_VERSION}.jar")
|
14
14
|
|
@@ -21,7 +21,7 @@ task :download => ["jruby-complete-#{JRUBY_VERSION}.jar"]
|
|
21
21
|
file "jruby-complete-#{JRUBY_VERSION}.jar" do
|
22
22
|
begin
|
23
23
|
sh "wget http://jruby.org.s3.amazonaws.com/downloads/#{JRUBY_VERSION}/jruby-complete-#{JRUBY_VERSION}.jar"
|
24
|
-
check_sha1("jruby-complete-#{JRUBY_VERSION}.jar", "
|
24
|
+
check_sha1("jruby-complete-#{JRUBY_VERSION}.jar", "ad70c18834a143afa6686ebcda27351ebfef7385")
|
25
25
|
rescue
|
26
26
|
warn(WARNING)
|
27
27
|
end
|
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.6.
|
4
|
+
version: 2.6.1
|
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-
|
21
|
+
date: 2014-08-30 00:00:00.000000000 Z
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
24
24
|
name: bundler
|
@@ -130,11 +130,8 @@ 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/
|
134
|
-
- lib/templates/create/
|
135
|
-
- lib/templates/create/basic_wrap.rb.erb
|
136
|
-
- lib/templates/create/inner_class.rb.erb
|
137
|
-
- lib/templates/create/mode_wrap.rb.erb
|
133
|
+
- lib/templates/create/blank_sketch.rb.erb
|
134
|
+
- lib/templates/create/p3d_sketch.rb.erb
|
138
135
|
- library/boids/boids.rb
|
139
136
|
- library/control_panel/control_panel.rb
|
140
137
|
- library/fastmath/fastmath.rb
|
@@ -1,15 +0,0 @@
|
|
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)
|