processing 0.5.32 → 0.5.33

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.
@@ -49,7 +49,7 @@ module Processing
49
49
  # @return [nil] nil
50
50
  #
51
51
  def set(x, y, c)
52
- getInternal__.bitmap[x, y] = self.class.fromColor__ c
52
+ getInternal__.bitmap(true)[x, y] = self.class.fromColor__(c).map {|n| n / 255.0}
53
53
  nil
54
54
  end
55
55
 
@@ -152,7 +152,7 @@ module Processing
152
152
  end
153
153
 
154
154
  def fill(*args)
155
- @fill = @context.toRaysColor__(*args)
155
+ @fill = @context.rawColor__(*args)
156
156
  end
157
157
 
158
158
  def setVertex(index, point)
@@ -173,7 +173,7 @@ module Processing
173
173
  end
174
174
 
175
175
  def setFill(*args)
176
- color = @context.toRaysColor__(*args)
176
+ color = @context.rawColor__(*args)
177
177
  count = getVertexCount
178
178
  if count > 0
179
179
  if @colors
@@ -204,17 +204,17 @@ module Processing
204
204
  end
205
205
 
206
206
  def translate(x, y, z = 0)
207
- matrix__.translate x, y, z
207
+ matrix__.translate! x, y, z
208
208
  nil
209
209
  end
210
210
 
211
211
  def rotate(angle)
212
- matrix__.rotate @context.toDegrees__(angle)
212
+ matrix__.rotate! @context.toDegrees__(angle)
213
213
  nil
214
214
  end
215
215
 
216
216
  def scale(x, y, z = 1)
217
- matrix__.scale x, y, z
217
+ matrix__.scale! x, y, z
218
218
  nil
219
219
  end
220
220
 
@@ -222,9 +222,17 @@ module Processing
222
222
  @matrix = nil
223
223
  end
224
224
 
225
- def rotateX = nil
226
- def rotateY = nil
227
- def rotateZ = nil
225
+ def rotateX(angle)
226
+ matrix__.rotate! @context.toDegrees__(angle), 1, 0, 0
227
+ end
228
+
229
+ def rotateY(angle)
230
+ matrix__.rotate! @context.toDegrees__(angle), 0, 1, 0
231
+ end
232
+
233
+ def rotateZ(angle)
234
+ matrix__.rotate! @context.toDegrees__(angle), 0, 0, 1
235
+ end
228
236
 
229
237
  # @private
230
238
  def clearCache__()
@@ -6,14 +6,6 @@ module Processing
6
6
 
7
7
  include Xot::Inspectable
8
8
 
9
- attr_accessor :setup, :update, :draw,
10
- :key_down, :key_up,
11
- :pointer_down, :pointer_up, :pointer_move,
12
- :move, :resize, :motion,
13
- :before_draw, :after_draw, :update_window, :update_canvas
14
-
15
- attr_accessor :auto_resize
16
-
17
9
  def initialize(width = 500, height = 500, *args, **kwargs, &block)
18
10
  Processing.instance_variable_set :@window, self
19
11
 
@@ -26,19 +18,16 @@ module Processing
26
18
  @overlay_view = @canvas_view.add Reflex::View.new name: :overlay
27
19
 
28
20
  super(*args, size: [width, height], **kwargs, &block)
21
+ self.center = screen.center
29
22
  end
30
23
 
31
- def canvas_image()
32
- @canvas.image
33
- end
24
+ attr_accessor :setup, :update, :draw, :move, :resize, :motion,
25
+ :key_down, :key_up, :pointer_down, :pointer_up, :pointer_move, :wheel,
26
+ :before_draw, :after_draw, :update_window, :update_canvas
34
27
 
35
- def canvas_painter()
36
- @canvas.painter
37
- end
28
+ attr_accessor :auto_resize
38
29
 
39
- def window_painter()
40
- self.painter
41
- end
30
+ attr_reader :canvas
42
31
 
43
32
  def event()
44
33
  @events.last
@@ -64,7 +53,9 @@ module Processing
64
53
  end
65
54
 
66
55
  def on_change_pixel_density(pixel_density)
67
- resize_canvas width, height, window_pixel_density: pixel_density
56
+ resize_canvas(
57
+ @canvas.width, @canvas.height,
58
+ window_pixel_density: pixel_density)
68
59
  end
69
60
 
70
61
  def on_activate(e)
@@ -80,7 +71,7 @@ module Processing
80
71
  end
81
72
 
82
73
  def on_draw(e)
83
- window_painter.pixel_density.tap do |pd|
74
+ painter.pixel_density.tap do |pd|
84
75
  prev, @prev_pixel_density = @prev_pixel_density, pd
85
76
  on_change_pixel_density pd if prev && pd != prev
86
77
  end
@@ -127,28 +118,35 @@ module Processing
127
118
  draw_canvas {call_block block, e} if block
128
119
  end
129
120
 
121
+ def on_canvas_wheel(e)
122
+ draw_canvas {call_block @wheel, e} if @wheel
123
+ end
124
+
130
125
  def on_canvas_resize(e)
131
126
  resize_canvas e.width, e.height if @auto_resize
132
127
  draw_canvas {call_block @resize, e} if @resize
133
128
  end
134
129
 
135
- def resize_canvas(width, height, pixel_density = nil, window_pixel_density: nil)
136
- painting = canvas_painter.painting?
137
- canvas_painter.__send__ :end_paint if painting
130
+ def resize_canvas(
131
+ width, height,
132
+ pixel_density = nil,
133
+ window_pixel_density: nil,
134
+ antialiasing: nil)
135
+
136
+ painting = @canvas.painter.painting?
137
+ @canvas.painter.__send__ :end_paint if painting
138
138
 
139
139
  @pixel_density = pixel_density if pixel_density
140
140
 
141
141
  resized =
142
142
  begin
143
- @canvas.resize width, height, @pixel_density || window_pixel_density
143
+ pd = @pixel_density || window_pixel_density
144
+ @canvas.resize width, height, pd, antialiasing
144
145
  ensure
145
- canvas_painter.__send__ :begin_paint if painting
146
+ @canvas.painter.__send__ :begin_paint if painting
146
147
  end
147
148
 
148
- if resized
149
- @update_canvas.call canvas_image, canvas_painter if @update_canvas
150
- size width, height
151
- end
149
+ @update_canvas&.call @canvas.image, @canvas.painter if resized
152
150
  end
153
151
 
154
152
  private
@@ -157,12 +155,12 @@ module Processing
157
155
  scrollx, scrolly, zoom = get_scroll_and_zoom
158
156
  @canvas_view.scroll_to scrollx, scrolly
159
157
  @canvas_view.zoom = zoom
160
- @overlay_view.size = canvas_image.size
158
+ @overlay_view.size = @canvas.image.size
161
159
  end
162
160
 
163
161
  def get_scroll_and_zoom()
164
- ww, wh = width.to_f, height.to_f
165
- cw, ch = canvas_image.width.to_f, canvas_image.height.to_f
162
+ ww, wh = width.to_f, height.to_f
163
+ cw, ch = @canvas.image.width.to_f, @canvas.image.height.to_f
166
164
  return [0, 0, 1] if ww == 0 || wh == 0 || cw == 0 || ch == 0
167
165
 
168
166
  wratio, cratio = ww / wh, cw / ch
@@ -184,21 +182,21 @@ module Processing
184
182
  end
185
183
 
186
184
  def begin_draw()
187
- canvas_painter.__send__ :begin_paint
185
+ @canvas.painter.__send__ :begin_paint
188
186
  @before_draw&.call
189
187
  end
190
188
 
191
189
  def end_draw()
192
190
  @after_draw&.call
193
- canvas_painter.__send__ :end_paint
191
+ @canvas.painter.__send__ :end_paint
194
192
  end
195
193
 
196
194
  def drawing?()
197
- canvas_painter.painting?
195
+ @canvas.painter.painting?
198
196
  end
199
197
 
200
198
  def draw_screen(painter)
201
- window_painter.image canvas_image
199
+ painter.image @canvas.render
202
200
  end
203
201
 
204
202
  def call_block(block, event, *args)
@@ -216,49 +214,84 @@ module Processing
216
214
 
217
215
  class Window::Canvas
218
216
 
219
- attr_reader :image, :painter
220
-
221
217
  def initialize(window, width, height)
222
- @image = nil
223
- @painter = window.painter
218
+ @framebuffer = nil
219
+ @paintable = nil
220
+ @painter = window.painter
221
+
222
+ @painter.miter_limit = 10
224
223
 
225
224
  resize width, height
226
- painter.miter_limit = 10
227
225
  end
228
226
 
229
- def resize(width, height, pixel_density = nil)
227
+ attr_reader :painter
228
+
229
+ def resize(width, height, pixel_density = nil, antialiasing = nil)
230
230
  return false if width <= 0 || height <= 0
231
231
 
232
+ cs = @framebuffer&.color_space || Rays::RGBA
233
+ pd = pixel_density || (@framebuffer || @painter).pixel_density
234
+ aa = antialiasing == nil ? antialiasing? : (antialiasing && pd < 2)
232
235
  return false if
233
- width == @image&.width &&
234
- height == @image&.height &&
235
- pixel_density == @painter.pixel_density
236
+ width == @framebuffer&.width &&
237
+ height == @framebuffer&.height &&
238
+ pd == @framebuffer&.pixel_density &&
239
+ aa == antialiasing?
236
240
 
237
- old_image = @image
238
- old_painter = @painter
239
- cs = old_image&.color_space || Rays::RGBA
240
- pd = pixel_density || old_painter.pixel_density
241
+ old_paintable, old_painter = @paintable, @painter
241
242
 
242
- @image = Rays::Image.new width, height, cs, pd
243
- @painter = @image.painter
243
+ @framebuffer = Rays::Image.new width, height, cs, pd
244
+ @paintable = aa ? Rays::Image.new(width, height, cs, pd * 2) : @framebuffer
245
+ @painter = @paintable.painter
244
246
 
245
- @painter.paint {image old_image} if old_image
247
+ @painter.paint {image old_paintable} if old_paintable
246
248
  copy_painter old_painter, @painter
247
249
 
248
250
  GC.start
249
251
  return true
250
252
  end
251
253
 
254
+ def render()
255
+ @framebuffer.paint {|p| p.image @paintable} if antialiasing?
256
+ @framebuffer
257
+ end
258
+
259
+ def image()
260
+ @paintable
261
+ end
262
+
263
+ def width()
264
+ @framebuffer.width
265
+ end
266
+
267
+ def height()
268
+ @framebuffer.height
269
+ end
270
+
271
+ def pixel_density()
272
+ @framebuffer.pixel_density
273
+ end
274
+
275
+ def antialiasing?()
276
+ !!@framebuffer && !!@paintable && @framebuffer != @paintable
277
+ end
278
+
252
279
  private
253
280
 
254
281
  def copy_painter(from, to)
255
- to.fill = from.fill
256
- to.stroke = from.stroke
257
- to.stroke_width = from.stroke_width
258
- to.stroke_cap = from.stroke_cap
259
- to.stroke_join = from.stroke_join
260
- to.miter_limit = from.miter_limit
261
- to.font = from.font
282
+ to.fill = from.fill
283
+ to.stroke = from.stroke
284
+ to.stroke_width = from.stroke_width
285
+ to.stroke_cap = from.stroke_cap
286
+ to.stroke_join = from.stroke_join
287
+ to.miter_limit = from.miter_limit
288
+ to.clip = from.clip
289
+ to.blend_mode = from.blend_mode
290
+ to.font = from.font
291
+ to.texture = from.texture
292
+ to.texcoord_mode = from.texcoord_mode
293
+ to.texcoord_wrap = from.texcoord_wrap
294
+ to.shader = from.shader
262
295
  end
263
296
 
264
297
  end# Window::Canvas
@@ -268,6 +301,7 @@ module Processing
268
301
 
269
302
  def on_update(e)
270
303
  window.on_canvas_update e
304
+ Thread.pass
271
305
  end
272
306
 
273
307
  def on_draw(e)
@@ -278,6 +312,10 @@ module Processing
278
312
  window.on_canvas_pointer e
279
313
  end
280
314
 
315
+ def on_wheel(e)
316
+ window.on_canvas_wheel e
317
+ end
318
+
281
319
  def on_resize(e)
282
320
  window.on_canvas_resize e
283
321
  end
data/processing.gemspec CHANGED
@@ -25,10 +25,10 @@ Gem::Specification.new do |s|
25
25
  s.platform = Gem::Platform::RUBY
26
26
  s.required_ruby_version = '>= 3.0.0'
27
27
 
28
- s.add_runtime_dependency 'xot', '~> 0.1.41'
29
- s.add_runtime_dependency 'rucy', '~> 0.1.43'
30
- s.add_runtime_dependency 'rays', '~> 0.1.48'
31
- s.add_runtime_dependency 'reflexion', '~> 0.1.56'
28
+ s.add_runtime_dependency 'xot', '~> 0.1.42'
29
+ s.add_runtime_dependency 'rucy', '~> 0.1.44'
30
+ s.add_runtime_dependency 'rays', '~> 0.1.49'
31
+ s.add_runtime_dependency 'reflexion', '~> 0.1.57'
32
32
 
33
33
  s.files = `git ls-files`.split $/
34
34
  s.test_files = s.files.grep %r{^(test|spec|features)/}
data/test/helper.rb CHANGED
@@ -34,8 +34,10 @@ def mkdir(dir: nil, filename: nil)
34
34
  FileUtils.mkdir_p path unless File.exist? path
35
35
  end
36
36
 
37
- def test_label(index = 1)
38
- caller_locations[index].then {|loc| "#{loc.label}_#{loc.lineno}"}
37
+ def test_label(frame_offset = 1, suffix: nil)
38
+ suffix = suffix ? "_#{suffix}" : ''
39
+ caller_locations[frame_offset]
40
+ .then {|loc| "#{loc.label}_#{loc.lineno}#{suffix}"}
39
41
  end
40
42
 
41
43
  def temp_path(ext: nil, &block)
@@ -70,6 +72,7 @@ end
70
72
 
71
73
  def test_draw(*sources, width: 1000, height: 1000, pixelDensity: 1, label: nil)
72
74
  graphics(width, height, pixelDensity).tap do |g|
75
+ g.renderMode :p5js
73
76
  g.beginDraw {g.instance_eval sources.compact.join("\n")}
74
77
  g.save draw_output_path(label, *sources) if label
75
78
  end
data/test/p5.rb CHANGED
@@ -49,7 +49,7 @@ def get_p5rb_html(width, height, draw_src, webgl: false)
49
49
  END
50
50
  end
51
51
 
52
- def sleep_until (try: 3, timeout: 10, &block)
52
+ def sleep_until(try: 3, timeout: 10, &block)
53
53
  now = -> offset = 0 {Time.now.to_f + offset}
54
54
  limit = now[timeout]
55
55
  until block.call
data/test/test_font.rb CHANGED
@@ -6,7 +6,7 @@ class TestFont < Test::Unit::TestCase
6
6
  P = Processing
7
7
 
8
8
  def font(*args)
9
- P::Font.new(Rays::Font.new *args).tap {|font|
9
+ P::Font.new(Rays::Font.new(*args)).tap {|font|
10
10
  def font.intern()
11
11
  getInternal__
12
12
  end