File: cursors.c/*
cursors.c
A basic test of setting various cursors.
*/
#define CPWDLL_EXTERN
#include <cpw.h>
static int count1 = 0;
static int count2 = 0;
/****************************************************/
/* Window Create / Destroy Event callback */
/****************************************************/
void window( pCpw cpw, uint_32 winid, bool flag )
{
if ( flag == true ) {
/* creation event */
switch( winid ) {
case 1:
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
break;
case 2:
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
break;
}
return;
}
if ( flag == false ) {
/* close event */
cpwDestroyWindow( cpw, winid );
return;
}
}
/****************************************************/
/* Draw Window One */
/****************************************************/
void drawWindowOne( pCpw cpw )
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glTranslatef(-1.5f,0.0f,-6.0f);
glBegin(GL_TRIANGLES);
glVertex3f( 0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glEnd();
glTranslatef(3.0f,0.0f,0.0f);
glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f);
glVertex3f( 1.0f, 1.0f, 0.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glEnd();
glPopMatrix();
}
/****************************************************/
/* Draw Window Two */
/****************************************************/
void drawWindowTwo( pCpw cpw )
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glTranslatef(-1.5f,0.0f,-6.0f);
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glEnd();
glTranslatef(3.0f,0.0f,0.0f);
glColor3f(0.5f,0.5f,1.0f);
glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f);
glVertex3f( 1.0f, 1.0f, 0.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glEnd();
glPopMatrix();
}
/****************************************************/
/* Window Draw Event callback */
/****************************************************/
void draw( pCpw cpw, uint_32 winid )
{
switch( winid ) {
case 1:
drawWindowOne( cpw );
break;
case 2:
drawWindowTwo( cpw );
break;
}
cpwSwapWindowBuffers( cpw, winid );
}
/****************************************************/
/* Window Resize Event callback */
/****************************************************/
void reshape( pCpw cpw, uint_32 winid, uint_32 width, uint_32 height )
{
if ( cpwNextEvent( cpw ) == CPW_RESHAPE_EVENT ) return;
if (height==0)
{
height=1;
}
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
}
/****************************************************/
/* Timer One Event Callback */
/****************************************************/
void timer1( pCpw cpw, uint_32 id )
{
/* test all cursors */
if ( count1 == 0 ) cpwSetCursor( cpw, CursorArrow, 1 );
if ( count1 == 1 ) cpwSetCursor( cpw, CursorHand, 1 );
if ( count1 == 2 ) cpwSetCursor( cpw, CursorNo, 1 );
if ( count1 == 3 ) cpwSetCursor( cpw, CursorQuestion, 1 );
if ( count1 == 4 ) cpwSetCursor( cpw, CursorBeam, 1 );
if ( count1 == 5 ) cpwSetCursor( cpw, CursorWait, 1 );
if ( count1 == 6 ) cpwSetCursor( cpw, CursorCrosshair, 1 );
if ( count1 == 7 ) cpwSetCursor( cpw, CursorNone, 1 );
if ( count1 == 8 ) cpwSetCursor( cpw, CursorSizeNSEW, 1 );
if ( count1 == 9 ) cpwSetCursor( cpw, CursorSizeNS, 1 );
if ( count1 == 10 ) cpwSetCursor( cpw, CursorSizeNeSw, 1 );
if ( count1 == 11 ) cpwSetCursor( cpw, CursorSizeEW, 1 );
if ( count1 == 12 ) cpwSetCursor( cpw, CursorSizeSeNw, 1 );
count1++;
if ( count1 == 13 ) count1 = 0;
}
/****************************************************/
/* Timer Two Event Callback */
/****************************************************/
void timer2( pCpw cpw, uint_32 id )
{
/* Gopher had a cool cursor. */
if ( count2 == 0 ) cpwSetCursor( cpw, CursorSizeNS, 2 );
if ( count2 == 1 ) cpwSetCursor( cpw, CursorSizeNeSw, 2 );
if ( count2 == 2 ) cpwSetCursor( cpw, CursorSizeEW, 2 );
if ( count2 == 3 ) cpwSetCursor( cpw, CursorSizeSeNw, 2 );
if ( count2 == 4 ) cpwSetCursor( cpw, CursorSizeNS, 2 );
if ( count2 == 5 ) cpwSetCursor( cpw, CursorSizeNeSw, 2 );
if ( count2 == 6 ) cpwSetCursor( cpw, CursorSizeEW, 2 );
if ( count2 == 7 ) cpwSetCursor( cpw, CursorSizeSeNw, 2 );
count2++;
if ( count2 == 8 ) count2 = 0;
//cpwPositionCursor( cpw, 10, 10, 2 );
//cpwCenterCursor( cpw, 2 );
}
/****************************************************/
/* Mainloop Event Callback */
/****************************************************/
void mainloop( pCpw cpw, bool eventspending )
{
}
/****************************************************/
/* Main */
/****************************************************/
int main(int argc, char* argv[])
{
pCpw cpw;
cpw = null;
cpwInitContext( &cpw );
cpwInitWindowPosition( cpw, 200, 200 );
cpwInitWindowSize( cpw, 100, 100 );
cpwCreateWindow( cpw, "Cpw 1" );
cpwCreateWindowEx( cpw, "Cpw 2", 125, 125, 200, 200 );
cpwCreateCallback( cpw, window );
cpwDisplayCallback( cpw, draw );
cpwReshapeCallback( cpw, reshape );
cpwMainLoopCallback( cpw, mainloop, 100 );
cpwTimerCallback( cpw, 500, 1, true, timer1 );
cpwTimerCallback( cpw, 100, 1, true, timer2 );
cpwFilterEvent( cpw, CPW_MOUSEMOTION_EVENT, true );
cpwMainLoop( cpw );
cpwFreeContext( &cpw );
return 0;
}