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
@@ -1,203 +1,203 @@
1
- # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
- # License: Ruby License
3
-
4
- module SGL
5
- # window functions
6
- def window(*a) $__a__.window(*a); end
7
- def close_window() $__a__.close_window; end
8
- def width() $__a__.width; end
9
- def height() $__a__.height; end
10
-
11
- class Application
12
- def initialize_window
13
- @options = default_options
14
- @win = @bgview = nil
15
- @width = @height = nil
16
- @oview = @movview = nil
17
- @thread = nil
18
- end
19
- private :initialize_window
20
-
21
- def default_options
22
- {
23
- :shadow=>true,
24
- :border=>true,
25
- :movie=>false,
26
- :overlay=>false,
27
- }
28
- end
29
- private :default_options
30
-
31
- # create window
32
- def window(*a)
33
- return if @win
34
-
35
- @options.update(a.pop) if a.last.is_a? Hash
36
-
37
- if defined?($windowShadow)
38
- @options[:shadow] = $windowShadow == 1
39
- end
40
-
41
- if defined?($windowBorder)
42
- @options[:border] = $windowBorder == 1
43
- end
44
-
45
- if @block[:display_overlay]
46
- @options[:overlay] = true
47
- end
48
-
49
- # get window size
50
- case a.length
51
- when 2
52
- w, h = a
53
- when 4
54
- raise "not implemented" # x1, y1, x2, y3 = a
55
- else
56
- raise "please specify width and height"
57
- end
58
- @width, @height = w, h
59
-
60
- cocoa_create_window(w, h)
61
- end
62
-
63
- def close_window
64
- @win.close if @win
65
- @win = @bgview = nil
66
- end
67
-
68
- attr_reader :width, :height
69
-
70
- def cocoa_create_window(w, h)
71
- @receiver = CocoaReceiver.alloc.init
72
- @receiver.setApp(self)
73
-
74
- # create a window
75
- s = OSX::NSScreen.mainScreen.frame.size
76
- x = (s.width - w) / 2.0
77
- y = (s.height - h) / 2.0
78
- win_frame = [x.to_f, y.to_f, w.to_f, h.to_f]
79
- style = OSX::NSClosableWindowMask
80
- style |= @options[:border] ? OSX::NSTitledWindowMask :
81
- OSX::NSBorderlessWindowMask
82
- win = NSWindow.alloc.
83
- initWithContentRect(win_frame,
84
- :styleMask, style,
85
- :backing, OSX::NSBackingStoreBuffered,
86
- :defer, true)
87
- win.setTitle("sgl")
88
-
89
- # create a view
90
- view = SglNSView.alloc.init
91
- view.setApp(self)
92
- win.setContentView(view)
93
- background(100) # white
94
- color(0) # black
95
-
96
- # for handling windowShouldClose
97
- win.setDelegate(@receiver)
98
- win.setOpaque(false) # can be transparent
99
- win.setHasShadow(@options[:shadow])
100
- win.setReleasedWhenClosed(false)
101
- win.makeKeyAndOrderFront(@receiver)
102
- win.orderFrontRegardless # show the window now
103
- @win = win
104
- @bgview = view
105
- window_movie(@options) if @options[:movie]
106
- #window_overlay(@options) if defined?(displayOverlay)
107
- window_overlay(@options) if @options[:overlay]
108
- @win
109
- end
110
-
111
- # sub view
112
- def window_movie(options)
113
- @movwin, @movview = make_view(@win, @bgview, NSViewForMovie, @options)
114
- @win.addChildWindow(@movwin, :ordered, OSX::NSWindowAbove)
115
- @movview.setNeedsDisplay(true)
116
- @movwin
117
- end
118
-
119
- def window_overlay(options)
120
- @owin, @oview = make_view(@win, @bgview, NSViewForOverlay, options)
121
- win = options[:movie] ? @movwin : @win
122
- win.addChildWindow(@owin, :ordered, OSX::NSWindowAbove)
123
- @oview.setNeedsDisplay(true)
124
- @owin
125
- end
126
-
127
- def make_view(parent_win, parent_view, viewclass, options)
128
- o = parent_view.frame.origin
129
- so = parent_win.convertBaseToScreen([o.x, o.y])
130
- s = parent_view.frame.size
131
- win_frame = [so.x, so.y, s.width, s.height]
132
- win = NSWindow.alloc.
133
- initWithContentRect(win_frame,
134
- :styleMask, OSX::NSBorderlessWindowMask,
135
- :backing, OSX::NSBackingStoreBuffered,
136
- :defer, true)
137
- win.setOpaque(false) # can be transparent
138
- win.setHasShadow(false)
139
- win.setIgnoresMouseEvents(true)
140
- win.setAlphaValue(1.0) # transparent
141
- b = parent_view.bounds
142
- bo, bs = b.origin, b.size
143
- frame = [bo.x, bo.y, bs.width, bs.height]
144
- view = viewclass.alloc.initWithFrame(frame)
145
- view.setApp(self)
146
- win.contentView.addSubview(view)
147
- win.orderFront(@receiver)
148
- return win, view
149
- end
150
- private :window_movie, :window_overlay, :make_view
151
-
152
- # Cocoa callback methods
153
- def window_should_close
154
- stop
155
- end
156
- end
157
-
158
- class CocoaReceiver < OSX::NSObject
159
- def init
160
- @app = nil
161
- return self
162
- end
163
-
164
- def setApp(app)
165
- @app = app
166
- end
167
-
168
- # Cocoa callback methods
169
- def windowShouldClose(sender)
170
- @app.window_should_close
171
- end
172
- end
173
-
174
- class NSWindow < OSX::NSWindow
175
- end
176
-
177
- # Do not use NSView for class name.
178
- # It causes Illeagal Instruction Error.
179
- # I don't know why.
180
- class SglNSView < OSX::NSView
181
- ns_overrides :drawRect_,
182
- :mouseDown_, :mouseDragged_, :mouseUp_, :keyDown_, :keyUp_
183
- def setApp(app) @app = app; end
184
- def drawRect(rect) @app.display_all(rect); end
185
- def mouseDown(event) @app.do_mousedown; end
186
- def mouseDragged(event) end # ignore
187
- def mouseUp(event) @app.do_mouseup; end
188
- def keyDown(event) @app.do_keydown(event); end
189
- def keyUp(event) @app.do_keyup(event); end
190
- end
191
-
192
- class NSViewForOverlay < OSX::NSView
193
- ns_overrides :drawRect_
194
- def setApp(app) @app = app; end
195
- def drawRect(rect) @app.display_overlay_all(rect); end
196
- end
197
-
198
- class NSViewForMovie < OSX::NSView
199
- ns_overrides :drawRect_
200
- def setApp(app) @app = app; end
201
- def drawRect(rect) @app.display_mov(rect); end
202
- end
203
- end
1
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
+ # License: Ruby License
3
+
4
+ module SGL
5
+ # window functions
6
+ def window(*a) $__a__.window(*a); end
7
+ def close_window() $__a__.close_window; end
8
+ def width() $__a__.width; end
9
+ def height() $__a__.height; end
10
+
11
+ class Application
12
+ def initialize_window
13
+ @options = default_options
14
+ @win = @bgview = nil
15
+ @width = @height = nil
16
+ @oview = @movview = nil
17
+ @thread = nil
18
+ end
19
+ private :initialize_window
20
+
21
+ def default_options
22
+ {
23
+ :shadow=>true,
24
+ :border=>true,
25
+ :movie=>false,
26
+ :overlay=>false,
27
+ }
28
+ end
29
+ private :default_options
30
+
31
+ # create window
32
+ def window(*a)
33
+ return if @win
34
+
35
+ @options.update(a.pop) if a.last.is_a? Hash
36
+
37
+ if defined?($windowShadow)
38
+ @options[:shadow] = $windowShadow == 1
39
+ end
40
+
41
+ if defined?($windowBorder)
42
+ @options[:border] = $windowBorder == 1
43
+ end
44
+
45
+ if @block[:display_overlay]
46
+ @options[:overlay] = true
47
+ end
48
+
49
+ # get window size
50
+ case a.length
51
+ when 2
52
+ w, h = a
53
+ when 4
54
+ raise "not implemented" # x1, y1, x2, y3 = a
55
+ else
56
+ raise "please specify width and height"
57
+ end
58
+ @width, @height = w, h
59
+
60
+ cocoa_create_window(w, h)
61
+ end
62
+
63
+ def close_window
64
+ @win.close if @win
65
+ @win = @bgview = nil
66
+ end
67
+
68
+ attr_reader :width, :height
69
+
70
+ def cocoa_create_window(w, h)
71
+ @receiver = CocoaReceiver.alloc.init
72
+ @receiver.setApp(self)
73
+
74
+ # create a window
75
+ s = OSX::NSScreen.mainScreen.frame.size
76
+ x = (s.width - w) / 2.0
77
+ y = (s.height - h) / 2.0
78
+ win_frame = [x.to_f, y.to_f, w.to_f, h.to_f]
79
+ style = OSX::NSClosableWindowMask
80
+ style |= @options[:border] ? OSX::NSTitledWindowMask :
81
+ OSX::NSBorderlessWindowMask
82
+ win = NSWindow.alloc.
83
+ initWithContentRect(win_frame,
84
+ :styleMask, style,
85
+ :backing, OSX::NSBackingStoreBuffered,
86
+ :defer, true)
87
+ win.setTitle("sgl")
88
+
89
+ # create a view
90
+ view = SglNSView.alloc.init
91
+ view.setApp(self)
92
+ win.setContentView(view)
93
+ background(100) # white
94
+ color(0) # black
95
+
96
+ # for handling windowShouldClose
97
+ win.setDelegate(@receiver)
98
+ win.setOpaque(false) # can be transparent
99
+ win.setHasShadow(@options[:shadow])
100
+ win.setReleasedWhenClosed(false)
101
+ win.makeKeyAndOrderFront(@receiver)
102
+ win.orderFrontRegardless # show the window now
103
+ @win = win
104
+ @bgview = view
105
+ window_movie(@options) if @options[:movie]
106
+ #window_overlay(@options) if defined?(displayOverlay)
107
+ window_overlay(@options) if @options[:overlay]
108
+ @win
109
+ end
110
+
111
+ # sub view
112
+ def window_movie(options)
113
+ @movwin, @movview = make_view(@win, @bgview, NSViewForMovie, @options)
114
+ @win.addChildWindow(@movwin, :ordered, OSX::NSWindowAbove)
115
+ @movview.setNeedsDisplay(true)
116
+ @movwin
117
+ end
118
+
119
+ def window_overlay(options)
120
+ @owin, @oview = make_view(@win, @bgview, NSViewForOverlay, options)
121
+ win = options[:movie] ? @movwin : @win
122
+ win.addChildWindow(@owin, :ordered, OSX::NSWindowAbove)
123
+ @oview.setNeedsDisplay(true)
124
+ @owin
125
+ end
126
+
127
+ def make_view(parent_win, parent_view, viewclass, options)
128
+ o = parent_view.frame.origin
129
+ so = parent_win.convertBaseToScreen([o.x, o.y])
130
+ s = parent_view.frame.size
131
+ win_frame = [so.x, so.y, s.width, s.height]
132
+ win = NSWindow.alloc.
133
+ initWithContentRect(win_frame,
134
+ :styleMask, OSX::NSBorderlessWindowMask,
135
+ :backing, OSX::NSBackingStoreBuffered,
136
+ :defer, true)
137
+ win.setOpaque(false) # can be transparent
138
+ win.setHasShadow(false)
139
+ win.setIgnoresMouseEvents(true)
140
+ win.setAlphaValue(1.0) # transparent
141
+ b = parent_view.bounds
142
+ bo, bs = b.origin, b.size
143
+ frame = [bo.x, bo.y, bs.width, bs.height]
144
+ view = viewclass.alloc.initWithFrame(frame)
145
+ view.setApp(self)
146
+ win.contentView.addSubview(view)
147
+ win.orderFront(@receiver)
148
+ return win, view
149
+ end
150
+ private :window_movie, :window_overlay, :make_view
151
+
152
+ # Cocoa callback methods
153
+ def window_should_close
154
+ stop
155
+ end
156
+ end
157
+
158
+ class CocoaReceiver < OSX::NSObject
159
+ def init
160
+ @app = nil
161
+ return self
162
+ end
163
+
164
+ def setApp(app)
165
+ @app = app
166
+ end
167
+
168
+ # Cocoa callback methods
169
+ def windowShouldClose(sender)
170
+ @app.window_should_close
171
+ end
172
+ end
173
+
174
+ class NSWindow < OSX::NSWindow
175
+ end
176
+
177
+ # Do not use NSView for class name.
178
+ # It causes Illeagal Instruction Error.
179
+ # I don't know why.
180
+ class SglNSView < OSX::NSView
181
+ ns_overrides :drawRect_,
182
+ :mouseDown_, :mouseDragged_, :mouseUp_, :keyDown_, :keyUp_
183
+ def setApp(app) @app = app; end
184
+ def drawRect(rect) @app.display_all(rect); end
185
+ def mouseDown(event) @app.do_mousedown; end
186
+ def mouseDragged(event) end # ignore
187
+ def mouseUp(event) @app.do_mouseup; end
188
+ def keyDown(event) @app.do_keydown(event); end
189
+ def keyUp(event) @app.do_keyup(event); end
190
+ end
191
+
192
+ class NSViewForOverlay < OSX::NSView
193
+ ns_overrides :drawRect_
194
+ def setApp(app) @app = app; end
195
+ def drawRect(rect) @app.display_overlay_all(rect); end
196
+ end
197
+
198
+ class NSViewForMovie < OSX::NSView
199
+ ns_overrides :drawRect_
200
+ def setApp(app) @app = app; end
201
+ def drawRect(rect) @app.display_mov(rect); end
202
+ end
203
+ end
data/lib/sgl/cocoa.rb CHANGED
@@ -1,8 +1,8 @@
1
- # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
- # License: Ruby License
3
-
4
- require "sgl/cocoa-app"
5
- require "sgl/cocoa-functions"
6
-
7
- include SGL
8
- $__a__ = Application.new
1
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
+ # License: Ruby License
3
+
4
+ require "sgl/cocoa-app"
5
+ require "sgl/cocoa-functions"
6
+
7
+ include SGL
8
+ $__a__ = Application.new
@@ -1,38 +1,38 @@
1
- # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
- # License: Ruby License
3
-
4
- require "sdl"
5
- require "opengl"
6
- require "sgl/sgl-color"
7
- require "sgl/opengl-window"
8
- require "sgl/opengl-color"
9
- require "sgl/opengl-event"
10
- require "sgl/opengl-draw"
11
- require "sgl/sgl-sound"
12
-
13
- module SGL
14
- class Application
15
- def initialize
16
- Thread.abort_on_exception = true
17
- @options = default_options
18
- initialize_window # opengl-window.rb
19
- initialize_color # sgl-color.rb
20
- initialize_event # opengl-event.rb
21
- end
22
-
23
- def default_options
24
- {
25
- :fullscreen=>nil,
26
- :fov=>45,
27
- :cursor=>nil,
28
- :depth=>false,
29
- :culling=>false,
30
- :smooth=>false,
31
- :delaytime=>1.0/60,
32
- :framerate=>nil,
33
- :runtime=>nil,
34
- }
35
- end
36
- private :default_options
37
- end
38
- end
1
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
+ # License: Ruby License
3
+
4
+ require "sdl"
5
+ require "opengl"
6
+ require "sgl/sgl-color"
7
+ require "sgl/opengl-window"
8
+ require "sgl/opengl-color"
9
+ require "sgl/opengl-event"
10
+ require "sgl/opengl-draw"
11
+ require "sgl/sgl-sound"
12
+
13
+ module SGL
14
+ class Application
15
+ def initialize
16
+ Thread.abort_on_exception = true
17
+ @options = default_options
18
+ initialize_window # opengl-window.rb
19
+ initialize_color # sgl-color.rb
20
+ initialize_event # opengl-event.rb
21
+ end
22
+
23
+ def default_options
24
+ {
25
+ :fullscreen=>nil,
26
+ :fov=>45,
27
+ :cursor=>nil,
28
+ :depth=>false,
29
+ :culling=>false,
30
+ :smooth=>false,
31
+ :delaytime=>1.0/60,
32
+ :framerate=>nil,
33
+ :runtime=>nil,
34
+ }
35
+ end
36
+ private :default_options
37
+ end
38
+ end