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.
120 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 |
# File 'lib/ruby-processing/app.rb', line 120 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
75 |
# File 'lib/ruby-processing/app.rb', line 75 def self.full_screen; @@full_screen = true; end |
.has_slider(*args) ⇒ Object
:nodoc:
86 87 88 |
# File 'lib/ruby-processing/app.rb', line 86 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.
81 82 83 84 |
# File 'lib/ruby-processing/app.rb', line 81 def self.inherited(subclass) super(subclass) @sketch_class = subclass end |
.library_loaded?(library_name) ⇒ Boolean
97 98 99 |
# File 'lib/ruby-processing/app.rb', line 97 def library_loaded?(library_name) @@library_loader.library_loaded?(library_name) end |
.load_java_library(*args) ⇒ Object
105 106 107 |
# File 'lib/ruby-processing/app.rb', line 105 def load_java_library(*args) @@library_loader.load_java_library(*args) end |
.load_libraries(*args) ⇒ Object Also known as: load_library
92 93 94 |
# File 'lib/ruby-processing/app.rb', line 92 def load_libraries(*args) @@library_loader.load_library(*args) end |
.load_ruby_library(*args) ⇒ Object
101 102 103 |
# File 'lib/ruby-processing/app.rb', line 101 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.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/ruby-processing/app.rb', line 40 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:
73 |
# File 'lib/ruby-processing/app.rb', line 73 def self.sketch_class; @sketch_class; end |
Instance Method Details
#close ⇒ Object
Cleanly close and shutter a running sketch.
180 181 182 183 184 |
# File 'lib/ruby-processing/app.rb', line 180 def close control_panel.remove if respond_to?(:control_panel) self.dispose self.frame.dispose end |
#full_screen? ⇒ Boolean
76 |
# File 'lib/ruby-processing/app.rb', line 76 def full_screen?; @@full_screen; end |
#inspect ⇒ Object
Provide a loggable string to represent this sketch.
175 176 177 |
# File 'lib/ruby-processing/app.rb', line 175 def inspect "#<Processing::App:#{self.class}:#{@title}>" end |
#library_loaded?(library_name) ⇒ Boolean
110 111 112 |
# File 'lib/ruby-processing/app.rb', line 110 def library_loaded?(library_name) self.class.library_loaded?(library_name) end |
#size(*args) ⇒ Object
154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/ruby-processing/app.rb', line 154 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.
169 170 171 172 |
# File 'lib/ruby-processing/app.rb', line 169 def start self.size(@width, @height) if @width && @height super() end |