rubysketch 0.1.5 → 0.2.4
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/VERSION +1 -1
- data/examples/image.rb +13 -0
- data/lib/rubysketch.rb +5 -0
- data/lib/rubysketch/glsl.rb +2 -5
- data/lib/rubysketch/processing.rb +215 -100
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9603661dbdced67794a2d3f89a4e18e1314fc84daeb8721d5d05c47b5a935cd1
|
4
|
+
data.tar.gz: 8793bbe339b07ed9d0af7b82e87fc62a92470ce17ff7c9432215adc38c31f74e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ea4ed4be93eb7a1e2c2b5f187c59b8a7ea035e7ab80f2f3ec00ecd5c7f14861d55a76188e80251dc8efd3b48c8eb2d91217ff3da8e625885a4e55dcee5d76d9
|
7
|
+
data.tar.gz: 71b9f02e1e7a1bcba29ebbbff0d10a4ce0af9f7e12231014300ec23c5f26b15df288975e27ae683f033ba71f09d82ff39db1a0aef72700f34d87bf9474b2d0ba
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.4
|
data/examples/image.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
%w[xot rays reflex rubysketch]
|
2
|
+
.map {|s| File.expand_path "../../#{s}/lib", __dir__}
|
3
|
+
.each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
|
4
|
+
|
5
|
+
require 'rubysketch-processing'
|
6
|
+
|
7
|
+
|
8
|
+
icon = loadImage 'https://xord.org/rubysketch/rubysketch.png'
|
9
|
+
|
10
|
+
draw do
|
11
|
+
background 0, 10
|
12
|
+
image icon, mouseX, mouseY, icon.width / 10, icon.height / 10
|
13
|
+
end
|
data/lib/rubysketch.rb
CHANGED
data/lib/rubysketch/glsl.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module RubySketch
|
2
2
|
|
3
3
|
|
4
|
-
# Processing compatible API
|
4
|
+
# Processing compatible API
|
5
5
|
#
|
6
|
-
class
|
6
|
+
class Processing
|
7
7
|
|
8
8
|
include Math
|
9
9
|
|
@@ -43,11 +43,12 @@ module RubySketch
|
|
43
43
|
|
44
44
|
# @private
|
45
45
|
def initialize ()
|
46
|
+
@matrixStack__ = []
|
47
|
+
@styleStack__ = []
|
46
48
|
@frameCount__ = 0
|
47
49
|
@hsbColor__ = false
|
48
50
|
@colorMaxes__ = [1.0] * 4
|
49
51
|
@angleScale__ = 1.0
|
50
|
-
@styleStack = []
|
51
52
|
@mouseX__ =
|
52
53
|
@mouseY__ =
|
53
54
|
@mousePrevX__ =
|
@@ -293,12 +294,17 @@ module RubySketch
|
|
293
294
|
end
|
294
295
|
|
295
296
|
# @private
|
296
|
-
def setupDrawBlock__ ()
|
297
|
+
private def setupDrawBlock__ ()
|
297
298
|
@window__.draw = proc do |e, painter|
|
298
299
|
@painter__ = painter
|
299
|
-
|
300
|
-
@
|
301
|
-
|
300
|
+
@matrixStack__.clear
|
301
|
+
@styleStack__.clear
|
302
|
+
begin
|
303
|
+
push
|
304
|
+
@drawBlock__.call e if @drawBlock__
|
305
|
+
ensure
|
306
|
+
pop
|
307
|
+
end
|
302
308
|
@frameCount__ += 1
|
303
309
|
updateMousePrevPos__
|
304
310
|
end
|
@@ -317,7 +323,7 @@ module RubySketch
|
|
317
323
|
end
|
318
324
|
|
319
325
|
# @private
|
320
|
-
def setupMousePressedBlock__ ()
|
326
|
+
private def setupMousePressedBlock__ ()
|
321
327
|
@window__.pointer_down = proc do |e|
|
322
328
|
updateMouseState__ e.x, e.y, true
|
323
329
|
@mousePressedBlock__.call e if @mousePressedBlock__
|
@@ -330,7 +336,7 @@ module RubySketch
|
|
330
336
|
end
|
331
337
|
|
332
338
|
# @private
|
333
|
-
def setupMouseReleasedBlock__ ()
|
339
|
+
private def setupMouseReleasedBlock__ ()
|
334
340
|
@window__.pointer_up = proc do |e|
|
335
341
|
updateMouseState__ e.x, e.y, false
|
336
342
|
@mouseReleasedBlock__.call e if @mouseReleasedBlock__
|
@@ -343,7 +349,7 @@ module RubySketch
|
|
343
349
|
end
|
344
350
|
|
345
351
|
# @private
|
346
|
-
def setupMouseMovedBlock__ ()
|
352
|
+
private def setupMouseMovedBlock__ ()
|
347
353
|
@window__.pointer_move = proc do |e|
|
348
354
|
updateMouseState__ e.x, e.y
|
349
355
|
@mouseMovedBlock__.call e if @mouseMovedBlock__
|
@@ -356,7 +362,7 @@ module RubySketch
|
|
356
362
|
end
|
357
363
|
|
358
364
|
# @private
|
359
|
-
def setupMouseDraggedBlock__ ()
|
365
|
+
private def setupMouseDraggedBlock__ ()
|
360
366
|
@window__.pointer_drag = proc do |e|
|
361
367
|
updateMouseState__ e.x, e.y
|
362
368
|
@mouseDraggedBlock__.call e if @mouseDraggedBlock__
|
@@ -369,20 +375,20 @@ module RubySketch
|
|
369
375
|
end
|
370
376
|
|
371
377
|
# @private
|
372
|
-
def updateMouseState__ (x, y, pressed = nil)
|
378
|
+
private def updateMouseState__ (x, y, pressed = nil)
|
373
379
|
@mouseX__ = x
|
374
380
|
@mouseY__ = y
|
375
381
|
@mousePressed__ = pressed if pressed != nil
|
376
382
|
end
|
377
383
|
|
378
384
|
# @private
|
379
|
-
def updateMousePrevPos__ ()
|
385
|
+
private def updateMousePrevPos__ ()
|
380
386
|
@mousePrevX__ = @mouseX__
|
381
387
|
@mousePrevY__ = @mouseY__
|
382
388
|
end
|
383
389
|
|
384
390
|
# @private
|
385
|
-
def size__ (width, height)
|
391
|
+
private def size__ (width, height)
|
386
392
|
raise 'size() must be called on startup or setup block' if @started__
|
387
393
|
|
388
394
|
@painter__.send :end_paint
|
@@ -481,7 +487,7 @@ module RubySketch
|
|
481
487
|
# @return [nil] nil
|
482
488
|
#
|
483
489
|
def colorMode (mode, *maxes)
|
484
|
-
raise ArgumentError, "
|
490
|
+
raise ArgumentError, "invalid color mode: #{mode}" unless [RGB, HSB].include?(mode)
|
485
491
|
raise ArgumentError unless [0, 1, 3, 4].include?(maxes.size)
|
486
492
|
|
487
493
|
@hsbColor__ = mode.upcase == HSB
|
@@ -493,9 +499,9 @@ module RubySketch
|
|
493
499
|
end
|
494
500
|
|
495
501
|
# @private
|
496
|
-
def
|
502
|
+
private def toRGBA__ (*args)
|
497
503
|
a, b, c, d = args
|
498
|
-
return
|
504
|
+
return parseColor__(a, b || alphaMax__) if a.kind_of?(String)
|
499
505
|
|
500
506
|
rgba = case args.size
|
501
507
|
when 1, 2 then [a, a, a, b || alphaMax__]
|
@@ -508,16 +514,16 @@ module RubySketch
|
|
508
514
|
end
|
509
515
|
|
510
516
|
# @private
|
511
|
-
def
|
517
|
+
private def parseColor__ (str, alpha)
|
512
518
|
result = str.match /^\s*##{'([0-9a-f]{2})' * 3}\s*$/i
|
513
|
-
raise ArgumentError, "
|
519
|
+
raise ArgumentError, "invalid color code: '#{str}'" unless result
|
514
520
|
|
515
521
|
rgb = result[1..3].map.with_index {|hex, i| hex.to_i(16) / 255.0}
|
516
522
|
return *rgb, (alpha / alphaMax__)
|
517
523
|
end
|
518
524
|
|
519
525
|
# @private
|
520
|
-
def alphaMax__ ()
|
526
|
+
private def alphaMax__ ()
|
521
527
|
@colorMaxes__[3]
|
522
528
|
end
|
523
529
|
|
@@ -531,13 +537,13 @@ module RubySketch
|
|
531
537
|
@angleScale__ = case mode
|
532
538
|
when RADIANS then RAD2DEG__
|
533
539
|
when DEGREES then 1.0
|
534
|
-
else raise ArgumentError, "
|
540
|
+
else raise ArgumentError, "invalid angle mode: #{mode}"
|
535
541
|
end
|
536
542
|
nil
|
537
543
|
end
|
538
544
|
|
539
545
|
# @private
|
540
|
-
def
|
546
|
+
private def toAngle__ (angle)
|
541
547
|
angle * @angleScale__
|
542
548
|
end
|
543
549
|
|
@@ -572,7 +578,7 @@ module RubySketch
|
|
572
578
|
end
|
573
579
|
|
574
580
|
# @private
|
575
|
-
def
|
581
|
+
private def toXYWH__ (mode, a, b, c, d)
|
576
582
|
case mode
|
577
583
|
when CORNER then [a, b, c, d]
|
578
584
|
when CORNERS then [a, b, c - a, d - b]
|
@@ -601,7 +607,7 @@ module RubySketch
|
|
601
607
|
# @return [nil] nil
|
602
608
|
#
|
603
609
|
def background (*args)
|
604
|
-
rgba =
|
610
|
+
rgba = toRGBA__ *args
|
605
611
|
if rgba[3] == 1
|
606
612
|
@painter__.background *rgba
|
607
613
|
else
|
@@ -631,7 +637,7 @@ module RubySketch
|
|
631
637
|
# @return [nil] nil
|
632
638
|
#
|
633
639
|
def fill (*args)
|
634
|
-
@painter__.fill(*
|
640
|
+
@painter__.fill(*toRGBA__(*args))
|
635
641
|
nil
|
636
642
|
end
|
637
643
|
|
@@ -654,7 +660,7 @@ module RubySketch
|
|
654
660
|
# @return [nil] nil
|
655
661
|
#
|
656
662
|
def stroke (*args)
|
657
|
-
@painter__.stroke(*
|
663
|
+
@painter__.stroke(*toRGBA__(*args))
|
658
664
|
nil
|
659
665
|
end
|
660
666
|
|
@@ -757,7 +763,7 @@ module RubySketch
|
|
757
763
|
# @return [nil] nil
|
758
764
|
#
|
759
765
|
def rect (a, b, c, d, *args)
|
760
|
-
x, y, w, h =
|
766
|
+
x, y, w, h = toXYWH__ @rectMode__, a, b, c, d
|
761
767
|
case args.size
|
762
768
|
when 0 then @painter__.rect x, y, w, h
|
763
769
|
when 1 then @painter__.rect x, y, w, h, round: args[0]
|
@@ -777,7 +783,7 @@ module RubySketch
|
|
777
783
|
# @return [nil] nil
|
778
784
|
#
|
779
785
|
def ellipse (a, b, c, d)
|
780
|
-
x, y, w, h =
|
786
|
+
x, y, w, h = toXYWH__ @ellipseMode__, a, b, c, d
|
781
787
|
@painter__.ellipse x, y, w, h
|
782
788
|
nil
|
783
789
|
end
|
@@ -806,9 +812,9 @@ module RubySketch
|
|
806
812
|
# @return [nil] nil
|
807
813
|
#
|
808
814
|
def arc (a, b, c, d, start, stop)
|
809
|
-
x, y, w, h =
|
810
|
-
start =
|
811
|
-
stop =
|
815
|
+
x, y, w, h = toXYWH__ @ellipseMode__, a, b, c, d
|
816
|
+
start = toAngle__ start
|
817
|
+
stop = toAngle__ stop
|
812
818
|
@painter__.ellipse x, y, w, h, from: start, to: stop
|
813
819
|
nil
|
814
820
|
end
|
@@ -875,6 +881,26 @@ module RubySketch
|
|
875
881
|
nil
|
876
882
|
end
|
877
883
|
|
884
|
+
# Draws an image.
|
885
|
+
#
|
886
|
+
# @overload image(img, x, y)
|
887
|
+
# @overload image(img, x, y, w, h)
|
888
|
+
#
|
889
|
+
# @param img [Image] image to draw
|
890
|
+
# @param x [Numeric] horizontal position of the image
|
891
|
+
# @param y [Numeric] vertical position of the image
|
892
|
+
# @param w [Numeric] width of the image
|
893
|
+
# @param h [Numeric] height of the image
|
894
|
+
#
|
895
|
+
# @return [nil] nil
|
896
|
+
#
|
897
|
+
def image (img, x, y, w = nil, h = nil)
|
898
|
+
w ||= img.width
|
899
|
+
h ||= img.height
|
900
|
+
@painter__.image img.internal, x, y, w, h
|
901
|
+
nil
|
902
|
+
end
|
903
|
+
|
878
904
|
# Applies translation matrix to current transformation matrix.
|
879
905
|
#
|
880
906
|
# @param x [Numeric] horizontal transformation
|
@@ -910,7 +936,7 @@ module RubySketch
|
|
910
936
|
# @return [nil] nil
|
911
937
|
#
|
912
938
|
def rotate (angle)
|
913
|
-
@painter__.rotate
|
939
|
+
@painter__.rotate toAngle__ angle
|
914
940
|
nil
|
915
941
|
end
|
916
942
|
|
@@ -919,7 +945,7 @@ module RubySketch
|
|
919
945
|
# @return [nil] nil
|
920
946
|
#
|
921
947
|
def pushMatrix ()
|
922
|
-
@painter__.
|
948
|
+
@matrixStack__.push @painter__.matrix
|
923
949
|
nil
|
924
950
|
end
|
925
951
|
|
@@ -928,7 +954,8 @@ module RubySketch
|
|
928
954
|
# @return [nil] nil
|
929
955
|
#
|
930
956
|
def popMatrix ()
|
931
|
-
@
|
957
|
+
raise "matrix stack underflow" if @matrixStack__.empty?
|
958
|
+
@painter__.matrix = @matrixStack__.pop
|
932
959
|
nil
|
933
960
|
end
|
934
961
|
|
@@ -946,8 +973,11 @@ module RubySketch
|
|
946
973
|
# @return [nil] nil
|
947
974
|
#
|
948
975
|
def pushStyle ()
|
949
|
-
@
|
950
|
-
|
976
|
+
@styleStack__.push [
|
977
|
+
@painter__.fill,
|
978
|
+
@painter__.stroke,
|
979
|
+
@painter__.stroke_width,
|
980
|
+
@painter__.font,
|
951
981
|
@hsbColor__,
|
952
982
|
@colorMaxes__,
|
953
983
|
@angleScale__,
|
@@ -962,9 +992,16 @@ module RubySketch
|
|
962
992
|
# @return [nil] nil
|
963
993
|
#
|
964
994
|
def popStyle ()
|
965
|
-
@
|
966
|
-
@
|
967
|
-
|
995
|
+
raise "style stack underflow" if @styleStack__.empty?
|
996
|
+
@painter__.fill,
|
997
|
+
@painter__.stroke,
|
998
|
+
@painter__.stroke_width,
|
999
|
+
@painter__.font,
|
1000
|
+
@hsbColor__,
|
1001
|
+
@colorMaxes__,
|
1002
|
+
@angleScale__,
|
1003
|
+
@rectMode__,
|
1004
|
+
@ellipseMode__ = @styleStack__.pop
|
968
1005
|
nil
|
969
1006
|
end
|
970
1007
|
|
@@ -990,85 +1027,163 @@ module RubySketch
|
|
990
1027
|
#
|
991
1028
|
# @overload noise(x)
|
992
1029
|
# @overload noise(x, y)
|
1030
|
+
# @overload noise(x, y, z)
|
993
1031
|
#
|
994
1032
|
# @param x [Numeric] horizontal point in noise space
|
995
1033
|
# @param y [Numeric] vertical point in noise space
|
1034
|
+
# @param z [Numeric] depth point in noise space
|
996
1035
|
#
|
997
1036
|
# @return [Numeric] noise value (0.0..1.0)
|
998
1037
|
#
|
999
|
-
def noise (x, y = 0)
|
1000
|
-
Rays.perlin(x, y) / 2.0 +
|
1038
|
+
def noise (x, y = 0, z = 0)
|
1039
|
+
Rays.perlin(x, y, z) / 2.0 + 0.5
|
1001
1040
|
end
|
1002
1041
|
|
1003
|
-
#
|
1042
|
+
# Loads image.
|
1004
1043
|
#
|
1005
|
-
|
1044
|
+
# @param filename [String] file name to load image
|
1045
|
+
# @param extension [String] type of image to load (ex. 'png')
|
1046
|
+
#
|
1047
|
+
# @return [Image] loaded image object
|
1048
|
+
#
|
1049
|
+
def loadImage (filename, extension = nil)
|
1050
|
+
filename = getImage__ filename, extension if filename =~ %r|^https?://|
|
1051
|
+
Image.new Rays::Image.load filename
|
1052
|
+
end
|
1006
1053
|
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1054
|
+
# @private
|
1055
|
+
private def getImage__ (uri, ext)
|
1056
|
+
ext ||= File.extname uri
|
1057
|
+
raise "unsupported image type" unless ext =~ /^\.?(png)$/i
|
1058
|
+
|
1059
|
+
tmpdir = Pathname(Dir.tmpdir) + Digest::SHA1.hexdigest(self.class.name)
|
1060
|
+
path = tmpdir + Digest::SHA1.hexdigest(uri)
|
1061
|
+
path = path.sub_ext ext
|
1062
|
+
|
1063
|
+
unless path.file?
|
1064
|
+
p "getting #{uri}"
|
1065
|
+
URI.open uri do |input|
|
1066
|
+
tmpdir.mkdir unless tmpdir.directory?
|
1067
|
+
path.open('w') do |output|
|
1068
|
+
while buf = input.read(2 ** 16)
|
1069
|
+
output.write buf
|
1070
|
+
end
|
1071
|
+
end
|
1072
|
+
end
|
1013
1073
|
end
|
1074
|
+
path.to_s
|
1075
|
+
end
|
1014
1076
|
|
1015
|
-
|
1016
|
-
#
|
1017
|
-
# @overload textBounds(str)
|
1018
|
-
# @overload textBounds(str, x, y)
|
1019
|
-
# @overload textBounds(str, x, y, fontSize)
|
1020
|
-
#
|
1021
|
-
# @param str [String] text to calculate bounding box
|
1022
|
-
# @param x [Numeric] horizontal position of bounding box
|
1023
|
-
# @param y [Numeric] vertical position of bounding box
|
1024
|
-
# @param fontSize [Numeric] font size
|
1025
|
-
#
|
1026
|
-
# @return [TextBounds] bounding box for text
|
1027
|
-
#
|
1028
|
-
def textBounds (str, x = 0, y = 0, fontSize = nil)
|
1029
|
-
f = fontSize ? Rays::Font.new(@font.name, fontSize) : @font
|
1030
|
-
TextBounds.new x, y, x + f.width(str), y + f.height
|
1031
|
-
end
|
1077
|
+
end# Processing
|
1032
1078
|
|
1033
|
-
# Bounding box for text.
|
1034
|
-
#
|
1035
|
-
class TextBounds
|
1036
|
-
|
1037
|
-
# Horizontal position
|
1038
|
-
#
|
1039
|
-
attr_reader :x
|
1040
|
-
|
1041
|
-
# Vertical position
|
1042
|
-
#
|
1043
|
-
attr_reader :y
|
1044
|
-
|
1045
|
-
# Width of bounding box
|
1046
|
-
#
|
1047
|
-
attr_reader :w
|
1048
|
-
|
1049
|
-
# Height of bounding box
|
1050
|
-
#
|
1051
|
-
attr_reader :h
|
1052
|
-
|
1053
|
-
# Initialize bouding box.
|
1054
|
-
#
|
1055
|
-
# @param x [Numeric] horizontal position
|
1056
|
-
# @param y [Numeric] vertical position
|
1057
|
-
# @param w [Numeric] width of bounding box
|
1058
|
-
# @param h [Numeric] height of bounding box
|
1059
|
-
#
|
1060
|
-
def initialize (x, y, w, h)
|
1061
|
-
@x, @y, @w, @h = x, y, w, h
|
1062
|
-
end
|
1063
1079
|
|
1064
|
-
|
1080
|
+
# Image object.
|
1081
|
+
#
|
1082
|
+
class Processing::Image
|
1083
|
+
|
1084
|
+
# Initialize image.
|
1085
|
+
#
|
1086
|
+
def initialize (image)
|
1087
|
+
@image = image
|
1088
|
+
end
|
1089
|
+
|
1090
|
+
# Gets width of image.
|
1091
|
+
#
|
1092
|
+
# @return [Numeric] width of image
|
1093
|
+
#
|
1094
|
+
def width ()
|
1095
|
+
@image.width
|
1096
|
+
end
|
1097
|
+
|
1098
|
+
# Gets height of image.
|
1099
|
+
#
|
1100
|
+
# @return [Numeric] height of image
|
1101
|
+
#
|
1102
|
+
def height ()
|
1103
|
+
@image.height
|
1104
|
+
end
|
1105
|
+
|
1106
|
+
# Saves image to file.
|
1107
|
+
#
|
1108
|
+
# @param filename [String] file name to save image
|
1109
|
+
#
|
1110
|
+
def save (filename)
|
1111
|
+
@image.save filename
|
1112
|
+
end
|
1113
|
+
|
1114
|
+
# @private
|
1115
|
+
def internal ()
|
1116
|
+
@image
|
1117
|
+
end
|
1118
|
+
|
1119
|
+
end# Processing::Image
|
1120
|
+
|
1121
|
+
|
1122
|
+
# Font object.
|
1123
|
+
#
|
1124
|
+
class Processing::Font
|
1125
|
+
|
1126
|
+
# Initialize font.
|
1127
|
+
#
|
1128
|
+
# @private
|
1129
|
+
#
|
1130
|
+
def initialize (font)
|
1131
|
+
@font = font
|
1132
|
+
end
|
1133
|
+
|
1134
|
+
# Returns bounding box.
|
1135
|
+
#
|
1136
|
+
# @overload textBounds(str)
|
1137
|
+
# @overload textBounds(str, x, y)
|
1138
|
+
# @overload textBounds(str, x, y, fontSize)
|
1139
|
+
#
|
1140
|
+
# @param str [String] text to calculate bounding box
|
1141
|
+
# @param x [Numeric] horizontal position of bounding box
|
1142
|
+
# @param y [Numeric] vertical position of bounding box
|
1143
|
+
# @param fontSize [Numeric] font size
|
1144
|
+
#
|
1145
|
+
# @return [TextBounds] bounding box for text
|
1146
|
+
#
|
1147
|
+
def textBounds (str, x = 0, y = 0, fontSize = nil)
|
1148
|
+
f = fontSize ? Rays::Font.new(@font.name, fontSize) : @font
|
1149
|
+
TextBounds.new x, y, x + f.width(str), y + f.height
|
1150
|
+
end
|
1151
|
+
|
1152
|
+
end# Processing::Font
|
1065
1153
|
|
1066
|
-
end# Font
|
1067
1154
|
|
1068
|
-
|
1155
|
+
# Bounding box for text.
|
1156
|
+
#
|
1157
|
+
class Processing::TextBounds
|
1069
1158
|
|
1159
|
+
# Horizontal position
|
1160
|
+
#
|
1161
|
+
attr_reader :x
|
1162
|
+
|
1163
|
+
# Vertical position
|
1164
|
+
#
|
1165
|
+
attr_reader :y
|
1166
|
+
|
1167
|
+
# Width of bounding box
|
1168
|
+
#
|
1169
|
+
attr_reader :w
|
1170
|
+
|
1171
|
+
# Height of bounding box
|
1172
|
+
#
|
1173
|
+
attr_reader :h
|
1174
|
+
|
1175
|
+
# Initialize bouding box.
|
1176
|
+
#
|
1177
|
+
# @param x [Numeric] horizontal position
|
1178
|
+
# @param y [Numeric] vertical position
|
1179
|
+
# @param w [Numeric] width of bounding box
|
1180
|
+
# @param h [Numeric] height of bounding box
|
1181
|
+
#
|
1182
|
+
def initialize (x, y, w, h)
|
1183
|
+
@x, @y, @w, @h = x, y, w, h
|
1184
|
+
end
|
1070
1185
|
|
1071
|
-
Processing
|
1186
|
+
end# Processing::TextBounds
|
1072
1187
|
|
1073
1188
|
|
1074
1189
|
end# RubySketch
|
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.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- xordog
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yard
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- examples/clock.rb
|
111
111
|
- examples/glsl.rb
|
112
112
|
- examples/hello.rb
|
113
|
+
- examples/image.rb
|
113
114
|
- examples/shapes.rb
|
114
115
|
- lib/rubysketch-processing.rb
|
115
116
|
- lib/rubysketch.rb
|