ruby-processing 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +137 -0
- data/LICENSE +37 -0
- data/README +61 -0
- data/bin/rp5 +4 -0
- data/lib/core/core.jar +0 -0
- data/lib/core/jruby-complete.jar +0 -0
- data/lib/ruby-processing.rb +27 -0
- data/lib/ruby-processing/app.rb +358 -0
- data/lib/ruby-processing/exporters/applet_exporter.rb +75 -0
- data/lib/ruby-processing/exporters/application_exporter.rb +87 -0
- data/lib/ruby-processing/exporters/base_exporter.rb +133 -0
- data/lib/ruby-processing/exporters/creator.rb +46 -0
- data/lib/ruby-processing/helpers/string.rb +27 -0
- data/lib/ruby-processing/runner.rb +143 -0
- data/lib/ruby-processing/runners/base.rb +5 -0
- data/lib/ruby-processing/runners/live.rb +11 -0
- data/lib/ruby-processing/runners/run.rb +5 -0
- data/lib/ruby-processing/runners/watch.rb +42 -0
- data/lib/templates/applet/images/built_with.jpg +0 -0
- data/lib/templates/applet/images/ruby.jpg +0 -0
- data/lib/templates/applet/images/top.png +0 -0
- data/lib/templates/applet/index.html.erb +111 -0
- data/lib/templates/applet/library/library.txt +1 -0
- data/lib/templates/application/Contents/Info.plist.erb +58 -0
- data/lib/templates/application/Contents/MacOS/JavaApplicationStub +0 -0
- data/lib/templates/application/Contents/PkgInfo +1 -0
- data/lib/templates/application/Contents/Resources/sketch.icns +0 -0
- data/lib/templates/application/lib/MANIFEST.MF +3 -0
- data/lib/templates/application/lib/args.txt.erb +3 -0
- data/lib/templates/application/lib/library/library.txt +1 -0
- data/lib/templates/application/run.erb +4 -0
- data/lib/templates/application/run.exe +0 -0
- data/lib/templates/create/blank_sketch.rb.erb +15 -0
- data/library/boids/boids.rb +222 -0
- data/library/control_panel/control_panel.rb +149 -0
- data/library/dxf/bin/processing/dxf/RawDXF.class +0 -0
- data/library/dxf/dxfviewer.jar +0 -0
- data/library/dxf/library/dxf.jar +0 -0
- data/library/javascript/library/export.txt +6 -0
- data/library/javascript/library/javascript.jar +0 -0
- data/library/minim/library/jl1.0.jar +0 -0
- data/library/minim/library/jsminim.jar +0 -0
- data/library/minim/library/minim-spi.jar +0 -0
- data/library/minim/library/minim.jar +0 -0
- data/library/minim/library/mp3spi1.9.4.jar +0 -0
- data/library/minim/library/tritonus_aos.jar +0 -0
- data/library/minim/library/tritonus_share.jar +0 -0
- data/library/minim/license.txt +339 -0
- data/library/minim/version.txt +1 -0
- data/library/net/bin/processing/net/Client.class +0 -0
- data/library/net/bin/processing/net/Server.class +0 -0
- data/library/net/library/net.jar +0 -0
- data/library/opengl/bin/processing/opengl/PGraphicsOpenGL$ImageCache.class +0 -0
- data/library/opengl/bin/processing/opengl/PGraphicsOpenGL$TessCallback.class +0 -0
- data/library/opengl/bin/processing/opengl/PGraphicsOpenGL.class +0 -0
- data/library/opengl/library/export.txt +13 -0
- data/library/opengl/library/gluegen-rt-natives-linux-amd64.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-linux-i586.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-macosx-ppc.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-macosx-universal.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-windows-amd64.jar +0 -0
- data/library/opengl/library/gluegen-rt-natives-windows-i586.jar +0 -0
- data/library/opengl/library/gluegen-rt.dll +0 -0
- data/library/opengl/library/gluegen-rt.jar +0 -0
- data/library/opengl/library/gluegen-rt.jar.pack.gz +0 -0
- data/library/opengl/library/jogl-natives-linux-amd64.jar +0 -0
- data/library/opengl/library/jogl-natives-linux-i586.jar +0 -0
- data/library/opengl/library/jogl-natives-macosx-ppc.jar +0 -0
- data/library/opengl/library/jogl-natives-macosx-universal.jar +0 -0
- data/library/opengl/library/jogl-natives-windows-amd64.jar +0 -0
- data/library/opengl/library/jogl-natives-windows-i586.jar +0 -0
- data/library/opengl/library/jogl.dll +0 -0
- data/library/opengl/library/jogl.jar +0 -0
- data/library/opengl/library/jogl.jar.pack.gz +0 -0
- data/library/opengl/library/jogl_awt.dll +0 -0
- data/library/opengl/library/jogl_cg.dll +0 -0
- data/library/opengl/library/libgluegen-rt.jnilib +0 -0
- data/library/opengl/library/libgluegen-rt.so +0 -0
- data/library/opengl/library/libjogl.jnilib +0 -0
- data/library/opengl/library/libjogl.so +0 -0
- data/library/opengl/library/libjogl_awt.jnilib +0 -0
- data/library/opengl/library/libjogl_awt.so +0 -0
- data/library/opengl/library/libjogl_cg.jnilib +0 -0
- data/library/opengl/library/libjogl_cg.so +0 -0
- data/library/opengl/library/opengl.jar +0 -0
- data/library/pdf/bin/processing/pdf/PGraphicsPDF.class +0 -0
- data/library/pdf/library/itext.jar +0 -0
- data/library/pdf/library/pdf.jar +0 -0
- data/library/pdf/notes.txt +9 -0
- data/library/serial/bin/processing/serial/Serial.class +0 -0
- data/library/serial/library/RXTXcomm.jar +0 -0
- data/library/serial/library/export.txt +3 -0
- data/library/serial/library/librxtxSerial.jnilib +0 -0
- data/library/serial/library/librxtxSerial.so +0 -0
- data/library/serial/library/rxtxSerial.dll +0 -0
- data/library/serial/library/serial.jar +0 -0
- data/library/video/bin/processing/video/Capture.class +0 -0
- data/library/video/bin/processing/video/Movie.class +0 -0
- data/library/video/bin/processing/video/MovieMaker.class +0 -0
- data/library/video/library/video.jar +0 -0
- data/samples/animator.rb +47 -0
- data/samples/circle_collision.rb +213 -0
- data/samples/fern.rb +49 -0
- data/samples/flight_patterns.rb +64 -0
- data/samples/full_screen.rb +35 -0
- data/samples/getting_started.rb +43 -0
- data/samples/jwishy.rb +85 -0
- data/samples/kinetic_type.rb +100 -0
- data/samples/learning_processing/ABOUT +11 -0
- data/samples/learning_processing/chapter_01/1_stroke_and_fill.rb +34 -0
- data/samples/learning_processing/chapter_01/2_nofill.rb +25 -0
- data/samples/learning_processing/chapter_01/3_rgb_color.rb +31 -0
- data/samples/learning_processing/chapter_01/4_alpha_transparency.rb +36 -0
- data/samples/learning_processing/chapter_01/5_zoog.rb +37 -0
- data/samples/learning_processing/chapter_02/1_zoog_again.rb +39 -0
- data/samples/learning_processing/chapter_03/1_zoog_as_dynamic_sketch.rb +44 -0
- data/samples/learning_processing/chapter_03/2_mouse_x_and_mouse_y.rb +26 -0
- data/samples/learning_processing/chapter_03/3_zoog_as_dynamic_sketch_with_variation.rb +41 -0
- data/samples/learning_processing/chapter_03/4_drawing_a_continuous_line.rb +18 -0
- data/samples/learning_processing/chapter_03/5_mouse_pressed_and_key_pressed.rb +29 -0
- data/samples/learning_processing/chapter_03/6_interactive_zoog.rb +50 -0
- data/samples/learning_processing/chapter_04/1_variable_declaration.rb +24 -0
- data/samples/learning_processing/chapter_04/2_using_variables.rb +27 -0
- data/samples/learning_processing/chapter_04/3_varying_variables.rb +27 -0
- data/samples/learning_processing/chapter_04/4_many_variables.rb +38 -0
- data/samples/learning_processing/chapter_04/5_using_system_variables.rb +28 -0
- data/samples/learning_processing/chapter_04/6_ellipse_with_variables.rb +24 -0
- data/samples/learning_processing/chapter_04/7_filling_variables_with_random_values.rb +27 -0
- data/samples/learning_processing/chapter_04/8_variable_zoog.rb +50 -0
- data/samples/learning_processing/chapter_05/01_conditionals.rb +31 -0
- data/samples/learning_processing/chapter_05/02_more_conditionals.rb +38 -0
- data/samples/learning_processing/chapter_05/03_rollovers.rb +34 -0
- data/samples/learning_processing/chapter_05/04_hold_down_the_button.rb +33 -0
- data/samples/learning_processing/chapter_05/05_button_as_switch.rb +39 -0
- data/samples/learning_processing/chapter_05/06_bouncing_ball.rb +33 -0
- data/samples/learning_processing/chapter_05/07_bouncing_color.rb +37 -0
- data/samples/learning_processing/chapter_05/08_square_following_edge.rb +59 -0
- data/samples/learning_processing/chapter_05/09_simple_gravity.rb +43 -0
- data/samples/learning_processing/chapter_05/10_zoog_and_conditionals.rb +53 -0
- data/samples/learning_processing/chapter_06/01_many_lines.rb +29 -0
- data/samples/learning_processing/chapter_06/02_many_lines_with_variables.rb +53 -0
- data/samples/learning_processing/chapter_06/03_while_loop.rb +30 -0
- data/samples/learning_processing/chapter_06/04_infinite_loop.rb +25 -0
- data/samples/learning_processing/chapter_06/05_another_infinite_loop.rb +33 -0
- data/samples/learning_processing/chapter_06/06_legs_with_a_for_loop.rb +41 -0
- data/samples/learning_processing/chapter_06/07_local_variables.rb +39 -0
- data/samples/learning_processing/chapter_06/08_lines_one_at_a_time.rb +30 -0
- data/samples/learning_processing/chapter_06/09_simple_while_loop_with_interactivity.rb +41 -0
- data/samples/learning_processing/chapter_06/10_zoog_with_arms.rb +56 -0
- data/samples/learning_processing/chapter_06/11_multiple_zoogs.rb +46 -0
- data/samples/learning_processing/chapter_07/01_defining_a_function.rb +22 -0
- data/samples/learning_processing/chapter_07/02_calling_a_function.rb +22 -0
- data/samples/learning_processing/chapter_07/03_bouncing_ball_with_functions.rb +49 -0
- data/samples/learning_processing/chapter_07/04_function_returns_distance.rb +48 -0
- data/samples/learning_processing/chapter_07/05_zoog_with_functions.rb +71 -0
- data/samples/learning_processing/chapter_08/01_car_class_and_car_variable.rb +45 -0
- data/samples/learning_processing/chapter_08/02_two_car_objects.rb +60 -0
- data/samples/learning_processing/chapter_08/03_object_oriented_zoog.rb +81 -0
- data/samples/learning_processing/chapter_10/01_catcher.rb +35 -0
- data/samples/learning_processing/chapter_10/02_bouncing_ball.rb +44 -0
- data/samples/learning_processing/chapter_10/03_bouncing_balls_with_intersection.rb +69 -0
- data/samples/learning_processing/chapter_10/04_a_timer.rb +24 -0
- data/samples/learning_processing/chapter_10/05_object_oriented_timer.rb +42 -0
- data/samples/learning_processing/chapter_10/06_simple_raindrop.rb +23 -0
- data/samples/learning_processing/chapter_10/07_drops_one_at_a_time.rb +63 -0
- data/samples/learning_processing/chapter_13/02_random_number_distribution.rb +24 -0
- data/samples/learning_processing/chapter_13/03_probabilities.rb +33 -0
- data/samples/learning_processing/chapter_13/04_perlin_noise.rb +22 -0
- data/samples/learning_processing/chapter_13/06_oscillation.rb +29 -0
- data/samples/learning_processing/chapter_13/07_wave.rb +31 -0
- data/samples/learning_processing/chapter_13/08_recursion.rb +30 -0
- data/samples/learning_processing/chapter_13/09_two_dimensional_array.rb +21 -0
- data/samples/learning_processing/chapter_13/10_two_dimensional_array_with_objects.rb +54 -0
- data/samples/learning_processing/chapter_14/01_growing_rectangle.rb +26 -0
- data/samples/learning_processing/chapter_14/02_multiple_translations.rb +37 -0
- data/samples/learning_processing/chapter_14/03_depth_rectangle.rb +29 -0
- data/samples/learning_processing/chapter_14/04_pyramid_using_beingshape.rb +55 -0
- data/samples/learning_processing/chapter_14/05_rotate_rectangle_around_center.rb +28 -0
- data/samples/learning_processing/chapter_14/06_rotate_z.rb +24 -0
- data/samples/learning_processing/chapter_14/07_rotate_x.rb +24 -0
- data/samples/learning_processing/chapter_14/08_rotate_y.rb +24 -0
- data/samples/learning_processing/chapter_14/09_rotate_all.rb +24 -0
- data/samples/learning_processing/chapter_14/10_draw_pyramid.rb +59 -0
- data/samples/learning_processing/chapter_14/12_rotating_one_square.rb +25 -0
- data/samples/learning_processing/chapter_14/13_rotating_another_square.rb +25 -0
- data/samples/learning_processing/chapter_14/14_rotating_both_squares.rb +43 -0
- data/samples/learning_processing/chapter_14/15_rotating_many_things.rb +56 -0
- data/samples/learning_processing/chapter_14/16_simple_solar_system.rb +53 -0
- data/samples/learning_processing/chapter_14/17_nested_push_and_pop.rb +50 -0
- data/samples/learning_processing/chapter_14/18_object_oriented_solar_system.rb +69 -0
- data/samples/learning_processing/chapter_15/01_hello_world_image.rb +20 -0
- data/samples/learning_processing/chapter_15/02_image_sprite.rb +29 -0
- data/samples/learning_processing/chapter_15/03_swapping_images.rb +25 -0
- data/samples/learning_processing/chapter_15/04_image_sequence.rb +22 -0
- data/samples/learning_processing/chapter_15/05_setting_pixels.rb +19 -0
- data/samples/learning_processing/chapter_15/06_pixels_2d.rb +29 -0
- data/samples/learning_processing/chapter_15/07_image_pixels.rb +40 -0
- data/samples/learning_processing/chapter_15/08_image_brightness.rb +29 -0
- data/samples/learning_processing/chapter_15/09_flashlight_effect.rb +42 -0
- data/samples/learning_processing/chapter_15/10_brightness_threshold.rb +33 -0
- data/samples/learning_processing/chapter_15/11_brightness_threshold_with_filter.rb +20 -0
- data/samples/learning_processing/chapter_15/12_pixel_neighbour_differences.rb +43 -0
- data/samples/learning_processing/chapter_15/14_pointillism.rb +34 -0
- data/samples/learning_processing/chapter_15/15_2d_image_mapped_to_3d.rb +43 -0
- data/samples/learning_processing/chapter_15/data/animal0.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal1.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal2.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal3.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal4.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal5.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/animal6.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/face.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/mysummervacation.jpg +0 -0
- data/samples/learning_processing/chapter_15/data/sunflower.jpg +0 -0
- data/samples/learning_processing/chapter_16/01_display_video.rb +25 -0
- data/samples/learning_processing/chapter_16/02_manipulate_video_image.rb +24 -0
- data/samples/reflection.rb +26 -0
- data/samples/simple_buffer.rb +49 -0
- data/samples/tree.rb +83 -0
- metadata +348 -0
data/CHANGELOG
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
v1.0.1 Gemmin' it up.
|
2
|
+
* The smallest version bump is the biggest change:
|
3
|
+
Ruby-Processing has undergone a great refactor, kicked off by
|
4
|
+
Peter Gassner's initial efforts to make a gem out of it. Now
|
5
|
+
available as a real RubyGem.
|
6
|
+
|
7
|
+
* Changes all around: The main interface to Ruby-Processing is now
|
8
|
+
through the 'rp5' command. Try rp5 --help to get started.
|
9
|
+
|
10
|
+
* has_slider has been superseded by control_panel, a more full-
|
11
|
+
fledged library for controlling aspects of your sketch. Read
|
12
|
+
how to use it on the wiki, or check out jwishy.rb
|
13
|
+
|
14
|
+
v1.0. Ruby-Processing goes 1.0 with Processing 1.0
|
15
|
+
* Processing updated to 1.0.1 (congrats to the Processing team),
|
16
|
+
and JRuby updated to the latest trunk. Most sketches run a good
|
17
|
+
bit faster now.
|
18
|
+
|
19
|
+
* Ruby-Processing now comes with many default libraries: Boids, DXF,
|
20
|
+
Javascript, Minim, Net, OpenGL, PDF, Serial, Slider, and Video
|
21
|
+
are now included in the download.
|
22
|
+
|
23
|
+
* has_slider moved out into an included ruby library.
|
24
|
+
|
25
|
+
v0.9. Multi-platform Application export, live coding, and more.
|
26
|
+
* Inspired by NodeBox, Ruby-Processing now sports the ability
|
27
|
+
to have sliders control numeric variables in your sketches.
|
28
|
+
If you're using an instance variable, say, @speed, to control
|
29
|
+
the speed of your sketch.
|
30
|
+
|
31
|
+
has_slider :speed
|
32
|
+
|
33
|
+
Will bring up a panel alongside with a slider that controls
|
34
|
+
the speed. It can take a range of values as an optional parameter.
|
35
|
+
Check out and run jwishy.rb for an example.
|
36
|
+
|
37
|
+
* Multi-platform app export! Exporting your Ruby-Processing
|
38
|
+
apps will now create executable apps for Mac/Windows/Linux.
|
39
|
+
|
40
|
+
* Live coding support. Now you can do script/live path/to/sketch.rb
|
41
|
+
to open up an interactive session with your sketch available
|
42
|
+
as $app.
|
43
|
+
|
44
|
+
* Nick Sieger donated an additional sample.
|
45
|
+
|
46
|
+
v0.8. Exporting Applications
|
47
|
+
* Ruby-Processing can now export Mac applications! Running
|
48
|
+
script/application my_sketch.rb will create MySketch.app,
|
49
|
+
complete with all of its data and libraries. If you have
|
50
|
+
a .icns file inside of your data folder, it will become
|
51
|
+
the app's icon.
|
52
|
+
|
53
|
+
* Added a mathematical Fern sample. It's a port of Luis
|
54
|
+
Correia's java original, with algorithms from Wikipedia.
|
55
|
+
|
56
|
+
* Sketches now have a library_loaded? method, so that you can
|
57
|
+
check if a library has been started successfully, and
|
58
|
+
conditionally enable things. (Good for OpenGL.)
|
59
|
+
|
60
|
+
* The Boids library is now about 40% faster. It also comes with
|
61
|
+
an example in library/boids/samples.
|
62
|
+
|
63
|
+
* Specs have been started both for exporting and for Ruby-
|
64
|
+
Processing itself.
|
65
|
+
|
66
|
+
v0.7. Flocking Boids and OpenGL Applets
|
67
|
+
* Thanks to MenTaLguY, once again, for work on the JRubyApplet, OpenGL
|
68
|
+
is now a first-class citizen. If you're using OpenGL in your sketch,
|
69
|
+
the applet exporter should just work. It has also been moved and
|
70
|
+
renamed, so now you can use it like:
|
71
|
+
|
72
|
+
script/applet my_sketch.rb
|
73
|
+
|
74
|
+
* An app generator has been added for getting started. It'll give you
|
75
|
+
a template for an empty Ruby-Processing sketch, with setup and draw
|
76
|
+
methods and all that. Usage:
|
77
|
+
|
78
|
+
script/generate my_sketch 800 600
|
79
|
+
|
80
|
+
Will create a file called my_sketch.rb, with a title of "My Sketch",
|
81
|
+
800 pixels wide and 600 pixels tall. Width and height are optional.
|
82
|
+
|
83
|
+
* Ruby-Processing now includes its first pure-Ruby library, a port
|
84
|
+
of Tom de Smedt's "Boids", for algorithmic flocking.
|
85
|
+
|
86
|
+
v0.6. Generating Applets
|
87
|
+
* Now we're baking up some applet pie. The applet_tree script will
|
88
|
+
take your Ruby-Processing sketch, export it as an applet, and
|
89
|
+
generate an HTML page for you to post. It's way easier now than it
|
90
|
+
would have been before. (thanks to MenTaLguY.) Use it like so:
|
91
|
+
|
92
|
+
./applet_tree my_sketch.rb
|
93
|
+
|
94
|
+
But there are caveats: Applets don't work with native libraries, so
|
95
|
+
no OpenGL. If you're requiring other files that aren't part of the
|
96
|
+
standard Ruby distro, you'll need to include them as libraries, which
|
97
|
+
means: Drop them in a folder inside of "library". Use
|
98
|
+
load_ruby_library("folder_name") or load_java_library() to load 'em.
|
99
|
+
These methods replace the previous load_library(). Ruby libs will
|
100
|
+
load the .rb with the same name as the folder. Java libs will just
|
101
|
+
load up all of the .jars in the folder.
|
102
|
+
|
103
|
+
Demos — all of the standard samples are available as applets:
|
104
|
+
http://fiercefrontiers.com/applets/jwishy/
|
105
|
+
http://fiercefrontiers.com/applets/tree/
|
106
|
+
http://fiercefrontiers.com/applets/circle_collision/
|
107
|
+
http://fiercefrontiers.com/applets/reflection/
|
108
|
+
|
109
|
+
|
110
|
+
v0.5. With Native Libraries
|
111
|
+
* Ruby-Processing gets easy native library support. Now you can take
|
112
|
+
Processing libraries, drop them in the library folder, and load them
|
113
|
+
up like so (inside your sketch):
|
114
|
+
|
115
|
+
load_library "opengl"
|
116
|
+
|
117
|
+
It works by loading up all of the .jars in that folder, and setting
|
118
|
+
the java.library.path to that folder, so that the native extensions
|
119
|
+
can be found.
|
120
|
+
|
121
|
+
* Full Screen OpenGL demo added, but you'll need to copy over the
|
122
|
+
OpenGL library to use it.
|
123
|
+
|
124
|
+
v0.4. Going Fullscreen
|
125
|
+
* Ruby-Processing goes fullscreen. Just pass :full_screen => true
|
126
|
+
into the options when you’re starting up your app. Like so:
|
127
|
+
|
128
|
+
MyApp.new(:title => "MyApp", :full_screen => true)
|
129
|
+
|
130
|
+
* Because Processing has just so many methods, you can now search
|
131
|
+
through them: find_method "method_name"
|
132
|
+
|
133
|
+
v0.3. First Real Release
|
134
|
+
* Processing::App.current will give you a handle on the app. (Useful
|
135
|
+
in jirb).
|
136
|
+
* samples/jwishy.rb has some new hooks for live coding.
|
137
|
+
* circle_collision and tree samples added (Joe Holt)
|
data/LICENSE
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
Ruby-Processing is released under the MIT License.
|
2
|
+
You can do pretty much whatever you'd like with it.
|
3
|
+
|
4
|
+
====================================================
|
5
|
+
|
6
|
+
Copyright (c) 2008 omygawshkenas
|
7
|
+
|
8
|
+
Permission is hereby granted, free of charge,
|
9
|
+
to any person obtaining a copy of this software
|
10
|
+
and associated documentation files (the "Software"),
|
11
|
+
to deal in the Software without restriction,
|
12
|
+
including without limitation the rights to use,
|
13
|
+
copy, modify, merge, publish, distribute, sublicense,
|
14
|
+
and/or sell copies of the Software, and to permit
|
15
|
+
persons to whom the Software is furnished to do so,
|
16
|
+
subject to the following conditions:
|
17
|
+
|
18
|
+
The above copyright notice and this permission
|
19
|
+
notice shall be included in all copies or substantial
|
20
|
+
portions of the Software.
|
21
|
+
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY
|
23
|
+
OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
24
|
+
LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
25
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
26
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
27
|
+
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
28
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
29
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
30
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
31
|
+
|
32
|
+
====================================================
|
33
|
+
|
34
|
+
Ruby-Processing also distributes core components
|
35
|
+
of both JRuby and Processing, which are licensed
|
36
|
+
under the GNU Lesser General Public License.
|
37
|
+
|
data/README
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
=
|
2
|
+
____ _ ____ _
|
3
|
+
| _ \ _ _| |__ _ _ | _ \ _ __ ___ ___ ___ ___ ___(_)_ __ __ _
|
4
|
+
| |_) | | | | '_ \| | | |_____| |_) | '__/ _ \ / __/ _ \/ __/ __| | '_ \ / _` |
|
5
|
+
| _ <| |_| | |_) | |_| |_____| __/| | | (_) | (_| __/\__ \__ \ | | | | (_| |
|
6
|
+
|_| \_\\__,_|_.__/ \__, | |_| |_| \___/ \___\___||___/___/_|_| |_|\__, |
|
7
|
+
|___/ |___/
|
8
|
+
|
9
|
+
|
10
|
+
Ruby-Processing is a Ruby wrapper for the Processing code art framework. It's
|
11
|
+
this thin little shim that squeezes between Processing and JRuby, passing
|
12
|
+
along some neat goodies like:
|
13
|
+
|
14
|
+
* Applet and Application exporting of your sketches. Hand them out to
|
15
|
+
your party guests, ready-to-run.
|
16
|
+
|
17
|
+
* Live Coding via JRuby's IRB. Loads in your sketch so you can futz with
|
18
|
+
variables and remake methods on the fly.
|
19
|
+
|
20
|
+
* A "Control Panel" library, so that you can easily create sliders, buttons,
|
21
|
+
checkboxes and drop-down menus, and hook them into your sketch's instance
|
22
|
+
variables.
|
23
|
+
|
24
|
+
* "Watch" mode, where Ruby-Processing keeps an eye on your sketch and reloads
|
25
|
+
it from scratch every time you make a change. A pretty nice REPL-ish way
|
26
|
+
to work on your Processing sketches.
|
27
|
+
|
28
|
+
If some quality time with Ruby is your idea of a pleasant afternoon, or you
|
29
|
+
harbor ambitions of entering the fast-paced and not altogether cutthroat world
|
30
|
+
of Code Art, then Ruby-Processing is probably something you should try on for
|
31
|
+
size. You can grab it as a gem:
|
32
|
+
|
33
|
+
sudo gem install ruby-processing
|
34
|
+
|
35
|
+
|
36
|
+
~ But Processing? ~
|
37
|
+
|
38
|
+
Processing is an MIT-developed framework for making little code artifacts,
|
39
|
+
animations, visualizations, and the like, developed originally by Ben Fry
|
40
|
+
and Casey Reas, supported by a small army of open-source contributors.
|
41
|
+
Processing has become a sort of standard for visually-oriented programming,
|
42
|
+
strongly influencing the designs of Nodebox, Shoes, Arduino, and other kindred
|
43
|
+
projects. For more information, take a look at http://processing.org/
|
44
|
+
|
45
|
+
|
46
|
+
~ What does it look like? How does it smell? ~
|
47
|
+
|
48
|
+
Processing provides a tidy API, with a bunch of handy methods you can call
|
49
|
+
from Ruby-Processing. Here's a smattering:
|
50
|
+
|
51
|
+
alpha, arc, background, blend, blue, ellipse, frame_rate, hue, lerp,
|
52
|
+
load_image, load_pixels, mouse_pressed, noise, rect, saturation, shape,
|
53
|
+
smooth, text_align, translate, triangle...
|
54
|
+
|
55
|
+
And so on, and so forth. See the full list here:
|
56
|
+
http://www.processing.org/reference/index_ext.html
|
57
|
+
|
58
|
+
~ How can I learn more? ~
|
59
|
+
|
60
|
+
For full, up-to-date info, always check the wiki:
|
61
|
+
http://wiki.github.com/jashkenas/ruby-processing
|
data/bin/rp5
ADDED
data/lib/core/core.jar
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Ruby-Processing is for Code Art.
|
2
|
+
# Send suggestions, ideas, and hate-mail to jashkenas [at] gmail.com
|
3
|
+
# Also, send samples and libraries.
|
4
|
+
|
5
|
+
unless defined? RP5_ROOT
|
6
|
+
$LOAD_PATH << File.expand_path(File.dirname(__FILE__))
|
7
|
+
RP5_ROOT = File.expand_path(File.dirname(__FILE__) + "/../")
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'ruby-processing/helpers/string'
|
11
|
+
|
12
|
+
# The top-level namespace, a home for all Ruby-Processing classes.
|
13
|
+
module Processing
|
14
|
+
VERSION = [1,0,1]
|
15
|
+
|
16
|
+
# Returns the current version of Ruby-Processing.
|
17
|
+
def self.version
|
18
|
+
VERSION.join('.')
|
19
|
+
end
|
20
|
+
|
21
|
+
autoload :App, 'ruby-processing/app'
|
22
|
+
autoload :Runner, 'ruby-processing/runner'
|
23
|
+
autoload :Creator, 'ruby-processing/exporters/creator'
|
24
|
+
autoload :BaseExporter, 'ruby-processing/exporters/base_exporter'
|
25
|
+
autoload :AppletExporter, 'ruby-processing/exporters/applet_exporter'
|
26
|
+
autoload :ApplicationExporter, 'ruby-processing/exporters/application_exporter'
|
27
|
+
end
|
@@ -0,0 +1,358 @@
|
|
1
|
+
# This class is a thin wrapper around Processing's PApplet.
|
2
|
+
# Most of the code here is for interfacing with Swing,
|
3
|
+
# web applets, going fullscreen and so on.
|
4
|
+
|
5
|
+
require 'java'
|
6
|
+
|
7
|
+
module Processing
|
8
|
+
|
9
|
+
# Conditionally load core.jar
|
10
|
+
require "#{RP5_ROOT}/lib/core/core.jar" unless Object.const_defined?(:JRUBY_APPLET)
|
11
|
+
include_package "processing.core"
|
12
|
+
|
13
|
+
# This is the main Ruby-Processing class, and is what you'll
|
14
|
+
# inherit from when you create a sketch. This class can call
|
15
|
+
# all of the methods available in Processing, and has two
|
16
|
+
# mandatory methods, 'setup' and 'draw', both of which you
|
17
|
+
# should define in your sketch. 'setup' will be called one
|
18
|
+
# time when the sketch is first loaded, and 'draw' will be
|
19
|
+
# called constantly, for every frame.
|
20
|
+
class App < PApplet
|
21
|
+
include Math
|
22
|
+
|
23
|
+
include_class "javax.swing.JFrame"
|
24
|
+
|
25
|
+
# Alias some methods for familiarity for Shoes coders.
|
26
|
+
attr_accessor :frame, :title
|
27
|
+
alias_method :oval, :ellipse
|
28
|
+
alias_method :stroke_width, :stroke_weight
|
29
|
+
alias_method :rgb, :color
|
30
|
+
alias_method :gray, :color
|
31
|
+
|
32
|
+
# Watch the definition of these methods, to make sure
|
33
|
+
# that Processing is able to call them during events.
|
34
|
+
METHODS_TO_WATCH_FOR = {
|
35
|
+
:mouse_pressed => :mousePressed,
|
36
|
+
:mouse_dragged => :mouseDragged,
|
37
|
+
:mouse_clicked => :mouseClicked,
|
38
|
+
:mouse_moved => :mouseMoved,
|
39
|
+
:mouse_released => :mouseReleased,
|
40
|
+
:key_pressed => :keyPressed,
|
41
|
+
:key_released => :keyReleased,
|
42
|
+
:key_typed => :keyTyped
|
43
|
+
}
|
44
|
+
|
45
|
+
|
46
|
+
def self.method_added(method_name) #:nodoc:
|
47
|
+
if METHODS_TO_WATCH_FOR.keys.include?(method_name)
|
48
|
+
alias_method METHODS_TO_WATCH_FOR[method_name], method_name
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
# Class methods that we should make available in the instance.
|
54
|
+
[:map, :pow, :norm, :lerp, :second, :minute, :hour, :day, :month, :year,
|
55
|
+
:sq, :constrain, :dist, :blend_color].each do |meth|
|
56
|
+
method = <<-EOS
|
57
|
+
def #{meth}(*args)
|
58
|
+
self.class.#{meth}(*args)
|
59
|
+
end
|
60
|
+
EOS
|
61
|
+
eval method
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
def self.current=(app); @current_app = app; end
|
66
|
+
def self.current; @current_app; end
|
67
|
+
|
68
|
+
|
69
|
+
# Are we running inside an applet?
|
70
|
+
def self.online?
|
71
|
+
@online ||= Object.const_defined?(:JRUBY_APPLET)
|
72
|
+
end
|
73
|
+
def online?; self.class.online?; end
|
74
|
+
|
75
|
+
|
76
|
+
# Detect if a library has been loaded (for conditional loading)
|
77
|
+
@@loaded_libraries = Hash.new(false)
|
78
|
+
def self.library_loaded?(folder)
|
79
|
+
@@loaded_libraries[folder.to_sym]
|
80
|
+
end
|
81
|
+
def library_loaded?(folder); self.class.library_loaded?(folder); end
|
82
|
+
|
83
|
+
|
84
|
+
# Load a list of Ruby or Java libraries (in that order)
|
85
|
+
# Usage: load_libraries :opengl, :boids
|
86
|
+
#
|
87
|
+
# If a library is put into a 'library' folder next to the sketch it will
|
88
|
+
# be used instead of the library that ships with Ruby-Processing.
|
89
|
+
def self.load_libraries(*args)
|
90
|
+
args.each {|lib| load_ruby_library(lib) || load_java_library(lib) }
|
91
|
+
end
|
92
|
+
def self.load_library(*args); self.load_libraries(*args); end
|
93
|
+
|
94
|
+
# For pure ruby libraries.
|
95
|
+
# The library should have an initialization ruby file
|
96
|
+
# of the same name as the library folder.
|
97
|
+
def self.load_ruby_library(dir)
|
98
|
+
dir = dir.to_sym
|
99
|
+
return true if @@loaded_libraries[dir]
|
100
|
+
return @@loaded_libraries[dir] = (require "library/#{dir}/#{dir}") if online?
|
101
|
+
local_path = "#{Dir.pwd}/library/#{dir}"
|
102
|
+
gem_path = "#{RP5_ROOT}/library/#{dir}"
|
103
|
+
path = File.exists?(local_path) ? local_path : gem_path
|
104
|
+
return false unless (File.exists?("#{path}/#{dir}.rb"))
|
105
|
+
return @@loaded_libraries[dir] = (require "#{path}/#{dir}")
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
# For pure java libraries, such as the ones that are available
|
110
|
+
# on this page: http://processing.org/reference/libraries/index.html
|
111
|
+
#
|
112
|
+
# P.S. -- Loading libraries which include native code needs to
|
113
|
+
# hack the Java ClassLoader, so that you don't have to
|
114
|
+
# futz with your PATH. But it's probably bad juju.
|
115
|
+
def self.load_java_library(dir)
|
116
|
+
dir = dir.to_sym
|
117
|
+
return true if @@loaded_libraries[dir]
|
118
|
+
return @@loaded_libraries[dir] = !!(JRUBY_APPLET.get_parameter("archive").match(%r(#{dir}))) if online?
|
119
|
+
local_path = "#{Dir.pwd}/library/#{dir}"
|
120
|
+
gem_path = "#{RP5_ROOT}/library/#{dir}"
|
121
|
+
path = File.exists?(local_path) ? local_path : gem_path
|
122
|
+
jars = Dir.glob("#{path}/**/*.jar")
|
123
|
+
return false if jars.empty?
|
124
|
+
jars.each {|jar| require jar }
|
125
|
+
# Here goes...
|
126
|
+
library_path = java.lang.System.getProperty("java.library.path")
|
127
|
+
new_library_path = [path, "#{path}/library", library_path].join(java.io.File.pathSeparator)
|
128
|
+
java.lang.System.setProperty("java.library.path", new_library_path)
|
129
|
+
field = java.lang.Class.for_name("java.lang.ClassLoader").get_declared_field("sys_paths")
|
130
|
+
if field
|
131
|
+
field.accessible = true
|
132
|
+
field.set(java.lang.Class.for_name("java.lang.System").get_class_loader, nil)
|
133
|
+
end
|
134
|
+
return @@loaded_libraries[dir] = true
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
def self.has_slider(*args) #:nodoc:
|
139
|
+
raise "has_slider has been replaced with a nicer control_panel library. Check it out."
|
140
|
+
end
|
141
|
+
|
142
|
+
|
143
|
+
# Used by the Processing::Watcher to completely remove all
|
144
|
+
# traces of the current sketch, so that it can be loaded afresh.
|
145
|
+
def self.wipe_out_current_app!
|
146
|
+
app = Processing::App.current
|
147
|
+
return unless app
|
148
|
+
app_class_name = app.class.to_s.to_sym
|
149
|
+
app.close
|
150
|
+
Object.send(:remove_const, app_class_name)
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
# When you make a new sketch, you pass in (optionally),
|
155
|
+
# a width, height, title, and whether or not you want to
|
156
|
+
# run in full-screen.
|
157
|
+
#
|
158
|
+
# This is a little different than Processing where height
|
159
|
+
# and width are declared inside the setup method instead.
|
160
|
+
def initialize(options = {})
|
161
|
+
super()
|
162
|
+
$app = App.current = self
|
163
|
+
set_sketch_path unless online?
|
164
|
+
make_accessible_to_the_browser
|
165
|
+
options = {
|
166
|
+
:width => 400,
|
167
|
+
:height => 400,
|
168
|
+
:title => "",
|
169
|
+
:full_screen => false
|
170
|
+
}.merge(options)
|
171
|
+
@width, @height, @title = options[:width], options[:height], options[:title]
|
172
|
+
@render_mode = P2D
|
173
|
+
determine_how_to_display options
|
174
|
+
end
|
175
|
+
|
176
|
+
|
177
|
+
# Provide a loggable string to represent this sketch.
|
178
|
+
def inspect
|
179
|
+
"#<Processing::App:#{self.class}:#{@title}>"
|
180
|
+
end
|
181
|
+
|
182
|
+
|
183
|
+
# By default, your sketch path is the folder that your sketch is in.
|
184
|
+
# If you'd like to do something fancy, feel free.
|
185
|
+
def set_sketch_path(path=nil)
|
186
|
+
field = self.java_class.declared_field('sketchPath')
|
187
|
+
field.set_value(Java.ruby_to_java(self), path || File.dirname(SKETCH_PATH))
|
188
|
+
end
|
189
|
+
|
190
|
+
|
191
|
+
# There's just so many functions in Processing,
|
192
|
+
# Here's a convenient way to look for them.
|
193
|
+
def find_method(method_name)
|
194
|
+
reg = Regexp.new("#{method_name}", true)
|
195
|
+
self.methods.sort.select {|meth| reg.match(meth)}
|
196
|
+
end
|
197
|
+
|
198
|
+
|
199
|
+
# Specify what rendering Processing should use.
|
200
|
+
def render_mode(mode_const)
|
201
|
+
@render_mode = mode_const
|
202
|
+
size(@width, @height, @render_mode)
|
203
|
+
end
|
204
|
+
|
205
|
+
|
206
|
+
# Nice block method to draw to a buffer.
|
207
|
+
# You can optionally pass it a width, a height, and a renderer.
|
208
|
+
# Takes care of starting and ending the draw for you.
|
209
|
+
def buffer(buf_width=width, buf_height=height, renderer=@render_mode)
|
210
|
+
buf = create_graphics(buf_width, buf_height, renderer)
|
211
|
+
buf.begin_draw
|
212
|
+
yield buf
|
213
|
+
buf.end_draw
|
214
|
+
buf
|
215
|
+
end
|
216
|
+
|
217
|
+
|
218
|
+
# A nice method to run a given block for a grid.
|
219
|
+
# Lifted from action_coding/Nodebox.
|
220
|
+
def grid(cols, rows, col_size=1, row_size=1)
|
221
|
+
(0..cols*rows).map do |i|
|
222
|
+
x = col_size * (i % cols)
|
223
|
+
y = row_size * i.div(cols)
|
224
|
+
yield x, y
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
|
229
|
+
# Fix java conversion problems getting the last key
|
230
|
+
def key
|
231
|
+
field = java_class.declared_field 'key'
|
232
|
+
app = Java.ruby_to_java self
|
233
|
+
field.value app
|
234
|
+
end
|
235
|
+
|
236
|
+
|
237
|
+
# From ROP. Turns a color hash-string into hexadecimal, for Processing.
|
238
|
+
def hex(value)
|
239
|
+
value[1..-1].hex + 0xff000000
|
240
|
+
end
|
241
|
+
|
242
|
+
|
243
|
+
# Fields that should be made accessible as under_scored.
|
244
|
+
def mouse_x; mouseX; end
|
245
|
+
def mouse_y; mouseY; end
|
246
|
+
def pmouse_x; pmouseX; end
|
247
|
+
def pmouse_y; pmouseY; end
|
248
|
+
def frame_count; frameCount; end
|
249
|
+
def mouse_button; mouseButton; end
|
250
|
+
def key_code; keyCode; end
|
251
|
+
|
252
|
+
|
253
|
+
# Is the mouse pressed for this frame?
|
254
|
+
def mouse_pressed?
|
255
|
+
Java.java_to_primitive(java_class.field("mousePressed").value(java_object))
|
256
|
+
end
|
257
|
+
|
258
|
+
|
259
|
+
# Is a key pressed for this frame?
|
260
|
+
def key_pressed?
|
261
|
+
Java.java_to_primitive(java_class.field("keyPressed").value(java_object))
|
262
|
+
end
|
263
|
+
|
264
|
+
|
265
|
+
# lerp_color takes three or four arguments, in Java that's two
|
266
|
+
# different methods, one regular and one static, so:
|
267
|
+
def lerp_color(*args)
|
268
|
+
args.length > 3 ? self.class.lerp_color(*args) : super(*args)
|
269
|
+
end
|
270
|
+
|
271
|
+
|
272
|
+
# Cleanly close and shutter a running sketch.
|
273
|
+
def close
|
274
|
+
Processing::App.current = nil
|
275
|
+
control_panel.remove if respond_to?(:control_panel) && !online?
|
276
|
+
container = (@frame || JRUBY_APPLET)
|
277
|
+
container.remove(self)
|
278
|
+
self.destroy
|
279
|
+
container.dispose
|
280
|
+
end
|
281
|
+
|
282
|
+
|
283
|
+
def quit
|
284
|
+
exit
|
285
|
+
end
|
286
|
+
|
287
|
+
|
288
|
+
private
|
289
|
+
|
290
|
+
# Tests to see which display method should run.
|
291
|
+
def determine_how_to_display(options)
|
292
|
+
if online? # Then display it in an applet.
|
293
|
+
display_in_an_applet
|
294
|
+
elsif options[:full_screen] # Then display it fullscreen.
|
295
|
+
graphics_env = java.awt.GraphicsEnvironment.get_local_graphics_environment.get_default_screen_device
|
296
|
+
graphics_env.is_full_screen_supported ? display_full_screen(graphics_env) : display_in_a_window
|
297
|
+
else # Then display it in a window.
|
298
|
+
display_in_a_window
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
|
303
|
+
def display_full_screen(graphics_env)
|
304
|
+
@frame = java.awt.Frame.new
|
305
|
+
mode = graphics_env.display_mode
|
306
|
+
@width, @height = mode.get_width, mode.get_height
|
307
|
+
gc = graphics_env.get_default_configuration
|
308
|
+
@frame.set_undecorated true
|
309
|
+
@frame.set_background java.awt.Color.black
|
310
|
+
@frame.set_layout java.awt.BorderLayout.new
|
311
|
+
@frame.add(self, java.awt.BorderLayout::CENTER)
|
312
|
+
@frame.pack
|
313
|
+
graphics_env.set_full_screen_window @frame
|
314
|
+
@frame.set_location(0, 0)
|
315
|
+
@frame.show
|
316
|
+
self.init
|
317
|
+
self.request_focus
|
318
|
+
end
|
319
|
+
|
320
|
+
|
321
|
+
def display_in_a_window
|
322
|
+
@frame = JFrame.new(@title)
|
323
|
+
@frame.add(self)
|
324
|
+
@frame.setSize(@width, @height + 22)
|
325
|
+
@frame.setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE)
|
326
|
+
@frame.setResizable(false)
|
327
|
+
@frame.show
|
328
|
+
self.init
|
329
|
+
end
|
330
|
+
|
331
|
+
|
332
|
+
def display_in_an_applet
|
333
|
+
JRUBY_APPLET.set_size(@width, @height)
|
334
|
+
JRUBY_APPLET.background_color = nil
|
335
|
+
JRUBY_APPLET.double_buffered = false
|
336
|
+
JRUBY_APPLET.add self
|
337
|
+
JRUBY_APPLET.validate
|
338
|
+
# Add the callbacks to peacefully expire.
|
339
|
+
JRUBY_APPLET.on_stop { self.stop }
|
340
|
+
JRUBY_APPLET.on_destroy { self.destroy }
|
341
|
+
self.init
|
342
|
+
end
|
343
|
+
|
344
|
+
|
345
|
+
# When the net library is included, we make the Ruby interpreter
|
346
|
+
# accessible to javascript as the 'ruby' variable. From javascript,
|
347
|
+
# you can call evalScriptlet() to run code against the sketch.
|
348
|
+
def make_accessible_to_the_browser
|
349
|
+
return unless library_loaded?('net') && online?
|
350
|
+
field = java.lang.Class.for_name("org.jruby.JRubyApplet").get_declared_field("runtime")
|
351
|
+
field.set_accessible true
|
352
|
+
ruby = field.get(JRUBY_APPLET)
|
353
|
+
window = Java::netscape.javascript.JSObject.get_window(JRUBY_APPLET)
|
354
|
+
window.set_member('ruby', ruby)
|
355
|
+
end
|
356
|
+
|
357
|
+
end
|
358
|
+
end
|