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
-
#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
- #size(*args) ⇒ Object
-
#start ⇒ Object
Make sure we set the size if we set it before we start the animation thread.
Methods included from HelperMethods
#buffer, #color, #find_method, #frame_count, #frame_rate, #grid, #java_self, #key, #key_code, #key_pressed?, #lerp_color, #load_strings, #loop, #mouse_button, #mouse_pressed?, #mouse_x, #mouse_y, #pmouse_x, #pmouse_y, #proxy_java_fields, #save_strings, #set_sketch_path, #sketch_path, #thread
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.
121 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 |
# File 'lib/ruby-processing/app.rb', line 121 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.org/reference/ 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)$/, '').titleize args << title PApplet.run_sketch(args, self) #end end |
Class Method Details
.full_screen ⇒ Object
76 |
# File 'lib/ruby-processing/app.rb', line 76 def self.full_screen; @@full_screen = true; end |
.has_slider(*args) ⇒ Object
:nodoc:
87 88 89 |
# File 'lib/ruby-processing/app.rb', line 87 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.
82 83 84 85 |
# File 'lib/ruby-processing/app.rb', line 82 def self.inherited(subclass) super(subclass) @sketch_class = subclass end |
.library_loaded?(library_name) ⇒ Boolean
98 99 100 |
# File 'lib/ruby-processing/app.rb', line 98 def library_loaded?(library_name) @@library_loader.library_loaded?(library_name) end |
.load_java_library(*args) ⇒ Object
106 107 108 |
# File 'lib/ruby-processing/app.rb', line 106 def load_java_library(*args) @@library_loader.load_java_library(*args) end |
.load_libraries(*args) ⇒ Object Also known as: load_library
93 94 95 |
# File 'lib/ruby-processing/app.rb', line 93 def load_libraries(*args) @@library_loader.load_library(*args) end |
.load_ruby_library(*args) ⇒ Object
102 103 104 |
# File 'lib/ruby-processing/app.rb', line 102 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.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/ruby-processing/app.rb', line 41 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:
74 |
# File 'lib/ruby-processing/app.rb', line 74 def self.sketch_class; @sketch_class; end |
Instance Method Details
#close ⇒ Object
Cleanly close and shutter a running sketch.
185 186 187 188 189 |
# File 'lib/ruby-processing/app.rb', line 185 def close control_panel.remove if respond_to?(:control_panel) self.dispose self.frame.dispose end |
#full_screen? ⇒ Boolean
77 |
# File 'lib/ruby-processing/app.rb', line 77 def full_screen?; @@full_screen; end |
#inspect ⇒ Object
Provide a loggable string to represent this sketch.
179 180 181 |
# File 'lib/ruby-processing/app.rb', line 179 def inspect "#<Processing::App:#{self.class}:#{@title}>" end |
#library_loaded?(library_name) ⇒ Boolean
111 112 113 |
# File 'lib/ruby-processing/app.rb', line 111 def library_loaded?(library_name) self.class.library_loaded?(library_name) end |
#size(*args) ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/ruby-processing/app.rb', line 158 def size(*args) w, h, mode = *args @width ||= w unless @width @height ||= h unless @height @render_mode ||= mode unless @render_mode if [P3D, P2D].include? @render_mode # Include some opengl processing classes that we'd like to use: %w(FontTexture FrameBuffer LinePath LineStroker PGL PGraphics2D PGraphics3D PGraphicsOpenGL PShader PShapeOpenGL Texture).each do |klass| java_import "processing.opengl.#{klass}" end end super(*args) end |
#start ⇒ Object
Make sure we set the size if we set it before we start the animation thread.
173 174 175 176 |
# File 'lib/ruby-processing/app.rb', line 173 def start self.size(@width, @height) if @width && @height super() end |