propane 0.9.0-java → 2.0.0.pre-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/CONTRIBUTING.md +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +7 -1
- data/CHANGELOG.md +2 -1
- data/LICENSE +674 -0
- data/README.md +16 -22
- data/Rakefile +2 -2
- data/lib/propane.rb +1 -4
- data/lib/propane/app.rb +23 -31
- data/lib/propane/creators/sketch_writer.rb +8 -7
- data/lib/propane/helper_methods.rb +1 -2
- data/lib/propane/library_loader.rb +2 -1
- data/lib/propane/runner.rb +12 -54
- data/lib/propane/version.rb +1 -1
- data/library/video_event/video_event.rb +3 -0
- data/pom.rb +10 -9
- data/pom.xml +13 -8
- data/propane.gemspec +10 -10
- data/src/monkstone/videoevent/VideoInterface.java +42 -0
- data/src/monkstone/videoevent/package-info.java +20 -0
- data/test/create_test.rb +10 -3
- data/test/respond_to_test.rb +10 -1
- data/vendors/Rakefile +56 -48
- metadata +17 -17
- data/LICENSE.txt +0 -22
- data/src/monkstone/CodeListener.java +0 -7
- data/src/monkstone/WatchSketchDir.java +0 -190
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Propane
|
2
2
|
[![Gem Version](https://badge.fury.io/rb/propane.svg)](https://badge.fury.io/rb/propane)
|
3
3
|
|
4
|
-
A slim layer to communicate with Processing from JRuby, features a polyglot maven build, this started out as a non serious project by Phillip Cunningam called ribiprocessing. It has now morphed into an experimental project for ruby-processing so we can now "Cook with Gas". We have created a configuration free version of ruby processing,
|
4
|
+
A slim layer to communicate with Processing from JRuby, features a polyglot maven build, this started out as a non serious project by Phillip Cunningam called ribiprocessing. It has now morphed into an experimental project for ruby-processing so we can now "Cook with Gas". We have created a configuration free version of ruby processing, for processing-3.1+, where we get processing core from maven central (and opengl currently testing on linux64/mac). These jars are small enough to include in the gem distribution, and hence we should not require configuration. This has created a scriptable version, ie files get run direct from jruby, but you could use jruby-complete if you used the propane script (avoids need to give the absolute data path for the data folder, but would also be needed for a watch mode).
|
5
5
|
## Requirements
|
6
6
|
|
7
7
|
- jdk8+ since version 0.6.0
|
@@ -29,47 +29,41 @@ require 'propane'
|
|
29
29
|
|
30
30
|
class FlashingLightsSketch < Propane::App
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
def initialize opts={}
|
35
|
-
@random_background = opts.fetch :random_background, RandomBackground.new(self)
|
36
|
-
super
|
32
|
+
def settings
|
33
|
+
size(800, 600)
|
37
34
|
end
|
38
35
|
|
39
36
|
def setup
|
40
|
-
|
37
|
+
sketch_title 'Flashing Light Sketch'
|
41
38
|
end
|
42
39
|
|
43
40
|
def draw
|
44
|
-
random_background.generate
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
class RandomBackground
|
50
|
-
include Propane::Proxy
|
51
|
-
|
52
|
-
def generate
|
53
41
|
background(rand(255), rand(255), rand(255))
|
54
42
|
end
|
55
|
-
|
56
43
|
end
|
57
44
|
|
58
|
-
FlashingLightsSketch.new
|
45
|
+
FlashingLightsSketch.new
|
59
46
|
```
|
60
47
|
|
61
|
-
To install the samples
|
48
|
+
To install the samples. The samples get copied to `~/propane_samples`. Depends on wget.
|
62
49
|
```bash
|
63
|
-
propane --install
|
50
|
+
propane --install samples
|
64
51
|
```
|
65
52
|
There is a handy sketch creator tool
|
66
53
|
```bash
|
67
54
|
propane -c my_sketch 200 200 # for default renderer
|
68
55
|
propane -c my_sketch 200 200 p2d # for opengl 2D renderer
|
69
56
|
propane -c my_sketch 200 200 p3d # for opengl 3D renderer
|
57
|
+
```
|
58
|
+
|
59
|
+
To run sketches
|
70
60
|
|
71
|
-
To run sketches using the installed jruby-complete, you can also use shortform `-r`
|
72
61
|
```bash
|
73
|
-
propane --run my_sketch.rb # or
|
74
62
|
jruby -S propane --run my_sketch.rb # belt and braces version
|
75
63
|
```
|
64
|
+
To install the sound and video libraries `~/.propane/libraries`. Depends on wget.
|
65
|
+
```bash
|
66
|
+
propane --install sound
|
67
|
+
propane --install video
|
68
|
+
```
|
69
|
+
Other java libraries can be manually installed to the same folder (no need for processing ide)
|
data/Rakefile
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# frozen_string_literal: false
|
3
2
|
require_relative 'lib/propane/version'
|
4
3
|
|
@@ -8,7 +7,7 @@ def create_manifest
|
|
8
7
|
File.open('MANIFEST.MF', 'w') do |f|
|
9
8
|
f.puts(title)
|
10
9
|
f.puts(version)
|
11
|
-
f.puts('Class-Path: core-
|
10
|
+
f.puts('Class-Path: core-3.1.1.jar gluegen-rt-2.3.2.jar jog-all-2.3.2.jar')
|
12
11
|
end
|
13
12
|
end
|
14
13
|
|
@@ -48,6 +47,7 @@ end
|
|
48
47
|
desc 'Test'
|
49
48
|
task :test do
|
50
49
|
sh 'jruby test/respond_to_test.rb'
|
50
|
+
sh 'jruby test/create_test.rb'
|
51
51
|
end
|
52
52
|
|
53
53
|
desc 'clean'
|
data/lib/propane.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# frozen_string_literal: false
|
3
2
|
unless defined? PROPANE_ROOT
|
4
3
|
$LOAD_PATH << File.expand_path(File.dirname(__FILE__))
|
@@ -7,6 +6,4 @@ end
|
|
7
6
|
Dir["#{PROPANE_ROOT}/lib/*.jar"].each do |jar|
|
8
7
|
require jar
|
9
8
|
end
|
10
|
-
|
11
|
-
require 'propane/app'
|
12
|
-
require 'propane/helpers/numeric'
|
9
|
+
require_relative 'propane/app'
|
data/lib/propane/app.rb
CHANGED
@@ -19,7 +19,8 @@ module Propane
|
|
19
19
|
# their own sketch.
|
20
20
|
#
|
21
21
|
# i.e.
|
22
|
-
#
|
22
|
+
# require 'propane'
|
23
|
+
#
|
23
24
|
# class MySketch < Propane::App
|
24
25
|
#
|
25
26
|
# def draw
|
@@ -27,6 +28,8 @@ module Propane
|
|
27
28
|
# end
|
28
29
|
#
|
29
30
|
# end
|
31
|
+
#
|
32
|
+
# MySketch.new
|
30
33
|
|
31
34
|
# Watch the definition of these methods, to make sure
|
32
35
|
# that Processing is able to call them during events.
|
@@ -49,15 +52,27 @@ module Propane
|
|
49
52
|
alias stroke_width stroke_weight
|
50
53
|
alias rgb color
|
51
54
|
alias gray color
|
52
|
-
|
55
|
+
field_reader :surface
|
56
|
+
|
57
|
+
def sketch_class
|
58
|
+
self.class.sketch_class
|
59
|
+
end
|
60
|
+
|
61
|
+
# Keep track of what inherits from the Processing::App, because we're
|
62
|
+
# going to want to instantiate one.
|
63
|
+
def self.inherited(subclass)
|
64
|
+
super(subclass)
|
65
|
+
@sketch_class = subclass
|
66
|
+
end
|
67
|
+
|
53
68
|
# App should be instantiated with an optional list of options
|
54
69
|
# and array of arguments.
|
55
70
|
#
|
56
|
-
# App.new
|
71
|
+
# App.new
|
57
72
|
#
|
58
73
|
class << self
|
59
74
|
# Handy getters and setters on the class go here:
|
60
|
-
attr_accessor :sketch_class, :library_loader
|
75
|
+
attr_accessor :sketch_class, :library_loader, :title, :arguments, :options
|
61
76
|
|
62
77
|
def load_libraries(*args)
|
63
78
|
library_loader ||= LibraryLoader.new
|
@@ -99,7 +114,6 @@ module Propane
|
|
99
114
|
$app = self
|
100
115
|
@arguments = arguments
|
101
116
|
@options = options
|
102
|
-
configure_sketch
|
103
117
|
run_sketch
|
104
118
|
end
|
105
119
|
|
@@ -111,6 +125,10 @@ module Propane
|
|
111
125
|
import_opengl if /opengl/ =~ mode
|
112
126
|
super(*args)
|
113
127
|
end
|
128
|
+
|
129
|
+
def sketch_title(title)
|
130
|
+
surface.set_title(title)
|
131
|
+
end
|
114
132
|
|
115
133
|
def data_path(dat)
|
116
134
|
dat_root = File.join(SKETCH_ROOT, 'data')
|
@@ -118,12 +136,6 @@ module Propane
|
|
118
136
|
File.join(dat_root, dat)
|
119
137
|
end
|
120
138
|
|
121
|
-
# This method runs the processing sketch.
|
122
|
-
#
|
123
|
-
def run_sketch
|
124
|
-
PApplet.run_sketch(arguments, self)
|
125
|
-
end
|
126
|
-
|
127
139
|
private
|
128
140
|
|
129
141
|
def import_opengl
|
@@ -135,26 +147,6 @@ module Propane
|
|
135
147
|
end
|
136
148
|
end
|
137
149
|
|
138
|
-
# This method configures the sketch title and and presentation mode.
|
139
|
-
#
|
140
|
-
def configure_sketch
|
141
|
-
set_sketch_title
|
142
|
-
set_presentation_mode
|
143
|
-
end
|
144
|
-
|
145
|
-
# This method sets the sketch presentation mode.
|
146
|
-
#
|
147
|
-
def set_presentation_mode
|
148
|
-
arguments.concat ['--present'] if options[:fullscreen]
|
149
|
-
end
|
150
|
-
|
151
|
-
# This method sets the sketch title.
|
152
|
-
#
|
153
|
-
def set_sketch_title
|
154
|
-
title_string = options.fetch(:title, 'processing sketch')
|
155
|
-
arguments.concat [title_string]
|
156
|
-
end
|
157
|
-
|
158
150
|
def proxy_java_fields
|
159
151
|
fields = %w(sketchPath key frameRate mousePressed keyPressed)
|
160
152
|
methods = fields.map { |field| java_class.declared_field(field) }
|
@@ -11,8 +11,9 @@ class SketchParameters
|
|
11
11
|
name.split('_').collect(&:capitalize).join
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
name.split('_').collect(&:capitalize).join(' ')
|
14
|
+
def sketch_title
|
15
|
+
human = name.split('_').collect(&:capitalize).join(' ')
|
16
|
+
format("sketch_title '%s'", human)
|
16
17
|
end
|
17
18
|
|
18
19
|
def sketch_size
|
@@ -47,14 +48,15 @@ class ClassSketch
|
|
47
48
|
''
|
48
49
|
]
|
49
50
|
lines << format('class %s < Propane::App', param.class_name)
|
50
|
-
lines.concat method_lines('
|
51
|
+
lines.concat method_lines('settings', param.sketch_size)
|
52
|
+
lines.concat method_lines('setup', param.sketch_title)
|
51
53
|
lines.concat method_lines('draw', '')
|
52
54
|
lines << 'end'
|
53
55
|
lines.concat new(param)
|
54
56
|
end
|
55
|
-
|
57
|
+
|
56
58
|
private
|
57
|
-
|
59
|
+
|
58
60
|
def method_lines(name, content)
|
59
61
|
one = format('%sdef %s', INDENT, name)
|
60
62
|
two = content.empty? ? '' : format(' %s%s', INDENT, content)
|
@@ -64,7 +66,6 @@ class ClassSketch
|
|
64
66
|
end
|
65
67
|
|
66
68
|
def new(param)
|
67
|
-
['', format(
|
69
|
+
['', format('%s.new', param.class_name)]
|
68
70
|
end
|
69
71
|
end
|
70
|
-
|
@@ -100,7 +100,8 @@ module Propane
|
|
100
100
|
[
|
101
101
|
"#{PROPANE_ROOT}/library/#{library_name}",
|
102
102
|
"#{PROPANE_ROOT}/library/#{library_name}/library",
|
103
|
-
"#{PROPANE_ROOT}/library/#{library_name}"
|
103
|
+
"#{PROPANE_ROOT}/library/#{library_name}",
|
104
|
+
"#{ENV['HOME']}/.propane/libraries/#{library_name}/library"
|
104
105
|
].each do |jpath|
|
105
106
|
if File.exist?(jpath) && !Dir.glob(format('%s/*.%s', jpath, ext)).empty?
|
106
107
|
return jpath
|
data/lib/propane/runner.rb
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
# frozen_string_literal: false
|
2
|
-
require "#{PROPANE_ROOT}/lib/propane"
|
3
|
-
require "#{PROPANE_ROOT}/lib/propane/app"
|
4
2
|
require 'optparse'
|
3
|
+
require_relative 'version'
|
5
4
|
|
6
5
|
module Propane
|
7
|
-
|
8
|
-
java_import 'java.nio.file.StandardWatchEventKinds'
|
9
|
-
# Utility class to handle the different commands that the 'rp5' command
|
10
|
-
# offers. Able to run, watch, live, create, app, and unpack
|
6
|
+
# Utility class to handle the different commands that the 'propane' offers
|
11
7
|
class Runner
|
12
8
|
attr_reader :options, :argc, :filename
|
13
9
|
|
@@ -15,7 +11,7 @@ module Propane
|
|
15
11
|
@options = {}
|
16
12
|
end
|
17
13
|
|
18
|
-
# Start running a propane
|
14
|
+
# Start running a propane command from the passed-in arguments
|
19
15
|
def self.execute
|
20
16
|
runner = new
|
21
17
|
runner.parse_options(ARGV)
|
@@ -26,8 +22,6 @@ module Propane
|
|
26
22
|
def execute!
|
27
23
|
show_help if options.empty?
|
28
24
|
show_version if options[:version]
|
29
|
-
run_sketch if options[:run]
|
30
|
-
watch_sketch if options[:watch]
|
31
25
|
create if options[:create]
|
32
26
|
install if options[:install]
|
33
27
|
end
|
@@ -46,20 +40,11 @@ module Propane
|
|
46
40
|
end
|
47
41
|
|
48
42
|
options[:install] = false
|
49
|
-
|
43
|
+
message = '<Samples><Video><Sound> Install samples or library'
|
44
|
+
opts.on('-i', '--install', message) do
|
50
45
|
options[:install] = true
|
51
46
|
end
|
52
47
|
|
53
|
-
options[:watch] = false
|
54
|
-
opts.on('-w', '--watch', 'Watch the sketch') do
|
55
|
-
options[:watch] = true
|
56
|
-
end
|
57
|
-
|
58
|
-
options[:run] = false
|
59
|
-
opts.on('-r', '--run', 'Run the sketch using jruby-complete') do
|
60
|
-
options[:run] = true
|
61
|
-
end
|
62
|
-
|
63
48
|
options[:create] = false
|
64
49
|
opts.on('-c', '--create', 'Create new sketch outline') do
|
65
50
|
options[:create] = true
|
@@ -75,39 +60,6 @@ module Propane
|
|
75
60
|
@argc = opt_parser.parse(args)
|
76
61
|
@filename = argc.shift
|
77
62
|
end
|
78
|
-
|
79
|
-
def watch_sketch
|
80
|
-
run_sketch
|
81
|
-
root = File.absolute_path(File.dirname(filename))
|
82
|
-
watcher = WatchSketchDir.watch(root)
|
83
|
-
count = 0 # guard against a duplicate event
|
84
|
-
watcher.add_listener do |event|
|
85
|
-
if event.kind == StandardWatchEventKinds::ENTRY_MODIFY
|
86
|
-
if count == 0
|
87
|
-
puts 'reloading sketch...'
|
88
|
-
run_sketch
|
89
|
-
end
|
90
|
-
count += 1
|
91
|
-
count = 0 if count == 2
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def run_sketch
|
97
|
-
# root = File.absolute_path(File.dirname(filename))
|
98
|
-
# sketch = File.join(root, filename)
|
99
|
-
sketch = File.join(SKETCH_ROOT, filename)
|
100
|
-
warn_format = 'File %s does not not Exist!'
|
101
|
-
return warn(format(warn_format, sketch)) unless File.exist?(sketch)
|
102
|
-
command = [
|
103
|
-
'java',
|
104
|
-
'-cp',
|
105
|
-
"#{PROPANE_ROOT}/lib/ruby/jruby-complete.jar",
|
106
|
-
'org.jruby.Main',
|
107
|
-
sketch.to_s
|
108
|
-
].flatten
|
109
|
-
exec(*command)
|
110
|
-
end
|
111
63
|
|
112
64
|
def create
|
113
65
|
require_relative 'creators/sketch_writer'
|
@@ -121,7 +73,13 @@ module Propane
|
|
121
73
|
end
|
122
74
|
|
123
75
|
def install
|
124
|
-
|
76
|
+
choice = filename.downcase
|
77
|
+
samples = "cd #{PROPANE_ROOT}/vendors && rake"
|
78
|
+
sound = "cd #{PROPANE_ROOT}/vendors && rake download_and_copy_sound"
|
79
|
+
video = "cd #{PROPANE_ROOT}/vendors && rake download_and_copy_video"
|
80
|
+
system samples if /samples/ =~ choice
|
81
|
+
system video if /video/ =~ choice
|
82
|
+
system sound if /sound/ =~ choice
|
125
83
|
end
|
126
84
|
end # class Runner
|
127
85
|
end # module Propane
|
data/lib/propane/version.rb
CHANGED
data/pom.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
project 'rp5extras', 'https://github.com/monkstone/propane' do
|
3
3
|
model_version '4.0.0'
|
4
|
-
id 'propane:rp5extras', '0.
|
4
|
+
id 'propane:rp5extras', '2.0.0'
|
5
5
|
packaging 'jar'
|
6
6
|
description 'rp5extras for propane'
|
7
7
|
organization 'ruby-processing', 'https://ruby-processing.github.io'
|
@@ -13,12 +13,12 @@ project 'rp5extras', 'https://github.com/monkstone/propane' do
|
|
13
13
|
end
|
14
14
|
license 'MIT', 'http://www.opensource.org/licenses/mit-license.php'
|
15
15
|
license 'GPL 3', 'http://www.gnu.org/licenses/gpl-3.0-standalone.html'
|
16
|
-
issue_management 'https://github.com/
|
16
|
+
issue_management 'https://github.com/ruby-processing/propane/issues', 'Github'
|
17
17
|
|
18
18
|
source_control(
|
19
|
-
url: 'https://github.com/
|
20
|
-
connection: 'scm:git:git://github.com/
|
21
|
-
developer_connection: 'scm:git:git@github.com/
|
19
|
+
url: 'https://github.com/ruby-processing/propane',
|
20
|
+
connection: 'scm:git:git://github.com/ruby-processing/propane.git',
|
21
|
+
developer_connection: 'scm:git:git@github.com/ruby-processing/propane.git'
|
22
22
|
)
|
23
23
|
|
24
24
|
properties('source.directory' => 'src',
|
@@ -30,11 +30,12 @@ project 'rp5extras', 'https://github.com/monkstone/propane' do
|
|
30
30
|
'jruby.api' => 'http://jruby.org/apidocs/',
|
31
31
|
'processing.api' => 'http://processing.github.io/processing-javadocs/core/',
|
32
32
|
'jruby.api' => 'http://jruby.org/apidocs/',
|
33
|
-
'jogl.version' => '2.
|
33
|
+
'jogl.version' => '2.3.2'
|
34
34
|
)
|
35
35
|
|
36
|
-
pom
|
37
|
-
jar
|
36
|
+
pom 'org.jruby:jruby:9.1.2.0'
|
37
|
+
jar 'org.processing:core:3.1.1'
|
38
|
+
jar 'org.processing:video:3.0.2'
|
38
39
|
jar('org.jogamp.jogl:jogl-all:${jogl.version}')
|
39
40
|
jar('org.jogamp.gluegen:gluegen-rt-main:${jogl.version}')
|
40
41
|
|
@@ -44,7 +45,7 @@ project 'rp5extras', 'https://github.com/monkstone/propane' do
|
|
44
45
|
execute_goals( id: 'default-cli',
|
45
46
|
artifactItems: [ { groupId: 'org.processing',
|
46
47
|
artifactId: 'core',
|
47
|
-
version: '
|
48
|
+
version: '3.1.1',
|
48
49
|
type: 'jar',
|
49
50
|
outputDirectory: '${propane.basedir}/lib'
|
50
51
|
},
|
data/pom.xml
CHANGED
@@ -11,7 +11,7 @@ DO NOT MODIFIY - GENERATED CODE
|
|
11
11
|
<modelVersion>4.0.0</modelVersion>
|
12
12
|
<groupId>propane</groupId>
|
13
13
|
<artifactId>rp5extras</artifactId>
|
14
|
-
<version>0.
|
14
|
+
<version>2.0.0</version>
|
15
15
|
<name>rp5extras</name>
|
16
16
|
<description>rp5extras for propane</description>
|
17
17
|
<url>https://github.com/monkstone/propane</url>
|
@@ -46,16 +46,16 @@ DO NOT MODIFIY - GENERATED CODE
|
|
46
46
|
</developer>
|
47
47
|
</developers>
|
48
48
|
<scm>
|
49
|
-
<connection>scm:git:git://github.com/
|
50
|
-
<developerConnection>scm:git:git@github.com/
|
51
|
-
<url>https://github.com/
|
49
|
+
<connection>scm:git:git://github.com/ruby-processing/propane.git</connection>
|
50
|
+
<developerConnection>scm:git:git@github.com/ruby-processing/propane.git</developerConnection>
|
51
|
+
<url>https://github.com/ruby-processing/propane</url>
|
52
52
|
</scm>
|
53
53
|
<issueManagement>
|
54
54
|
<system>Github</system>
|
55
|
-
<url>https://github.com/
|
55
|
+
<url>https://github.com/ruby-processing/propane/issues</url>
|
56
56
|
</issueManagement>
|
57
57
|
<properties>
|
58
|
-
<jogl.version>2.
|
58
|
+
<jogl.version>2.3.2</jogl.version>
|
59
59
|
<jruby.api>http://jruby.org/apidocs/</jruby.api>
|
60
60
|
<source.directory>src</source.directory>
|
61
61
|
<maven.compiler.target>1.8</maven.compiler.target>
|
@@ -75,7 +75,12 @@ DO NOT MODIFIY - GENERATED CODE
|
|
75
75
|
<dependency>
|
76
76
|
<groupId>org.processing</groupId>
|
77
77
|
<artifactId>core</artifactId>
|
78
|
-
<version>
|
78
|
+
<version>3.1.1</version>
|
79
|
+
</dependency>
|
80
|
+
<dependency>
|
81
|
+
<groupId>org.processing</groupId>
|
82
|
+
<artifactId>video</artifactId>
|
83
|
+
<version>3.0.2</version>
|
79
84
|
</dependency>
|
80
85
|
<dependency>
|
81
86
|
<groupId>org.jogamp.jogl</groupId>
|
@@ -109,7 +114,7 @@ DO NOT MODIFIY - GENERATED CODE
|
|
109
114
|
<artifactItem>
|
110
115
|
<groupId>org.processing</groupId>
|
111
116
|
<artifactId>core</artifactId>
|
112
|
-
<version>
|
117
|
+
<version>3.1.1</version>
|
113
118
|
<type>jar</type>
|
114
119
|
<outputDirectory>${propane.basedir}/lib</outputDirectory>
|
115
120
|
</artifactItem>
|