processing 0.5.32 → 0.5.34

Sign up to get free protection for your applications and to get access to all the features.
@@ -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)/}