ruby-processing 1.0.1
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.
- 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
|