processing 0.5.32 → 0.5.34

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.
@@ -3,6 +3,9 @@ module Processing
3
3
 
4
4
  # Vector class.
5
5
  #
6
+ # @see https://processing.org/reference/PVector.html
7
+ # @see https://p5js.org/reference/#/p5.Vector
8
+ #
6
9
  class Vector
7
10
 
8
11
  include Comparable
@@ -22,6 +25,9 @@ module Processing
22
25
  # @param v [Vector] vector object to copy
23
26
  # @param a [Array] array like [x, y, z]
24
27
  #
28
+ # @see https://processing.org/reference/PVector.html
29
+ # @see https://p5js.org/reference/#/p5.Vector
30
+ #
25
31
  def initialize(x = 0, y = 0, z = 0, context: nil)
26
32
  @point = case x
27
33
  when Rays::Point then x.dup
@@ -42,6 +48,9 @@ module Processing
42
48
  #
43
49
  # @return [Vector] duplicated vector object
44
50
  #
51
+ # @see https://processing.org/reference/PVector_copy_.html
52
+ # @see https://p5js.org/reference/#/p5.Vector/copy
53
+ #
45
54
  alias copy dup
46
55
 
47
56
  # Sets x, y and z.
@@ -60,6 +69,9 @@ module Processing
60
69
  #
61
70
  # @return [nil] nil
62
71
  #
72
+ # @see https://processing.org/reference/PVector_set_.html
73
+ # @see https://p5js.org/reference/#/p5.Vector/set
74
+ #
63
75
  def set(*args)
64
76
  initialize(*args)
65
77
  self
@@ -69,6 +81,9 @@ module Processing
69
81
  #
70
82
  # @return [Numeric] x value of vector
71
83
  #
84
+ # @see https://processing.org/reference/PVector_x.html
85
+ # @see https://p5js.org/reference/#/p5.Vector/x
86
+ #
72
87
  def x()
73
88
  @point.x
74
89
  end
@@ -77,6 +92,9 @@ module Processing
77
92
  #
78
93
  # @return [Numeric] y value of vector
79
94
  #
95
+ # @see https://processing.org/reference/PVector_y.html
96
+ # @see https://p5js.org/reference/#/p5.Vector/y
97
+ #
80
98
  def y()
81
99
  @point.y
82
100
  end
@@ -85,6 +103,9 @@ module Processing
85
103
  #
86
104
  # @return [Numeric] z value of vector
87
105
  #
106
+ # @see https://processing.org/reference/PVector_z.html
107
+ # @see https://p5js.org/reference/#/p5.Vector/z
108
+ #
88
109
  def z()
89
110
  @point.z
90
111
  end
@@ -93,6 +114,9 @@ module Processing
93
114
  #
94
115
  # @return [Numeric] x value of vector
95
116
  #
117
+ # @see https://processing.org/reference/PVector_x.html
118
+ # @see https://p5js.org/reference/#/p5.Vector/x
119
+ #
96
120
  def x=(x)
97
121
  @point.x = x
98
122
  end
@@ -101,6 +125,9 @@ module Processing
101
125
  #
102
126
  # @return [Numeric] y value of vector
103
127
  #
128
+ # @see https://processing.org/reference/PVector_y.html
129
+ # @see https://p5js.org/reference/#/p5.Vector/y
130
+ #
104
131
  def y=(y)
105
132
  @point.y = y
106
133
  end
@@ -109,6 +136,9 @@ module Processing
109
136
  #
110
137
  # @return [Numeric] z value of vector
111
138
  #
139
+ # @see https://processing.org/reference/PVector_z.html
140
+ # @see https://p5js.org/reference/#/p5.Vector/z
141
+ #
112
142
  def z=(z)
113
143
  @point.z = z
114
144
  end
@@ -127,6 +157,9 @@ module Processing
127
157
  #
128
158
  # @return [Vector] interporated vector
129
159
  #
160
+ # @see https://processing.org/reference/PVector_lerp_.html
161
+ # @see https://p5js.org/reference/#/p5.Vector/lerp
162
+ #
130
163
  def lerp(*args, amount)
131
164
  v = toVector__(*args)
132
165
  self.x = x + (v.x - x) * amount
@@ -143,6 +176,9 @@ module Processing
143
176
  #
144
177
  # @return [Vector] interporated vector
145
178
  #
179
+ # @see https://processing.org/reference/PVector_lerp_.html
180
+ # @see https://p5js.org/reference/#/p5.Vector/lerp
181
+ #
146
182
  def self.lerp(v1, v2, amount)
147
183
  v1.dup.lerp v2, amount
148
184
  end
@@ -153,6 +189,9 @@ module Processing
153
189
  #
154
190
  # @return [Array] array of x, y, z
155
191
  #
192
+ # @see https://processing.org/reference/PVector_array_.html
193
+ # @see https://p5js.org/reference/#/p5.Vector/array
194
+ #
156
195
  def array(n = 3)
157
196
  @point.to_a n
158
197
  end
@@ -172,6 +211,9 @@ module Processing
172
211
  #
173
212
  # @return [Vector] added vector
174
213
  #
214
+ # @see https://processing.org/reference/PVector_add_.html
215
+ # @see https://p5js.org/reference/#/p5.Vector/add
216
+ #
175
217
  def add(*args)
176
218
  @point += toVector__(*args).getInternal__
177
219
  self
@@ -190,6 +232,9 @@ module Processing
190
232
  #
191
233
  # @return [Vector] subtracted vector
192
234
  #
235
+ # @see https://processing.org/reference/PVector_sub_.html
236
+ # @see https://p5js.org/reference/#/p5.Vector/sub
237
+ #
193
238
  def sub(*args)
194
239
  @point -= toVector__(*args).getInternal__
195
240
  self
@@ -201,6 +246,9 @@ module Processing
201
246
  #
202
247
  # @return [Vector] multiplied vector
203
248
  #
249
+ # @see https://processing.org/reference/PVector_mult_.html
250
+ # @see https://p5js.org/reference/#/p5.Vector/mult
251
+ #
204
252
  def mult(num)
205
253
  @point *= num
206
254
  self
@@ -212,6 +260,9 @@ module Processing
212
260
  #
213
261
  # @return [Vector] divided vector
214
262
  #
263
+ # @see https://processing.org/reference/PVector_div_.html
264
+ # @see https://p5js.org/reference/#/p5.Vector/div
265
+ #
215
266
  def div(num)
216
267
  @point /= num
217
268
  self
@@ -223,6 +274,9 @@ module Processing
223
274
  #
224
275
  # @return [Vector] added vector
225
276
  #
277
+ # @see https://processing.org/reference/PVector_add_.html
278
+ # @see https://p5js.org/reference/#/p5.Vector/add
279
+ #
226
280
  def +(v)
227
281
  dup.add v
228
282
  end
@@ -233,6 +287,9 @@ module Processing
233
287
  #
234
288
  # @return [Vector] subtracted vector
235
289
  #
290
+ # @see https://processing.org/reference/PVector_sub_.html
291
+ # @see https://p5js.org/reference/#/p5.Vector/sub
292
+ #
236
293
  def -(v)
237
294
  dup.sub v
238
295
  end
@@ -243,6 +300,9 @@ module Processing
243
300
  #
244
301
  # @return [Vector] multiplied vector
245
302
  #
303
+ # @see https://processing.org/reference/PVector_mult_.html
304
+ # @see https://p5js.org/reference/#/p5.Vector/mult
305
+ #
246
306
  def *(num)
247
307
  dup.mult num
248
308
  end
@@ -253,6 +313,9 @@ module Processing
253
313
  #
254
314
  # @return [Vector] divided vector
255
315
  #
316
+ # @see https://processing.org/reference/PVector_div_.html
317
+ # @see https://p5js.org/reference/#/p5.Vector/div
318
+ #
256
319
  def /(num)
257
320
  dup.div num
258
321
  end
@@ -268,6 +331,9 @@ module Processing
268
331
  #
269
332
  # @return [Vector] added vector
270
333
  #
334
+ # @see https://processing.org/reference/PVector_add_.html
335
+ # @see https://p5js.org/reference/#/p5.Vector/add
336
+ #
271
337
  def self.add(v1, v2, target = nil)
272
338
  v = v1 + v2
273
339
  target.set v if self === target
@@ -285,6 +351,9 @@ module Processing
285
351
  #
286
352
  # @return [Vector] subtracted vector
287
353
  #
354
+ # @see https://processing.org/reference/PVector_sub_.html
355
+ # @see https://p5js.org/reference/#/p5.Vector/sub
356
+ #
288
357
  def self.sub(v1, v2, target = nil)
289
358
  v = v1 - v2
290
359
  target.set v if self === target
@@ -302,6 +371,9 @@ module Processing
302
371
  #
303
372
  # @return [Vector] multiplied vector
304
373
  #
374
+ # @see https://processing.org/reference/PVector_mult_.html
375
+ # @see https://p5js.org/reference/#/p5.Vector/mult
376
+ #
305
377
  def self.mult(v1, num, target = nil)
306
378
  v = v1 * num
307
379
  target.set v if self === target
@@ -319,6 +391,9 @@ module Processing
319
391
  #
320
392
  # @return [Vector] divided vector
321
393
  #
394
+ # @see https://processing.org/reference/PVector_div_.html
395
+ # @see https://p5js.org/reference/#/p5.Vector/div
396
+ #
322
397
  def self.div(v1, num, target = nil)
323
398
  v = v1 / num
324
399
  target.set v if self === target
@@ -329,6 +404,9 @@ module Processing
329
404
  #
330
405
  # @return [Numeric] length
331
406
  #
407
+ # @see https://processing.org/reference/PVector_mag_.html
408
+ # @see https://p5js.org/reference/#/p5.Vector/mag
409
+ #
332
410
  def mag()
333
411
  @point.length
334
412
  end
@@ -337,6 +415,9 @@ module Processing
337
415
  #
338
416
  # @return [Numeric] squared length
339
417
  #
418
+ # @see https://processing.org/reference/PVector_magSq_.html
419
+ # @see https://p5js.org/reference/#/p5.Vector/magSq
420
+ #
340
421
  def magSq()
341
422
  Rays::Point::dot(@point, @point)
342
423
  end
@@ -351,6 +432,9 @@ module Processing
351
432
  #
352
433
  # @return [Vector] vector with new length
353
434
  #
435
+ # @see https://processing.org/reference/PVector_setMag_.html
436
+ # @see https://p5js.org/reference/#/p5.Vector/setMag
437
+ #
354
438
  def setMag(target = nil, len)
355
439
  (target || self).set @point.normal * len
356
440
  end
@@ -361,6 +445,9 @@ module Processing
361
445
  #
362
446
  # @return [Vector] normalized vector
363
447
  #
448
+ # @see https://processing.org/reference/PVector_normalize_.html
449
+ # @see https://p5js.org/reference/#/p5.Vector/normalize
450
+ #
364
451
  def normalize(target = nil)
365
452
  (target || self).set @point.normal
366
453
  end
@@ -371,6 +458,9 @@ module Processing
371
458
  #
372
459
  # @return [Vector] new vector
373
460
  #
461
+ # @see https://processing.org/reference/PVector_limit_.html
462
+ # @see https://p5js.org/reference/#/p5.Vector/limit
463
+ #
374
464
  def limit(max)
375
465
  setMag max if magSq > max ** 2
376
466
  self
@@ -382,6 +472,9 @@ module Processing
382
472
  #
383
473
  # @return [Numeric] the distance
384
474
  #
475
+ # @see https://processing.org/reference/PVector_dist_.html
476
+ # @see https://p5js.org/reference/#/p5.Vector/dist
477
+ #
385
478
  def dist(v)
386
479
  (self - v).mag
387
480
  end
@@ -393,6 +486,9 @@ module Processing
393
486
  #
394
487
  # @return [Numeric] the distance
395
488
  #
489
+ # @see https://processing.org/reference/PVector_dist_.html
490
+ # @see https://p5js.org/reference/#/p5.Vector/dist
491
+ #
396
492
  def self.dist(v1, v2)
397
493
  v1.dist v2
398
494
  end
@@ -410,6 +506,9 @@ module Processing
410
506
  #
411
507
  # @return [Numeric] result of dot product
412
508
  #
509
+ # @see https://processing.org/reference/PVector_dot_.html
510
+ # @see https://p5js.org/reference/#/p5.Vector/dot
511
+ #
413
512
  def dot(*args)
414
513
  Rays::Point::dot getInternal__, toVector__(*args).getInternal__
415
514
  end
@@ -421,6 +520,9 @@ module Processing
421
520
  #
422
521
  # @return [Numeric] result of dot product
423
522
  #
523
+ # @see https://processing.org/reference/PVector_dot_.html
524
+ # @see https://p5js.org/reference/#/p5.Vector/dot
525
+ #
424
526
  def self.dot(v1, v2)
425
527
  v1.dot v2
426
528
  end
@@ -438,6 +540,9 @@ module Processing
438
540
  #
439
541
  # @return [Numeric] result of cross product
440
542
  #
543
+ # @see https://processing.org/reference/PVector_cross_.html
544
+ # @see https://p5js.org/reference/#/p5.Vector/cross
545
+ #
441
546
  def cross(a, *rest)
442
547
  target = self.class === rest.last ? rest.pop : nil
443
548
  v = self.class.new Rays::Point::cross getInternal__, toVector__(a, *rest).getInternal__
@@ -452,6 +557,9 @@ module Processing
452
557
  #
453
558
  # @return [Numeric] result of cross product
454
559
  #
560
+ # @see https://processing.org/reference/PVector_cross_.html
561
+ # @see https://p5js.org/reference/#/p5.Vector/cross
562
+ #
455
563
  def self.cross(v1, v2, target = nil)
456
564
  v1.cross v2, target
457
565
  end
@@ -462,6 +570,9 @@ module Processing
462
570
  #
463
571
  # @return [Vector] rotated this object
464
572
  #
573
+ # @see https://processing.org/reference/PVector_rotate_.html
574
+ # @see https://p5js.org/reference/#/p5.Vector/rotate
575
+ #
465
576
  def rotate(angle)
466
577
  deg = @context ?
467
578
  @context.toDegrees__(angle) : angle * GraphicsContext::RAD2DEG__
@@ -473,6 +584,9 @@ module Processing
473
584
  #
474
585
  # @return [Numeric] the angle in radians
475
586
  #
587
+ # @see https://processing.org/reference/PVector_heading_.html
588
+ # @see https://p5js.org/reference/#/p5.Vector/heading
589
+ #
476
590
  def heading()
477
591
  Math.atan2 y, x
478
592
  end
@@ -484,6 +598,9 @@ module Processing
484
598
  #
485
599
  # @return [Vector] rotated vector
486
600
  #
601
+ # @see https://processing.org/reference/PVector_fromAngle_.html
602
+ # @see https://p5js.org/reference/#/p5.Vector/fromAngle
603
+ #
487
604
  def self.fromAngle(angle, target = nil)
488
605
  v = self.new(1, 0, 0).rotate(angle)
489
606
  target.set v if target
@@ -497,6 +614,9 @@ module Processing
497
614
  #
498
615
  # @return [Numeric] angle in radians
499
616
  #
617
+ # @see https://processing.org/reference/PVector_angleBetween_.html
618
+ # @see https://p5js.org/reference/#/p5.Vector/angleBetween
619
+ #
500
620
  def self.angleBetween(v1, v2)
501
621
  x1, y1, z1 = v1.array
502
622
  x2, y2, z2 = v2.array
@@ -514,6 +634,9 @@ module Processing
514
634
  #
515
635
  # @return [Vector] a random vector
516
636
  #
637
+ # @see https://processing.org/reference/PVector_random2D_.html
638
+ # @see https://p5js.org/reference/#/p5.Vector/random2D
639
+ #
517
640
  def self.random2D(target = nil)
518
641
  v = self.new(1, 0, 0)
519
642
  v.getInternal__.rotate! rand 0.0...360.0
@@ -527,6 +650,9 @@ module Processing
527
650
  #
528
651
  # @return [Vector] a random vector
529
652
  #
653
+ # @see https://processing.org/reference/PVector_random3D_.html
654
+ # @see https://p5js.org/reference/#/p5.Vector/random3D
655
+ #
530
656
  def self.random3D(target = nil)
531
657
  angle = rand 0.0...(Math::PI * 2)
532
658
  z = rand(-1.0..1.0)
@@ -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)
@@ -214,60 +212,98 @@ module Processing
214
212
  end# Window
215
213
 
216
214
 
215
+ # @private
217
216
  class Window::Canvas
218
217
 
219
- attr_reader :image, :painter
220
-
221
218
  def initialize(window, width, height)
222
- @image = nil
223
- @painter = window.painter
219
+ @framebuffer = nil
220
+ @paintable = nil
221
+ @painter = window.painter
222
+
223
+ @painter.miter_limit = 10
224
224
 
225
225
  resize width, height
226
- painter.miter_limit = 10
227
226
  end
228
227
 
229
- def resize(width, height, pixel_density = nil)
228
+ attr_reader :painter
229
+
230
+ def resize(width, height, pixel_density = nil, antialiasing = nil)
230
231
  return false if width <= 0 || height <= 0
231
232
 
233
+ cs = @framebuffer&.color_space || Rays::RGBA
234
+ pd = pixel_density || (@framebuffer || @painter).pixel_density
235
+ aa = antialiasing == nil ? antialiasing? : (antialiasing && pd < 2)
232
236
  return false if
233
- width == @image&.width &&
234
- height == @image&.height &&
235
- pixel_density == @painter.pixel_density
237
+ width == @framebuffer&.width &&
238
+ height == @framebuffer&.height &&
239
+ pd == @framebuffer&.pixel_density &&
240
+ aa == antialiasing?
236
241
 
237
- old_image = @image
238
- old_painter = @painter
239
- cs = old_image&.color_space || Rays::RGBA
240
- pd = pixel_density || old_painter.pixel_density
242
+ old_paintable, old_painter = @paintable, @painter
241
243
 
242
- @image = Rays::Image.new width, height, cs, pd
243
- @painter = @image.painter
244
+ @framebuffer = Rays::Image.new width, height, cs, pd
245
+ @paintable = aa ? Rays::Image.new(width, height, cs, pd * 2) : @framebuffer
246
+ @painter = @paintable.painter
244
247
 
245
- @painter.paint {image old_image} if old_image
248
+ @painter.paint {image old_paintable} if old_paintable
246
249
  copy_painter old_painter, @painter
247
250
 
248
251
  GC.start
249
252
  return true
250
253
  end
251
254
 
255
+ def render()
256
+ @framebuffer.paint {|p| p.image @paintable} if antialiasing?
257
+ @framebuffer
258
+ end
259
+
260
+ def image()
261
+ @paintable
262
+ end
263
+
264
+ def width()
265
+ @framebuffer.width
266
+ end
267
+
268
+ def height()
269
+ @framebuffer.height
270
+ end
271
+
272
+ def pixel_density()
273
+ @framebuffer.pixel_density
274
+ end
275
+
276
+ def antialiasing?()
277
+ !!@framebuffer && !!@paintable && @framebuffer != @paintable
278
+ end
279
+
252
280
  private
253
281
 
254
282
  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
283
+ to.fill = from.fill
284
+ to.stroke = from.stroke
285
+ to.stroke_width = from.stroke_width
286
+ to.stroke_cap = from.stroke_cap
287
+ to.stroke_join = from.stroke_join
288
+ to.miter_limit = from.miter_limit
289
+ to.clip = from.clip
290
+ to.blend_mode = from.blend_mode
291
+ to.font = from.font
292
+ to.texture = from.texture
293
+ to.texcoord_mode = from.texcoord_mode
294
+ to.texcoord_wrap = from.texcoord_wrap
295
+ to.shader = from.shader
262
296
  end
263
297
 
264
298
  end# Window::Canvas
265
299
 
266
300
 
301
+ # @private
267
302
  class Window::CanvasView < Reflex::View
268
303
 
269
304
  def on_update(e)
270
305
  window.on_canvas_update e
306
+ Thread.pass
271
307
  end
272
308
 
273
309
  def on_draw(e)
@@ -278,6 +314,10 @@ module Processing
278
314
  window.on_canvas_pointer e
279
315
  end
280
316
 
317
+ def on_wheel(e)
318
+ window.on_canvas_wheel e
319
+ end
320
+
281
321
  def on_resize(e)
282
322
  window.on_canvas_resize e
283
323
  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)/}