Making Samples executable. #!/usr/bin/env io and chmod a+x *.io
[io/jrb1.git] / addons / OpenGL / samples / events.io
blob8fa18e2619b9655e71ab92a4f421edbf59bd4421
1 #!/usr/bin/env io
3 // A program to test OpenGL events
4 // Steve Dekorte, 2002
6 Screen := Object clone
7 Screen appendProto(OpenGL)
9 Screen do(
10 timerCount := 0
11 width := 0
12 height := 0
13 y := 0
14 x := 0
15 jb := 0
16 jv := vector(0, 0, 0)
17 xDown := nil
18 yDown := nil
19 action := "move mouse to start"
21 reshape := method(w, h,
22 width = w
23 height = h
24 glViewport(0,0,w,h)
25 glMatrixMode(GL_PROJECTION)
26 glLoadIdentity
27 gluOrtho2D(0, w, 0, h)
28 glMatrixMode(GL_MODELVIEW)
29 glLoadIdentity
30 glClearColor(1, 1, 1, 1)
31 display
34 display := method(
35 glClear(GL_COLOR_BUFFER_BIT)
36 glLoadIdentity
38 if (xDown, drawSelection)
39 drawCrossHairs
40 drawActionMessage
41 drawTimerMessage
43 glFlush
44 glutSwapBuffers
47 drawCrossHairs := method(
48 glPushMatrix
49 glColor4d(.7, .7, .7, 1)
50 glBegin(GL_LINES)
51 glVertex3d(x, 0, 0)
52 glVertex3d(x, height, 0)
53 glVertex3d(0, y, 0)
54 glVertex3d(width, y, 0)
55 glEnd
56 glPopMatrix
59 drawSelection := method(
60 glColor4d(.7, .7, .7, .1)
61 glBegin(GL_POLYGON)
62 glVertex3d(xDown, yDown, 0)
63 glVertex3d(xDown, y, 0)
64 glVertex3d(x, y, 0)
65 glVertex3d(x, yDown, 0)
66 glEnd
68 glColor4d(0,0,0, .1)
69 glBegin(GL_LINE_LOOP)
70 glVertex3d(xDown, yDown, 0)
71 glVertex3d(xDown, y, 0)
72 glVertex3d(x, y, 0)
73 glVertex3d(x, yDown, 0)
74 glEnd
76 b := 5
77 glColor4d(1, 0, 0, 1)
78 glRectd(x - b, y - b, x + b, y + b)
81 drawActionMessage := method(
82 glColor4d(.5, .5, .5, 1)
83 glColor4d(0,0,0, 1)
84 glPushMatrix
85 glTranslated(10, 10, 0)
86 drawString(action)
87 glPopMatrix
90 drawString := method(string,
91 if (self ?font,
92 nil //font drawString(string)
94 glPushMatrix
95 glScaled(.1, .1, 0)
96 glutStrokeString(0, string)
97 glPopMatrix
101 drawTimerMessage := method(
102 glColor4d(.5, .5, .5, 1)
103 glColor4d(0,0,0, 1)
104 glPushMatrix
105 glTranslated(10, 30, 0)
106 drawString("timer ".. timerCount)
107 glPopMatrix
108 glPushMatrix
109 glTranslated(10, 50, 0)
110 drawString("joystick ".. jb .. " " .. jv)
111 glPopMatrix
115 keyboard := method(key, mx, my,
116 action = "keyboard(" .. key asCharacter ..", " .. mx floor .. ", ".. my floor .. ")"
117 x = mx; y = height - my
118 display
121 special := method(key, mx, my,
122 action = "special(" .. key ..", " .. mx floor .. ", ".. my floor .. ")"
123 x = mx; y = height - my
124 display
127 motion := method(mx, my,
128 action = "motion(" .. mx floor .. ", ".. my floor .. ")"
129 x = mx; y = height - my
130 display
133 passiveMotion := method(mx, my,
134 action = "passiveMotion(" .. mx floor .. ", " .. my floor .. ")"
135 x = mx; y = height - my
136 display
139 mouse := method(button, state, mx, my,
140 action = "mouse(" .. button floor ..", " .. state floor .. ", " .. mx floor .. ", " .. my floor .. ")"
141 x = mx; y = height - my
143 if (state == 0,
144 xDown = x
145 yDown = y
147 xDown = nil
148 yDown = nil
151 action = action .. " modifiers: " .. glutGetModifiers
153 display
156 timer := method(v,
157 timerCount = timerCount + 1
158 glutTimerFunc(100, 0)
159 display
162 joystick := method(b, v,
163 jb = b
164 jv = v
168 run := method(
169 glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA )
170 glutInitWindowSize(512, 512)
171 glutInit
172 glutCreateWindow("Events Test")
173 glutEventTarget(self)
175 # register event functions
176 glutDisplayFunc
177 glutKeyboardFunc
178 glutSpecialFunc
179 glutMotionFunc
180 glutMouseFunc
181 glutReshapeFunc
182 glutPassiveMotionFunc
183 glutMouseFunc
184 //glutInitJoystick("/dev/input/js0")
185 glutJoystickFunc(100)
186 glutTimerFunc(100, 0)
187 glutReshapeWindow(1000,1000)
189 glEnable(GL_LINE_SMOOTH)
190 glEnable(GL_BLEND)
191 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
192 //glBlendFunc(GL_SRC_ALPHA, GL_ONE)
193 glHint(GL_LINE_SMOOTH_HINT, GL_NICEST)
194 glLineWidth(1)
195 glutMainLoop
199 Screen run