sgl 0.4.0 → 1.0.0

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.
Files changed (94) hide show
  1. data/ChangeLog +254 -234
  2. data/History.txt +6 -0
  3. data/Manifest.txt +10 -0
  4. data/Rakefile +27 -7
  5. data/examples/cocoa1-basic.rb +14 -14
  6. data/examples/cocoa10-transparent.rb +26 -26
  7. data/examples/cocoa11-application.rb +13 -13
  8. data/examples/cocoa2-draw.rb +23 -23
  9. data/examples/cocoa3-affine.rb +29 -29
  10. data/examples/cocoa4-font.rb +24 -24
  11. data/examples/cocoa5-image.rb +22 -22
  12. data/examples/cocoa6-sound.rb +24 -24
  13. data/examples/cocoa7-movie.rb +40 -40
  14. data/examples/cocoa8-movieoverlay.rb +42 -42
  15. data/examples/cocoa9-streaming.rb +40 -40
  16. data/examples/opengl1-basic.rb +14 -14
  17. data/examples/opengl11-application.rb +13 -13
  18. data/examples/opengl2-draw.rb +23 -23
  19. data/examples/opengl3-affine.rb +29 -29
  20. data/examples/sample1.rb +11 -11
  21. data/examples/sample10.rb +16 -16
  22. data/examples/sample11.rb +22 -22
  23. data/examples/sample11a.rb +33 -33
  24. data/examples/sample12.rb +30 -30
  25. data/examples/sample12a.rb +35 -35
  26. data/examples/sample13.rb +116 -116
  27. data/examples/sample15.rb +24 -24
  28. data/examples/sample16.rb +31 -31
  29. data/examples/sample16a.rb +35 -35
  30. data/examples/sample6.rb +18 -18
  31. data/examples/sample7.rb +16 -16
  32. data/examples/sample9.rb +20 -20
  33. data/examples/testgl.rb +169 -169
  34. data/lib/sgl/bass.rb +46 -46
  35. data/lib/sgl/cocoa-app.rb +43 -43
  36. data/lib/sgl/cocoa-color.rb +65 -65
  37. data/lib/sgl/cocoa-draw.rb +72 -72
  38. data/lib/sgl/cocoa-event.rb +229 -229
  39. data/lib/sgl/cocoa-media.rb +144 -144
  40. data/lib/sgl/cocoa-notuse.rb +493 -493
  41. data/lib/sgl/cocoa-window.rb +203 -203
  42. data/lib/sgl/cocoa.rb +8 -8
  43. data/lib/sgl/opengl-app.rb +38 -38
  44. data/lib/sgl/opengl-color.rb +44 -44
  45. data/lib/sgl/opengl-draw.rb +260 -260
  46. data/lib/sgl/opengl-event.rb +325 -325
  47. data/lib/sgl/opengl-modules.rb +22 -22
  48. data/lib/sgl/opengl-window.rb +224 -224
  49. data/lib/sgl/opengl.rb +7 -7
  50. data/lib/sgl/sgl-button.rb +135 -135
  51. data/lib/sgl/sgl-client.rb +21 -21
  52. data/lib/sgl/sgl-color.rb +68 -82
  53. data/lib/sgl/sgl-connect.rb +9 -9
  54. data/lib/sgl/sgl-server.rb +58 -58
  55. data/lib/sgl/sgl-spring.rb +216 -216
  56. data/lib/sgl/version.rb +2 -2
  57. data/scripts/lib-txt2html.rb +130 -0
  58. data/scripts/txt2html +2 -63
  59. data/spec/sgl_spec.rb +13 -0
  60. data/spec/spec.opts +1 -0
  61. data/spec/spec_helper.rb +1 -0
  62. data/test/test_cocoa_app.rb +291 -291
  63. data/test/test_module_ruby16.rb +30 -30
  64. data/test/test_opengl_app.rb +147 -147
  65. data/test/test_opengl_basic.rb +22 -22
  66. data/test/test_opengl_fullscreen.rb +23 -23
  67. data/test/test_opengl_novice.rb +35 -35
  68. data/website/challenge1.html +91 -91
  69. data/website/challenge1.txt +3 -3
  70. data/website/challenge2.html +143 -144
  71. data/website/challenge2.txt +13 -14
  72. data/website/challenge3.html +66 -63
  73. data/website/challenge3.txt +7 -7
  74. data/website/cocoa.html +85 -88
  75. data/website/cocoa.txt +2 -4
  76. data/website/description.html +138 -138
  77. data/website/description.txt +1 -1
  78. data/website/exercise1.html +262 -264
  79. data/website/exercise1.txt +58 -53
  80. data/website/exercise2.html +241 -683
  81. data/website/exercise2.txt +11 -427
  82. data/website/exercise3.html +206 -0
  83. data/website/exercise3.txt +155 -0
  84. data/website/exercise4.html +198 -0
  85. data/website/exercise4.txt +151 -0
  86. data/website/exercise5.html +162 -0
  87. data/website/exercise5.txt +113 -0
  88. data/website/exhibition.html +84 -84
  89. data/website/howto.html +146 -134
  90. data/website/howto.txt +9 -0
  91. data/website/index.html +178 -178
  92. data/website/index.txt +20 -19
  93. data/website/sound.html +141 -141
  94. metadata +16 -3
data/lib/sgl/opengl.rb CHANGED
@@ -1,7 +1,7 @@
1
- # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
- # License: Ruby License
3
-
4
- require "sgl/opengl-app"
5
-
6
- include SGL
7
- $__a__ = Application.new
1
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
+ # License: Ruby License
3
+
4
+ require "sgl/opengl-app"
5
+
6
+ include SGL
7
+ $__a__ = Application.new
@@ -1,135 +1,135 @@
1
- # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
- # License: Ruby License
3
-
4
- $LOAD_PATH.unshift("..") if !$LOAD_PATH.include?("..")
5
- require "sgl/opengl"
6
- require "sgl/sgl-spring"
7
-
8
- class Button
9
- def initialize(x, y)
10
- @dx, @dy = x, y
11
- @x, @y = x, y
12
- @w, @h = 8, 8
13
- end
14
-
15
- attr_accessor :x, :y
16
-
17
- def pos
18
- return [x, y]
19
- end
20
-
21
- def move_to(x, y)
22
- @x, @y = x, y
23
- end
24
-
25
- def draw(s)
26
- colorHSV(0, s, 100, 60)
27
- draw_rect(@w, @h)
28
- colorHSV(0, s, 0, 30)
29
- draw_rect(@w-1, @h-1)
30
- end
31
-
32
- def draw_rect(w, h)
33
- rect(@x-w, @y-h, @x+w, @y+h)
34
- end
35
-
36
- def inside?(x, y)
37
- (@x-@w) < x && x < (@x+@w) && (@y-@h) < y && y < (@y+@h)
38
- end
39
- end
40
-
41
- class ButtonColumn
42
- def initialize(length, dy, hy)
43
- @length, @dy, @hy = length, dy, hy #destination y and hide y
44
- @cur = 0
45
- @buttons = []
46
- @y_spring = NumSpring.new(@dy, @dy, 5, 0.6)
47
- make_buttons
48
- end
49
-
50
- attr_reader :y_spring
51
- attr_accessor :cur
52
-
53
- def make_buttons
54
- y = @y_spring.x
55
- sw = 46
56
- w = 0
57
- @length.times {
58
- @buttons << Button.new(0, y)
59
- w += sw
60
- }
61
- x = -w/2
62
- @buttons.each {|b|
63
- b.x = x
64
- x += sw
65
- }
66
- end
67
-
68
- def move(x, y)
69
- # @y_spring.target = y.abs < (768/2 - 120) ? @hy : @dy
70
- #if y.abs < (768/2 - 120)
71
- if (@dy - y).abs < 50
72
- @y_spring.target = @dy
73
- else
74
- @y_spring.target = @hy
75
- end
76
- @y_spring.moving = true
77
- @y_spring.move
78
- y = @y_spring.x
79
- @buttons.each {|b|
80
- b.y = y
81
- }
82
- end
83
-
84
- def draw
85
- @buttons.each_index {|i|
86
- b = @buttons[i]
87
- s = (@cur == i) ? 100 : 0
88
- b.draw(s)
89
- }
90
- end
91
-
92
- def onMouseDown(x, y)
93
- @buttons.each_index {|i|
94
- b = @buttons[i]
95
- if b.inside?(x, y)
96
- @cur = i
97
- return i
98
- end
99
- }
100
- nil
101
- end
102
- end
103
-
104
- if $0 == __FILE__
105
- require "test/unit"
106
- $__test_sgl__ = true
107
- end
108
-
109
- if defined?($__test_sgl__) && $__test_sgl__
110
- class TestSglButton < Test::Unit::TestCase #:nodoc:
111
- def test_button
112
- b = Button.new(1, 2)
113
- assert_equal(1, b.x)
114
- assert_equal(2, b.y)
115
- assert_equal([1, 2], b.pos)
116
- end
117
-
118
- def test_draw
119
- app = SGL::Application.new
120
- app.set_setup {
121
- app.window(100, 100)
122
- app.runtime = 0.1
123
- }
124
- i = 0
125
- button = Button.new(0, 0)
126
- app.set_display {
127
- button.move_to(i, i)
128
- button.draw(i)
129
- i += 5
130
- i = 0 if 100 < i
131
- }
132
- app.mainloop
133
- end
134
- end
135
- end
1
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
+ # License: Ruby License
3
+
4
+ $LOAD_PATH.unshift("..") if !$LOAD_PATH.include?("..")
5
+ require "sgl/opengl"
6
+ require "sgl/sgl-spring"
7
+
8
+ class Button
9
+ def initialize(x, y)
10
+ @dx, @dy = x, y
11
+ @x, @y = x, y
12
+ @w, @h = 8, 8
13
+ end
14
+
15
+ attr_accessor :x, :y
16
+
17
+ def pos
18
+ return [x, y]
19
+ end
20
+
21
+ def move_to(x, y)
22
+ @x, @y = x, y
23
+ end
24
+
25
+ def draw(s)
26
+ colorHSV(0, s, 100, 60)
27
+ draw_rect(@w, @h)
28
+ colorHSV(0, s, 0, 30)
29
+ draw_rect(@w-1, @h-1)
30
+ end
31
+
32
+ def draw_rect(w, h)
33
+ rect(@x-w, @y-h, @x+w, @y+h)
34
+ end
35
+
36
+ def inside?(x, y)
37
+ (@x-@w) < x && x < (@x+@w) && (@y-@h) < y && y < (@y+@h)
38
+ end
39
+ end
40
+
41
+ class ButtonColumn
42
+ def initialize(length, dy, hy)
43
+ @length, @dy, @hy = length, dy, hy #destination y and hide y
44
+ @cur = 0
45
+ @buttons = []
46
+ @y_spring = NumSpring.new(@dy, @dy, 5, 0.6)
47
+ make_buttons
48
+ end
49
+
50
+ attr_reader :y_spring
51
+ attr_accessor :cur
52
+
53
+ def make_buttons
54
+ y = @y_spring.x
55
+ sw = 46
56
+ w = 0
57
+ @length.times {
58
+ @buttons << Button.new(0, y)
59
+ w += sw
60
+ }
61
+ x = -w/2
62
+ @buttons.each {|b|
63
+ b.x = x
64
+ x += sw
65
+ }
66
+ end
67
+
68
+ def move(x, y)
69
+ # @y_spring.target = y.abs < (768/2 - 120) ? @hy : @dy
70
+ #if y.abs < (768/2 - 120)
71
+ if (@dy - y).abs < 50
72
+ @y_spring.target = @dy
73
+ else
74
+ @y_spring.target = @hy
75
+ end
76
+ @y_spring.moving = true
77
+ @y_spring.move
78
+ y = @y_spring.x
79
+ @buttons.each {|b|
80
+ b.y = y
81
+ }
82
+ end
83
+
84
+ def draw
85
+ @buttons.each_index {|i|
86
+ b = @buttons[i]
87
+ s = (@cur == i) ? 100 : 0
88
+ b.draw(s)
89
+ }
90
+ end
91
+
92
+ def onMouseDown(x, y)
93
+ @buttons.each_index {|i|
94
+ b = @buttons[i]
95
+ if b.inside?(x, y)
96
+ @cur = i
97
+ return i
98
+ end
99
+ }
100
+ nil
101
+ end
102
+ end
103
+
104
+ if $0 == __FILE__
105
+ require "test/unit"
106
+ $__test_sgl__ = true
107
+ end
108
+
109
+ if defined?($__test_sgl__) && $__test_sgl__
110
+ class TestSglButton < Test::Unit::TestCase #:nodoc:
111
+ def test_button
112
+ b = Button.new(1, 2)
113
+ assert_equal(1, b.x)
114
+ assert_equal(2, b.y)
115
+ assert_equal([1, 2], b.pos)
116
+ end
117
+
118
+ def test_draw
119
+ app = SGL::Application.new
120
+ app.set_setup {
121
+ app.window(100, 100)
122
+ app.runtime = 0.1
123
+ }
124
+ i = 0
125
+ button = Button.new(0, 0)
126
+ app.set_display {
127
+ button.move_to(i, i)
128
+ button.draw(i)
129
+ i += 5
130
+ i = 0 if 100 < i
131
+ }
132
+ app.mainloop
133
+ end
134
+ end
135
+ end
@@ -1,21 +1,21 @@
1
- #!/usr/bin/env ruby -w
2
- # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
3
- # License: Ruby License
4
-
5
- $LOAD_PATH.unshift("..") if !$LOAD_PATH.include?("..")
6
- require "sgl/sgl-connect"
7
-
8
- module Sgl
9
- class Client
10
- def self.main(argv)
11
- uri = ARGV.shift
12
- there = DRbObject.new_with_uri(uri)
13
- there.puts('Hello, World.')
14
- end
15
- end
16
- end
17
-
18
- if $0 == __FILE__
19
- require "test/unit"
20
- Sgl::Client.main(ARGV)
21
- end
1
+ #!/usr/bin/env ruby -w
2
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
3
+ # License: Ruby License
4
+
5
+ $LOAD_PATH.unshift("..") if !$LOAD_PATH.include?("..")
6
+ require "sgl/sgl-connect"
7
+
8
+ module Sgl
9
+ class Client
10
+ def self.main(argv)
11
+ uri = ARGV.shift
12
+ there = DRbObject.new_with_uri(uri)
13
+ there.puts('Hello, World.')
14
+ end
15
+ end
16
+ end
17
+
18
+ if $0 == __FILE__
19
+ require "test/unit"
20
+ Sgl::Client.main(ARGV)
21
+ end
data/lib/sgl/sgl-color.rb CHANGED
@@ -1,82 +1,68 @@
1
- #!/usr/bin/env ruby -w
2
- # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
3
- # License: Ruby License
4
-
5
- $LOAD_PATH.unshift("..") if !$LOAD_PATH.include?("..")
6
-
7
- module SGL
8
- RGB = 0
9
- HSV = 1
10
- DEFAULT_MAX = 100
11
-
12
- class ColorTranslatorRGB
13
- def initialize(r=nil, g=nil, b=nil, a=nil)
14
- a = DEFAULT_MAX if a == nil
15
- r = DEFAULT_MAX if r == nil
16
- g = b = r if g == nil || b == nil
17
- @rm, @gm, @bm, @am = r.to_f, g.to_f, b.to_f, a.to_f
18
- end
19
-
20
- def norm(r, g=nil, b=nil, a=nil)
21
- a = DEFAULT_MAX if a == nil
22
- g = b = r if g == nil || b == nil
23
- return [r/@rm, g/@gm, b/@bm, a/@am]
24
- end
25
- end
26
-
27
- class ColorTranslatorHSV
28
- def initialize(h=nil, s=nil, v=nil, a=nil)
29
- a = DEFAULT_MAX if a == nil
30
- h = DEFAULT_MAX if h == nil
31
- s = v = h if s == nil || v == nil
32
- @hm, @sm, @vm, @am = h.to_f, s.to_f, v.to_f, a.to_f
33
- end
34
-
35
- def norm(h, s=nil, v=nil, a=nil)
36
- if h < 0
37
- base = (h.abs / @hm).to_i + 1
38
- h += (base * @hm).to_f
39
- end
40
- h = (h % @hm) if @hm < h
41
- a = DEFAULT_MAX if a == nil
42
- s = v = h if s == nil || v == nil
43
- r, g, b = hsv_to_rgb(360.0*h/@hm, s/@sm, v/@vm)
44
- return [r, g, b, a/@am]
45
- end
46
-
47
- def hsv_to_rgb(h, s, v) #h:[0-360] s,v:[0,1], r,g,b:[0,1]
48
- return v, v, v if s == 0.0
49
- h = 0 if h == 360
50
- h /= 60.0 #h is now [0,6)
51
- i = h.to_i
52
- f = (h-i).to_f
53
- pp = v * (1-s)
54
- q = v * (1-(s*f))
55
- t = v * (1-(s*(1-f)))
56
- #p [h,s,v, i, f, pp, q, t]
57
- case i
58
- when 0; return v, t, pp
59
- when 1; return q, v, pp
60
- when 2; return pp, v, t
61
- when 3; return pp, q, v
62
- when 4; return t, pp, v
63
- when 5; return v, pp, q
64
- end
65
- return 0, 0, 0
66
- end
67
- end
68
- end
69
-
70
- if $0 == __FILE__
71
- require "test/unit"
72
- $__test_sgl__ = true
73
- end
74
-
75
- if defined?($__test_sgl__) && $__test_sgl__
76
- class TestSglColor_SglColor < Test::Unit::TestCase #:nodoc:
77
- def test_all
78
- rgb = SGL::ColorTranslatorRGB.new(100, 100, 100, 100)
79
- assert_equal([1.0, 1.0, 1.0, 1.0], rgb.norm(100, 100, 100))
80
- end
81
- end
82
- end
1
+ #!/usr/bin/env ruby -w
2
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
3
+ # License: Ruby License
4
+
5
+ $LOAD_PATH.unshift("..") if !$LOAD_PATH.include?("..")
6
+
7
+ module SGL
8
+ RGB = 0
9
+ HSV = 1
10
+ DEFAULT_MAX = 100
11
+
12
+ class ColorTranslatorRGB
13
+ def initialize(r=nil, g=nil, b=nil, a=nil)
14
+ a = DEFAULT_MAX if a == nil
15
+ r = DEFAULT_MAX if r == nil
16
+ g = b = r if g == nil || b == nil
17
+ @rm, @gm, @bm, @am = r.to_f, g.to_f, b.to_f, a.to_f
18
+ end
19
+
20
+ def norm(r, g=nil, b=nil, a=nil)
21
+ a = DEFAULT_MAX if a == nil
22
+ g = b = r if g == nil || b == nil
23
+ return [r/@rm, g/@gm, b/@bm, a/@am]
24
+ end
25
+ end
26
+
27
+ class ColorTranslatorHSV
28
+ def initialize(h=nil, s=nil, v=nil, a=nil)
29
+ a = DEFAULT_MAX if a == nil
30
+ h = DEFAULT_MAX if h == nil
31
+ s = v = h if s == nil || v == nil
32
+ @hm, @sm, @vm, @am = h.to_f, s.to_f, v.to_f, a.to_f
33
+ end
34
+
35
+ def norm(h, s=nil, v=nil, a=nil)
36
+ if h < 0
37
+ base = (h.abs / @hm).to_i + 1
38
+ h += (base * @hm).to_f
39
+ end
40
+ h = (h % @hm) if @hm < h
41
+ a = DEFAULT_MAX if a == nil
42
+ s = v = h if s == nil || v == nil
43
+ r, g, b = hsv_to_rgb(360.0*h/@hm, s/@sm, v/@vm)
44
+ return [r, g, b, a/@am]
45
+ end
46
+
47
+ def hsv_to_rgb(h, s, v) #h:[0-360] s,v:[0,1], r,g,b:[0,1]
48
+ return v, v, v if s == 0.0
49
+ h = 0 if h == 360
50
+ h /= 60.0 #h is now [0,6)
51
+ i = h.to_i
52
+ f = (h-i).to_f
53
+ pp = v * (1-s)
54
+ q = v * (1-(s*f))
55
+ t = v * (1-(s*(1-f)))
56
+ #p [h,s,v, i, f, pp, q, t]
57
+ case i
58
+ when 0; return v, t, pp
59
+ when 1; return q, v, pp
60
+ when 2; return pp, v, t
61
+ when 3; return pp, q, v
62
+ when 4; return t, pp, v
63
+ when 5; return v, pp, q
64
+ end
65
+ return 0, 0, 0
66
+ end
67
+ end
68
+ end