diff options
| author | Jonas Suhr Christensen <jsc@umbraculum.org> | 2014-01-18 10:17:58 +0100 | 
|---|---|---|
| committer | Jonas Suhr Christensen <jsc@umbraculum.org> | 2014-01-18 10:17:58 +0100 | 
| commit | fe9e38995f5a0abc196e9600c38d95385d6bf84f (patch) | |
| tree | d106ff875aba7289296f5ed47626f50fc0930d2c /pugl/.svn/pristine/ca | |
| parent | 5f1e301d951c10533b101bcddc7a0262780743a3 (diff) | |
Added PuGl window drawing. Enable with './configure -with-pugl'.
Diffstat (limited to 'pugl/.svn/pristine/ca')
| -rw-r--r-- | pugl/.svn/pristine/ca/caaef1caf9335e555e9f2cb4515b6ba67f379f12.svn-base | 193 | 
1 files changed, 193 insertions, 0 deletions
| diff --git a/pugl/.svn/pristine/ca/caaef1caf9335e555e9f2cb4515b6ba67f379f12.svn-base b/pugl/.svn/pristine/ca/caaef1caf9335e555e9f2cb4515b6ba67f379f12.svn-base new file mode 100644 index 0000000..b9a54f5 --- /dev/null +++ b/pugl/.svn/pristine/ca/caaef1caf9335e555e9f2cb4515b6ba67f379f12.svn-base @@ -0,0 +1,193 @@ +/* +  Copyright 2012 David Robillard <http://drobilla.net> + +  Permission to use, copy, modify, and/or distribute this software for any +  purpose with or without fee is hereby granted, provided that the above +  copyright notice and this permission notice appear in all copies. + +  THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** +   @file pugl_test.c A simple Pugl test that creates a top-level window. +*/ + +#include <stdio.h> +#include <string.h> + +#include "pugl/pugl.h" + +// Argh! +#ifdef __APPLE__ +#    include <OpenGL/glu.h> +#else +#    include <GL/glu.h> +#endif + +static int   quit   = 0; +static float xAngle = 0.0f; +static float yAngle = 0.0f; +static float dist   = 10.0f; + +static void +onReshape(PuglView* view, int width, int height) +{ +	glMatrixMode(GL_PROJECTION); +	glLoadIdentity(); +	glViewport(0, 0, width, height); +	gluPerspective(45.0f, width/(float)height, 1.0f, 10.0f); + +	glMatrixMode(GL_MODELVIEW); +	glLoadIdentity(); +} + +static void +onDisplay(PuglView* view) +{ +	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +	glLoadIdentity(); + +	glTranslatef(0.0f, 0.0f, dist * -1); +	glRotatef(xAngle, 0.0f, 1.0f, 0.0f); +	glRotatef(yAngle, 1.0f, 0.0f, 0.0f); + +	glBegin(GL_QUADS); + +	glColor3f(0, 0, 0); glVertex3f(-1, -1, -1); +	glColor3f(0, 0, 1); glVertex3f(-1, -1,  1); +	glColor3f(0, 1, 1); glVertex3f(-1,  1,  1); +	glColor3f(0, 1, 0); glVertex3f(-1,  1, -1); + +	glColor3f(1, 0, 0); glVertex3f( 1, -1, -1); +	glColor3f(1, 0, 1); glVertex3f( 1, -1,  1); +	glColor3f(1, 1, 1); glVertex3f( 1,  1,  1); +	glColor3f(1, 1, 0); glVertex3f( 1,  1, -1); + +	glColor3f(0, 0, 0); glVertex3f(-1, -1, -1); +	glColor3f(0, 0, 1); glVertex3f(-1, -1,  1); +	glColor3f(1, 0, 1); glVertex3f( 1, -1,  1); +	glColor3f(1, 0, 0); glVertex3f( 1, -1, -1); + +	glColor3f(0, 1, 0); glVertex3f(-1,  1, -1); +	glColor3f(0, 1, 1); glVertex3f(-1,  1,  1); +	glColor3f(1, 1, 1); glVertex3f( 1,  1,  1); +	glColor3f(1, 1, 0); glVertex3f( 1,  1, -1); + +	glColor3f(0, 0, 0); glVertex3f(-1, -1, -1); +	glColor3f(0, 1, 0); glVertex3f(-1,  1, -1); +	glColor3f(1, 1, 0); glVertex3f( 1,  1, -1); +	glColor3f(1, 0, 0); glVertex3f( 1, -1, -1); + +	glColor3f(0, 0, 1); glVertex3f(-1, -1,  1); +	glColor3f(0, 1, 1); glVertex3f(-1,  1,  1); +	glColor3f(1, 1, 1); glVertex3f( 1,  1,  1); +	glColor3f(1, 0, 1); glVertex3f( 1, -1,  1); + +	glEnd(); +} + +static void +printModifiers(PuglView* view) +{ +	int mods = puglGetModifiers(view); +	fprintf(stderr, "Modifiers:%s%s%s%s\n", +	        (mods & PUGL_MOD_SHIFT) ? " Shift"   : "", +	        (mods & PUGL_MOD_CTRL)  ? " Ctrl"    : "", +	        (mods & PUGL_MOD_ALT)   ? " Alt"     : "", +	        (mods & PUGL_MOD_SUPER) ? " Super" : ""); +} + +static void +onKeyboard(PuglView* view, bool press, uint32_t key) +{ +	fprintf(stderr, "Key %c %s ", (char)key, press ? "down" : "up"); +	printModifiers(view); +	if (key == 'q' || key == 'Q' || key == PUGL_CHAR_ESCAPE || +	    key == PUGL_CHAR_DELETE || key == PUGL_CHAR_BACKSPACE) { +		quit = 1; +	} +} + +static void +onSpecial(PuglView* view, bool press, PuglKey key) +{ +	fprintf(stderr, "Special key %d %s ", key, press ? "down" : "up"); +	printModifiers(view); +} + +static void +onMotion(PuglView* view, int x, int y) +{ +	xAngle = x % 360; +	yAngle = y % 360; +	puglPostRedisplay(view); +} + +static void +onMouse(PuglView* view, int button, bool press, int x, int y) +{ +	fprintf(stderr, "Mouse %d %s at %d,%d ", +	        button, press ? "down" : "up", x, y); +	printModifiers(view); +} + +static void +onScroll(PuglView* view, int x, int y, float dx, float dy) +{ +	fprintf(stderr, "Scroll %d %d %f %f ", x, y, dx, dy); +	printModifiers(view); +	dist += dy / 4.0f; +	puglPostRedisplay(view); +} + +static void +onClose(PuglView* view) +{ +	quit = 1; +} + +int +main(int argc, char** argv) +{ +	bool ignoreKeyRepeat = false; +	bool resizable       = false; +	for (int i = 1; i < argc; ++i) { +		if (!strcmp(argv[i], "-h")) { +			printf("USAGE: %s [OPTIONS]...\n\n" +			       "  -h  Display this help\n" +			       "  -i  Ignore key repeat\n" +			       "  -r  Resizable window\n", argv[0]); +			return 0; +		} else if (!strcmp(argv[i], "-i")) { +			ignoreKeyRepeat = true; +		} else if (!strcmp(argv[i], "-r")) { +			resizable = true; +		} else { +			fprintf(stderr, "Unknown option: %s\n", argv[i]); +		} +	} + +	PuglView* view = puglCreate(0, "Pugl Test", 512, 512, resizable, true); +	puglIgnoreKeyRepeat(view, ignoreKeyRepeat); +	puglSetKeyboardFunc(view, onKeyboard); +	puglSetMotionFunc(view, onMotion); +	puglSetMouseFunc(view, onMouse); +	puglSetScrollFunc(view, onScroll); +	puglSetSpecialFunc(view, onSpecial); +	puglSetDisplayFunc(view, onDisplay); +	puglSetReshapeFunc(view, onReshape); +	puglSetCloseFunc(view, onClose); + +	while (!quit) { +		puglProcessEvents(view); +	} + +	puglDestroy(view); +	return 0; +} | 
