imtk

view test.c @ 14:df2bc9406561

added gradients
author John Tsiombikas <nuclear@siggraph.org>
date Tue, 19 Apr 2011 03:01:46 +0300
parents 9c7987064bb0
children 1cf212375db3
line source
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <assert.h>
4 #ifndef __APPLE__
5 #include <GL/glut.h>
6 #else
7 #include <GLUT/glut.h>
8 #endif
9 #include "imtk.h"
11 void disp(void);
12 void gui(void);
13 void reshape(int x, int y);
14 void keyb(unsigned char key, int x, int y);
15 void keyb_up(unsigned char key, int x, int y);
16 void skeyb(int key, int x, int y);
17 void skeyb_up(int key, int x, int y);
18 void mouse(int bn, int state, int x, int y);
19 void motion(int x, int y);
21 int xsz, ysz;
22 float angle;
23 int objsel;
25 int main(int argc, char **argv)
26 {
27 float lpos[] = {-1, 1, 1, 0};
28 float white[] = {1, 1, 1, 1};
29 float color[] = {0.9, 0.8, 0.73, 1};
31 glutInitWindowSize(800, 600);
32 glutInit(&argc, argv);
33 glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
34 glutCreateWindow("imgui test");
36 glutDisplayFunc(disp);
37 glutReshapeFunc(reshape);
38 glutKeyboardFunc(keyb);
39 glutKeyboardUpFunc(keyb_up);
40 glutSpecialFunc(skeyb);
41 glutSpecialUpFunc(skeyb_up);
42 glutMouseFunc(mouse);
43 glutMotionFunc(motion);
44 glutPassiveMotionFunc(motion);
46 glEnable(GL_DEPTH_TEST);
47 glEnable(GL_CULL_FACE);
48 glEnable(GL_LIGHTING);
49 glEnable(GL_LIGHT0);
50 glLightfv(GL_LIGHT0, GL_POSITION, lpos);
52 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color);
53 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white);
54 glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 60.0);
56 imtk_set_bevel_width(1);
58 glutMainLoop();
59 return 0;
60 }
62 void disp(void)
63 {
64 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
66 glMatrixMode(GL_MODELVIEW);
67 glLoadIdentity();
68 glMatrixMode(GL_PROJECTION);
69 glPushMatrix();
70 glLoadIdentity();
72 glPushAttrib(GL_ENABLE_BIT);
73 glDisable(GL_LIGHTING);
74 glDisable(GL_DEPTH_TEST);
76 glBegin(GL_QUADS);
77 glColor3f(0.3, 0.4, 0.8);
78 glVertex2f(-1, -1);
79 glVertex2f(1, -1);
80 glColor3f(0.7, 0.3, 0.2);
81 glVertex2f(1, 1);
82 glVertex2f(-1, 1);
83 glEnd();
85 glPopAttrib();
86 glPopMatrix();
88 glMatrixMode(GL_MODELVIEW);
89 glLoadIdentity();
90 glTranslatef(0, 0, -4);
91 glRotatef(25, 1, 0, 0);
92 glRotatef(angle, 0, 1, 0);
94 switch(objsel) {
95 case 0:
96 glFrontFace(GL_CW);
97 glutSolidTeapot(1.0);
98 glFrontFace(GL_CCW);
99 break;
101 case 1:
102 glutSolidTorus(0.5, 1, 12, 24);
103 break;
105 case 2:
106 glutSolidSphere(1.0, 24, 12);
107 break;
109 default:
110 break;
111 }
114 gui();
116 glutSwapBuffers();
117 assert(glGetError() == GL_NO_ERROR);
118 }
120 void gui(void)
121 {
122 static int bnshow;
123 static char textbuf[256];
124 static char textbuf2[256];
125 static float val;
126 static int prev_sel = 0;
127 char *itemlist;
129 imtk_begin();
131 /*glBegin(GL_QUADS);
132 glColor3f(0.6, 0.6, 0.6);
133 glVertex2f(0, 0);
134 glVertex2f(200, 0);
135 glVertex2f(200, glutGet(GLUT_WINDOW_HEIGHT));
136 glVertex2f(0, glutGet(GLUT_WINDOW_HEIGHT));
137 glEnd();*/
139 if(imtk_button(IMUID, "red", 30, 50)) {
140 float color[] = {1, 0.4, 0.3, 1};
141 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color);
142 glutPostRedisplay();
143 }
144 if(imtk_button(IMUID, "blue", 30, 80)) {
145 float color[] = {0.3, 0.4, 1, 1};
146 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color);
147 glutPostRedisplay();
148 }
150 itemlist = imtk_create_list("teapot", "torus", "sphere", NULL);
151 if((objsel = imtk_listbox(IMUID, itemlist, prev_sel, 30, 120)) != prev_sel) {
152 prev_sel = objsel;
153 glutPostRedisplay();
154 }
155 imtk_free_list(itemlist);
157 imtk_textbox(IMUID, textbuf, sizeof textbuf, 30, 200);
158 imtk_textbox(IMUID, textbuf2, sizeof textbuf2, 30, 250);
160 if((bnshow = imtk_checkbox(IMUID, "show hidden button", 30, 300, bnshow))) {
161 if(imtk_button(IMUID, "yellow", 50, 340)) {
162 float color[] = {0.8, 0.75, 0.3, 1};
163 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color);
164 glutPostRedisplay();
165 }
166 }
168 val = imtk_slider(IMUID, angle, 0.0, 360.0, 30, 390);
169 if(val != angle) {
170 angle = val;
171 glutPostRedisplay();
172 }
174 imtk_progress(IMUID, val / 360.0, 30, 420);
176 imtk_label("alpha:", 24, 473);
177 imtk_set_alpha(imtk_slider(IMUID, imtk_get_alpha(), 0.0, 1.0, 60, 470));
179 if(imtk_button(IMUID, "Quit", 30, 500)) {
180 exit(0);
181 }
183 imtk_end();
184 }
186 void reshape(int x, int y)
187 {
188 xsz = x;
189 ysz = y;
191 glViewport(0, 0, x, y);
192 imtk_set_viewport(x, y);
194 glMatrixMode(GL_PROJECTION);
195 glLoadIdentity();
196 gluPerspective(45.0, (float)xsz / (float)ysz, 1.0, 1000.0);
197 }
199 void keyb(unsigned char key, int x, int y)
200 {
201 switch(key) {
202 case 27:
203 exit(0);
205 default:
206 break;
207 }
209 imtk_inp_key(key, IMTK_DOWN);
210 }
212 void keyb_up(unsigned char key, int x, int y)
213 {
214 imtk_inp_key(key, IMTK_UP);
215 }
217 void skeyb(int key, int x, int y)
218 {
219 imtk_inp_key(key, IMTK_DOWN);
220 }
222 void skeyb_up(int key, int x, int y)
223 {
224 imtk_inp_key(key, IMTK_UP);
225 }
227 void mouse(int bn, int state, int x, int y)
228 {
229 imtk_inp_mouse(bn, state == GLUT_DOWN ? IMTK_DOWN : IMTK_UP);
230 }
232 void motion(int x, int y)
233 {
234 imtk_inp_motion(x, y);
235 }