Class: Processing::App
- Inherits:
-
PApplet
- Object
- PApplet
- Processing::App
- Includes:
- Math, HelperMethods
- Defined in:
- lib/ruby-processing/app.rb
Overview
This is the main Ruby-Processing class, and is what you’ll inherit from when you create a sketch. This class can call all of the methods available in Processing, and has two mandatory methods, ‘setup’ and ‘draw’, both of which you should define in your sketch. ‘setup’ will be called one time when the sketch is first loaded, and ‘draw’ will be called constantly, for every frame.
Constant Summary collapse
- @@full_screen =
false
- @@library_loader =
LibraryLoader.new
Class Method Summary collapse
- .full_screen ⇒ Object
-
.has_slider(*args) ⇒ Object
:nodoc:.
-
.inherited(subclass) ⇒ Object
Keep track of what inherits from the Processing::App, because we’re going to want to instantiate one.
- .library_loaded?(library_name) ⇒ Boolean
- .load_java_library(*args) ⇒ Object
- .load_libraries(*args) ⇒ Object (also: load_library)
- .load_ruby_library(*args) ⇒ Object
-
.method_added(method_name) ⇒ Object
When certain special methods get added to the sketch, we need to let Processing call them by their expected Java names.
-
.sketch_class ⇒ Object
Handy getters and setters on the class go here:.
Instance Method Summary collapse
-
#close ⇒ Object
Cleanly close and shutter a running sketch.
- #full_screen? ⇒ Boolean
- #handleDraw ⇒ Object
- #hint(*args) ⇒ Object
-
#initialize(options = {}) ⇒ App
constructor
When you make a new sketch, you pass in (optionally), a width, height, x, y, title, and whether or not you want to run in full-screen.
-
#inspect ⇒ Object
Provide a loggable string to represent this sketch.
- #library_loaded?(library_name) ⇒ Boolean
-
#render_mode(mode_const) ⇒ Object
Specify what rendering Processing should use, without needing to pass size.
-
#size(*args) ⇒ Object
We override size to support setting full_screen and to keep our internal @width and @height in line.
-
#start ⇒ Object
Make sure we set the size if we set it before we start the animation thread.
- #started? ⇒ Boolean
Methods included from HelperMethods
#buffer, #color, #find_method, #frame_count, #frame_rate, #grid, #java_self, #key, #key_code, #key_pressed?, #lerp_color, #load_strings, #mouse_button, #mouse_pressed?, #mouse_x, #mouse_y, #pmouse_x, #pmouse_y, #proxy_java_fields, #save_strings, #set_sketch_path, #sketch_path
Constructor Details
#initialize(options = {}) ⇒ App
When you make a new sketch, you pass in (optionally), a width, height, x, y, title, and whether or not you want to run in full-screen.
This is a little different than Processing where height and width are declared inside the setup method instead.
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/ruby-processing/app.rb', line 122 def initialize(={}) super() $app = self proxy_java_fields set_sketch_path unless Processing.online? mix_proxy_into_inner_classes @started = false java.lang.Thread.default_uncaught_exception_handler = proc do |thread, exception| puts(exception.class.to_s) puts(exception.) puts(exception.backtrace.collect { |trace| "\t" + trace }) close end # for the list of all available args, see # http://processing.googlecode.com/svn/trunk/processing/build/javadoc/core/processing/core/PApplet.html#runSketch%28java.lang.String[],%20processing.core.PApplet%29 args = [] @width, @height = [:width], [:height] if @@full_screen || [:full_screen] @@full_screen = true args << "--present" end @render_mode ||= JAVA2D x = [:x] || 0 y = [:y] || 0 args << "--location=#{x},#{y}" title = [:title] || File.basename(SKETCH_PATH).sub(/(\.rb|\.pde)$/, '').titleize args << title PApplet.run_sketch(args, self) end |
Class Method Details
.full_screen ⇒ Object
77 |
# File 'lib/ruby-processing/app.rb', line 77 def self.full_screen; @@full_screen = true; end |
.has_slider(*args) ⇒ Object
:nodoc:
88 89 90 |
# File 'lib/ruby-processing/app.rb', line 88 def self.(*args) #:nodoc: raise "has_slider has been replaced with a nicer control_panel library. Check it out." end |
.inherited(subclass) ⇒ Object
Keep track of what inherits from the Processing::App, because we’re going to want to instantiate one.
83 84 85 86 |
# File 'lib/ruby-processing/app.rb', line 83 def self.inherited(subclass) super(subclass) @sketch_class = subclass end |
.library_loaded?(library_name) ⇒ Boolean
99 100 101 |
# File 'lib/ruby-processing/app.rb', line 99 def library_loaded?(library_name) @@library_loader.library_loaded?(library_name) end |
.load_java_library(*args) ⇒ Object
107 108 109 |
# File 'lib/ruby-processing/app.rb', line 107 def load_java_library(*args) @@library_loader.load_java_library(*args) end |
.load_libraries(*args) ⇒ Object Also known as: load_library
94 95 96 |
# File 'lib/ruby-processing/app.rb', line 94 def load_libraries(*args) @@library_loader.load_library(*args) end |
.load_ruby_library(*args) ⇒ Object
103 104 105 |
# File 'lib/ruby-processing/app.rb', line 103 def load_ruby_library(*args) @@library_loader.load_ruby_library(*args) end |
.method_added(method_name) ⇒ Object
When certain special methods get added to the sketch, we need to let Processing call them by their expected Java names.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/ruby-processing/app.rb', line 42 def self.method_added(method_name) #:nodoc: # Watch the definition of these methods, to make sure # that Processing is able to call them during events. methods_to_alias = { :mouse_pressed => :mousePressed, :mouse_dragged => :mouseDragged, :mouse_clicked => :mouseClicked, :mouse_moved => :mouseMoved, :mouse_released => :mouseReleased, :key_pressed => :keyPressed, :key_released => :keyReleased, :key_typed => :keyTyped } if methods_to_alias.keys.include?(method_name) alias_method methods_to_alias[method_name], method_name end end |
.sketch_class ⇒ Object
Handy getters and setters on the class go here:
75 |
# File 'lib/ruby-processing/app.rb', line 75 def self.sketch_class; @sketch_class; end |
Instance Method Details
#close ⇒ Object
Cleanly close and shutter a running sketch.
212 213 214 215 216 217 218 219 220 221 |
# File 'lib/ruby-processing/app.rb', line 212 def close #$app = nil if Processing.online? JRUBY_APPLET.remove(self) else control_panel.remove if respond_to?(:control_panel) self.dispose self.frame.dispose end end |
#full_screen? ⇒ Boolean
78 |
# File 'lib/ruby-processing/app.rb', line 78 def full_screen?; @@full_screen; end |
#handleDraw ⇒ Object
197 198 199 200 201 202 203 |
# File 'lib/ruby-processing/app.rb', line 197 def handleDraw() super rescue Exception => exception puts(exception.) puts(exception.backtrace.collect { |trace| "\t" + trace }) close end |
#hint(*args) ⇒ Object
163 164 165 166 167 168 169 |
# File 'lib/ruby-processing/app.rb', line 163 def hint(*args) begin super(*args) rescue Exception => e raise e.cause end end |
#inspect ⇒ Object
Provide a loggable string to represent this sketch.
178 179 180 |
# File 'lib/ruby-processing/app.rb', line 178 def inspect "#<Processing::App:#{self.class}:#{@title}>" end |
#library_loaded?(library_name) ⇒ Boolean
112 113 114 |
# File 'lib/ruby-processing/app.rb', line 112 def library_loaded?(library_name) self.class.library_loaded?(library_name) end |
#render_mode(mode_const) ⇒ Object
Specify what rendering Processing should use, without needing to pass size.
206 207 208 209 |
# File 'lib/ruby-processing/app.rb', line 206 def render_mode(mode_const) @render_mode = mode_const size(@width, @height, @render_mode) end |
#size(*args) ⇒ Object
We override size to support setting full_screen and to keep our internal @width and @height in line.
185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/ruby-processing/app.rb', line 185 def size(*args) args[0], args[1] = screenWidth, screenHeight if @@full_screen && !args.empty? w, h, mode = *args @width = w || @width @height = h || @height @render_mode = mode || @render_mode @started = true super(*args) rescue Exception => e raise e.cause end |
#start ⇒ Object
Make sure we set the size if we set it before we start the animation thread.
172 173 174 175 |
# File 'lib/ruby-processing/app.rb', line 172 def start self.size(@width, @height) if @width && @height super() end |
#started? ⇒ Boolean
159 160 161 |
# File 'lib/ruby-processing/app.rb', line 159 def started? @started end |