imtk

diff test.c @ 2:3d661dd17af3

- initial textbox implementation added - made the test program slightly more interesting
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 31 Dec 2010 01:54:53 +0200
parents dfbd12d1f566
children 038e5577d527
line diff
     1.1 --- a/test.c	Thu Dec 30 15:10:25 2010 +0200
     1.2 +++ b/test.c	Fri Dec 31 01:54:53 2010 +0200
     1.3 @@ -1,5 +1,6 @@
     1.4  #include <stdio.h>
     1.5  #include <stdlib.h>
     1.6 +#include <assert.h>
     1.7  #ifndef __APPLE__
     1.8  #include <GL/glut.h>
     1.9  #else
    1.10 @@ -17,9 +18,14 @@
    1.11  void mouse(int bn, int state, int x, int y);
    1.12  void motion(int x, int y);
    1.13  
    1.14 +int xsz, ysz;
    1.15  
    1.16  int main(int argc, char **argv)
    1.17  {
    1.18 +	float lpos[] = {-1, 1, 1, 0};
    1.19 +	float white[] = {1, 1, 1, 1};
    1.20 +	float color[] = {0.9, 0.8, 0.73, 1};
    1.21 +
    1.22  	glutInitWindowSize(800, 600);
    1.23  	glutInit(&argc, argv);
    1.24  	glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
    1.25 @@ -35,54 +41,100 @@
    1.26  	glutMotionFunc(motion);
    1.27  	glutPassiveMotionFunc(motion);
    1.28  
    1.29 +	glEnable(GL_DEPTH_TEST);
    1.30 +	glEnable(GL_CULL_FACE);
    1.31 +	glEnable(GL_LIGHTING);
    1.32 +	glEnable(GL_LIGHT0);
    1.33 +	glLightfv(GL_LIGHT0, GL_POSITION, lpos);
    1.34 +
    1.35 +	glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color);
    1.36 +	glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white);
    1.37 +	glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 60.0);
    1.38 +
    1.39  	glutMainLoop();
    1.40  	return 0;
    1.41  }
    1.42  
    1.43  void disp(void)
    1.44  {
    1.45 -	glClearColor(0.6, 0.6, 0.6, 0.0);
    1.46  	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    1.47  
    1.48 +	glViewport(200, 0, xsz - 200, ysz);
    1.49 +
    1.50 +	glMatrixMode(GL_PROJECTION);
    1.51 +	glLoadIdentity();
    1.52 +	gluPerspective(45.0, (float)(xsz - 200) / (float)ysz, 1.0, 1000.0);
    1.53 +
    1.54 +	glMatrixMode(GL_MODELVIEW);
    1.55 +	glLoadIdentity();
    1.56 +	glTranslatef(0, 0, -8);
    1.57 +	glRotatef(25, 1, 0, 0);
    1.58 +
    1.59 +	glFrontFace(GL_CW);
    1.60 +	glutSolidTeapot(1.0);
    1.61 +	glFrontFace(GL_CCW);
    1.62 +
    1.63 +
    1.64 +	glViewport(0, 0, 200, ysz);
    1.65 +	imtk_inp_reshape(200, ysz);
    1.66 +
    1.67  	gui();
    1.68  
    1.69  	glutSwapBuffers();
    1.70 +	assert(glGetError() == GL_NO_ERROR);
    1.71  }
    1.72  
    1.73  void gui(void)
    1.74  {
    1.75  	static int bnshow;
    1.76 +	static char textbuf[256];
    1.77 +	static char textbuf2[256];
    1.78  
    1.79  	imtk_begin();
    1.80  
    1.81 -	if(imtk_button(IMUID, "foobar", 100, 100)) {
    1.82 -		printf("clicked button 0\n");
    1.83 +	glBegin(GL_QUADS);
    1.84 +	glColor3f(0.6, 0.6, 0.6);
    1.85 +	glVertex2f(0, 0);
    1.86 +	glVertex2f(200, 0);
    1.87 +	glVertex2f(200, glutGet(GLUT_WINDOW_HEIGHT));
    1.88 +	glVertex2f(0, glutGet(GLUT_WINDOW_HEIGHT));
    1.89 +	glEnd();
    1.90 +
    1.91 +	if(imtk_button(IMUID, "red", 30, 50)) {
    1.92 +		float color[] = {1, 0.4, 0.3, 1};
    1.93 +		glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color);
    1.94 +		glutPostRedisplay();
    1.95  	}
    1.96 -	if(imtk_button(IMUID, "xyzzy", 100, 200)) {
    1.97 -		printf("clicked button 1\n");
    1.98 -	}
    1.99 -	if(imtk_button(IMUID, "Quit", 100, 500)) {
   1.100 -		exit(0);
   1.101 +	if(imtk_button(IMUID, "blue", 30, 100)) {
   1.102 +		float color[] = {0.3, 0.4, 1, 1};
   1.103 +		glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color);
   1.104 +		glutPostRedisplay();
   1.105  	}
   1.106  
   1.107 -	if((bnshow = imtk_checkbox(IMUID, "show hidden button", 100, 260, bnshow))) {
   1.108 -		if(imtk_button(IMUID, "I was hidden!", 130, 300)) {
   1.109 -			printf("you clicked the hidden button!\n");
   1.110 +	imtk_textbox(IMUID, textbuf, sizeof textbuf, 30, 200);
   1.111 +	imtk_textbox(IMUID, textbuf2, sizeof textbuf2, 30, 250);
   1.112 +
   1.113 +	if((bnshow = imtk_checkbox(IMUID, "show hidden button", 30, 300, bnshow))) {
   1.114 +		if(imtk_button(IMUID, "yellow", 50, 340)) {
   1.115 +			float color[] = {0.8, 0.75, 0.3, 1};
   1.116 +			glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color);
   1.117 +			glutPostRedisplay();
   1.118  		}
   1.119  	}
   1.120  
   1.121 +	if(imtk_button(IMUID, "Quit", 30, 500)) {
   1.122 +		exit(0);
   1.123 +	}
   1.124 +
   1.125  	imtk_end();
   1.126  }
   1.127  
   1.128  void reshape(int x, int y)
   1.129  {
   1.130 +	xsz = x;
   1.131 +	ysz = y;
   1.132 +
   1.133  	glViewport(0, 0, x, y);
   1.134 -	imtk_inp_reshape(x, y);
   1.135 -
   1.136 -	glMatrixMode(GL_PROJECTION);
   1.137 -	glLoadIdentity();
   1.138 -	glTranslatef(-1, -1, 0);
   1.139 -	glScalef(2.0 / x, 2.0 / y, 1.0);
   1.140  }
   1.141  
   1.142  void keyb(unsigned char key, int x, int y)