processing 0.5.34 → 1.0.1
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 +18 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +2 -0
- data/Rakefile +5 -5
- data/VERSION +1 -1
- data/lib/processing/all.rb +4 -1
- data/lib/processing/context.rb +0 -1
- data/lib/processing/graphics_context.rb +209 -41
- data/lib/processing/image.rb +0 -5
- data/lib/processing/shape.rb +119 -26
- data/lib/processing/svg.rb +248 -0
- data/processing.gemspec +4 -4
- data/test/{p5.rb → browser.rb} +37 -3
- data/test/helper.rb +40 -7
- data/test/test_color.rb +94 -0
- data/test/test_graphics_context.rb +26 -59
- data/test/test_shape.rb +129 -6
- data/test/test_svg.rb +257 -0
- metadata +17 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7ebe70f2fc384d5892bfc8bf33773451585c82aecc01e36f594803cbd3cbe4c
|
4
|
+
data.tar.gz: fccd650cf7fa9e38f499c7d279624c5a30aa5eb40bde70d9a3c6c5c4ce8805f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 875bdd9a5bdce3f8aa0b9490e7dd8fa526859999dbef0ac6fe7dcb4984f6c1f76435b550dfbf249ff817fb7e5b07dabea543e9d70c99887baebb0a7c0ecc5c23
|
7
|
+
data.tar.gz: 1f7348aaa12c5fc0893e9a6ca6c177daa2efc1c98934ebb5d50fb714638da2a7fd09c563c51c4fdd00ea2f9e634e460d3e5a6ad5ba3e68e9ca09f02c004d28b0
|
data/ChangeLog.md
CHANGED
@@ -1,6 +1,24 @@
|
|
1
1
|
# processing ChangeLog
|
2
2
|
|
3
3
|
|
4
|
+
## [v1.0.1] - 2024-03-14
|
5
|
+
|
6
|
+
- Add 'rexml' to Gemfile
|
7
|
+
|
8
|
+
|
9
|
+
## [v1.0] - 2024-03-14
|
10
|
+
|
11
|
+
- Add stroke(), setStroke(), and setStrokeWeight() to Shape class
|
12
|
+
- Add setStrokeCap() and setStrokeJoin() to Shape class
|
13
|
+
- Add join type 'miter-clip' and 'arcs'
|
14
|
+
- Add color codes
|
15
|
+
- Add loadShape()
|
16
|
+
|
17
|
+
- Rename the join type 'SQUARE' to 'BEVEL'
|
18
|
+
|
19
|
+
- Fix that <circle> and <ellipse> had half diameters
|
20
|
+
|
21
|
+
|
4
22
|
## [v0.5.34] - 2024-02-16
|
5
23
|
|
6
24
|
- Add '@see' links to documents
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/Rakefile
CHANGED
@@ -14,15 +14,15 @@ require 'reflex/extension'
|
|
14
14
|
require 'processing/extension'
|
15
15
|
|
16
16
|
|
17
|
-
def
|
18
|
-
ENV['
|
17
|
+
def test_with_browser()
|
18
|
+
ENV['TEST_WITH_BROWSER'] = '1'
|
19
19
|
end
|
20
20
|
|
21
21
|
EXTENSIONS = [Xot, Rucy, Rays, Reflex, Processing]
|
22
22
|
|
23
23
|
ENV['RDOC'] = 'yardoc --no-private'
|
24
24
|
|
25
|
-
#
|
25
|
+
#test_with_browser if ci?
|
26
26
|
|
27
27
|
default_tasks
|
28
28
|
use_bundler
|
@@ -37,8 +37,8 @@ namespace :test do
|
|
37
37
|
sh %( rm -rf test/.png/*.png )
|
38
38
|
end
|
39
39
|
|
40
|
-
task :
|
41
|
-
|
40
|
+
task :with_browser do
|
41
|
+
test_with_browser
|
42
42
|
end
|
43
43
|
|
44
44
|
::Rake::TestTask.new :draw do |t|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.1
|
data/lib/processing/all.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'set'
|
2
|
+
require 'strscan'
|
2
3
|
require 'digest/sha1'
|
3
4
|
require 'pathname'
|
4
5
|
require 'tmpdir'
|
5
|
-
require 'net/http'
|
6
6
|
require 'uri'
|
7
|
+
require 'rexml'
|
8
|
+
require 'net/http'
|
7
9
|
require 'xot/inspectable'
|
8
10
|
require 'reflex'
|
9
11
|
|
@@ -16,6 +18,7 @@ require 'processing/image'
|
|
16
18
|
require 'processing/font'
|
17
19
|
require 'processing/touch'
|
18
20
|
require 'processing/shape'
|
21
|
+
require 'processing/svg'
|
19
22
|
require 'processing/shader'
|
20
23
|
require 'processing/capture'
|
21
24
|
require 'processing/graphics_context'
|
data/lib/processing/context.rb
CHANGED
@@ -70,6 +70,14 @@ module Processing
|
|
70
70
|
#
|
71
71
|
RADIUS = :radius
|
72
72
|
|
73
|
+
# Mode for strokeCap() and strokeJoin().
|
74
|
+
#
|
75
|
+
ROUND = :round
|
76
|
+
|
77
|
+
# Mode for strokeCap().
|
78
|
+
#
|
79
|
+
SQUARE = :butt
|
80
|
+
|
73
81
|
# Mode for strokeCap().
|
74
82
|
#
|
75
83
|
PROJECT = :square
|
@@ -80,11 +88,7 @@ module Processing
|
|
80
88
|
|
81
89
|
# Mode for strokeCap() and strokeJoin().
|
82
90
|
#
|
83
|
-
|
84
|
-
|
85
|
-
# Mode for strokeCap() and strokeJoin().
|
86
|
-
#
|
87
|
-
SQUARE = :butt
|
91
|
+
BEVEL = :square
|
88
92
|
|
89
93
|
# Mode for blendMode().
|
90
94
|
#
|
@@ -292,6 +296,158 @@ module Processing
|
|
292
296
|
UP = :up
|
293
297
|
DOWN = :down
|
294
298
|
|
299
|
+
COLOR_CODES = {
|
300
|
+
aliceblue: '#f0f8ff',
|
301
|
+
antiquewhite: '#faebd7',
|
302
|
+
aqua: '#00ffff',
|
303
|
+
aquamarine: '#7fffd4',
|
304
|
+
azure: '#f0ffff',
|
305
|
+
beige: '#f5f5dc',
|
306
|
+
bisque: '#ffe4c4',
|
307
|
+
black: '#000000',
|
308
|
+
blanchedalmond: '#ffebcd',
|
309
|
+
blue: '#0000ff',
|
310
|
+
blueviolet: '#8a2be2',
|
311
|
+
brown: '#a52a2a',
|
312
|
+
burlywood: '#deb887',
|
313
|
+
cadetblue: '#5f9ea0',
|
314
|
+
chartreuse: '#7fff00',
|
315
|
+
chocolate: '#d2691e',
|
316
|
+
coral: '#ff7f50',
|
317
|
+
cornflowerblue: '#6495ed',
|
318
|
+
cornsilk: '#fff8dc',
|
319
|
+
crimson: '#dc143c',
|
320
|
+
cyan: '#00ffff',
|
321
|
+
darkblue: '#00008b',
|
322
|
+
darkcyan: '#008b8b',
|
323
|
+
darkgoldenrod: '#b8860b',
|
324
|
+
darkgray: '#a9a9a9',
|
325
|
+
darkgreen: '#006400',
|
326
|
+
darkgrey: '#a9a9a9',
|
327
|
+
darkkhaki: '#bdb76b',
|
328
|
+
darkmagenta: '#8b008b',
|
329
|
+
darkolivegreen: '#556b2f',
|
330
|
+
darkorange: '#ff8c00',
|
331
|
+
darkorchid: '#9932cc',
|
332
|
+
darkred: '#8b0000',
|
333
|
+
darksalmon: '#e9967a',
|
334
|
+
darkseagreen: '#8fbc8f',
|
335
|
+
darkslateblue: '#483d8b',
|
336
|
+
darkslategray: '#2f4f4f',
|
337
|
+
darkslategrey: '#2f4f4f',
|
338
|
+
darkturquoise: '#00ced1',
|
339
|
+
darkviolet: '#9400d3',
|
340
|
+
deeppink: '#ff1493',
|
341
|
+
deepskyblue: '#00bfff',
|
342
|
+
dimgray: '#696969',
|
343
|
+
dimgrey: '#696969',
|
344
|
+
dodgerblue: '#1e90ff',
|
345
|
+
firebrick: '#b22222',
|
346
|
+
floralwhite: '#fffaf0',
|
347
|
+
forestgreen: '#228b22',
|
348
|
+
fuchsia: '#ff00ff',
|
349
|
+
gainsboro: '#dcdcdc',
|
350
|
+
ghostwhite: '#f8f8ff',
|
351
|
+
goldenrod: '#daa520',
|
352
|
+
gold: '#ffd700',
|
353
|
+
gray: '#808080',
|
354
|
+
green: '#008000',
|
355
|
+
greenyellow: '#adff2f',
|
356
|
+
grey: '#808080',
|
357
|
+
honeydew: '#f0fff0',
|
358
|
+
hotpink: '#ff69b4',
|
359
|
+
indianred: '#cd5c5c',
|
360
|
+
indigo: '#4b0082',
|
361
|
+
ivory: '#fffff0',
|
362
|
+
khaki: '#f0e68c',
|
363
|
+
lavenderblush: '#fff0f5',
|
364
|
+
lavender: '#e6e6fa',
|
365
|
+
lawngreen: '#7cfc00',
|
366
|
+
lemonchiffon: '#fffacd',
|
367
|
+
lightblue: '#add8e6',
|
368
|
+
lightcoral: '#f08080',
|
369
|
+
lightcyan: '#e0ffff',
|
370
|
+
lightgoldenrodyellow: '#fafad2',
|
371
|
+
lightgray: '#d3d3d3',
|
372
|
+
lightgreen: '#90ee90',
|
373
|
+
lightgrey: '#d3d3d3',
|
374
|
+
lightpink: '#ffb6c1',
|
375
|
+
lightsalmon: '#ffa07a',
|
376
|
+
lightseagreen: '#20b2aa',
|
377
|
+
lightskyblue: '#87cefa',
|
378
|
+
lightslategray: '#778899',
|
379
|
+
lightslategrey: '#778899',
|
380
|
+
lightsteelblue: '#b0c4de',
|
381
|
+
lightyellow: '#ffffe0',
|
382
|
+
lime: '#00ff00',
|
383
|
+
limegreen: '#32cd32',
|
384
|
+
linen: '#faf0e6',
|
385
|
+
magenta: '#ff00ff',
|
386
|
+
maroon: '#800000',
|
387
|
+
mediumaquamarine: '#66cdaa',
|
388
|
+
mediumblue: '#0000cd',
|
389
|
+
mediumorchid: '#ba55d3',
|
390
|
+
mediumpurple: '#9370db',
|
391
|
+
mediumseagreen: '#3cb371',
|
392
|
+
mediumslateblue: '#7b68ee',
|
393
|
+
mediumspringgreen: '#00fa9a',
|
394
|
+
mediumturquoise: '#48d1cc',
|
395
|
+
mediumvioletred: '#c71585',
|
396
|
+
midnightblue: '#191970',
|
397
|
+
mintcream: '#f5fffa',
|
398
|
+
mistyrose: '#ffe4e1',
|
399
|
+
moccasin: '#ffe4b5',
|
400
|
+
navajowhite: '#ffdead',
|
401
|
+
navy: '#000080',
|
402
|
+
oldlace: '#fdf5e6',
|
403
|
+
olive: '#808000',
|
404
|
+
olivedrab: '#6b8e23',
|
405
|
+
orange: '#ffa500',
|
406
|
+
orangered: '#ff4500',
|
407
|
+
orchid: '#da70d6',
|
408
|
+
palegoldenrod: '#eee8aa',
|
409
|
+
palegreen: '#98fb98',
|
410
|
+
paleturquoise: '#afeeee',
|
411
|
+
palevioletred: '#db7093',
|
412
|
+
papayawhip: '#ffefd5',
|
413
|
+
peachpuff: '#ffdab9',
|
414
|
+
peru: '#cd853f',
|
415
|
+
pink: '#ffc0cb',
|
416
|
+
plum: '#dda0dd',
|
417
|
+
powderblue: '#b0e0e6',
|
418
|
+
purple: '#800080',
|
419
|
+
rebeccapurple: '#663399',
|
420
|
+
red: '#ff0000',
|
421
|
+
rosybrown: '#bc8f8f',
|
422
|
+
royalblue: '#4169e1',
|
423
|
+
saddlebrown: '#8b4513',
|
424
|
+
salmon: '#fa8072',
|
425
|
+
sandybrown: '#f4a460',
|
426
|
+
seagreen: '#2e8b57',
|
427
|
+
seashell: '#fff5ee',
|
428
|
+
sienna: '#a0522d',
|
429
|
+
silver: '#c0c0c0',
|
430
|
+
skyblue: '#87ceeb',
|
431
|
+
slateblue: '#6a5acd',
|
432
|
+
slategray: '#708090',
|
433
|
+
slategrey: '#708090',
|
434
|
+
snow: '#fffafa',
|
435
|
+
springgreen: '#00ff7f',
|
436
|
+
steelblue: '#4682b4',
|
437
|
+
tan: '#d2b48c',
|
438
|
+
teal: '#008080',
|
439
|
+
thistle: '#d8bfd8',
|
440
|
+
tomato: '#ff6347',
|
441
|
+
turquoise: '#40e0d0',
|
442
|
+
violet: '#ee82ee',
|
443
|
+
wheat: '#f5deb3',
|
444
|
+
white: '#ffffff',
|
445
|
+
whitesmoke: '#f5f5f5',
|
446
|
+
yellow: '#ffff00',
|
447
|
+
yellowgreen: '#9acd32',
|
448
|
+
none: '#00000000',
|
449
|
+
}
|
450
|
+
|
295
451
|
# @private
|
296
452
|
DEG2RAD__ = Math::PI / 180.0
|
297
453
|
|
@@ -535,6 +691,15 @@ module Processing
|
|
535
691
|
.then {|r, g, b, a| Image.toColor__ r, g, b, a}
|
536
692
|
end
|
537
693
|
|
694
|
+
# @private
|
695
|
+
private def color2raw__(color)
|
696
|
+
Rays::Color.new(
|
697
|
+
((color >> 16) & 0xff) / 255.0,
|
698
|
+
((color >> 8) & 0xff) / 255.0,
|
699
|
+
( color & 0xff) / 255.0,
|
700
|
+
((color >> 24) & 0xff) / 255.0)
|
701
|
+
end
|
702
|
+
|
538
703
|
# Returns the red value of the color.
|
539
704
|
#
|
540
705
|
# @param color [Numeric] color value
|
@@ -597,7 +762,7 @@ module Processing
|
|
597
762
|
# @see https://p5js.org/reference/#/p5/hue
|
598
763
|
#
|
599
764
|
def hue(color)
|
600
|
-
h, =
|
765
|
+
h, = color2raw__(color).to_hsv
|
601
766
|
h * (@hsbColor__ ? @colorMaxes__[0] : 1)
|
602
767
|
end
|
603
768
|
|
@@ -611,7 +776,7 @@ module Processing
|
|
611
776
|
# @see https://p5js.org/reference/#/p5/saturation
|
612
777
|
#
|
613
778
|
def saturation(color)
|
614
|
-
_, s, =
|
779
|
+
_, s, = color2raw__(color).to_hsv
|
615
780
|
s * (@hsbColor__ ? @colorMaxes__[1] : 1)
|
616
781
|
end
|
617
782
|
|
@@ -625,36 +790,42 @@ module Processing
|
|
625
790
|
# @see https://p5js.org/reference/#/p5/brightness
|
626
791
|
#
|
627
792
|
def brightness(color)
|
628
|
-
_, _, b =
|
793
|
+
_, _, b = color2raw__(color).to_hsv
|
629
794
|
b * (@hsbColor__ ? @colorMaxes__[2] : 1)
|
630
795
|
end
|
631
796
|
|
632
797
|
# @private
|
633
798
|
private def toRGBA__(*args)
|
634
|
-
|
635
|
-
return parseColor__(a, b || alphaMax__) if a.kind_of?(String)
|
636
|
-
rawColor__(*args).to_a
|
799
|
+
toRawColor__(*args).to_a
|
637
800
|
end
|
638
801
|
|
639
802
|
# @private
|
640
|
-
def
|
803
|
+
def toRawColor__(*args)
|
641
804
|
a, b, c, d = args
|
642
|
-
|
805
|
+
return parseColor__(a, b || alphaMax__) if a.is_a?(String) || a.is_a?(Symbol)
|
806
|
+
rgba =
|
807
|
+
case args.size
|
643
808
|
when 1, 2 then [a, a, a, b || alphaMax__]
|
644
809
|
when 3, 4 then [a, b, c, d || alphaMax__]
|
645
810
|
else raise ArgumentError
|
646
811
|
end
|
647
|
-
rgba = rgba.map.with_index {|
|
812
|
+
rgba = rgba.map.with_index {|n, i| n / @colorMaxes__[i]}
|
648
813
|
@hsbColor__ ? Rays::Color.hsv(*rgba) : Rays::Color.new(*rgba)
|
649
814
|
end
|
650
815
|
|
651
816
|
# @private
|
652
817
|
private def parseColor__(str, alpha)
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
818
|
+
str = COLOR_CODES[str.downcase.to_sym] || str if str !~ /^\s*#\d+/
|
819
|
+
r, g, b, a =
|
820
|
+
case str
|
821
|
+
when /^\s*##{'([0-9a-f]{2})' * 3}([0-9a-f]{2})?\s*$/i
|
822
|
+
$~[1..4].map {|n| n.to_i(16) / 255.0 if n}
|
823
|
+
when /^\s*##{'([0-9a-f]{1})' * 3}([0-9a-f]{1})?\s*$/i
|
824
|
+
$~[1..4].map {|n| n.to_i(16) / 15.0 if n}
|
825
|
+
else
|
826
|
+
raise ArgumentError, "invalid color code: '#{str}'"
|
827
|
+
end
|
828
|
+
Rays::Color.new(r, g, b, a || (alpha / alphaMax__))
|
658
829
|
end
|
659
830
|
|
660
831
|
# @private
|
@@ -662,15 +833,6 @@ module Processing
|
|
662
833
|
@colorMaxes__[3]
|
663
834
|
end
|
664
835
|
|
665
|
-
# @private
|
666
|
-
private def toRawColor__(color)
|
667
|
-
Rays::Color.new(
|
668
|
-
((color >> 16) & 0xff) / 255.0,
|
669
|
-
((color >> 8) & 0xff) / 255.0,
|
670
|
-
( color & 0xff) / 255.0,
|
671
|
-
((color >> 24) & 0xff) / 255.0)
|
672
|
-
end
|
673
|
-
|
674
836
|
# Sets angle mode.
|
675
837
|
#
|
676
838
|
# @param mode [RADIANS, DEGREES] RADIANS or DEGREES
|
@@ -835,11 +997,6 @@ module Processing
|
|
835
997
|
nil
|
836
998
|
end
|
837
999
|
|
838
|
-
# @private
|
839
|
-
def getFill__()
|
840
|
-
@painter__.fill
|
841
|
-
end
|
842
|
-
|
843
1000
|
# Disables filling.
|
844
1001
|
#
|
845
1002
|
# @return [nil] nil
|
@@ -905,8 +1062,9 @@ module Processing
|
|
905
1062
|
end
|
906
1063
|
|
907
1064
|
# Sets stroke cap mode.
|
1065
|
+
# The default cap if ROUND.
|
908
1066
|
#
|
909
|
-
# @param cap [
|
1067
|
+
# @param cap [ROUND, SQUARE, PROJECT]
|
910
1068
|
#
|
911
1069
|
# @return [nil] nil
|
912
1070
|
#
|
@@ -919,8 +1077,9 @@ module Processing
|
|
919
1077
|
end
|
920
1078
|
|
921
1079
|
# Sets stroke join mode.
|
1080
|
+
# The default join is MITER.
|
922
1081
|
#
|
923
|
-
# @param join [MITER,
|
1082
|
+
# @param join [MITER, BEVEL, ROUND]
|
924
1083
|
#
|
925
1084
|
# @return [nil] nil
|
926
1085
|
#
|
@@ -2288,6 +2447,11 @@ module Processing
|
|
2288
2447
|
popStyle
|
2289
2448
|
end
|
2290
2449
|
|
2450
|
+
# @private
|
2451
|
+
def getPainter__()
|
2452
|
+
@painter__
|
2453
|
+
end
|
2454
|
+
|
2291
2455
|
# @private
|
2292
2456
|
def getInternal__()
|
2293
2457
|
@image__
|
@@ -3021,19 +3185,19 @@ module Processing
|
|
3021
3185
|
end
|
3022
3186
|
|
3023
3187
|
# @private
|
3024
|
-
|
3188
|
+
def createLineShape__(x1, y1, x2, y2)
|
3025
3189
|
Shape.new Rays::Polygon.line(x1, y1, x2, y2), context: self
|
3026
3190
|
end
|
3027
3191
|
|
3028
3192
|
# @private
|
3029
|
-
|
3030
|
-
x, y, w, h = toXYWH__
|
3031
|
-
Shape.new Rays::Polygon.rect(x, y, w, h), context: self
|
3193
|
+
def createRectShape__(a, b, c, d, *args, mode: @rectMode__)
|
3194
|
+
x, y, w, h = toXYWH__ mode, a, b, c, d
|
3195
|
+
Shape.new Rays::Polygon.rect(x, y, w, h, *args), context: self
|
3032
3196
|
end
|
3033
3197
|
|
3034
3198
|
# @private
|
3035
|
-
|
3036
|
-
x, y, w, h = toXYWH__
|
3199
|
+
def createEllipseShape__(a, b, c, d, mode: @ellipseMode__)
|
3200
|
+
x, y, w, h = toXYWH__ mode, a, b, c, d
|
3037
3201
|
Shape.new Rays::Polygon.ellipse(x, y, w, h), context: self
|
3038
3202
|
end
|
3039
3203
|
|
@@ -3174,6 +3338,10 @@ module Processing
|
|
3174
3338
|
img
|
3175
3339
|
end
|
3176
3340
|
|
3341
|
+
def loadShape(filename)
|
3342
|
+
Processing::SVGLoader.new(self).load filename
|
3343
|
+
end
|
3344
|
+
|
3177
3345
|
# Loads shader file.
|
3178
3346
|
#
|
3179
3347
|
# @overload loadShader(fragPath)
|
data/lib/processing/image.rb
CHANGED