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.
- checksums.yaml +4 -4
- data/ChangeLog.md +42 -0
- data/VERSION +1 -1
- data/lib/processing/all.rb +3 -1
- data/lib/processing/context.rb +103 -16
- data/lib/processing/events.rb +22 -0
- data/lib/processing/graphics.rb +2 -2
- data/lib/processing/graphics_context.rb +537 -73
- data/lib/processing/image.rb +1 -1
- data/lib/processing/shape.rb +16 -8
- data/lib/processing/window.rb +96 -58
- data/processing.gemspec +4 -4
- data/test/helper.rb +5 -2
- data/test/p5.rb +1 -1
- data/test/test_font.rb +1 -1
- data/test/test_graphics_context.rb +442 -8
- data/test/test_utility.rb +0 -19
- metadata +12 -11
data/lib/processing/image.rb
CHANGED
data/lib/processing/shape.rb
CHANGED
@@ -152,7 +152,7 @@ module Processing
|
|
152
152
|
end
|
153
153
|
|
154
154
|
def fill(*args)
|
155
|
-
@fill = @context.
|
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.
|
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
|
226
|
-
|
227
|
-
|
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__()
|
data/lib/processing/window.rb
CHANGED
@@ -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
|
-
|
32
|
-
|
33
|
-
|
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
|
-
|
36
|
-
@canvas.painter
|
37
|
-
end
|
28
|
+
attr_accessor :auto_resize
|
38
29
|
|
39
|
-
|
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
|
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
|
-
|
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(
|
136
|
-
|
137
|
-
|
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
|
-
|
143
|
+
pd = @pixel_density || window_pixel_density
|
144
|
+
@canvas.resize width, height, pd, antialiasing
|
144
145
|
ensure
|
145
|
-
|
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 =
|
158
|
+
@overlay_view.size = @canvas.image.size
|
161
159
|
end
|
162
160
|
|
163
161
|
def get_scroll_and_zoom()
|
164
|
-
ww, wh =
|
165
|
-
cw, ch =
|
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
|
-
|
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
|
-
|
191
|
+
@canvas.painter.__send__ :end_paint
|
194
192
|
end
|
195
193
|
|
196
194
|
def drawing?()
|
197
|
-
|
195
|
+
@canvas.painter.painting?
|
198
196
|
end
|
199
197
|
|
200
198
|
def draw_screen(painter)
|
201
|
-
|
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
|
-
@
|
223
|
-
@
|
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
|
-
|
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
|
234
|
-
height
|
235
|
-
|
236
|
+
width == @framebuffer&.width &&
|
237
|
+
height == @framebuffer&.height &&
|
238
|
+
pd == @framebuffer&.pixel_density &&
|
239
|
+
aa == antialiasing?
|
236
240
|
|
237
|
-
|
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
|
-
@
|
243
|
-
@
|
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
|
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
|
256
|
-
to.stroke
|
257
|
-
to.stroke_width
|
258
|
-
to.stroke_cap
|
259
|
-
to.stroke_join
|
260
|
-
to.miter_limit
|
261
|
-
to.
|
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.
|
29
|
-
s.add_runtime_dependency 'rucy', '~> 0.1.
|
30
|
-
s.add_runtime_dependency 'rays', '~> 0.1.
|
31
|
-
s.add_runtime_dependency 'reflexion', '~> 0.1.
|
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(
|
38
|
-
|
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
|
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
|