pixelflow_canvas 0.4.1 → 0.4.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4824696c6996cc136b56dd83a716fa12a273e0682744473b67f0ffb7693b7335
4
- data.tar.gz: 612927ef865f29432b41adbaa11b0d4b6e824a9af15cd75413c7e5c7fa0c84b1
3
+ metadata.gz: 5ca8e55731e1b45c39343e18a6f7d2c5726d4a856824ff826aca5dc502c2a0d4
4
+ data.tar.gz: 5ad774dabd0ad2de3b32f180e000eb6bc42ed10f28b974cd1466bcf3451f0fb2
5
5
  SHA512:
6
- metadata.gz: ed40b86854a8779791ca67eb41d0b881ea76e917e72305e391f693cdbfaa6157f2e34402038c300f30b1b7d67414c4722ba3808caf5abd50ea76149fe3915016
7
- data.tar.gz: e0311899a97ba6959dc457f1dbb1397c8495a730e99c813e5b5809875e9127344410856d4bfc3e2afed6b504492693aeffedf62b4f1937702edc6a49f4d11af7
6
+ metadata.gz: c4e30f5c0a236957f8fa13b69f9d479e22eb51febe7f6c1969eb93024cef0179506618ef876742312783f4c7e52d7ad927302ad66f6381374f7b80ae1f326a16
7
+ data.tar.gz: 6c7b2ba6efe13bc6b0ef3cd9327025b092b3d14997d33b32dba6eaff9cb3864879690b108280d98e647a02a44c7edbea402c39ecb0af955759adcd04c40b367f
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PixelflowCanvas
4
- VERSION = "0.4.1"
4
+ VERSION = "0.4.2"
5
5
  end
@@ -18,14 +18,27 @@ module Pixelflow
18
18
  :direct => 0,
19
19
  :buffered => 1
20
20
  }
21
+ COMPOSE_MODES = {
22
+ :over => 0,
23
+ :add => 1,
24
+ :subtract => 2
25
+ }
26
+ INTERPOLATION_MODES = {
27
+ :nearest => 0,
28
+ :bilinear => 1,
29
+ }
21
30
  def initialize(width, height, color_mode = nil)
22
31
  @width = 320
23
32
  @height = 180
24
33
  @x = 0
25
34
  @y = 0
35
+ @r = color_mode == :palette ? 15 : 255
36
+ @g = color_mode == :palette ? 0 : 255
37
+ @b = color_mode == :palette ? 0 : 255
26
38
  @color_mode = :rgb
27
39
  @advance_mode = :right
28
40
  @draw_mode = :direct
41
+ @compose_mode = :over
29
42
  @palette = [0] * 768
30
43
  @socket = TCPSocket.new('127.0.0.1', 19223)
31
44
  set_size(width, height)
@@ -33,21 +46,7 @@ module Pixelflow
33
46
  @last_timestamp = Time.now.to_f
34
47
  end
35
48
 
36
- def run(&block)
37
- yield(self)
38
- end
39
-
40
- def recreate_screen()
41
- @screen = [0] * @width * @height * (@color_mode == :rgb ? 3 : 1)
42
- end
43
-
44
- def set_draw_mode(mode)
45
- unless DRAW_MODES.keys.include?(mode)
46
- raise "Invalid draw mode: #{mode}"
47
- end
48
- @draw_mode = mode
49
- recreate_screen()
50
- end
49
+ attr_reader :width, :height
51
50
 
52
51
  def set_size(width, height)
53
52
  @x = 0
@@ -59,6 +58,10 @@ module Pixelflow
59
58
  @socket.flush
60
59
  end
61
60
 
61
+ def recreate_screen()
62
+ @screen = [0] * @width * @height * (@color_mode == :rgb ? 3 : 1)
63
+ end
64
+
62
65
  def set_color_mode(mode)
63
66
  unless COLOR_MODES.keys.include?(mode)
64
67
  raise "Invalid color mode: #{mode}"
@@ -69,15 +72,7 @@ module Pixelflow
69
72
  @socket.flush
70
73
  end
71
74
 
72
- def set_palette(i, r, g, b)
73
- i = i % 256
74
- r = (r % 256) << 2
75
- g = (g % 256) << 2
76
- b = (b % 256) << 2
77
- @socket.write([3, i, r, g, b].pack('CCCCC'))
78
- end
79
-
80
- def set_advance(mode)
75
+ def set_advance_mode(mode)
81
76
  unless ADVANCE_MODES.keys.include?(mode)
82
77
  raise "Invalid advance mode: #{mode}"
83
78
  end
@@ -86,11 +81,64 @@ module Pixelflow
86
81
  @socket.flush
87
82
  end
88
83
 
84
+ def set_draw_mode(mode)
85
+ unless DRAW_MODES.keys.include?(mode)
86
+ raise "Invalid draw mode: #{mode}"
87
+ end
88
+ @draw_mode = mode
89
+ end
90
+
91
+ def set_compose_mode(mode)
92
+ unless COMPOSE_MODES.keys.include?(mode)
93
+ raise "Invalid compose mode: #{mode}"
94
+ end
95
+ if mode != :over && @color_mode != :rgb
96
+ raise "Cannot switch compose mode to #{mode} in palette color mode!"
97
+ end
98
+ @compose_mode = mode
99
+ end
100
+
101
+ def set_interpolation_mode(mode)
102
+ unless INTERPOLATION_MODES.keys.include?(mode)
103
+ raise "Invalid interpolation mode: #{mode}"
104
+ end
105
+ @socket.write([8, INTERPOLATION_MODES[mode]].pack('CC'))
106
+ @socket.flush
107
+ end
108
+
109
+ def flip()
110
+ if @draw_mode == :buffered
111
+ @socket.write([7].pack('C'))
112
+ @socket.write(@screen.pack('C*'))
113
+ @socket.flush
114
+ end
115
+ end
116
+
117
+ def ensure_max_fps(fps)
118
+ fps1 = 1.0 / fps
119
+ t = Time.now.to_f
120
+ dt = t - @last_timestamp
121
+ sleep(fps1 - dt) if dt < fps1
122
+ @last_timestamp = t
123
+ end
124
+
125
+ def set_color(r, g = 0, b = 0)
126
+ @r = r
127
+ @g = g
128
+ @b = b
129
+ end
130
+
131
+ def set_palette(i, r, g, b)
132
+ i = i % 256
133
+ r = (r % 256) << 2
134
+ g = (g % 256) << 2
135
+ b = (b % 256) << 2
136
+ @socket.write([3, i, r, g, b].pack('CCCCC'))
137
+ end
138
+
89
139
  def move_to(x, y)
90
- x0 = x0.to_i
91
- y0 = y0.to_i
92
- x1 = x1.to_i
93
- y1 = y1.to_i
140
+ x = x.to_i
141
+ y = y.to_i
94
142
  return if x < 0 || x >= @width || y < 0 || y >= @height
95
143
  @x = x
96
144
  @y = y
@@ -101,7 +149,10 @@ module Pixelflow
101
149
  @socket.flush
102
150
  end
103
151
 
104
- def set_pixel(x, y, r, g = 0, b = 0)
152
+ def set_pixel(x, y, r = nil, g = nil, b = nil)
153
+ r ||= @r
154
+ g ||= @g
155
+ b ||= @b
105
156
  x0 = x0.to_i
106
157
  y0 = y0.to_i
107
158
  x1 = x1.to_i
@@ -112,6 +163,14 @@ module Pixelflow
112
163
  end
113
164
  if @color_mode == :rgb
114
165
  offset = (@y * @width + @x) * 3
166
+ if @compose_mode == :add
167
+ r += @screen[offset + 0]
168
+ g += @screen[offset + 1]
169
+ b += @screen[offset + 2]
170
+ r = 255 if r > 255
171
+ g = 255 if g > 255
172
+ b = 255 if b > 255
173
+ end
115
174
  @screen[offset + 0] = r
116
175
  @screen[offset + 1] = g
117
176
  @screen[offset + 2] = b
@@ -155,52 +214,36 @@ module Pixelflow
155
214
  end
156
215
  end
157
216
 
158
- def flip()
159
- if @draw_mode == :buffered
160
- @socket.write([7].pack('C'))
161
- @socket.write(@screen.pack('C*'))
162
- @socket.flush
163
- end
164
- end
165
-
166
- def ensure_max_fps(fps)
167
- fps1 = 1.0 / fps
168
- t = Time.now.to_f
169
- dt = t - @last_timestamp
170
- sleep(fps1 - dt) if dt < fps1
171
- @last_timestamp = t
172
- end
173
-
174
- def draw_rect(x0, y0, x1, y1, color)
217
+ def draw_rect(x0, y0, x1, y1)
175
218
  x0 = x0.to_i
176
219
  y0 = y0.to_i
177
220
  x1 = x1.to_i
178
221
  y1 = y1.to_i
179
222
  (x0..x1).each do |x|
180
- set_pixel(x, y0, color)
223
+ set_pixel(x, y0)
181
224
  end
182
225
  (x0..x1).each do |x|
183
- set_pixel(x, y1, color)
226
+ set_pixel(x, y1)
184
227
  end
185
228
  (y0+1..y1-1).each do |y|
186
- set_pixel(x0, y, color)
187
- set_pixel(x1, y, color)
229
+ set_pixel(x0, y)
230
+ set_pixel(x1, y)
188
231
  end
189
232
  end
190
233
 
191
- def fill_rect(x0, y0, x1, y1, color)
234
+ def fill_rect(x0, y0, x1, y1)
192
235
  x0 = x0.to_i
193
236
  y0 = y0.to_i
194
237
  x1 = x1.to_i
195
238
  y1 = y1.to_i
196
239
  (y0..y1).each do |y|
197
240
  (x0..x1).each do |x|
198
- set_pixel(x, y, color)
241
+ set_pixel(x, y)
199
242
  end
200
243
  end
201
244
  end
202
245
 
203
- def draw_line(x0, y0, x1, y1, color)
246
+ def draw_line(x0, y0, x1, y1)
204
247
  x0 = x0.to_i
205
248
  y0 = y0.to_i
206
249
  x1 = x1.to_i
@@ -211,7 +254,7 @@ module Pixelflow
211
254
  sy = y0 < y1 ? 1 : -1
212
255
  err = dx - dy
213
256
  loop do
214
- set_pixel(x0, y0, color)
257
+ set_pixel(x0, y0)
215
258
  break if x0 == x1 && y0 == y1
216
259
  e2 = 2 * err
217
260
  if e2 > -dy
@@ -225,19 +268,19 @@ module Pixelflow
225
268
  end
226
269
  end
227
270
 
228
- def draw_circle(x, y, radius, color)
271
+ def draw_circle(x, y, r)
229
272
  x = x.to_i
230
273
  y = y.to_i
231
- radius = radius.to_i
232
- f = 1 - radius
274
+ r = r.to_i
275
+ f = 1 - r
233
276
  ddF_x = 1
234
- ddF_y = -2 * radius
277
+ ddF_y = -2 * r
235
278
  xx = 0
236
- yy = radius
237
- set_pixel(x, y + radius, color)
238
- set_pixel(x, y - radius, color)
239
- set_pixel(x + radius, y, color)
240
- set_pixel(x - radius, y, color)
279
+ yy = r
280
+ set_pixel(x, y + r)
281
+ set_pixel(x, y - r)
282
+ set_pixel(x + r, y)
283
+ set_pixel(x - r, y)
241
284
  while xx < yy
242
285
  if f >= 0
243
286
  yy -= 1
@@ -247,18 +290,18 @@ module Pixelflow
247
290
  xx += 1
248
291
  ddF_x += 2
249
292
  f += ddF_x
250
- set_pixel(x + xx, y + yy, color)
251
- set_pixel(x - xx, y + yy, color)
252
- set_pixel(x + xx, y - yy, color)
253
- set_pixel(x - xx, y - yy, color)
254
- set_pixel(x + yy, y + xx, color)
255
- set_pixel(x - yy, y + xx, color)
256
- set_pixel(x + yy, y - xx, color)
257
- set_pixel(x - yy, y - xx, color)
293
+ set_pixel(x + xx, y + yy)
294
+ set_pixel(x - xx, y + yy)
295
+ set_pixel(x + xx, y - yy)
296
+ set_pixel(x - xx, y - yy)
297
+ set_pixel(x + yy, y + xx)
298
+ set_pixel(x - yy, y + xx)
299
+ set_pixel(x + yy, y - xx)
300
+ set_pixel(x - yy, y - xx)
258
301
  end
259
302
  end
260
303
 
261
- def fill_circle(x, y, r, color)
304
+ def fill_circle(x, y, r)
262
305
  x = x.to_i
263
306
  y = y.to_i
264
307
  r = r.to_i
@@ -268,7 +311,7 @@ module Pixelflow
268
311
  xx = 0
269
312
  yy = r
270
313
  (y - r..y + r).each do |i|
271
- set_pixel(x, i, color)
314
+ set_pixel(x, i)
272
315
  end
273
316
  while xx < yy
274
317
  if f >= 0
@@ -280,33 +323,33 @@ module Pixelflow
280
323
  ddF_x += 2
281
324
  f += ddF_x
282
325
  (y - yy..y + yy).each do |i|
283
- set_pixel(x + xx, i, color)
284
- set_pixel(x - xx, i, color)
326
+ set_pixel(x + xx, i)
327
+ set_pixel(x - xx, i)
285
328
  end
286
329
  (y - xx..y + xx).each do |i|
287
- set_pixel(x + yy, i, color)
288
- set_pixel(x - yy, i, color)
330
+ set_pixel(x + yy, i)
331
+ set_pixel(x - yy, i)
289
332
  end
290
333
  end
291
334
  end
292
335
 
293
- def draw_ellipse(x, y, a, b, color)
336
+ def draw_ellipse(x, y, ra, rb)
294
337
  x = x.to_i
295
338
  y = y.to_i
296
- a = a.to_i
297
- b = b.to_i
298
- a2 = a * a
299
- b2 = b * b
339
+ ra = ra.to_i
340
+ rb = rb.to_i
341
+ a2 = ra * ra
342
+ b2 = rb * rb
300
343
  fa2 = 4 * a2
301
344
  fb2 = 4 * b2
302
345
  x0 = 0
303
346
  y0 = b
304
- sigma = 2 * b2 + a2 * (1 - 2 * b)
347
+ sigma = 2 * b2 + a2 * (1 - 2 * rb)
305
348
  while b2 * x0 <= a2 * y0
306
- set_pixel(x + x0, y + y0, color)
307
- set_pixel(x - x0, y + y0, color)
308
- set_pixel(x + x0, y - y0, color)
309
- set_pixel(x - x0, y - y0, color)
349
+ set_pixel(x + x0, y + y0)
350
+ set_pixel(x - x0, y + y0)
351
+ set_pixel(x + x0, y - y0)
352
+ set_pixel(x - x0, y - y0)
310
353
  if sigma >= 0
311
354
  sigma += fa2 * (1 - y0)
312
355
  y0 -= 1
@@ -316,12 +359,12 @@ module Pixelflow
316
359
  end
317
360
  x0 = a
318
361
  y0 = 0
319
- sigma = 2 * a2 + b2 * (1 - 2 * a)
362
+ sigma = 2 * a2 + b2 * (1 - 2 * ra)
320
363
  while a2 * y0 <= b2 * x0
321
- set_pixel(x + x0, y + y0, color)
322
- set_pixel(x - x0, y + y0, color)
323
- set_pixel(x + x0, y - y0, color)
324
- set_pixel(x - x0, y - y0, color)
364
+ set_pixel(x + x0, y + y0)
365
+ set_pixel(x - x0, y + y0)
366
+ set_pixel(x + x0, y - y0)
367
+ set_pixel(x - x0, y - y0)
325
368
  if sigma >= 0
326
369
  sigma += fb2 * (1 - x0)
327
370
  x0 -= 1
@@ -331,22 +374,22 @@ module Pixelflow
331
374
  end
332
375
  end
333
376
 
334
- def fill_ellipse(x, y, a, b, color)
377
+ def fill_ellipse(x, y, ra, rb)
335
378
  x = x.to_i
336
379
  y = y.to_i
337
- a = a.to_i
338
- b = b.to_i
339
- a2 = a * a
340
- b2 = b * b
380
+ ra = ra.to_i
381
+ rb = rb.to_i
382
+ a2 = ra * ra
383
+ b2 = rb * rb
341
384
  fa2 = 4 * a2
342
385
  fb2 = 4 * b2
343
386
  x0 = 0
344
387
  y0 = b
345
- sigma = 2 * b2 + a2 * (1 - 2 * b)
388
+ sigma = 2 * b2 + a2 * (1 - 2 * rb)
346
389
  while b2 * x0 <= a2 * y0
347
390
  (x - x0..x + x0).each do |i|
348
- set_pixel(i, y + y0, color)
349
- set_pixel(i, y - y0, color)
391
+ set_pixel(i, y + y0)
392
+ set_pixel(i, y - y0)
350
393
  end
351
394
  if sigma >= 0
352
395
  sigma += fa2 * (1 - y0)
@@ -357,11 +400,11 @@ module Pixelflow
357
400
  end
358
401
  x0 = a
359
402
  y0 = 0
360
- sigma = 2 * a2 + b2 * (1 - 2 * a)
403
+ sigma = 2 * a2 + b2 * (1 - 2 * ra)
361
404
  while a2 * y0 <= b2 * x0
362
405
  (x - x0..x + x0).each do |i|
363
- set_pixel(i, y + y0, color)
364
- set_pixel(i, y - y0, color)
406
+ set_pixel(i, y + y0)
407
+ set_pixel(i, y - y0)
365
408
  end
366
409
  if sigma >= 0
367
410
  sigma += fb2 * (1 - x0)
@@ -372,7 +415,7 @@ module Pixelflow
372
415
  end
373
416
  end
374
417
 
375
- def draw_quadratic_bezier(x0, y0, x1, y1, x2, y2, color, steps = 100)
418
+ def draw_quadratic_bezier(x0, y0, x1, y1, x2, y2, steps = 100)
376
419
  steps = steps.to_i
377
420
  xp = nil
378
421
  yp = nil
@@ -381,14 +424,14 @@ module Pixelflow
381
424
  x = (1 - t) ** 2 * x0 + 2 * (1 - t) * t * x1 + t ** 2 * x2
382
425
  y = (1 - t) ** 2 * y0 + 2 * (1 - t) * t * y1 + t ** 2 * y2
383
426
  if xp && yp
384
- draw_line(xp.to_i, yp.to_i, x.to_i, y.to_i, color)
427
+ draw_line(xp.to_i, yp.to_i, x.to_i, y.to_i)
385
428
  end
386
429
  xp = x
387
430
  yp = y
388
431
  end
389
432
  end
390
433
 
391
- def draw_cubic_bezier(x0, y0, x1, y1, x2, y2, x3, y3, color, steps = 100)
434
+ def draw_cubic_bezier(x0, y0, x1, y1, x2, y2, x3, y3, steps = 100)
392
435
  steps = steps.to_i
393
436
  xp = nil
394
437
  yp = nil
@@ -397,17 +440,49 @@ module Pixelflow
397
440
  x = (1 - t) ** 3 * x0 + 3 * (1 - t) ** 2 * t * x1 + 3 * (1 - t) * t ** 2 * x2 + t ** 3 * x3
398
441
  y = (1 - t) ** 3 * y0 + 3 * (1 - t) ** 2 * t * y1 + 3 * (1 - t) * t ** 2 * y2 + t ** 3 * y3
399
442
  if xp && yp
400
- draw_line(xp.to_i, yp.to_i, x.to_i, y.to_i, color)
443
+ draw_line(xp.to_i, yp.to_i, x.to_i, y.to_i)
401
444
  end
402
445
  xp = x
403
446
  yp = y
404
447
  end
405
448
  end
406
449
 
407
- def draw_triangle(x0, y0, x1, y1, x2, y2, color)
408
- draw_line(x0, y0, x1, y1, color)
409
- draw_line(x1, y1, x2, y2, color)
410
- draw_line(x2, y2, x0, y0, color)
450
+ def draw_triangle(x0, y0, x1, y1, x2, y2)
451
+ draw_line(x0, y0, x1, y1)
452
+ draw_line(x1, y1, x2, y2)
453
+ draw_line(x2, y2, x0, y0)
454
+ end
455
+ end
456
+
457
+ class Turtle
458
+ def initialize(canvas)
459
+ @canvas = canvas
460
+ @x = canvas.width / 2.0
461
+ @y = canvas.height / 2.0
462
+ @phi = 270.0
463
+ @pen_down = true
464
+ end
465
+
466
+ attr_accessor :x, :y, :phi, :color, :pen_down
467
+
468
+ def forward(l)
469
+ nx = @x + Math.cos(@phi * Math::PI / 180.0) * l
470
+ ny = @y + Math.sin(@phi * Math::PI / 180.0) * l
471
+ @canvas.draw_line(@x, @y, nx, ny) if @pen_down
472
+ @x = nx
473
+ @y = ny
474
+ end
475
+
476
+ def set_color(r = 0, g = nil, b = nil)
477
+ @canvas.set_color(r, g, b)
478
+ end
479
+
480
+ def turn_left(phi)
481
+ @phi -= phi
482
+ end
483
+
484
+ def turn_right(phi)
485
+ @phi += phi
411
486
  end
412
487
  end
413
488
  end
data/test-anaglyph.rb ADDED
@@ -0,0 +1,13 @@
1
+ require './lib/pixelflow_canvas.rb'
2
+
3
+ width = 256
4
+ height = 256
5
+
6
+ canvas = Pixelflow::Canvas.new(width, height, :rgb)
7
+ canvas.set_compose_mode(:add)
8
+
9
+ canvas.set_color(255, 0, 0)
10
+ canvas.draw_line(10, 10, 100, 200)
11
+
12
+ canvas.set_color(0, 255, 0)
13
+ canvas.draw_line(20, 10, 90, 200)
data/test-draw.rb ADDED
@@ -0,0 +1,26 @@
1
+ require './lib/pixelflow_canvas.rb'
2
+
3
+ width = 256
4
+ height = 256
5
+
6
+ canvas = Pixelflow::Canvas.new(width, height, :palette)
7
+ canvas.set_interpolation_mode(:bilinear)
8
+ turtle = Pixelflow::Turtle.new(canvas)
9
+ turtle.set_color(13)
10
+
11
+ def draw(canvas, x0, y0, x1, y1, x2, y2, level)
12
+ canvas.draw_triangle(x0, y0, x1, y1, x2, y2)
13
+ mx0 = (x0 + x1) / 2
14
+ my0 = (y0 + y1) / 2
15
+ mx1 = (x1 + x2) / 2
16
+ my1 = (y1 + y2) / 2
17
+ mx2 = (x2 + x0) / 2
18
+ my2 = (y2 + y0) / 2
19
+ if level > 0
20
+ draw(canvas, x0, y0, mx0, my0, mx2, my2, level - 1)
21
+ draw(canvas, x1, y1, mx1, my1, mx0, my0, level - 1)
22
+ draw(canvas, x2, y2, mx2, my2, mx1, my1, level - 1)
23
+ end
24
+ end
25
+
26
+ draw(canvas, 128, 10, 10, 186, 246, 246, 5)
data/test-sirds.rb ADDED
@@ -0,0 +1,36 @@
1
+ require './lib/pixelflow_canvas.rb'
2
+
3
+ def depth(x, y)
4
+ r = (x - 128) ** 2 + (y - 128) ** 2
5
+ return 10 if r < 5000
6
+ r * 0.001
7
+ end
8
+
9
+ width = 256
10
+ height = 256
11
+
12
+ canvas = Pixelflow::Canvas.new(width, height, :palette)
13
+ (0...64).each { |i| canvas.set_palette(i, i, i, i) }
14
+ (0...height).each do |y|
15
+ (0...48).each do |x|
16
+ canvas.set_pixel(x, y, rand(64))
17
+ end
18
+ end
19
+ (0...height).each do |y|
20
+ sx = 0
21
+ dx = 48
22
+ while dx < width
23
+ c = canvas.get_pixel(sx, y)
24
+ canvas.set_pixel(dx, y, c)
25
+ dx += 1
26
+ sx = dx - 48 + depth(dx - 24, y)
27
+ end
28
+ end
29
+
30
+ # (0...height).each do |y|
31
+ # (0...width).each do |x|
32
+ # d = depth(x, y)
33
+ # canvas.set_pixel(x, y, d)
34
+ # end
35
+ # end
36
+
data/test-turtle.rb ADDED
@@ -0,0 +1,14 @@
1
+ require './lib/pixelflow_canvas.rb'
2
+
3
+ width = 256
4
+ height = 256
5
+
6
+ canvas = Pixelflow::Canvas.new(width, height, :palette)
7
+ turtle = Pixelflow::Turtle.new(canvas)
8
+ turtle.set_color(13)
9
+
10
+ turtle.forward(10)
11
+ turtle.turn_right(90)
12
+ turtle.forward(10)
13
+ turtle.turn_right(90)
14
+ turtle.forward(10)
data/test.rb ADDED
@@ -0,0 +1,36 @@
1
+ require './lib/pixelflow_canvas.rb'
2
+
3
+ def depth(x, y)
4
+ r = (x - 128) ** 2 + (y - 128) ** 2
5
+ return 10 if r < 5000
6
+ r * 0.001
7
+ end
8
+
9
+ width = 256
10
+ height = 256
11
+
12
+ canvas = Pixelflow::Canvas.new(width, height, :palette)
13
+ (0...64).each { |i| canvas.set_palette(i, i, i, i) }
14
+ (0...height).each do |y|
15
+ (0...48).each do |x|
16
+ canvas.set_pixel(x, y, rand(64))
17
+ end
18
+ end
19
+ (0...height).each do |y|
20
+ sx = 0
21
+ dx = 48
22
+ while dx < width
23
+ c = canvas.get_pixel(sx, y)
24
+ canvas.set_pixel(dx, y, c)
25
+ dx += 1
26
+ sx = dx - 48 + depth(dx - 24, y)
27
+ end
28
+ end
29
+
30
+ # (0...height).each do |y|
31
+ # (0...width).each do |x|
32
+ # d = depth(x, y)
33
+ # canvas.set_pixel(x, y, d)
34
+ # end
35
+ # end
36
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pixelflow_canvas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Specht
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-10-24 00:00:00.000000000 Z
11
+ date: 2024-10-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Use a virtual CRT for old school graphics programming, in VS Code, from
14
14
  Ruby.
@@ -24,6 +24,11 @@ files:
24
24
  - lib/pixelflow_canvas.rb
25
25
  - lib/pixelflow_canvas/version.rb
26
26
  - sig/pixelflow_canvas.rbs
27
+ - test-anaglyph.rb
28
+ - test-draw.rb
29
+ - test-sirds.rb
30
+ - test-turtle.rb
31
+ - test.rb
27
32
  homepage: https://github.com/specht/pixelflow_canvas_ruby
28
33
  licenses:
29
34
  - GPL-3.0-only