rubysketch 0.3.18 → 0.3.21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/release.yml +2 -2
- data/.github/workflows/test.yml +2 -2
- data/ChangeLog.md +30 -1
- data/Gemfile +1 -2
- data/Rakefile +1 -1
- data/RubySketch.podspec +28 -0
- data/VERSION +1 -1
- data/examples/glsl.rb +5 -8
- data/lib/rubysketch/glsl.rb +23 -16
- data/lib/rubysketch/processing.rb +361 -88
- data/lib/rubysketch/window.rb +20 -6
- data/lib/rubysketch-glsl.rb +11 -0
- data/lib/rubysketch-processing.rb +4 -2
- data/rubysketch.gemspec +3 -1
- data/src/RubySketch.h +15 -0
- data/src/RubySketch.mm +55 -0
- metadata +23 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: acfaff485263c8e6557c8610df2a4643e53d1046e55cf813c79b648492e84d52
|
4
|
+
data.tar.gz: d7beb5170988d554771d50d5a726b1f51c961cded8a3cf3370dc55ccc91059fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95ce0e61b8db2f0046bfd43070dd9d10f24b48f7838b267509b98e9a4b6930aa8958c065ae7af253c3877c754a5187ce970b80722421c32e6fbb9de4d1ebc05a
|
7
|
+
data.tar.gz: a810edf5f210a8a505fc3830697a46a76a743860a90118d1de38e99192d0cf43639dd5410409baf040c4b6feb0275a90d2cb330230b7457890d8555b9f257d5e
|
data/.github/workflows/test.yml
CHANGED
data/ChangeLog.md
CHANGED
@@ -1,12 +1,41 @@
|
|
1
1
|
# RubySketch ChangeLog
|
2
2
|
|
3
3
|
|
4
|
-
## [0.3.
|
4
|
+
## [0.3.21] - 2022-x-x
|
5
|
+
|
6
|
+
- add rubysketch-glsl.rb
|
7
|
+
- add blend(), createImage(), setTitle(), tint() and noTint()
|
8
|
+
- add save() that saves screen image to file
|
9
|
+
- circle() function is affected by ellipseMode()
|
10
|
+
- point() draws by line(x, y, x, y)
|
11
|
+
- change initial values for strokeCap and strokeJoin to ROUND and MITER
|
12
|
+
|
13
|
+
|
14
|
+
## [0.3.20] - 2022-07-24
|
15
|
+
|
16
|
+
- add mouseClicked()
|
17
|
+
- add blendMode()
|
18
|
+
- add clip() and noClip()
|
19
|
+
- translate() can take 'z' parameter
|
20
|
+
- fix that resizing canvas consumes too much memory
|
21
|
+
|
22
|
+
|
23
|
+
## [0.3.19] - 2021-12-5
|
24
|
+
|
25
|
+
- fix runtime error
|
26
|
+
|
27
|
+
|
28
|
+
## [0.3.18] - 2021-12-5
|
5
29
|
|
6
30
|
- add 'mouseButton'
|
7
31
|
- pointer cancel event calls pointer_up block
|
8
32
|
|
9
33
|
|
34
|
+
## [0.3.17] - 2021-12-5
|
35
|
+
|
36
|
+
- add Touch#id
|
37
|
+
|
38
|
+
|
10
39
|
## [0.3.16] - 2021-2-14
|
11
40
|
|
12
41
|
- add key, keyCode and keyPressed system values
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/RubySketch.podspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
|
3
|
+
|
4
|
+
Pod::Spec.new do |s|
|
5
|
+
s.name = "RubySketch"
|
6
|
+
s.version = File.readlines(File.expand_path 'VERSION', __dir__)[0].chomp
|
7
|
+
s.summary = "Yet Another Processing implementation for Ruby"
|
8
|
+
s.description = "Yet Another Processing implementation for Ruby"
|
9
|
+
s.license = "MIT"
|
10
|
+
s.source = {:git => "https://github.com/xord/rubysketch.git"}
|
11
|
+
s.author = {"xordog" => "xordog@gmail.com"}
|
12
|
+
s.homepage = "https://github.com/xord/rubysketch"
|
13
|
+
|
14
|
+
s.osx.deployment_target = "10.10"
|
15
|
+
s.ios.deployment_target = "10.0"
|
16
|
+
|
17
|
+
incdirs = %W[
|
18
|
+
#{s.name}/src
|
19
|
+
CRuby/CRuby/include
|
20
|
+
Reflexion/reflex/include
|
21
|
+
].map {|s| "${PODS_ROOT}/#{s}"}
|
22
|
+
|
23
|
+
s.preserve_paths = "src"
|
24
|
+
s.source_files = "src/*.mm"
|
25
|
+
s.xcconfig = {"HEADER_SEARCH_PATHS" => incdirs.join(' ')}
|
26
|
+
|
27
|
+
s.resource_bundles = {'RubySketch' => %w[lib VERSION]}
|
28
|
+
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.21
|
data/examples/glsl.rb
CHANGED
@@ -2,16 +2,13 @@
|
|
2
2
|
.map {|s| File.expand_path "../../#{s}/lib", __dir__}
|
3
3
|
.each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
|
4
4
|
|
5
|
-
require 'rubysketch'
|
5
|
+
require 'rubysketch-glsl'
|
6
6
|
|
7
|
-
|
8
|
-
RubySketch::GLSL.start <<END
|
9
|
-
varying vec4 v_TexCoord;
|
7
|
+
RubySketch::GLSL.run <<END
|
10
8
|
uniform vec2 resolution;
|
11
9
|
uniform float time;
|
12
|
-
void main
|
13
|
-
|
14
|
-
|
15
|
-
gl_FragColor = vec4(pos, float(mod(time, 1.0)), 1);
|
10
|
+
void main() {
|
11
|
+
vec2 pos = gl_FragCoord.xy / resolution;
|
12
|
+
gl_FragColor = vec4(pos * abs(sin(time)), 0, 1);
|
16
13
|
}
|
17
14
|
END
|
data/lib/rubysketch/glsl.rb
CHANGED
@@ -1,29 +1,36 @@
|
|
1
1
|
module RubySketch
|
2
2
|
|
3
3
|
|
4
|
-
#
|
5
|
-
|
4
|
+
# OpenGL Shader Language
|
5
|
+
#
|
6
|
+
module GLSL
|
6
7
|
|
7
|
-
def initialize(glsl)
|
8
|
-
@shader = Reflex::Shader.new glsl
|
9
|
-
end
|
10
8
|
|
11
9
|
# @private
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
window
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
p.shader
|
10
|
+
class Context
|
11
|
+
|
12
|
+
# @private
|
13
|
+
def initialize(window, shader_source)
|
14
|
+
shader = Rays::Shader.new shader_source
|
15
|
+
start = now__
|
16
|
+
window.draw = proc do |e|
|
17
|
+
i, p = window.canvas_image, window.canvas_painter
|
18
|
+
w, h = i.width, i.height
|
19
|
+
p.shader shader, resolution: [w, h], time: now__ - start
|
22
20
|
p.fill 1
|
23
21
|
p.rect 0, 0, w, h
|
24
22
|
end
|
25
23
|
end
|
26
|
-
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# @private
|
28
|
+
def now__()
|
29
|
+
Time.now.to_f
|
30
|
+
end
|
31
|
+
|
32
|
+
end# Context
|
33
|
+
|
27
34
|
|
28
35
|
end# GLSL
|
29
36
|
|
@@ -624,9 +624,34 @@ module RubySketch
|
|
624
624
|
# @return [nil] nil
|
625
625
|
#
|
626
626
|
def copy(img = nil, sx, sy, sw, sh, dx, dy, dw, dh)
|
627
|
+
blend img, sx, sy, sw, sh, dx, dy, dw, dh, :normal
|
628
|
+
end
|
629
|
+
|
630
|
+
# Blends image.
|
631
|
+
#
|
632
|
+
# @overload blend(sx, sy, sw, sh, dx, dy, dw, dh, mode)
|
633
|
+
# @overload blend(img, sx, sy, sw, sh, dx, dy, dw, dh, mode)
|
634
|
+
#
|
635
|
+
# @param img [Image] image for blend source
|
636
|
+
# @param sx [Numrtic] x position of source region
|
637
|
+
# @param sy [Numrtic] y position of source region
|
638
|
+
# @param sw [Numrtic] width of source region
|
639
|
+
# @param sh [Numrtic] height of source region
|
640
|
+
# @param dx [Numrtic] x position of destination region
|
641
|
+
# @param dy [Numrtic] y position of destination region
|
642
|
+
# @param dw [Numrtic] width of destination region
|
643
|
+
# @param dh [Numrtic] height of destination region
|
644
|
+
# @param mode [BLEND, ADD, SUBTRACT, LIGHTEST, DARKEST, EXCLUSION, MULTIPLY, SCREEN, REPLACE] blend mode
|
645
|
+
#
|
646
|
+
# @return [nil] nil
|
647
|
+
#
|
648
|
+
def blend(img = nil, sx, sy, sw, sh, dx, dy, dw, dh, mode)
|
627
649
|
img ||= self
|
628
650
|
@image.paint do |painter|
|
651
|
+
current = painter.blend_mode
|
652
|
+
painter.blend_mode = mode
|
629
653
|
painter.image img.getInternal__, sx, sy, sw, sh, dx, dy, dw, dh
|
654
|
+
painter.blend_mode = current
|
630
655
|
end
|
631
656
|
end
|
632
657
|
|
@@ -850,13 +875,17 @@ module RubySketch
|
|
850
875
|
#
|
851
876
|
TAU = PI * 2
|
852
877
|
|
853
|
-
#
|
878
|
+
# RGBA format for createImage().
|
854
879
|
#
|
855
|
-
|
880
|
+
RGBA = :rgba
|
881
|
+
|
882
|
+
# RGB format for createImage, or RGB mode for colorMode().
|
883
|
+
#
|
884
|
+
RGB = :rgb
|
856
885
|
|
857
886
|
# HSB mode for colorMode().
|
858
887
|
#
|
859
|
-
HSB
|
888
|
+
HSB = :hsb
|
860
889
|
|
861
890
|
# Radian mode for angleMode().
|
862
891
|
#
|
@@ -882,6 +911,73 @@ module RubySketch
|
|
882
911
|
#
|
883
912
|
RADIUS = :radius
|
884
913
|
|
914
|
+
# Mode for strokeCap().
|
915
|
+
#
|
916
|
+
BUTT = :butt
|
917
|
+
|
918
|
+
# Mode for strokeJoin().
|
919
|
+
#
|
920
|
+
MITER = :miter
|
921
|
+
|
922
|
+
# Mode for strokeCap() and strokeJoin().
|
923
|
+
#
|
924
|
+
ROUND = :round
|
925
|
+
|
926
|
+
# Mode for strokeCap() and strokeJoin().
|
927
|
+
#
|
928
|
+
SQUARE = :square
|
929
|
+
|
930
|
+
# Mode for blendMode().
|
931
|
+
#
|
932
|
+
BLEND = :normal
|
933
|
+
|
934
|
+
# Mode for blendMode().
|
935
|
+
#
|
936
|
+
ADD = :add
|
937
|
+
|
938
|
+
# Mode for blendMode().
|
939
|
+
#
|
940
|
+
SUBTRACT = :subtract
|
941
|
+
|
942
|
+
# Mode for blendMode().
|
943
|
+
#
|
944
|
+
LIGHTEST = :lightest
|
945
|
+
|
946
|
+
# Mode for blendMode().
|
947
|
+
#
|
948
|
+
DARKEST = :darkest
|
949
|
+
|
950
|
+
# Mode for blendMode().
|
951
|
+
#
|
952
|
+
EXCLUSION = :exclusion
|
953
|
+
|
954
|
+
# Mode for blendMode().
|
955
|
+
#
|
956
|
+
MULTIPLY = :multiply
|
957
|
+
|
958
|
+
# Mode for blendMode().
|
959
|
+
#
|
960
|
+
SCREEN = :screen
|
961
|
+
|
962
|
+
# Mode for blendMode().
|
963
|
+
#
|
964
|
+
REPLACE = :replace
|
965
|
+
|
966
|
+
# Key code or Mode for textAlign().
|
967
|
+
LEFT = :left
|
968
|
+
|
969
|
+
# Key code or Mode for textAlign().
|
970
|
+
RIGHT = :right
|
971
|
+
|
972
|
+
# Mode for textAlign().
|
973
|
+
TOP = :top
|
974
|
+
|
975
|
+
# Mode for textAlign().
|
976
|
+
BOTTOM = :bottom
|
977
|
+
|
978
|
+
# Mode for textAlign().
|
979
|
+
BASELINE = :baseline
|
980
|
+
|
885
981
|
# Key codes.
|
886
982
|
ENTER = :enter
|
887
983
|
SPACE = :space
|
@@ -931,37 +1027,7 @@ module RubySketch
|
|
931
1027
|
UP = :up
|
932
1028
|
DOWN = :down
|
933
1029
|
|
934
|
-
#
|
935
|
-
LEFT = :left
|
936
|
-
|
937
|
-
# Key code or Mode for textAlign().
|
938
|
-
RIGHT = :right
|
939
|
-
|
940
|
-
# Mode for textAlign().
|
941
|
-
TOP = :top
|
942
|
-
|
943
|
-
# Mode for textAlign().
|
944
|
-
BOTTOM = :bottom
|
945
|
-
|
946
|
-
# Mode for textAlign().
|
947
|
-
BASELINE = :baseline
|
948
|
-
|
949
|
-
# Mode for strokeCap().
|
950
|
-
#
|
951
|
-
BUTT = :butt
|
952
|
-
|
953
|
-
# Mode for strokeJoin().
|
954
|
-
#
|
955
|
-
MITER = :miter
|
956
|
-
|
957
|
-
# Mode for strokeCap() and strokeJoin().
|
958
|
-
#
|
959
|
-
ROUND = :round
|
960
|
-
|
961
|
-
# Mode for strokeCap() and strokeJoin().
|
962
|
-
#
|
963
|
-
SQUARE = :square
|
964
|
-
|
1030
|
+
# @private
|
965
1031
|
def init__(image, painter)
|
966
1032
|
@drawing__ = false
|
967
1033
|
@hsbColor__ = false
|
@@ -970,10 +1036,12 @@ module RubySketch
|
|
970
1036
|
@rectMode__ = nil
|
971
1037
|
@ellipseMode__ = nil
|
972
1038
|
@imageMode__ = nil
|
1039
|
+
@tint__ = nil
|
973
1040
|
@textAlignH__ = nil
|
974
1041
|
@textAlignV__ = nil
|
975
1042
|
@matrixStack__ = []
|
976
1043
|
@styleStack__ = []
|
1044
|
+
@fontCache__ = {}
|
977
1045
|
|
978
1046
|
updateCanvas__ image, painter
|
979
1047
|
|
@@ -982,13 +1050,18 @@ module RubySketch
|
|
982
1050
|
rectMode CORNER
|
983
1051
|
ellipseMode CENTER
|
984
1052
|
imageMode CORNER
|
1053
|
+
blendMode BLEND
|
1054
|
+
strokeCap ROUND
|
1055
|
+
strokeJoin MITER
|
985
1056
|
textAlign LEFT
|
986
1057
|
|
987
1058
|
fill 255
|
988
1059
|
stroke 0
|
989
1060
|
strokeWeight 1
|
1061
|
+
noTint
|
990
1062
|
end
|
991
1063
|
|
1064
|
+
# @private
|
992
1065
|
def updateCanvas__(image, painter)
|
993
1066
|
@image__, @painter__ = image, painter
|
994
1067
|
end
|
@@ -1146,6 +1219,17 @@ module RubySketch
|
|
1146
1219
|
end
|
1147
1220
|
end
|
1148
1221
|
|
1222
|
+
# Sets blend mode. Default is BLEND.
|
1223
|
+
#
|
1224
|
+
# @param mode [BLEND, ADD, SUBTRACT, LIGHTEST, DARKEST, EXCLUSION, MULTIPLY, SCREEN, REPLACE]
|
1225
|
+
#
|
1226
|
+
# @return [nil] nil
|
1227
|
+
#
|
1228
|
+
def blendMode(mode)
|
1229
|
+
@painter__.blend_mode = mode
|
1230
|
+
nil
|
1231
|
+
end
|
1232
|
+
|
1149
1233
|
# Sets fill color.
|
1150
1234
|
#
|
1151
1235
|
# @overload fill(rgb)
|
@@ -1169,6 +1253,15 @@ module RubySketch
|
|
1169
1253
|
nil
|
1170
1254
|
end
|
1171
1255
|
|
1256
|
+
# Disables filling.
|
1257
|
+
#
|
1258
|
+
# @return [nil] nil
|
1259
|
+
#
|
1260
|
+
def noFill()
|
1261
|
+
@painter__.fill nil
|
1262
|
+
nil
|
1263
|
+
end
|
1264
|
+
|
1172
1265
|
# Sets stroke color.
|
1173
1266
|
#
|
1174
1267
|
# @overload stroke(rgb)
|
@@ -1192,6 +1285,15 @@ module RubySketch
|
|
1192
1285
|
nil
|
1193
1286
|
end
|
1194
1287
|
|
1288
|
+
# Disables drawing stroke.
|
1289
|
+
#
|
1290
|
+
# @return [nil] nil
|
1291
|
+
#
|
1292
|
+
def noStroke()
|
1293
|
+
@painter__.stroke nil
|
1294
|
+
nil
|
1295
|
+
end
|
1296
|
+
|
1195
1297
|
# Sets stroke weight.
|
1196
1298
|
#
|
1197
1299
|
# @param weight [Numeric] width of stroke
|
@@ -1225,33 +1327,78 @@ module RubySketch
|
|
1225
1327
|
nil
|
1226
1328
|
end
|
1227
1329
|
|
1228
|
-
#
|
1330
|
+
# Sets fill color for drawing images.
|
1331
|
+
#
|
1332
|
+
# @overload tint(rgb)
|
1333
|
+
# @overload tint(rgb, alpha)
|
1334
|
+
# @overload tint(gray)
|
1335
|
+
# @overload tint(gray, alpha)
|
1336
|
+
# @overload tint(r, g, b)
|
1337
|
+
# @overload tint(r, g, b, alpha)
|
1338
|
+
#
|
1339
|
+
# @param rgb [String] color code like '#00AAFF'
|
1340
|
+
# @param gray [Integer] gray value (0..255)
|
1341
|
+
# @param r [Integer] red value (0..255)
|
1342
|
+
# @param g [Integer] green value (0..255)
|
1343
|
+
# @param b [Integer] blue value (0..255)
|
1344
|
+
# @param alpha [Integer] alpha value (0..255)
|
1229
1345
|
#
|
1230
1346
|
# @return [nil] nil
|
1231
1347
|
#
|
1232
|
-
def
|
1233
|
-
@
|
1348
|
+
def tint(*args)
|
1349
|
+
@tint__ = args
|
1234
1350
|
nil
|
1235
1351
|
end
|
1236
1352
|
|
1237
|
-
#
|
1353
|
+
# Resets tint color.
|
1238
1354
|
#
|
1239
1355
|
# @return [nil] nil
|
1240
1356
|
#
|
1241
|
-
def
|
1242
|
-
@
|
1357
|
+
def noTint()
|
1358
|
+
@tint__ = nil
|
1359
|
+
end
|
1360
|
+
|
1361
|
+
# Limits the drawable rectangle.
|
1362
|
+
#
|
1363
|
+
# The parameters a, b, c, and d are determined by rectMode().
|
1364
|
+
#
|
1365
|
+
# @param a [Numeric] horizontal position of the drawable area, by default
|
1366
|
+
# @param b [Numeric] vertical position of the drawable area, by default
|
1367
|
+
# @param c [Numeric] width of the drawable area, by default
|
1368
|
+
# @param d [Numeric] height of the drawable area, by default
|
1369
|
+
#
|
1370
|
+
# @return [nil] nil
|
1371
|
+
#
|
1372
|
+
def clip(a, b, c, d)
|
1373
|
+
x, y, w, h = toXYWH__ @imageMode__, a, b, c, d
|
1374
|
+
@painter__.clip x, y, w, h
|
1375
|
+
nil
|
1376
|
+
end
|
1377
|
+
|
1378
|
+
# Disables clipping.
|
1379
|
+
#
|
1380
|
+
# @return [nil] nil
|
1381
|
+
#
|
1382
|
+
def noClip()
|
1383
|
+
@painter__.no_clip
|
1243
1384
|
nil
|
1244
1385
|
end
|
1245
1386
|
|
1246
1387
|
# Sets font.
|
1247
1388
|
#
|
1389
|
+
# @overload textFont(font)
|
1390
|
+
# @overload textFont(name)
|
1391
|
+
# @overload textFont(font, size)
|
1392
|
+
# @overload textFont(name, size)
|
1393
|
+
#
|
1394
|
+
# @param font [Font] font
|
1248
1395
|
# @param name [String] font name
|
1249
1396
|
# @param size [Numeric] font size (max 256)
|
1250
1397
|
#
|
1251
1398
|
# @return [Font] current font
|
1252
1399
|
#
|
1253
|
-
def textFont(
|
1254
|
-
setFont__
|
1400
|
+
def textFont(font = nil, size = nil)
|
1401
|
+
setFont__ font, size if font || size
|
1255
1402
|
Font.new @painter__.font
|
1256
1403
|
end
|
1257
1404
|
|
@@ -1262,7 +1409,7 @@ module RubySketch
|
|
1262
1409
|
# @return [nil] nil
|
1263
1410
|
#
|
1264
1411
|
def textSize(size)
|
1265
|
-
setFont__
|
1412
|
+
setFont__ nil, size
|
1266
1413
|
nil
|
1267
1414
|
end
|
1268
1415
|
|
@@ -1284,9 +1431,15 @@ module RubySketch
|
|
1284
1431
|
end
|
1285
1432
|
|
1286
1433
|
# @private
|
1287
|
-
def setFont__(
|
1288
|
-
|
1289
|
-
|
1434
|
+
def setFont__(fontOrName, size)
|
1435
|
+
name = case fontOrName
|
1436
|
+
when Font then fontOrName.name
|
1437
|
+
else fontOrName || @painter__.font.name
|
1438
|
+
end
|
1439
|
+
size ||= @painter__.font.size
|
1440
|
+
size = 256 if size > 256
|
1441
|
+
font = @fontCache__[[name, size]] ||= Rays::Font.new name, size
|
1442
|
+
@painter__.font = font
|
1290
1443
|
end
|
1291
1444
|
|
1292
1445
|
# Clears screen.
|
@@ -1313,7 +1466,7 @@ module RubySketch
|
|
1313
1466
|
if rgba[3] == 1
|
1314
1467
|
@painter__.background(*rgba)
|
1315
1468
|
else
|
1316
|
-
@painter__.push fill: rgba, stroke:
|
1469
|
+
@painter__.push fill: rgba, stroke: :none do |_|
|
1317
1470
|
@painter__.rect 0, 0, width, height
|
1318
1471
|
end
|
1319
1472
|
end
|
@@ -1329,9 +1482,7 @@ module RubySketch
|
|
1329
1482
|
#
|
1330
1483
|
def point(x, y)
|
1331
1484
|
assertDrawing__
|
1332
|
-
|
1333
|
-
w = 1 if w == 0
|
1334
|
-
@painter__.ellipse x - (w / 2.0), y - (w / 2.0), w, w
|
1485
|
+
@painter__.line x, y, x, y
|
1335
1486
|
nil
|
1336
1487
|
end
|
1337
1488
|
|
@@ -1352,14 +1503,16 @@ module RubySketch
|
|
1352
1503
|
|
1353
1504
|
# Draws a rectangle.
|
1354
1505
|
#
|
1506
|
+
# The parameters a, b, c, and d are determined by rectMode().
|
1507
|
+
#
|
1355
1508
|
# @overload rect(a, b, c, d)
|
1356
1509
|
# @overload rect(a, b, c, d, r)
|
1357
1510
|
# @overload rect(a, b, c, d, tl, tr, br, bl)
|
1358
1511
|
#
|
1359
|
-
# @param a [Numeric] horizontal position of the shape by default
|
1360
|
-
# @param b [Numeric] vertical position of the shape by default
|
1361
|
-
# @param c [Numeric] width of the shape by default
|
1362
|
-
# @param d [Numeric] height of the shape by default
|
1512
|
+
# @param a [Numeric] horizontal position of the shape, by default
|
1513
|
+
# @param b [Numeric] vertical position of the shape, by default
|
1514
|
+
# @param c [Numeric] width of the shape, by default
|
1515
|
+
# @param d [Numeric] height of the shape, by default
|
1363
1516
|
# @param r [Numeric] radius for all corners
|
1364
1517
|
# @param tl [Numeric] radius for top-left corner
|
1365
1518
|
# @param tr [Numeric] radius for top-right corner
|
@@ -1382,10 +1535,12 @@ module RubySketch
|
|
1382
1535
|
|
1383
1536
|
# Draws an ellipse.
|
1384
1537
|
#
|
1385
|
-
#
|
1386
|
-
#
|
1387
|
-
# @param
|
1388
|
-
# @param
|
1538
|
+
# The parameters a, b, c, and d are determined by ellipseMode().
|
1539
|
+
#
|
1540
|
+
# @param a [Numeric] horizontal position of the shape, by default
|
1541
|
+
# @param b [Numeric] vertical position of the shape, by default
|
1542
|
+
# @param c [Numeric] width of the shape, by default
|
1543
|
+
# @param d [Numeric] height of the shape, by default
|
1389
1544
|
#
|
1390
1545
|
# @return [nil] nil
|
1391
1546
|
#
|
@@ -1410,10 +1565,12 @@ module RubySketch
|
|
1410
1565
|
|
1411
1566
|
# Draws an arc.
|
1412
1567
|
#
|
1413
|
-
#
|
1414
|
-
#
|
1415
|
-
# @param
|
1416
|
-
# @param
|
1568
|
+
# The parameters a, b, c, and d are determined by ellipseMode().
|
1569
|
+
#
|
1570
|
+
# @param a [Numeric] horizontal position of the shape, by default
|
1571
|
+
# @param b [Numeric] vertical position of the shape, by default
|
1572
|
+
# @param c [Numeric] width of the shape, by default
|
1573
|
+
# @param d [Numeric] height of the shape, by default
|
1417
1574
|
# @param start [Numeric] angle to start the arc
|
1418
1575
|
# @param stop [Numeric] angle to stop the arc
|
1419
1576
|
#
|
@@ -1516,6 +1673,8 @@ module RubySketch
|
|
1516
1673
|
|
1517
1674
|
# Draws a text.
|
1518
1675
|
#
|
1676
|
+
# The parameters a, b, c, and d are determined by rectMode().
|
1677
|
+
#
|
1519
1678
|
# @overload text(str)
|
1520
1679
|
# @overload text(str, x, y)
|
1521
1680
|
# @overload text(str, a, b, c, d)
|
@@ -1523,10 +1682,10 @@ module RubySketch
|
|
1523
1682
|
# @param str [String] text to draw
|
1524
1683
|
# @param x [Numeric] horizontal position of the text
|
1525
1684
|
# @param y [Numeric] vertical position of the text
|
1526
|
-
# @param a [Numeric]
|
1527
|
-
# @param b [Numeric]
|
1528
|
-
# @param c [Numeric]
|
1529
|
-
# @param d [Numeric]
|
1685
|
+
# @param a [Numeric] horizontal position of the text, by default
|
1686
|
+
# @param b [Numeric] vertical position of the text, by default
|
1687
|
+
# @param c [Numeric] width of the text, by default
|
1688
|
+
# @param d [Numeric] height of the text, by default
|
1530
1689
|
#
|
1531
1690
|
# @return [nil] nil
|
1532
1691
|
#
|
@@ -1553,22 +1712,27 @@ module RubySketch
|
|
1553
1712
|
|
1554
1713
|
# Draws an image.
|
1555
1714
|
#
|
1715
|
+
# The parameters a, b, c, and d are determined by imageMode().
|
1716
|
+
#
|
1556
1717
|
# @overload image(img, a, b)
|
1557
1718
|
# @overload image(img, a, b, c, d)
|
1558
1719
|
#
|
1559
1720
|
# @param img [Image] image to draw
|
1560
|
-
# @param a [Numeric] horizontal position of the image
|
1561
|
-
# @param b [Numeric] vertical position of the image
|
1562
|
-
# @param c [Numeric] width of the image
|
1563
|
-
# @param d [Numeric] height of the image
|
1721
|
+
# @param a [Numeric] horizontal position of the image, by default
|
1722
|
+
# @param b [Numeric] vertical position of the image, by default
|
1723
|
+
# @param c [Numeric] width of the image, by default
|
1724
|
+
# @param d [Numeric] height of the image, by default
|
1564
1725
|
#
|
1565
1726
|
# @return [nil] nil
|
1566
1727
|
#
|
1567
1728
|
def image(img, a, b, c = nil, d = nil)
|
1568
1729
|
assertDrawing__
|
1569
|
-
i
|
1730
|
+
i = img.getInternal__
|
1570
1731
|
x, y, w, h = toXYWH__ @imageMode__, a, b, c || i.width, d || i.height
|
1571
|
-
@
|
1732
|
+
tint = @tint__ ? toRGBA__(*@tint__) : 1
|
1733
|
+
@painter__.push fill: tint, stroke: :none do |_|
|
1734
|
+
@painter__.image i, x, y, w, h
|
1735
|
+
end
|
1572
1736
|
nil
|
1573
1737
|
end
|
1574
1738
|
|
@@ -1590,21 +1754,59 @@ module RubySketch
|
|
1590
1754
|
# @return [nil] nil
|
1591
1755
|
#
|
1592
1756
|
def copy(img = nil, sx, sy, sw, sh, dx, dy, dw, dh)
|
1757
|
+
blend img, sx, sy, sw, sh, dx, dy, dw, dh, BLEND
|
1758
|
+
end
|
1759
|
+
|
1760
|
+
# Blends image.
|
1761
|
+
#
|
1762
|
+
# @overload blend(sx, sy, sw, sh, dx, dy, dw, dh, mode)
|
1763
|
+
# @overload blend(img, sx, sy, sw, sh, dx, dy, dw, dh, mode)
|
1764
|
+
#
|
1765
|
+
# @param img [Image] image for blend source
|
1766
|
+
# @param sx [Numrtic] x position of source region
|
1767
|
+
# @param sy [Numrtic] y position of source region
|
1768
|
+
# @param sw [Numrtic] width of source region
|
1769
|
+
# @param sh [Numrtic] height of source region
|
1770
|
+
# @param dx [Numrtic] x position of destination region
|
1771
|
+
# @param dy [Numrtic] y position of destination region
|
1772
|
+
# @param dw [Numrtic] width of destination region
|
1773
|
+
# @param dh [Numrtic] height of destination region
|
1774
|
+
# @param mode [BLEND, ADD, SUBTRACT, LIGHTEST, DARKEST, EXCLUSION, MULTIPLY, SCREEN, REPLACE] blend mode
|
1775
|
+
#
|
1776
|
+
# @return [nil] nil
|
1777
|
+
#
|
1778
|
+
def blend(img = nil, sx, sy, sw, sh, dx, dy, dw, dh, mode)
|
1593
1779
|
assertDrawing__
|
1594
|
-
src
|
1780
|
+
src = img&.getInternal__ || @window__.canvas_image
|
1781
|
+
current = @painter__.blend_mode
|
1782
|
+
|
1783
|
+
@painter__.blend_mode = mode
|
1595
1784
|
@painter__.image src, sx, sy, sw, sh, dx, dy, dw, dh
|
1785
|
+
@painter__.blend_mode = current
|
1786
|
+
end
|
1787
|
+
|
1788
|
+
# Saves screen image to file.
|
1789
|
+
#
|
1790
|
+
# @param filename [String] file name to save image
|
1791
|
+
#
|
1792
|
+
def save(filename)
|
1793
|
+
@window__.canvas_image.save filename
|
1596
1794
|
end
|
1597
1795
|
|
1598
1796
|
# Applies translation matrix to current transformation matrix.
|
1599
1797
|
#
|
1600
|
-
# @
|
1601
|
-
# @
|
1798
|
+
# @overload translate(x, y)
|
1799
|
+
# @overload translate(x, y, z)
|
1800
|
+
#
|
1801
|
+
# @param x [Numeric] left/right translation
|
1802
|
+
# @param y [Numeric] up/down translation
|
1803
|
+
# @param y [Numeric] forward/backward translation
|
1602
1804
|
#
|
1603
1805
|
# @return [nil] nil
|
1604
1806
|
#
|
1605
|
-
def translate(x, y)
|
1807
|
+
def translate(x, y, z = 0)
|
1606
1808
|
assertDrawing__
|
1607
|
-
@painter__.translate x, y
|
1809
|
+
@painter__.translate x, y, z
|
1608
1810
|
nil
|
1609
1811
|
end
|
1610
1812
|
|
@@ -1684,6 +1886,8 @@ module RubySketch
|
|
1684
1886
|
@painter__.stroke_width,
|
1685
1887
|
@painter__.stroke_cap,
|
1686
1888
|
@painter__.stroke_join,
|
1889
|
+
@painter__.clip,
|
1890
|
+
@painter__.blend_mode,
|
1687
1891
|
@painter__.font,
|
1688
1892
|
@hsbColor__,
|
1689
1893
|
@colorMaxes__,
|
@@ -1711,6 +1915,8 @@ module RubySketch
|
|
1711
1915
|
@painter__.stroke_width,
|
1712
1916
|
@painter__.stroke_cap,
|
1713
1917
|
@painter__.stroke_join,
|
1918
|
+
@painter__.clip,
|
1919
|
+
@painter__.blend_mode,
|
1714
1920
|
@painter__.font,
|
1715
1921
|
@hsbColor__,
|
1716
1922
|
@colorMaxes__,
|
@@ -1828,7 +2034,7 @@ module RubySketch
|
|
1828
2034
|
@keyCode__ = nil
|
1829
2035
|
@keysPressed__ = Set.new
|
1830
2036
|
@pointerPos__ =
|
1831
|
-
@pointerPrevPos__ =
|
2037
|
+
@pointerPrevPos__ = Rays::Point.new 0
|
1832
2038
|
@pointersPressed__ = []
|
1833
2039
|
@touches__ = []
|
1834
2040
|
@motionGravity__ = createVector 0, 0
|
@@ -1852,7 +2058,6 @@ module RubySketch
|
|
1852
2058
|
@redraw__ = false
|
1853
2059
|
drawFrame.call
|
1854
2060
|
end
|
1855
|
-
@pointerPrevPos__ = @pointerPos__
|
1856
2061
|
end
|
1857
2062
|
|
1858
2063
|
updateKeyStates = -> event, pressed {
|
@@ -1871,11 +2076,12 @@ module RubySketch
|
|
1871
2076
|
}
|
1872
2077
|
|
1873
2078
|
updatePointerStates = -> event, pressed = nil {
|
1874
|
-
@
|
2079
|
+
@pointerPrevPos__ = @pointerPos__
|
2080
|
+
@pointerPos__ = event.pos.dup
|
1875
2081
|
@touches__ = event.pointers.map {|p| Touch.new(p.id, *p.pos.to_a)}
|
1876
2082
|
if pressed != nil
|
1877
2083
|
array = @pointersPressed__
|
1878
|
-
event.
|
2084
|
+
event.types
|
1879
2085
|
.tap {|types| types.delete :mouse}
|
1880
2086
|
.map {|type| mouseButtonMap[type] || type}
|
1881
2087
|
.each {|type| pressed ? array.push(type) : array.delete(type)}
|
@@ -1895,12 +2101,17 @@ module RubySketch
|
|
1895
2101
|
|
1896
2102
|
@window__.pointer_down = proc do |e|
|
1897
2103
|
updatePointerStates.call e, true
|
2104
|
+
@pointerDownStartPos__ = @pointerPos__.dup
|
1898
2105
|
(@touchStartedBlock__ || @mousePressedBlock__)&.call
|
1899
2106
|
end
|
1900
2107
|
|
1901
2108
|
@window__.pointer_up = proc do |e|
|
1902
2109
|
updatePointerStates.call e, false
|
1903
2110
|
(@touchEndedBlock__ || @mouseReleasedBlock__)&.call
|
2111
|
+
if startPos = @pointerDownStartPos__
|
2112
|
+
@mouseClickedBlock__&.call if (@pointerPos__ - startPos).length < 3
|
2113
|
+
@pointerDownStartPos__ = nil
|
2114
|
+
end
|
1904
2115
|
end
|
1905
2116
|
|
1906
2117
|
@window__.pointer_move = proc do |e|
|
@@ -1921,6 +2132,8 @@ module RubySketch
|
|
1921
2132
|
|
1922
2133
|
# Defines setup block.
|
1923
2134
|
#
|
2135
|
+
# @return [nil] nil
|
2136
|
+
#
|
1924
2137
|
def setup(&block)
|
1925
2138
|
@window__.setup = block
|
1926
2139
|
nil
|
@@ -1928,6 +2141,8 @@ module RubySketch
|
|
1928
2141
|
|
1929
2142
|
# Defines draw block.
|
1930
2143
|
#
|
2144
|
+
# @return [nil] nil
|
2145
|
+
#
|
1931
2146
|
def draw(&block)
|
1932
2147
|
@drawBlock__ = block if block
|
1933
2148
|
nil
|
@@ -1944,6 +2159,8 @@ module RubySketch
|
|
1944
2159
|
|
1945
2160
|
# Defines keyReleased block.
|
1946
2161
|
#
|
2162
|
+
# @return [nil] nil
|
2163
|
+
#
|
1947
2164
|
def keyReleased(&block)
|
1948
2165
|
@keyReleasedBlock__ = block if block
|
1949
2166
|
nil
|
@@ -1951,6 +2168,8 @@ module RubySketch
|
|
1951
2168
|
|
1952
2169
|
# Defines keyTyped block.
|
1953
2170
|
#
|
2171
|
+
# @return [nil] nil
|
2172
|
+
#
|
1954
2173
|
def keyTyped(&block)
|
1955
2174
|
@keyTypedBlock__ = block if block
|
1956
2175
|
nil
|
@@ -1967,6 +2186,8 @@ module RubySketch
|
|
1967
2186
|
|
1968
2187
|
# Defines mouseReleased block.
|
1969
2188
|
#
|
2189
|
+
# @return [nil] nil
|
2190
|
+
#
|
1970
2191
|
def mouseReleased(&block)
|
1971
2192
|
@mouseReleasedBlock__ = block if block
|
1972
2193
|
nil
|
@@ -1974,6 +2195,8 @@ module RubySketch
|
|
1974
2195
|
|
1975
2196
|
# Defines mouseMoved block.
|
1976
2197
|
#
|
2198
|
+
# @return [nil] nil
|
2199
|
+
#
|
1977
2200
|
def mouseMoved(&block)
|
1978
2201
|
@mouseMovedBlock__ = block if block
|
1979
2202
|
nil
|
@@ -1981,13 +2204,26 @@ module RubySketch
|
|
1981
2204
|
|
1982
2205
|
# Defines mouseDragged block.
|
1983
2206
|
#
|
2207
|
+
# @return [nil] nil
|
2208
|
+
#
|
1984
2209
|
def mouseDragged(&block)
|
1985
2210
|
@mouseDraggedBlock__ = block if block
|
1986
2211
|
nil
|
1987
2212
|
end
|
1988
2213
|
|
2214
|
+
# Defines mouseClicked block.
|
2215
|
+
#
|
2216
|
+
# @return [nil] nil
|
2217
|
+
#
|
2218
|
+
def mouseClicked(&block)
|
2219
|
+
@mouseClickedBlock__ = block if block
|
2220
|
+
nil
|
2221
|
+
end
|
2222
|
+
|
1989
2223
|
# Defines touchStarted block.
|
1990
2224
|
#
|
2225
|
+
# @return [nil] nil
|
2226
|
+
#
|
1991
2227
|
def touchStarted(&block)
|
1992
2228
|
@touchStartedBlock__ = block if block
|
1993
2229
|
nil
|
@@ -1995,6 +2231,8 @@ module RubySketch
|
|
1995
2231
|
|
1996
2232
|
# Defines touchEnded block.
|
1997
2233
|
#
|
2234
|
+
# @return [nil] nil
|
2235
|
+
#
|
1998
2236
|
def touchEnded(&block)
|
1999
2237
|
@touchEndedBlock__ = block if block
|
2000
2238
|
nil
|
@@ -2002,6 +2240,8 @@ module RubySketch
|
|
2002
2240
|
|
2003
2241
|
# Defines touchMoved block.
|
2004
2242
|
#
|
2243
|
+
# @return [nil] nil
|
2244
|
+
#
|
2005
2245
|
def touchMoved(&block)
|
2006
2246
|
@touchMovedBlock__ = block if block
|
2007
2247
|
nil
|
@@ -2009,6 +2249,8 @@ module RubySketch
|
|
2009
2249
|
|
2010
2250
|
# Defines motion block.
|
2011
2251
|
#
|
2252
|
+
# @return [nil] nil
|
2253
|
+
#
|
2012
2254
|
def motion(&block)
|
2013
2255
|
@motionBlock__ = block if block
|
2014
2256
|
nil
|
@@ -2040,6 +2282,17 @@ module RubySketch
|
|
2040
2282
|
nil
|
2041
2283
|
end
|
2042
2284
|
|
2285
|
+
# Changes title of window.
|
2286
|
+
#
|
2287
|
+
# @param title [String] new title
|
2288
|
+
#
|
2289
|
+
# @return [nil] nil
|
2290
|
+
#
|
2291
|
+
def setTitle(title)
|
2292
|
+
@window__.title = title
|
2293
|
+
nil
|
2294
|
+
end
|
2295
|
+
|
2043
2296
|
# Changes and returns canvas pixel density.
|
2044
2297
|
#
|
2045
2298
|
# @param density [Numeric] new pixel density
|
@@ -2056,9 +2309,12 @@ module RubySketch
|
|
2056
2309
|
raise '#{name}() must be called on startup or setup block' if @started__
|
2057
2310
|
|
2058
2311
|
@painter__.__send__ :end_paint
|
2059
|
-
|
2060
|
-
|
2061
|
-
|
2312
|
+
begin
|
2313
|
+
@window__.__send__ :resize_canvas, width, height, pixelDensity
|
2314
|
+
updateCanvas__ @window__.canvas_image, @window__.canvas_painter
|
2315
|
+
ensure
|
2316
|
+
@painter__.__send__ :begin_paint
|
2317
|
+
end
|
2062
2318
|
|
2063
2319
|
@window__.auto_resize = false
|
2064
2320
|
end
|
@@ -2124,7 +2380,7 @@ module RubySketch
|
|
2124
2380
|
# @return [Numeric] horizontal position of mouse
|
2125
2381
|
#
|
2126
2382
|
def mouseX()
|
2127
|
-
@pointerPos__
|
2383
|
+
@pointerPos__.x
|
2128
2384
|
end
|
2129
2385
|
|
2130
2386
|
# Returns mouse y position
|
@@ -2132,7 +2388,7 @@ module RubySketch
|
|
2132
2388
|
# @return [Numeric] vertical position of mouse
|
2133
2389
|
#
|
2134
2390
|
def mouseY()
|
2135
|
-
@pointerPos__
|
2391
|
+
@pointerPos__.y
|
2136
2392
|
end
|
2137
2393
|
|
2138
2394
|
# Returns mouse x position in previous frame
|
@@ -2140,7 +2396,7 @@ module RubySketch
|
|
2140
2396
|
# @return [Numeric] horizontal position of mouse
|
2141
2397
|
#
|
2142
2398
|
def pmouseX()
|
2143
|
-
@pointerPrevPos__
|
2399
|
+
@pointerPrevPos__.x
|
2144
2400
|
end
|
2145
2401
|
|
2146
2402
|
# Returns mouse y position in previous frame
|
@@ -2148,7 +2404,7 @@ module RubySketch
|
|
2148
2404
|
# @return [Numeric] vertical position of mouse
|
2149
2405
|
#
|
2150
2406
|
def pmouseY()
|
2151
|
-
@pointerPrevPos__
|
2407
|
+
@pointerPrevPos__.y
|
2152
2408
|
end
|
2153
2409
|
|
2154
2410
|
# Returns which mouse button was pressed
|
@@ -2568,6 +2824,23 @@ module RubySketch
|
|
2568
2824
|
Vector.new(*args, context: self)
|
2569
2825
|
end
|
2570
2826
|
|
2827
|
+
# Creates a new image.
|
2828
|
+
#
|
2829
|
+
# @overload createImage(w, h)
|
2830
|
+
# @overload createImage(w, h, format)
|
2831
|
+
#
|
2832
|
+
# @param w [Numeric] width of new image
|
2833
|
+
# @param h [Numeric] height of new image
|
2834
|
+
# @param format [RGB, RGBA] image format
|
2835
|
+
#
|
2836
|
+
# @return [Image] new image
|
2837
|
+
#
|
2838
|
+
def createImage(w, h, format = RGBA)
|
2839
|
+
colorspace = {RGB => Rays::RGB, RGBA => Rays::RGBA}[format]
|
2840
|
+
raise ArgumentError, "Unknown image format" unless colorspace
|
2841
|
+
Image.new Rays::Image.new(w, h, colorspace).paint {background 0, 0}
|
2842
|
+
end
|
2843
|
+
|
2571
2844
|
# Creates a camera object as a video input device.
|
2572
2845
|
#
|
2573
2846
|
# @return [Capture] camera object
|
data/lib/rubysketch/window.rb
CHANGED
@@ -3,6 +3,24 @@ module RubySketch
|
|
3
3
|
|
4
4
|
class Window < Reflex::Window
|
5
5
|
|
6
|
+
class CanvasView < Reflex::View
|
7
|
+
def on_update(e)
|
8
|
+
window.on_canvas_update e
|
9
|
+
end
|
10
|
+
|
11
|
+
def on_draw(e)
|
12
|
+
window.on_canvas_draw e
|
13
|
+
end
|
14
|
+
|
15
|
+
def on_pointer(e)
|
16
|
+
window.on_canvas_pointer e
|
17
|
+
end
|
18
|
+
|
19
|
+
def on_resize(e)
|
20
|
+
window.on_canvas_resize e
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
6
24
|
attr_accessor :setup, :update, :draw, :before_draw, :after_draw, :resize,
|
7
25
|
:key_down, :key_up,
|
8
26
|
:pointer_down, :pointer_up, :pointer_move, :pointer_drag,
|
@@ -24,12 +42,7 @@ module RubySketch
|
|
24
42
|
painter.miter_limit = 10
|
25
43
|
resize_canvas 1, 1
|
26
44
|
|
27
|
-
@canvas_view = add
|
28
|
-
v.on(:update) {|e| on_canvas_update e}
|
29
|
-
v.on(:draw) {|e| on_canvas_draw e}
|
30
|
-
v.on(:pointer) {|e| on_canvas_pointer e}
|
31
|
-
v.on(:resize) {|e| on_canvas_resize e}
|
32
|
-
}
|
45
|
+
@canvas_view = add CanvasView.new name: :canvas
|
33
46
|
|
34
47
|
super(*args, size: [width, height], **kwargs, &block)
|
35
48
|
end
|
@@ -118,6 +131,7 @@ module RubySketch
|
|
118
131
|
end
|
119
132
|
|
120
133
|
resize_window width, height
|
134
|
+
GC.start
|
121
135
|
end
|
122
136
|
|
123
137
|
@canvas_painter
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rubysketch'
|
2
|
+
|
3
|
+
|
4
|
+
def (RubySketch::GLSL).run(
|
5
|
+
shader_source,
|
6
|
+
title: 'RubySketch',
|
7
|
+
width: 500, height: 500)
|
8
|
+
w = RubySketch::Window.new(title: title, w: width, h: height) {start}
|
9
|
+
RubySketch::GLSL::Context.new w, shader_source
|
10
|
+
at_exit {RubySketch::App.new {w.show}.start unless $!}
|
11
|
+
end
|
@@ -6,8 +6,8 @@ begin
|
|
6
6
|
context = RubySketch::Processing::Context.new window
|
7
7
|
|
8
8
|
(context.methods - Object.instance_methods).each do |method|
|
9
|
-
define_method method do |*args, &block|
|
10
|
-
context.__send__ method, *args, &block
|
9
|
+
define_method method do |*args, **kwargs, &block|
|
10
|
+
context.__send__ method, *args, **kwargs, &block
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -20,4 +20,6 @@ begin
|
|
20
20
|
window.__send__ :end_draw
|
21
21
|
RubySketch::App.new {window.show}.start unless $!
|
22
22
|
end
|
23
|
+
|
24
|
+
RUBYSKETCH_WINDOW = window
|
23
25
|
end
|
data/rubysketch.gemspec
CHANGED
@@ -28,7 +28,9 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.platform = Gem::Platform::RUBY
|
29
29
|
s.required_ruby_version = '>= 2.6.0'
|
30
30
|
|
31
|
-
s.add_runtime_dependency 'reflexion', '~> 0.1.
|
31
|
+
s.add_runtime_dependency 'reflexion', '~> 0.1.28'
|
32
|
+
|
33
|
+
s.add_development_dependency 'yard'
|
32
34
|
|
33
35
|
s.files = `git ls-files`.split $/
|
34
36
|
s.test_files = s.files.grep %r{^(test|spec|features)/}
|
data/src/RubySketch.h
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
// -*- mode: objc -*-
|
2
|
+
#import <Foundation/Foundation.h>
|
3
|
+
|
4
|
+
|
5
|
+
@interface RubySketch : NSObject
|
6
|
+
|
7
|
+
+ (void) setup;
|
8
|
+
|
9
|
+
+ (void) start: (NSString*) path;
|
10
|
+
|
11
|
+
+ (void) setActiveReflexViewController: (id) reflexViewController;
|
12
|
+
|
13
|
+
+ (void) resetActiveReflexViewController;
|
14
|
+
|
15
|
+
@end
|
data/src/RubySketch.mm
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
#import <CRuby.h>
|
2
|
+
#import "RubySketch.h"
|
3
|
+
#include "../src/ios/view_controller.h"
|
4
|
+
|
5
|
+
|
6
|
+
static ReflexViewController* active_reflex_view_controller = nil;
|
7
|
+
|
8
|
+
static ReflexViewController*
|
9
|
+
ReflexViewController_create()
|
10
|
+
{
|
11
|
+
return active_reflex_view_controller;
|
12
|
+
}
|
13
|
+
|
14
|
+
static void
|
15
|
+
ReflexViewController_show (UIViewController*, ReflexViewController*)
|
16
|
+
{
|
17
|
+
}
|
18
|
+
|
19
|
+
|
20
|
+
@implementation RubySketch
|
21
|
+
|
22
|
+
+ (void) setup
|
23
|
+
{
|
24
|
+
static BOOL done = NO;
|
25
|
+
if (done) return;
|
26
|
+
done = YES;
|
27
|
+
|
28
|
+
[CRuby addLibrary:@"RubySketch" bundle:[NSBundle bundleForClass:RubySketch.class]];
|
29
|
+
|
30
|
+
ReflexViewController_set_create_fun(ReflexViewController_create);
|
31
|
+
ReflexViewController_set_show_fun(ReflexViewController_show);
|
32
|
+
}
|
33
|
+
|
34
|
+
+ (void) start: (NSString*) path
|
35
|
+
{
|
36
|
+
[CRuby evaluate:[NSString stringWithFormat:@
|
37
|
+
"raise 'already started' unless require 'rubysketch-processing'\n"
|
38
|
+
"load '%@'\n"
|
39
|
+
"RUBYSKETCH_WINDOW.__send__ :end_draw\n"
|
40
|
+
"RUBYSKETCH_WINDOW.show",
|
41
|
+
path
|
42
|
+
]];
|
43
|
+
}
|
44
|
+
|
45
|
+
+ (void) setActiveReflexViewController: (id) reflexViewController
|
46
|
+
{
|
47
|
+
active_reflex_view_controller = reflexViewController;
|
48
|
+
}
|
49
|
+
|
50
|
+
+ (void) resetActiveReflexViewController
|
51
|
+
{
|
52
|
+
active_reflex_view_controller = nil;
|
53
|
+
}
|
54
|
+
|
55
|
+
@end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubysketch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- xordog
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: reflexion
|
@@ -16,14 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.1.
|
19
|
+
version: 0.1.28
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.1.
|
26
|
+
version: 0.1.28
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: yard
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
description: Creative Coding Framework have API compatible to Processing API or p5.js.
|
28
42
|
email: xordog@gmail.com
|
29
43
|
executables: []
|
@@ -39,6 +53,7 @@ files:
|
|
39
53
|
- LICENSE
|
40
54
|
- README.md
|
41
55
|
- Rakefile
|
56
|
+
- RubySketch.podspec
|
42
57
|
- VERSION
|
43
58
|
- examples/breakout.rb
|
44
59
|
- examples/camera.rb
|
@@ -48,6 +63,7 @@ files:
|
|
48
63
|
- examples/hello.rb
|
49
64
|
- examples/image.rb
|
50
65
|
- examples/shapes.rb
|
66
|
+
- lib/rubysketch-glsl.rb
|
51
67
|
- lib/rubysketch-processing.rb
|
52
68
|
- lib/rubysketch.rb
|
53
69
|
- lib/rubysketch/app.rb
|
@@ -56,6 +72,8 @@ files:
|
|
56
72
|
- lib/rubysketch/processing.rb
|
57
73
|
- lib/rubysketch/window.rb
|
58
74
|
- rubysketch.gemspec
|
75
|
+
- src/RubySketch.h
|
76
|
+
- src/RubySketch.mm
|
59
77
|
- test/helper.rb
|
60
78
|
- test/processing/test_utility.rb
|
61
79
|
- test/processing/test_vector.rb
|
@@ -77,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
95
|
- !ruby/object:Gem::Version
|
78
96
|
version: '0'
|
79
97
|
requirements: []
|
80
|
-
rubygems_version: 3.
|
98
|
+
rubygems_version: 3.2.33
|
81
99
|
signing_key:
|
82
100
|
specification_version: 4
|
83
101
|
summary: Processing like Creative Coding Framework.
|