Removing files from old freeglut-1.3 directory.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@169 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
59c4c38bbc
commit
19f3863fc7
28
.gitattributes
vendored
28
.gitattributes
vendored
@ -19,34 +19,6 @@ freeglut/freeglut/doc/index.html svn_keywords=Author+Date+Id+Revision
|
|||||||
freeglut/freeglut/doc/ogl_sm.png -text
|
freeglut/freeglut/doc/ogl_sm.png -text
|
||||||
freeglut/freeglut/doc/progress.html svn_keywords=Author+Date+Id+Revision
|
freeglut/freeglut/doc/progress.html svn_keywords=Author+Date+Id+Revision
|
||||||
freeglut/freeglut/doc/structure.html svn_keywords=Author+Date+Id+Revision
|
freeglut/freeglut/doc/structure.html svn_keywords=Author+Date+Id+Revision
|
||||||
freeglut/freeglut/freeglut-1.3/.deps/freeglut_videoresize.P svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/.deps/freeglut_window.P svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/Makefile.am svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_callbacks.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_cursor.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_display.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_ext.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_font.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_font_data.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_gamemode.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_geometry.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_init.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_internal.h svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_joystick.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_main.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_menu.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_misc.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_overlay.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_state.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_stroke_mono_roman.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_stroke_roman.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_structure.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_teapot.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_videoresize.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglut_window.c svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/freeglutdll.def svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/templates/cpp_template svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut-1.3/templates/header_template svn_keywords=Author+Date+Id+Revision
|
|
||||||
freeglut/freeglut/freeglut.dsp svn_keywords=Author+Date+Id+Revision
|
freeglut/freeglut/freeglut.dsp svn_keywords=Author+Date+Id+Revision
|
||||||
freeglut/freeglut/freeglut.dsw svn_keywords=Author+Date+Id+Revision
|
freeglut/freeglut/freeglut.dsw svn_keywords=Author+Date+Id+Revision
|
||||||
freeglut/freeglut/freeglut.kdevelop svn_keywords=Author+Date+Id+Revision
|
freeglut/freeglut/freeglut.kdevelop svn_keywords=Author+Date+Id+Revision
|
||||||
|
@ -1,87 +0,0 @@
|
|||||||
freeglut_videoresize.lo freeglut_videoresize.o : freeglut_videoresize.c ../config.h \
|
|
||||||
../include/GL/freeglut.h /usr/include/GL/gl.h /usr/include/GL/glext.h \
|
|
||||||
/usr/include/GL/glu.h ../include/GL/freeglut_internal.h \
|
|
||||||
/usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
|
|
||||||
/usr/include/gnu/stubs.h \
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stddef.h \
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stdarg.h \
|
|
||||||
/usr/include/bits/types.h /usr/include/libio.h \
|
|
||||||
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
|
|
||||||
/usr/include/bits/stdio.h /usr/include/string.h \
|
|
||||||
/usr/include/bits/string.h /usr/include/bits/string2.h \
|
|
||||||
/usr/include/endian.h /usr/include/bits/endian.h \
|
|
||||||
/usr/include/stdlib.h /usr/include/math.h \
|
|
||||||
/usr/include/bits/huge_val.h /usr/include/bits/mathdef.h \
|
|
||||||
/usr/include/bits/mathcalls.h \
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/float.h \
|
|
||||||
/usr/include/bits/mathinline.h /usr/include/glib.h \
|
|
||||||
/usr/include/glibconfig.h \
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/limits.h \
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/syslimits.h \
|
|
||||||
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
|
|
||||||
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
|
|
||||||
/usr/include/bits/posix2_lim.h /usr/include/GL/glx.h \
|
|
||||||
/usr/include/X11/Xlib.h /usr/include/sys/types.h /usr/include/time.h \
|
|
||||||
/usr/include/sys/select.h /usr/include/bits/select.h \
|
|
||||||
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
|
||||||
/usr/include/X11/X.h /usr/include/X11/Xfuncproto.h \
|
|
||||||
/usr/include/X11/Xosdefs.h /usr/include/X11/Xutil.h \
|
|
||||||
/usr/include/X11/Xatom.h /usr/include/X11/keysym.h \
|
|
||||||
/usr/include/X11/keysymdef.h /usr/include/X11/extensions/xf86vmode.h \
|
|
||||||
/usr/include/X11/Xmd.h
|
|
||||||
freeglut_videoresize.c :
|
|
||||||
../config.h :
|
|
||||||
../include/GL/freeglut.h :
|
|
||||||
/usr/include/GL/gl.h :
|
|
||||||
/usr/include/GL/glext.h :
|
|
||||||
/usr/include/GL/glu.h :
|
|
||||||
../include/GL/freeglut_internal.h :
|
|
||||||
/usr/include/stdio.h :
|
|
||||||
/usr/include/features.h :
|
|
||||||
/usr/include/sys/cdefs.h :
|
|
||||||
/usr/include/gnu/stubs.h :
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stddef.h :
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stdarg.h :
|
|
||||||
/usr/include/bits/types.h :
|
|
||||||
/usr/include/libio.h :
|
|
||||||
/usr/include/_G_config.h :
|
|
||||||
/usr/include/bits/stdio_lim.h :
|
|
||||||
/usr/include/bits/stdio.h :
|
|
||||||
/usr/include/string.h :
|
|
||||||
/usr/include/bits/string.h :
|
|
||||||
/usr/include/bits/string2.h :
|
|
||||||
/usr/include/endian.h :
|
|
||||||
/usr/include/bits/endian.h :
|
|
||||||
/usr/include/stdlib.h :
|
|
||||||
/usr/include/math.h :
|
|
||||||
/usr/include/bits/huge_val.h :
|
|
||||||
/usr/include/bits/mathdef.h :
|
|
||||||
/usr/include/bits/mathcalls.h :
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/float.h :
|
|
||||||
/usr/include/bits/mathinline.h :
|
|
||||||
/usr/include/glib.h :
|
|
||||||
/usr/include/glibconfig.h :
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/limits.h :
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/syslimits.h :
|
|
||||||
/usr/include/limits.h :
|
|
||||||
/usr/include/bits/posix1_lim.h :
|
|
||||||
/usr/include/bits/local_lim.h :
|
|
||||||
/usr/include/linux/limits.h :
|
|
||||||
/usr/include/bits/posix2_lim.h :
|
|
||||||
/usr/include/GL/glx.h :
|
|
||||||
/usr/include/X11/Xlib.h :
|
|
||||||
/usr/include/sys/types.h :
|
|
||||||
/usr/include/time.h :
|
|
||||||
/usr/include/sys/select.h :
|
|
||||||
/usr/include/bits/select.h :
|
|
||||||
/usr/include/bits/sigset.h :
|
|
||||||
/usr/include/sys/sysmacros.h :
|
|
||||||
/usr/include/X11/X.h :
|
|
||||||
/usr/include/X11/Xfuncproto.h :
|
|
||||||
/usr/include/X11/Xosdefs.h :
|
|
||||||
/usr/include/X11/Xutil.h :
|
|
||||||
/usr/include/X11/Xatom.h :
|
|
||||||
/usr/include/X11/keysym.h :
|
|
||||||
/usr/include/X11/keysymdef.h :
|
|
||||||
/usr/include/X11/extensions/xf86vmode.h :
|
|
||||||
/usr/include/X11/Xmd.h :
|
|
@ -1,87 +0,0 @@
|
|||||||
freeglut_window.lo freeglut_window.o : freeglut_window.c ../config.h \
|
|
||||||
../include/GL/freeglut.h /usr/include/GL/gl.h /usr/include/GL/glext.h \
|
|
||||||
/usr/include/GL/glu.h ../include/GL/freeglut_internal.h \
|
|
||||||
/usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h \
|
|
||||||
/usr/include/gnu/stubs.h \
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stddef.h \
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stdarg.h \
|
|
||||||
/usr/include/bits/types.h /usr/include/libio.h \
|
|
||||||
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
|
|
||||||
/usr/include/bits/stdio.h /usr/include/string.h \
|
|
||||||
/usr/include/bits/string.h /usr/include/bits/string2.h \
|
|
||||||
/usr/include/endian.h /usr/include/bits/endian.h \
|
|
||||||
/usr/include/stdlib.h /usr/include/math.h \
|
|
||||||
/usr/include/bits/huge_val.h /usr/include/bits/mathdef.h \
|
|
||||||
/usr/include/bits/mathcalls.h \
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/float.h \
|
|
||||||
/usr/include/bits/mathinline.h /usr/include/glib.h \
|
|
||||||
/usr/include/glibconfig.h \
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/limits.h \
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/syslimits.h \
|
|
||||||
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
|
|
||||||
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
|
|
||||||
/usr/include/bits/posix2_lim.h /usr/include/GL/glx.h \
|
|
||||||
/usr/include/X11/Xlib.h /usr/include/sys/types.h /usr/include/time.h \
|
|
||||||
/usr/include/sys/select.h /usr/include/bits/select.h \
|
|
||||||
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
|
||||||
/usr/include/X11/X.h /usr/include/X11/Xfuncproto.h \
|
|
||||||
/usr/include/X11/Xosdefs.h /usr/include/X11/Xutil.h \
|
|
||||||
/usr/include/X11/Xatom.h /usr/include/X11/keysym.h \
|
|
||||||
/usr/include/X11/keysymdef.h /usr/include/X11/extensions/xf86vmode.h \
|
|
||||||
/usr/include/X11/Xmd.h
|
|
||||||
freeglut_window.c :
|
|
||||||
../config.h :
|
|
||||||
../include/GL/freeglut.h :
|
|
||||||
/usr/include/GL/gl.h :
|
|
||||||
/usr/include/GL/glext.h :
|
|
||||||
/usr/include/GL/glu.h :
|
|
||||||
../include/GL/freeglut_internal.h :
|
|
||||||
/usr/include/stdio.h :
|
|
||||||
/usr/include/features.h :
|
|
||||||
/usr/include/sys/cdefs.h :
|
|
||||||
/usr/include/gnu/stubs.h :
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stddef.h :
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/stdarg.h :
|
|
||||||
/usr/include/bits/types.h :
|
|
||||||
/usr/include/libio.h :
|
|
||||||
/usr/include/_G_config.h :
|
|
||||||
/usr/include/bits/stdio_lim.h :
|
|
||||||
/usr/include/bits/stdio.h :
|
|
||||||
/usr/include/string.h :
|
|
||||||
/usr/include/bits/string.h :
|
|
||||||
/usr/include/bits/string2.h :
|
|
||||||
/usr/include/endian.h :
|
|
||||||
/usr/include/bits/endian.h :
|
|
||||||
/usr/include/stdlib.h :
|
|
||||||
/usr/include/math.h :
|
|
||||||
/usr/include/bits/huge_val.h :
|
|
||||||
/usr/include/bits/mathdef.h :
|
|
||||||
/usr/include/bits/mathcalls.h :
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/float.h :
|
|
||||||
/usr/include/bits/mathinline.h :
|
|
||||||
/usr/include/glib.h :
|
|
||||||
/usr/include/glibconfig.h :
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/limits.h :
|
|
||||||
/usr/lib/gcc-lib/i486-suse-linux/2.95.2/include/syslimits.h :
|
|
||||||
/usr/include/limits.h :
|
|
||||||
/usr/include/bits/posix1_lim.h :
|
|
||||||
/usr/include/bits/local_lim.h :
|
|
||||||
/usr/include/linux/limits.h :
|
|
||||||
/usr/include/bits/posix2_lim.h :
|
|
||||||
/usr/include/GL/glx.h :
|
|
||||||
/usr/include/X11/Xlib.h :
|
|
||||||
/usr/include/sys/types.h :
|
|
||||||
/usr/include/time.h :
|
|
||||||
/usr/include/sys/select.h :
|
|
||||||
/usr/include/bits/select.h :
|
|
||||||
/usr/include/bits/sigset.h :
|
|
||||||
/usr/include/sys/sysmacros.h :
|
|
||||||
/usr/include/X11/X.h :
|
|
||||||
/usr/include/X11/Xfuncproto.h :
|
|
||||||
/usr/include/X11/Xosdefs.h :
|
|
||||||
/usr/include/X11/Xutil.h :
|
|
||||||
/usr/include/X11/Xatom.h :
|
|
||||||
/usr/include/X11/keysym.h :
|
|
||||||
/usr/include/X11/keysymdef.h :
|
|
||||||
/usr/include/X11/extensions/xf86vmode.h :
|
|
||||||
/usr/include/X11/Xmd.h :
|
|
@ -1,42 +0,0 @@
|
|||||||
## Process this file with automake to produce Makefile.im
|
|
||||||
|
|
||||||
#
|
|
||||||
# The library we want to build
|
|
||||||
#
|
|
||||||
lib_LTLIBRARIES = libfreeglut-1.3.la
|
|
||||||
|
|
||||||
#
|
|
||||||
# Those source files build the freeglut library
|
|
||||||
#
|
|
||||||
libfreeglut_1_3_la_SOURCES = freeglut_callbacks.c \
|
|
||||||
freeglut_cursor.c \
|
|
||||||
freeglut_display.c \
|
|
||||||
freeglut_ext.c \
|
|
||||||
freeglut_font.c \
|
|
||||||
freeglut_font_data.c \
|
|
||||||
freeglut_stroke_roman.c \
|
|
||||||
freeglut_stroke_mono_roman.c \
|
|
||||||
freeglut_gamemode.c \
|
|
||||||
freeglut_geometry.c \
|
|
||||||
freeglut_init.c \
|
|
||||||
freeglut_joystick.c \
|
|
||||||
freeglut_main.c \
|
|
||||||
freeglut_menu.c \
|
|
||||||
freeglut_misc.c \
|
|
||||||
freeglut_overlay.c \
|
|
||||||
freeglut_state.c \
|
|
||||||
freeglut_structure.c \
|
|
||||||
freeglut_teapot.c \
|
|
||||||
freeglut_videoresize.c \
|
|
||||||
freeglut_window.c
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Additional linker flags
|
|
||||||
#
|
|
||||||
libfreeglut_1_3_la_LIBADD = $(LIBM) $(X_LIBS) -lGL -lGLU -lXext -lX11 -lXxf86vm
|
|
||||||
libfreeglut_1_3_la_LDFLAGS = -version-info 0:0:0
|
|
||||||
|
|
||||||
#
|
|
||||||
# End of file
|
|
||||||
#
|
|
@ -1,333 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_callbacks.c
|
|
||||||
*
|
|
||||||
* The callbacks setting methods.
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Fri Dec 3 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-callbacks"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* All of the callbacks setting methods can be generalized to this:
|
|
||||||
*/
|
|
||||||
#define SET_CALLBACK(a) if( fgStructure.Window == NULL ) return;\
|
|
||||||
fgStructure.Window->Callbacks.a = callback;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the Display callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutDisplayFunc( void (* callback)( void ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( Display );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the Reshape callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( Reshape );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the Keyboard callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutKeyboardFunc( void (* callback)( unsigned char, int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( Keyboard );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the Special callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( Special );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the global idle callback
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutIdleFunc( void (* callback)( void ) )
|
|
||||||
{
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The global idle callback pointer is stored in fgState structure
|
|
||||||
*/
|
|
||||||
fgState.IdleCallback = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the Timer callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutTimerFunc( unsigned int timeOut, void (* callback)( int ), int timerID )
|
|
||||||
{
|
|
||||||
SFG_Timer* timer;
|
|
||||||
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Create a new freeglut timer hook structure
|
|
||||||
*/
|
|
||||||
timer = calloc( sizeof(SFG_Timer), 1 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Remember the callback address and timer hook's ID
|
|
||||||
*/
|
|
||||||
timer->Callback = callback;
|
|
||||||
timer->ID = timerID;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* When will the time out happen (in terms of window's timer)
|
|
||||||
*/
|
|
||||||
timer->TriggerTime = fgElapsedTime() + timeOut;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Have the new hook attached to the current window
|
|
||||||
*/
|
|
||||||
fgListAppend( &fgState.Timers, &timer->Node );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the Visibility callback for the current window.
|
|
||||||
*
|
|
||||||
* I had to peer to GLUT sources to clean up the mess.
|
|
||||||
* Can anyone please explain me what is going on here?!?
|
|
||||||
*/
|
|
||||||
static void fghVisibility( int status )
|
|
||||||
{
|
|
||||||
freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Window != NULL );
|
|
||||||
freeglut_return_if_fail( fgStructure.Window->Callbacks.Visibility != NULL );
|
|
||||||
|
|
||||||
if( status == GLUT_HIDDEN || status == GLUT_FULLY_COVERED )
|
|
||||||
fgStructure.Window->Callbacks.Visibility( GLUT_NOT_VISIBLE );
|
|
||||||
else
|
|
||||||
fgStructure.Window->Callbacks.Visibility( GLUT_VISIBLE );
|
|
||||||
}
|
|
||||||
|
|
||||||
void FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( Visibility );
|
|
||||||
|
|
||||||
if( callback )
|
|
||||||
glutWindowStatusFunc( fghVisibility );
|
|
||||||
else
|
|
||||||
glutWindowStatusFunc( NULL );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the keyboard key release callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutKeyboardUpFunc( void (* callback)( unsigned char, int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( KeyboardUp );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the special key release callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutSpecialUpFunc( void (* callback)( int, int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( SpecialUp );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the joystick callback and polling rate for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutJoystickFunc( void (* callback)( unsigned int, int, int, int ), int pollInterval )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( Joystick );
|
|
||||||
|
|
||||||
freeglut_return_if_fail( fgStructure.Window != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Do not forget setting the joystick poll rate
|
|
||||||
*/
|
|
||||||
fgStructure.Window->State.JoystickPollRate = pollInterval;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the joystick polling routine gets called as early as possible:
|
|
||||||
*/
|
|
||||||
fgStructure.Window->State.JoystickLastPoll =
|
|
||||||
fgElapsedTime() - fgStructure.Window->State.JoystickPollRate;
|
|
||||||
|
|
||||||
if( fgStructure.Window->State.JoystickLastPoll < 0 )
|
|
||||||
fgStructure.Window->State.JoystickLastPoll = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the mouse callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( Mouse );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the mouse motion callback for the current window (one or more buttons are pressed)
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( Motion );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the passive mouse motion callback for the current window (no mouse buttons are pressed)
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( Passive );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Window mouse entry/leave callback
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutEntryFunc( void (* callback)( int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( Entry );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Window destruction callbacks
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutCloseFunc( void (* callback)( void ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( Destroy );
|
|
||||||
}
|
|
||||||
|
|
||||||
void FGAPIENTRY glutWMCloseFunc( void (* callback)( void ) )
|
|
||||||
{
|
|
||||||
glutCloseFunc( callback );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* A. Donev: Destruction callback for menus */
|
|
||||||
void FGAPIENTRY glutMenuDestroyFunc( void (* callback)( void ) )
|
|
||||||
{
|
|
||||||
if( fgStructure.Menu == NULL ) return;
|
|
||||||
fgStructure.Menu->Destroy = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Deprecated version of glutMenuStatusFunc callback setting method
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) )
|
|
||||||
{
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
fgState.MenuStateCallback = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the global menu status callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutMenuStatusFunc( void (* callback)( int, int, int ) )
|
|
||||||
{
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
fgState.MenuStatusCallback = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the overlay display callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( OverlayDisplay );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the window status callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( WindowStatus );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the spaceball motion callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( SpaceMotion );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the spaceball rotate callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( SpaceRotation );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the spaceball button callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( SpaceButton );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the button box callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutButtonBoxFunc( void (* callback)( int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( ButtonBox );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the dials box callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( Dials );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the tablet motion callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( TabletMotion );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the tablet buttons callback for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) )
|
|
||||||
{
|
|
||||||
SET_CALLBACK( TabletButton );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
@ -1,189 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_cursor.c
|
|
||||||
*
|
|
||||||
* The mouse cursor related stuff.
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Thu Dec 16 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-cursor"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
#include <X11/cursorfont.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO BEFORE THE STABLE RELEASE:
|
|
||||||
*
|
|
||||||
* fgDisplayCursor() -- this waits for better times
|
|
||||||
* glutSetCursor() -- both X and Win32 mappings are incomplete
|
|
||||||
*
|
|
||||||
* It would be good to use custom mouse cursor shapes, and introduce
|
|
||||||
* an option to display them using glBitmap() and/or texture mapping,
|
|
||||||
* apart from the windowing system version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* -- INTERNAL FUNCTIONS --------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Display the mouse cursor using OpenGL calls
|
|
||||||
*/
|
|
||||||
void fgDisplayCursor( void )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Do nothing for the moment
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the cursor image to be used for the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutSetCursor( int cursorID )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Make sure freeglut is ready and there is a current window set
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready; freeglut_assert_window;
|
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
{
|
|
||||||
Cursor cursor;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* For now we'll limit ourselves to the X cursor fonts...
|
|
||||||
*/
|
|
||||||
# define MAP_CURSOR(a,b) case a: cursor = XCreateFontCursor( fgDisplay.Display, b ); break;
|
|
||||||
|
|
||||||
switch( cursorID )
|
|
||||||
{
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW, XC_left_ptr );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW, XC_right_ptr );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_INFO, XC_question_arrow );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_DESTROY, XC_target );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_HELP, XC_question_arrow );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_CYCLE, XC_circle );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_SPRAY, XC_spraycan );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_WAIT, XC_watch );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_TEXT, XC_draft_large );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_CROSSHAIR, XC_crosshair );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_NONE, XC_trek );
|
|
||||||
|
|
||||||
default:
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_UP_DOWN, XC_arrow );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define a window's cursor now
|
|
||||||
*/
|
|
||||||
XDefineCursor( fgDisplay.Display, fgStructure.Window->Window.Handle, cursor );
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
/*
|
|
||||||
* This is a temporary solution only...
|
|
||||||
*/
|
|
||||||
/* Set the cursor AND change it for this window class. */
|
|
||||||
# define MAP_CURSOR(a,b) case a: SetCursor( LoadCursor( NULL, b ) ); \
|
|
||||||
SetClassLong(fgStructure.Window->Window.Handle,GCL_HCURSOR,(LONG)LoadCursor(NULL,b)); \
|
|
||||||
break;
|
|
||||||
/* Nuke the cursor AND change it for this window class. */
|
|
||||||
# define ZAP_CURSOR(a,b) case a: SetCursor( NULL ); \
|
|
||||||
SetClassLong(fgStructure.Window->Window.Handle,GCL_HCURSOR,(LONG)NULL); \
|
|
||||||
break;
|
|
||||||
|
|
||||||
switch( cursorID )
|
|
||||||
{
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW, IDC_ARROW );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW, IDC_ARROW );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_INFO, IDC_HELP );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_DESTROY, IDC_CROSS );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_HELP, IDC_HELP );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_CYCLE, IDC_SIZEALL );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_SPRAY, IDC_CROSS );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_WAIT, IDC_WAIT );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_TEXT, IDC_UPARROW );
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_CROSSHAIR, IDC_CROSS );
|
|
||||||
/* MAP_CURSOR( GLUT_CURSOR_NONE, IDC_NO ); */
|
|
||||||
ZAP_CURSOR( GLUT_CURSOR_NONE, NULL );
|
|
||||||
|
|
||||||
default:
|
|
||||||
MAP_CURSOR( GLUT_CURSOR_UP_DOWN, IDC_ARROW );
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Remember the currently selected cursor
|
|
||||||
*/
|
|
||||||
fgStructure.Window->State.Cursor = cursorID;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Moves the mouse pointer to given window coordinates
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutWarpPointer( int x, int y )
|
|
||||||
{
|
|
||||||
freeglut_assert_ready; freeglut_assert_window;
|
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
/*
|
|
||||||
* Move the mouse pointer to given window coordinates
|
|
||||||
*/
|
|
||||||
XWarpPointer(
|
|
||||||
fgDisplay.Display,
|
|
||||||
None,
|
|
||||||
fgStructure.Window->Window.Handle,
|
|
||||||
0, 0, 0, 0,
|
|
||||||
x, y
|
|
||||||
);
|
|
||||||
|
|
||||||
XFlush( fgDisplay.Display );
|
|
||||||
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
{
|
|
||||||
POINT coords = { x, y };
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First of all, we need to find the new screen-relative coordinates of the mouse cursor
|
|
||||||
*/
|
|
||||||
ClientToScreen( fgStructure.Window->Window.Handle, &coords );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Now set the new mouse cursor position...
|
|
||||||
*/
|
|
||||||
SetCursorPos( coords.x, coords.y );
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
@ -1,138 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_display.c
|
|
||||||
*
|
|
||||||
* Display message posting, context buffer swapping.
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Fri Dec 3 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-display"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Marks the current window to have the redisplay performed when possible...
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutPostRedisplay( void )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Is there a current window set?
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready; freeglut_assert_window;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Just mark the window as one that we need to redisplay...
|
|
||||||
*/
|
|
||||||
fgStructure.Window->State.Redisplay = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Swaps the buffers for the current window (if any)
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutSwapBuffers( void )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* As long as we've got a current window set...
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready; freeglut_assert_window;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Have the mouse cursor and/or the menus drawn for the current window
|
|
||||||
*/
|
|
||||||
fgDisplayMenu();
|
|
||||||
fgDisplayCursor();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the current context is flushed
|
|
||||||
*/
|
|
||||||
glFlush();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If it's single-buffered, we shouldn't be here.
|
|
||||||
*/
|
|
||||||
if ( ! fgStructure.Window->Window.DoubleBuffered ) return ;
|
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
/*
|
|
||||||
* Issue the glXSwapBuffers call and be done with it
|
|
||||||
*/
|
|
||||||
glXSwapBuffers( fgDisplay.Display, fgStructure.Window->Window.Handle );
|
|
||||||
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
/*
|
|
||||||
* Swap the window's buffers
|
|
||||||
*/
|
|
||||||
SwapBuffers( fgStructure.Window->Window.Device );
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* GLUT_FPS env var support */
|
|
||||||
if (fgState.FPSInterval) {
|
|
||||||
GLint t = glutGet(GLUT_ELAPSED_TIME);
|
|
||||||
fgState.SwapCount++;
|
|
||||||
if (fgState.SwapTime == 0)
|
|
||||||
fgState.SwapTime = t;
|
|
||||||
else if (t - fgState.SwapTime > fgState.FPSInterval) {
|
|
||||||
float time = 0.001f * (t - fgState.SwapTime);
|
|
||||||
float fps = (float) fgState.SwapCount / time;
|
|
||||||
fprintf(stderr, "freeglut: %d frames in %.2f seconds = %.2f FPS\n",
|
|
||||||
fgState.SwapCount, time, fps);
|
|
||||||
fgState.SwapTime = t;
|
|
||||||
fgState.SwapCount = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Mark appropriate window to be displayed
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutPostWindowRedisplay( int windowID )
|
|
||||||
{
|
|
||||||
SFG_Window* window;
|
|
||||||
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Try looking for the window
|
|
||||||
*/
|
|
||||||
window = fgWindowByID( windowID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If failed, return
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( window != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Otherwise mark the window for being redisplayed
|
|
||||||
*/
|
|
||||||
window->State.Redisplay = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
@ -1,199 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_ext.c
|
|
||||||
*
|
|
||||||
* Functions related to OpenGL extensions.
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Thu Dec 9 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-ext"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
|
|
||||||
struct name_address_pair {
|
|
||||||
const char *name;
|
|
||||||
void *address;
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct name_address_pair glut_functions[] = {
|
|
||||||
{ "glutInit", (void *) glutInit },
|
|
||||||
{ "glutInitDisplayMode", (void *) glutInitDisplayMode },
|
|
||||||
{ "glutInitDisplayString", (void *) glutInitDisplayString },
|
|
||||||
{ "glutInitWindowPosition", (void *) glutInitWindowPosition },
|
|
||||||
{ "glutInitWindowSize", (void *) glutInitWindowSize },
|
|
||||||
{ "glutMainLoop", (void *) glutMainLoop },
|
|
||||||
{ "glutCreateWindow", (void *) glutCreateWindow },
|
|
||||||
{ "glutCreateSubWindow", (void *) glutCreateSubWindow },
|
|
||||||
{ "glutDestroyWindow", (void *) glutDestroyWindow },
|
|
||||||
{ "glutPostRedisplay", (void *) glutPostRedisplay },
|
|
||||||
{ "glutPostWindowRedisplay", (void *) glutPostWindowRedisplay },
|
|
||||||
{ "glutSwapBuffers", (void *) glutSwapBuffers },
|
|
||||||
{ "glutGetWindow", (void *) glutGetWindow },
|
|
||||||
{ "glutSetWindow", (void *) glutSetWindow },
|
|
||||||
{ "glutSetWindowTitle", (void *) glutSetWindowTitle },
|
|
||||||
{ "glutSetIconTitle", (void *) glutSetIconTitle },
|
|
||||||
{ "glutPositionWindow", (void *) glutPositionWindow },
|
|
||||||
{ "glutReshapeWindow", (void *) glutReshapeWindow },
|
|
||||||
{ "glutPopWindow", (void *) glutPopWindow },
|
|
||||||
{ "glutPushWindow", (void *) glutPushWindow },
|
|
||||||
{ "glutIconifyWindow", (void *) glutIconifyWindow },
|
|
||||||
{ "glutShowWindow", (void *) glutShowWindow },
|
|
||||||
{ "glutHideWindow", (void *) glutHideWindow },
|
|
||||||
{ "glutFullScreen", (void *) glutFullScreen },
|
|
||||||
{ "glutSetCursor", (void *) glutSetCursor },
|
|
||||||
{ "glutWarpPointer", (void *) glutWarpPointer },
|
|
||||||
{ "glutEstablishOverlay", (void *) glutEstablishOverlay },
|
|
||||||
{ "glutRemoveOverlay", (void *) glutRemoveOverlay },
|
|
||||||
{ "glutUseLayer", (void *) glutUseLayer },
|
|
||||||
{ "glutPostOverlayRedisplay", (void *) glutPostOverlayRedisplay },
|
|
||||||
{ "glutPostWindowOverlayRedisplay", (void *) glutPostWindowOverlayRedisplay },
|
|
||||||
{ "glutShowOverlay", (void *) glutShowOverlay },
|
|
||||||
{ "glutHideOverlay", (void *) glutHideOverlay },
|
|
||||||
{ "glutCreateMenu", (void *) glutCreateMenu },
|
|
||||||
{ "glutDestroyMenu", (void *) glutDestroyMenu },
|
|
||||||
{ "glutGetMenu", (void *) glutGetMenu },
|
|
||||||
{ "glutSetMenu", (void *) glutSetMenu },
|
|
||||||
{ "glutAddMenuEntry", (void *) glutAddMenuEntry },
|
|
||||||
{ "glutAddSubMenu", (void *) glutAddSubMenu },
|
|
||||||
{ "glutChangeToMenuEntry", (void *) glutChangeToMenuEntry },
|
|
||||||
{ "glutChangeToSubMenu", (void *) glutChangeToSubMenu },
|
|
||||||
{ "glutRemoveMenuItem", (void *) glutRemoveMenuItem },
|
|
||||||
{ "glutAttachMenu", (void *) glutAttachMenu },
|
|
||||||
{ "glutDetachMenu", (void *) glutDetachMenu },
|
|
||||||
{ "glutDisplayFunc", (void *) glutDisplayFunc },
|
|
||||||
{ "glutReshapeFunc", (void *) glutReshapeFunc },
|
|
||||||
{ "glutKeyboardFunc", (void *) glutKeyboardFunc },
|
|
||||||
{ "glutMouseFunc", (void *) glutMouseFunc },
|
|
||||||
{ "glutMotionFunc", (void *) glutMotionFunc },
|
|
||||||
{ "glutPassiveMotionFunc", (void *) glutPassiveMotionFunc },
|
|
||||||
{ "glutEntryFunc", (void *) glutEntryFunc },
|
|
||||||
{ "glutVisibilityFunc", (void *) glutVisibilityFunc },
|
|
||||||
{ "glutIdleFunc", (void *) glutIdleFunc },
|
|
||||||
{ "glutTimerFunc", (void *) glutTimerFunc },
|
|
||||||
{ "glutMenuStateFunc", (void *) glutMenuStateFunc },
|
|
||||||
{ "glutSpecialFunc", (void *) glutSpecialFunc },
|
|
||||||
{ "glutSpaceballMotionFunc", (void *) glutSpaceballMotionFunc },
|
|
||||||
{ "glutSpaceballRotateFunc", (void *) glutSpaceballRotateFunc },
|
|
||||||
{ "glutSpaceballButtonFunc", (void *) glutSpaceballButtonFunc },
|
|
||||||
{ "glutButtonBoxFunc", (void *) glutButtonBoxFunc },
|
|
||||||
{ "glutDialsFunc", (void *) glutDialsFunc },
|
|
||||||
{ "glutTabletMotionFunc", (void *) glutTabletMotionFunc },
|
|
||||||
{ "glutTabletButtonFunc", (void *) glutTabletButtonFunc },
|
|
||||||
{ "glutMenuStatusFunc", (void *) glutMenuStatusFunc },
|
|
||||||
{ "glutOverlayDisplayFunc", (void *) glutOverlayDisplayFunc },
|
|
||||||
{ "glutWindowStatusFunc", (void *) glutWindowStatusFunc },
|
|
||||||
{ "glutKeyboardUpFunc", (void *) glutKeyboardUpFunc },
|
|
||||||
{ "glutSpecialUpFunc", (void *) glutSpecialUpFunc },
|
|
||||||
{ "glutJoystickFunc", (void *) glutJoystickFunc },
|
|
||||||
{ "glutSetColor", (void *) glutSetColor },
|
|
||||||
{ "glutGetColor", (void *) glutGetColor },
|
|
||||||
{ "glutCopyColormap", (void *) glutCopyColormap },
|
|
||||||
{ "glutGet", (void *) glutGet },
|
|
||||||
{ "glutDeviceGet", (void *) glutDeviceGet },
|
|
||||||
{ "glutExtensionSupported", (void *) glutExtensionSupported },
|
|
||||||
{ "glutGetModifiers", (void *) glutGetModifiers },
|
|
||||||
{ "glutLayerGet", (void *) glutLayerGet },
|
|
||||||
{ "glutBitmapCharacter", (void *) glutBitmapCharacter },
|
|
||||||
{ "glutBitmapWidth", (void *) glutBitmapWidth },
|
|
||||||
{ "glutStrokeCharacter", (void *) glutStrokeCharacter },
|
|
||||||
{ "glutStrokeWidth", (void *) glutStrokeWidth },
|
|
||||||
{ "glutBitmapLength", (void *) glutBitmapLength },
|
|
||||||
{ "glutStrokeLength", (void *) glutStrokeLength },
|
|
||||||
{ "glutWireSphere", (void *) glutWireSphere },
|
|
||||||
{ "glutSolidSphere", (void *) glutSolidSphere },
|
|
||||||
{ "glutWireCone", (void *) glutWireCone },
|
|
||||||
{ "glutSolidCone", (void *) glutSolidCone },
|
|
||||||
{ "glutWireCube", (void *) glutWireCube },
|
|
||||||
{ "glutSolidCube", (void *) glutSolidCube },
|
|
||||||
{ "glutWireTorus", (void *) glutWireTorus },
|
|
||||||
{ "glutSolidTorus", (void *) glutSolidTorus },
|
|
||||||
{ "glutWireDodecahedron", (void *) glutWireDodecahedron },
|
|
||||||
{ "glutSolidDodecahedron", (void *) glutSolidDodecahedron },
|
|
||||||
{ "glutWireTeapot", (void *) glutWireTeapot },
|
|
||||||
{ "glutSolidTeapot", (void *) glutSolidTeapot },
|
|
||||||
{ "glutWireOctahedron", (void *) glutWireOctahedron },
|
|
||||||
{ "glutSolidOctahedron", (void *) glutSolidOctahedron },
|
|
||||||
{ "glutWireTetrahedron", (void *) glutWireTetrahedron },
|
|
||||||
{ "glutSolidTetrahedron", (void *) glutSolidTetrahedron },
|
|
||||||
{ "glutWireIcosahedron", (void *) glutWireIcosahedron },
|
|
||||||
{ "glutSolidIcosahedron", (void *) glutSolidIcosahedron },
|
|
||||||
{ "glutVideoResizeGet", (void *) glutVideoResizeGet },
|
|
||||||
{ "glutSetupVideoResizing", (void *) glutSetupVideoResizing },
|
|
||||||
{ "glutStopVideoResizing", (void *) glutStopVideoResizing },
|
|
||||||
{ "glutVideoResize", (void *) glutVideoResize },
|
|
||||||
{ "glutVideoPan", (void *) glutVideoPan },
|
|
||||||
{ "glutReportErrors", (void *) glutReportErrors },
|
|
||||||
{ "glutIgnoreKeyRepeat", (void *) glutIgnoreKeyRepeat },
|
|
||||||
{ "glutSetKeyRepeat", (void *) glutSetKeyRepeat },
|
|
||||||
{ "glutForceJoystickFunc", (void *) glutForceJoystickFunc },
|
|
||||||
{ "glutGameModeString", (void *) glutGameModeString },
|
|
||||||
{ "glutEnterGameMode", (void *) glutEnterGameMode },
|
|
||||||
{ "glutLeaveGameMode", (void *) glutLeaveGameMode },
|
|
||||||
{ "glutGameModeGet", (void *) glutGameModeGet },
|
|
||||||
/* freeglut extensions */
|
|
||||||
{ "glutMainLoopEvent", (void *) glutMainLoopEvent },
|
|
||||||
{ "glutLeaveMainLoop", (void *) glutLeaveMainLoop },
|
|
||||||
{ "glutCloseFunc", (void *) glutCloseFunc },
|
|
||||||
{ "glutWMCloseFunc", (void *) glutWMCloseFunc },
|
|
||||||
{ "glutMenuDestroyFunc", (void *) glutMenuDestroyFunc },
|
|
||||||
{ "glutSetOption", (void *) glutSetOption },
|
|
||||||
{ "glutSetWindowData", (void *) glutSetWindowData },
|
|
||||||
{ "glutGetWindowData", (void *) glutGetWindowData },
|
|
||||||
{ "glutSetMenuData", (void *) glutSetMenuData },
|
|
||||||
{ "glutGetMenuData", (void *) glutGetMenuData },
|
|
||||||
{ "glutBitmapHeight", (void *) glutBitmapHeight },
|
|
||||||
{ "glutStrokeHeight", (void *) glutStrokeHeight },
|
|
||||||
{ "glutBitmapString", (void *) glutBitmapString },
|
|
||||||
{ "glutStrokeString", (void *) glutStrokeString },
|
|
||||||
{ "glutWireRhombicDodecahedron", (void *) glutWireRhombicDodecahedron },
|
|
||||||
{ "glutSolidRhombicDodecahedron", (void *) glutSolidRhombicDodecahedron },
|
|
||||||
{ "glutWireSierpinskiSponge ", (void *) glutWireSierpinskiSponge },
|
|
||||||
{ "glutSolidSierpinskiSponge ", (void *) glutSolidSierpinskiSponge },
|
|
||||||
{ "glutGetProcAddress", (void *) glutGetProcAddress },
|
|
||||||
{ NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void * FGAPIENTRY glutGetProcAddress(const char *procName)
|
|
||||||
{
|
|
||||||
/* Try GLUT functions first */
|
|
||||||
int i;
|
|
||||||
for (i = 0; glut_functions[i].name; i++) {
|
|
||||||
if (strcmp(glut_functions[i].name, procName) == 0)
|
|
||||||
return glut_functions[i].address;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Try core GL functions */
|
|
||||||
#if TARGET_HOST_WIN32
|
|
||||||
return (void *) wglGetProcAddress((LPCSTR) procName);
|
|
||||||
#elif TARGET_HOST_UNIX_X11 && defined(GLX_ARB_get_proc_address)
|
|
||||||
return (void *) glXGetProcAddressARB((const GLubyte *) procName);
|
|
||||||
#else
|
|
||||||
return NULL;
|
|
||||||
#endif
|
|
||||||
}
|
|
@ -1,480 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_font.c
|
|
||||||
*
|
|
||||||
* Bitmap and stroke fonts displaying.
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Thu Dec 16 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-font"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO BEFORE THE STABLE RELEASE:
|
|
||||||
*
|
|
||||||
* Test things out ...
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* -- IMPORT DECLARATIONS -------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* These are the font faces defined in freeglut_font_data.c file:
|
|
||||||
*/
|
|
||||||
extern SFG_Font fgFontFixed8x13;
|
|
||||||
extern SFG_Font fgFontFixed9x15;
|
|
||||||
extern SFG_Font fgFontHelvetica10;
|
|
||||||
extern SFG_Font fgFontHelvetica12;
|
|
||||||
extern SFG_Font fgFontHelvetica18;
|
|
||||||
extern SFG_Font fgFontTimesRoman10;
|
|
||||||
extern SFG_Font fgFontTimesRoman24;
|
|
||||||
extern SFG_StrokeFont fgStrokeRoman;
|
|
||||||
extern SFG_StrokeFont fgStrokeMonoRoman;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is for GLUT binary compatibility, as suggested by Steve Baker
|
|
||||||
*/
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
void* glutStrokeRoman;
|
|
||||||
void* glutStrokeMonoRoman;
|
|
||||||
void* glutBitmap9By15;
|
|
||||||
void* glutBitmap8By13;
|
|
||||||
void* glutBitmapTimesRoman10;
|
|
||||||
void* glutBitmapTimesRoman24;
|
|
||||||
void* glutBitmapHelvetica10;
|
|
||||||
void* glutBitmapHelvetica12;
|
|
||||||
void* glutBitmapHelvetica18;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Matches a font ID with a SFG_Font structure pointer.
|
|
||||||
* This was changed to match the GLUT header style.
|
|
||||||
*/
|
|
||||||
static SFG_Font* fghFontByID( void* font )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Try matching the font ID and the font data structure
|
|
||||||
*/
|
|
||||||
if( font == GLUT_BITMAP_8_BY_13 ) return( &fgFontFixed8x13 );
|
|
||||||
if( font == GLUT_BITMAP_9_BY_15 ) return( &fgFontFixed9x15 );
|
|
||||||
if( font == GLUT_BITMAP_HELVETICA_10 ) return( &fgFontHelvetica10 );
|
|
||||||
if( font == GLUT_BITMAP_HELVETICA_12 ) return( &fgFontHelvetica12 );
|
|
||||||
if( font == GLUT_BITMAP_HELVETICA_18 ) return( &fgFontHelvetica18 );
|
|
||||||
if( font == GLUT_BITMAP_TIMES_ROMAN_10 ) return( &fgFontTimesRoman10 );
|
|
||||||
if( font == GLUT_BITMAP_TIMES_ROMAN_24 ) return( &fgFontTimesRoman24 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This probably is the library user's fault
|
|
||||||
*/
|
|
||||||
fgError( "font 0x%08x not found", font );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Matches a font ID with a SFG_StrokeFont structure pointer.
|
|
||||||
* This was changed to match the GLUT header style.
|
|
||||||
*/
|
|
||||||
static SFG_StrokeFont* fghStrokeByID( void* font )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Try matching the font ID and the font data structure
|
|
||||||
*/
|
|
||||||
if( font == GLUT_STROKE_ROMAN ) return( &fgStrokeRoman );
|
|
||||||
if( font == GLUT_STROKE_MONO_ROMAN ) return( &fgStrokeMonoRoman );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This probably is the library user's fault
|
|
||||||
*/
|
|
||||||
fgError( "stroke font 0x%08x not found", font );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Draw a bitmap character
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutBitmapCharacter( void* fontID, int character )
|
|
||||||
{
|
|
||||||
const GLubyte* face;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First of all we'll need a font to use
|
|
||||||
*/
|
|
||||||
SFG_Font* font = fghFontByID( fontID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the character we want to output is valid
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( character >= 0 && character < 256 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Then find the character we want to draw
|
|
||||||
*/
|
|
||||||
face = font->Characters[ character - 1 ];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Save the old pixel store settings
|
|
||||||
*/
|
|
||||||
glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set up the pixel unpacking ways
|
|
||||||
*/
|
|
||||||
glPixelStorei( GL_UNPACK_SWAP_BYTES, GL_FALSE );
|
|
||||||
glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE );
|
|
||||||
glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
|
|
||||||
glPixelStorei( GL_UNPACK_SKIP_ROWS, 0 );
|
|
||||||
glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );
|
|
||||||
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We'll use a glBitmap call to draw the font.
|
|
||||||
*/
|
|
||||||
glBitmap(
|
|
||||||
face[ 0 ], font->Height, /* The bitmap's width and height */
|
|
||||||
font->xorig, font->yorig, /* The origin -- what on earth? */
|
|
||||||
(float)(face[ 0 ]), 0.0, /* The raster advance -- inc. x */
|
|
||||||
(face + 1) /* The packed bitmap data... */
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Restore the old pixel store settings
|
|
||||||
*/
|
|
||||||
glPopClientAttrib();
|
|
||||||
}
|
|
||||||
|
|
||||||
void FGAPIENTRY glutBitmapString( void* fontID, const char *string )
|
|
||||||
{
|
|
||||||
int c;
|
|
||||||
int numchar = strlen ( string ) ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First of all we'll need a font to use
|
|
||||||
*/
|
|
||||||
SFG_Font* font = fghFontByID( fontID );
|
|
||||||
|
|
||||||
float raster_position[4] ;
|
|
||||||
glGetFloatv ( GL_CURRENT_RASTER_POSITION, raster_position ) ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Save the old pixel store settings
|
|
||||||
*/
|
|
||||||
glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set up the pixel unpacking ways
|
|
||||||
*/
|
|
||||||
glPixelStorei( GL_UNPACK_SWAP_BYTES, GL_FALSE );
|
|
||||||
glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE );
|
|
||||||
glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
|
|
||||||
glPixelStorei( GL_UNPACK_SKIP_ROWS, 0 );
|
|
||||||
glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );
|
|
||||||
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Step through the string, drawing each character.
|
|
||||||
* A carriage return will simply translate the next character's insertion point back to the
|
|
||||||
* start of the line and down one line.
|
|
||||||
*/
|
|
||||||
for( c = 0; c < numchar; c++ )
|
|
||||||
{
|
|
||||||
if ( string[c] == '\n' )
|
|
||||||
{
|
|
||||||
raster_position[1] -= (float)font->Height ;
|
|
||||||
glRasterPos4fv ( raster_position ) ;
|
|
||||||
}
|
|
||||||
else /* Not a carriage return, draw the bitmap character */
|
|
||||||
{
|
|
||||||
const GLubyte* face = font->Characters[ string[ c ] - 1 ] ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We'll use a glBitmap call to draw the font.
|
|
||||||
*/
|
|
||||||
glBitmap(
|
|
||||||
face[ 0 ], font->Height, /* The bitmap's width and height */
|
|
||||||
font->xorig, font->yorig, /* The origin -- what on earth? */
|
|
||||||
(float)(face[ 0 ]), 0.0, /* The raster advance -- inc. x */
|
|
||||||
(face + 1) /* The packed bitmap data... */
|
|
||||||
) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Restore the old pixel store settings
|
|
||||||
*/
|
|
||||||
glPopClientAttrib();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns the width in pixels of a font's character
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutBitmapWidth( void* fontID, int character )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* First of all, grab the font we need
|
|
||||||
*/
|
|
||||||
SFG_Font* font = fghFontByID( fontID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the character we want to output is valid
|
|
||||||
*/
|
|
||||||
freeglut_return_val_if_fail( character > 0 && character < 256, 0 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Scan the font looking for the specified character
|
|
||||||
*/
|
|
||||||
return( *(font->Characters[ character - 1 ]) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return the width of a string drawn using a bitmap font
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutBitmapLength( void* fontID, const char* string )
|
|
||||||
{
|
|
||||||
int c, length = 0, this_line_length = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First of all, grab the font we need
|
|
||||||
*/
|
|
||||||
SFG_Font* font = fghFontByID( fontID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Step through the characters in the string, adding up the width of each one
|
|
||||||
*/
|
|
||||||
int numchar = strlen ( string ) ;
|
|
||||||
for( c = 0; c < numchar; c++ )
|
|
||||||
{
|
|
||||||
if ( string[ c ] == '\n' ) /* Carriage return, reset the length of this line */
|
|
||||||
{
|
|
||||||
if ( length < this_line_length ) length = this_line_length ;
|
|
||||||
this_line_length = 0 ;
|
|
||||||
}
|
|
||||||
else /* Not a carriage return, increment the length of this line */
|
|
||||||
this_line_length += *(font->Characters[ string[ c ] - 1 ]) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( length < this_line_length ) length = this_line_length ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return the result now
|
|
||||||
*/
|
|
||||||
return( length );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns the height of a bitmap font
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutBitmapHeight( void* fontID )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* See which font are we queried about
|
|
||||||
*/
|
|
||||||
SFG_Font* font = fghFontByID( fontID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return the character set's height
|
|
||||||
*/
|
|
||||||
return( font->Height );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Draw a stroke character
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutStrokeCharacter( void* fontID, int character )
|
|
||||||
{
|
|
||||||
const SFG_StrokeChar *schar;
|
|
||||||
const SFG_StrokeStrip *strip;
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First of all we'll need a font to use
|
|
||||||
*/
|
|
||||||
SFG_StrokeFont* font = fghStrokeByID( fontID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the character we want to output is valid
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( character >= 0 && character < font->Quantity );
|
|
||||||
|
|
||||||
schar = font->Characters[character];
|
|
||||||
|
|
||||||
freeglut_return_if_fail( schar );
|
|
||||||
|
|
||||||
strip = schar->Strips;
|
|
||||||
|
|
||||||
for (i = 0; i < schar->Number; i++, strip++)
|
|
||||||
{
|
|
||||||
glBegin(GL_LINE_STRIP);
|
|
||||||
for(j = 0; j < strip->Number; j++)
|
|
||||||
{
|
|
||||||
glVertex2f(strip->Vertices[j].X, strip->Vertices[j].Y);
|
|
||||||
}
|
|
||||||
glEnd();
|
|
||||||
}
|
|
||||||
glTranslatef(schar->Right, 0.0, 0.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FGAPIENTRY glutStrokeString( void* fontID, const char *string )
|
|
||||||
{
|
|
||||||
int c, i, j;
|
|
||||||
int numchar = strlen ( string ) ;
|
|
||||||
float length = 0.0 ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First of all we'll need a font to use
|
|
||||||
*/
|
|
||||||
SFG_StrokeFont* font = fghStrokeByID( fontID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Step through the string, drawing each character.
|
|
||||||
* A carriage return will simply translate the next character's insertion point back to the
|
|
||||||
* start of the line and down one line.
|
|
||||||
*/
|
|
||||||
for( c = 0; c < numchar; c++ )
|
|
||||||
{
|
|
||||||
if ( ( string[ c ] >= 0 ) && ( string[ c ] < font->Quantity ) )
|
|
||||||
{
|
|
||||||
if ( string[c] == '\n' )
|
|
||||||
{
|
|
||||||
glTranslatef ( -length, -(float)(font->Height), 0.0 ) ;
|
|
||||||
length = 0.0 ;
|
|
||||||
}
|
|
||||||
else /* Not a carriage return, draw the bitmap character */
|
|
||||||
{
|
|
||||||
const SFG_StrokeChar *schar = font->Characters[string[c]];
|
|
||||||
if ( schar != NULL )
|
|
||||||
{
|
|
||||||
const SFG_StrokeStrip *strip = schar->Strips;
|
|
||||||
|
|
||||||
for (i = 0; i < schar->Number; i++, strip++)
|
|
||||||
{
|
|
||||||
glBegin(GL_LINE_STRIP);
|
|
||||||
for(j = 0; j < strip->Number; j++)
|
|
||||||
glVertex2f(strip->Vertices[j].X, strip->Vertices[j].Y);
|
|
||||||
|
|
||||||
glEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
length += schar->Right ;
|
|
||||||
glTranslatef(schar->Right, 0.0, 0.0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return the width in pixels of a stroke character
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutStrokeWidth( void* fontID, int character )
|
|
||||||
{
|
|
||||||
const SFG_StrokeChar *schar;
|
|
||||||
/*
|
|
||||||
* First of all we'll need a font to use
|
|
||||||
*/
|
|
||||||
SFG_StrokeFont* font = fghStrokeByID( fontID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the character we want to output is valid
|
|
||||||
*/
|
|
||||||
freeglut_return_val_if_fail( character >= 0 && character < font->Quantity, 0 );
|
|
||||||
|
|
||||||
schar = font->Characters[character];
|
|
||||||
|
|
||||||
freeglut_return_val_if_fail( schar, 0 );
|
|
||||||
|
|
||||||
return ((int)(schar->Right + 0.5));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return the width of a string drawn using a stroke font
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutStrokeLength( void* fontID, const char* string )
|
|
||||||
{
|
|
||||||
int c;
|
|
||||||
float length = 0.0;
|
|
||||||
float this_line_length = 0.0 ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First of all we'll need a font to use
|
|
||||||
*/
|
|
||||||
SFG_StrokeFont* font = fghStrokeByID( fontID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Step through the characters in the string, adding up the width of each one
|
|
||||||
*/
|
|
||||||
int numchar = strlen ( string ) ;
|
|
||||||
for( c = 0; c < numchar; c++ )
|
|
||||||
{
|
|
||||||
if ( ( string[ c ] >= 0 ) && ( string[ c ] < font->Quantity ) )
|
|
||||||
{
|
|
||||||
if ( string[ c ] == '\n' ) /* Carriage return, reset the length of this line */
|
|
||||||
{
|
|
||||||
if ( length < this_line_length ) length = this_line_length ;
|
|
||||||
this_line_length = 0.0 ;
|
|
||||||
}
|
|
||||||
else /* Not a carriage return, increment the length of this line */
|
|
||||||
{
|
|
||||||
const SFG_StrokeChar *schar = font->Characters[string[c]];
|
|
||||||
if ( schar != NULL )
|
|
||||||
this_line_length += schar->Right ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( length < this_line_length ) length = this_line_length ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return the result now
|
|
||||||
*/
|
|
||||||
return( (int)(length+0.5) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns the height of a stroke font
|
|
||||||
*/
|
|
||||||
GLfloat FGAPIENTRY glutStrokeHeight( void* fontID )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* See which font are we queried about
|
|
||||||
*/
|
|
||||||
SFG_StrokeFont* font = fghStrokeByID( fontID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return the character set's height
|
|
||||||
*/
|
|
||||||
return( font->Height );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
@ -1,824 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_font_data.c
|
|
||||||
*
|
|
||||||
* This file has been automatically generated by the genfonts utility.
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 by Pawel W. Olszta
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Sotware.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Following fonts are defined in this file:
|
|
||||||
*
|
|
||||||
* 1. fgFontFixed8x13 <-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1>
|
|
||||||
* 2. fgFontFixed9x15 <-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1>
|
|
||||||
* 3. fgFontHelvetica10 <-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1>
|
|
||||||
* 4. fgFontHelvetica12 <-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1>
|
|
||||||
* 5. fgFontHelvetica18 <-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1>
|
|
||||||
* 6. fgFontTimesRoman10 <-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1>
|
|
||||||
* 7. fgFontTimesRoman24 <-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1>
|
|
||||||
*/
|
|
||||||
|
|
||||||
static const GLubyte Fixed8x13_Character_032[] = { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* blank */
|
|
||||||
static const GLubyte Fixed8x13_Character_097[] = { 8, 0, 0,116,140,132,124, 4,120, 0, 0, 0, 0, 0}; /* "a" */
|
|
||||||
static const GLubyte Fixed8x13_Character_098[] = { 8, 0, 0,184,196,132,132,196,184,128,128,128, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_099[] = { 8, 0, 0,120,132,128,128,132,120, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_100[] = { 8, 0, 0,116,140,132,132,140,116, 4, 4, 4, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_101[] = { 8, 0, 0,120,132,128,252,132,120, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_102[] = { 8, 0, 0, 64, 64, 64, 64,248, 64, 64, 68, 56, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_103[] = { 8,120,132,120,128,112,136,136,116, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_104[] = { 8, 0, 0,132,132,132,132,196,184,128,128,128, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_105[] = { 8, 0, 0,248, 32, 32, 32, 32, 96, 0, 32, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_106[] = { 8,112,136,136, 8, 8, 8, 8, 24, 0, 8, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_107[] = { 8, 0, 0,132,136,144,224,144,136,128,128,128, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_108[] = { 8, 0, 0,248, 32, 32, 32, 32, 32, 32, 32, 96, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_109[] = { 8, 0, 0,130,146,146,146,146,236, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_110[] = { 8, 0, 0,132,132,132,132,196,184, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_111[] = { 8, 0, 0,120,132,132,132,132,120, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_112[] = { 8,128,128,128,184,196,132,196,184, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_113[] = { 8, 4, 4, 4,116,140,132,140,116, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_114[] = { 8, 0, 0, 64, 64, 64, 64, 68,184, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_115[] = { 8, 0, 0,120,132, 24, 96,132,120, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_116[] = { 8, 0, 0, 56, 68, 64, 64, 64,248, 64, 64, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_117[] = { 8, 0, 0,116,136,136,136,136,136, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_119[] = { 8, 0, 0, 68,170,146,146,130,130, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_118[] = { 8, 0, 0, 32, 80, 80,136,136,136, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_120[] = { 8, 0, 0,132, 72, 48, 48, 72,132, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_121[] = { 8,120,132, 4,116,140,132,132,132, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_122[] = { 8, 0, 0,252, 64, 32, 16, 8,252, 0, 0, 0, 0, 0}; /* "z" */
|
|
||||||
static const GLubyte Fixed8x13_Character_065[] = { 8, 0, 0,132,132,132,252,132,132,132, 72, 48, 0, 0}; /* "A" */
|
|
||||||
static const GLubyte Fixed8x13_Character_066[] = { 8, 0, 0,252, 66, 66, 66,124, 66, 66, 66,252, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_067[] = { 8, 0, 0,120,132,128,128,128,128,128,132,120, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_068[] = { 8, 0, 0,252, 66, 66, 66, 66, 66, 66, 66,252, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_069[] = { 8, 0, 0,252,128,128,128,240,128,128,128,252, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_070[] = { 8, 0, 0,128,128,128,128,240,128,128,128,252, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_071[] = { 8, 0, 0,116,140,132,156,128,128,128,132,120, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_072[] = { 8, 0, 0,132,132,132,132,252,132,132,132,132, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_073[] = { 8, 0, 0,248, 32, 32, 32, 32, 32, 32, 32,248, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_074[] = { 8, 0, 0,112,136, 8, 8, 8, 8, 8, 8, 60, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_075[] = { 8, 0, 0,132,136,144,160,192,160,144,136,132, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_076[] = { 8, 0, 0,252,128,128,128,128,128,128,128,128, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_077[] = { 8, 0, 0,130,130,130,146,146,170,198,130,130, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_078[] = { 8, 0, 0,132,132,132,140,148,164,196,132,132, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_079[] = { 8, 0, 0,120,132,132,132,132,132,132,132,120, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_080[] = { 8, 0, 0,128,128,128,128,248,132,132,132,248, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_081[] = { 8, 0, 4,120,148,164,132,132,132,132,132,120, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_082[] = { 8, 0, 0,132,136,144,160,248,132,132,132,248, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_083[] = { 8, 0, 0,120,132, 4, 4,120,128,128,132,120, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_084[] = { 8, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16,254, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_085[] = { 8, 0, 0,120,132,132,132,132,132,132,132,132, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_087[] = { 8, 0, 0, 68,170,146,146,146,130,130,130,130, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_086[] = { 8, 0, 0, 16, 40, 40, 40, 68, 68, 68,130,130, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_088[] = { 8, 0, 0,130,130, 68, 40, 16, 40, 68,130,130, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_089[] = { 8, 0, 0, 16, 16, 16, 16, 16, 40, 68,130,130, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_090[] = { 8, 0, 0,252,128,128, 64, 32, 16, 8, 4,252, 0, 0}; /* "Z" */
|
|
||||||
static const GLubyte Fixed8x13_Character_048[] = { 8, 0, 0, 48, 72,132,132,132,132,132, 72, 48, 0, 0}; /* "0" */
|
|
||||||
static const GLubyte Fixed8x13_Character_049[] = { 8, 0, 0,248, 32, 32, 32, 32, 32,160, 96, 32, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_050[] = { 8, 0, 0,252,128, 64, 48, 8, 4,132,132,120, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_051[] = { 8, 0, 0,120,132, 4, 4, 56, 16, 8, 4,252, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_052[] = { 8, 0, 0, 8, 8,252,136,136, 72, 40, 24, 8, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_053[] = { 8, 0, 0,120,132, 4, 4,196,184,128,128,252, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_054[] = { 8, 0, 0,120,132,132,196,184,128,128, 64, 56, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_055[] = { 8, 0, 0, 64, 64, 32, 32, 16, 16, 8, 4,252, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_056[] = { 8, 0, 0,120,132,132,132,120,132,132,132,120, 0, 0};
|
|
||||||
static const GLubyte Fixed8x13_Character_057[] = { 8, 0, 0,112, 8, 4, 4,116,140,132,132,120, 0, 0}; /* "9" */
|
|
||||||
static const GLubyte Fixed8x13_Character_096[] = { 8, 0, 0, 0, 0, 0, 0, 0, 0, 16, 96,224, 0, 0}; /* "`" */
|
|
||||||
static const GLubyte Fixed8x13_Character_126[] = { 8, 0, 0, 0, 0, 0, 0, 0, 0,144,168, 72, 0, 0}; /* "~" */
|
|
||||||
static const GLubyte Fixed8x13_Character_033[] = { 8, 0, 0,128, 0,128,128,128,128,128,128,128, 0, 0}; /* "!" */
|
|
||||||
static const GLubyte Fixed8x13_Character_064[] = { 8, 0, 0,120,128,148,172,164,156,132,132,120, 0, 0}; /* "@" */
|
|
||||||
static const GLubyte Fixed8x13_Character_035[] = { 8, 0, 0, 0, 72, 72,252, 72,252, 72, 72, 0, 0, 0}; /* "#" */
|
|
||||||
static const GLubyte Fixed8x13_Character_036[] = { 8, 0, 0, 0, 32,240, 40,112,160,120, 32, 0, 0, 0}; /* "$" */
|
|
||||||
static const GLubyte Fixed8x13_Character_037[] = { 8, 0, 0,136, 84, 72, 32, 16, 16, 72,164, 68, 0, 0}; /* "%" */
|
|
||||||
static const GLubyte Fixed8x13_Character_094[] = { 8, 0, 0, 0, 0, 0, 0, 0, 0,136, 80, 32, 0, 0}; /* "^" */
|
|
||||||
static const GLubyte Fixed8x13_Character_038[] = { 8, 0, 0,116,136,148, 96,144,144, 96, 0, 0, 0, 0}; /* "&" */
|
|
||||||
static const GLubyte Fixed8x13_Character_042[] = { 8, 0, 0, 0, 0, 72, 48,252, 48, 72, 0, 0, 0, 0}; /* "*" */
|
|
||||||
static const GLubyte Fixed8x13_Character_040[] = { 8, 0, 0, 32, 64, 64,128,128,128, 64, 64, 32, 0, 0}; /* "(" */
|
|
||||||
static const GLubyte Fixed8x13_Character_041[] = { 8, 0, 0,128, 64, 64, 32, 32, 32, 64, 64,128, 0, 0}; /* ")" */
|
|
||||||
static const GLubyte Fixed8x13_Character_045[] = { 8, 0, 0, 0, 0, 0, 0,252, 0, 0, 0, 0, 0, 0}; /* "-" */
|
|
||||||
static const GLubyte Fixed8x13_Character_095[] = { 8, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "_" */
|
|
||||||
static const GLubyte Fixed8x13_Character_061[] = { 8, 0, 0, 0, 0,252, 0, 0,252, 0, 0, 0, 0, 0}; /* "=" */
|
|
||||||
static const GLubyte Fixed8x13_Character_043[] = { 8, 0, 0, 0, 0, 32, 32,248, 32, 32, 0, 0, 0, 0}; /* "+" */
|
|
||||||
static const GLubyte Fixed8x13_Character_091[] = { 8, 0, 0,240,128,128,128,128,128,128,128,240, 0, 0}; /* "[" */
|
|
||||||
static const GLubyte Fixed8x13_Character_123[] = { 8, 0, 0, 56, 64, 64, 32,192, 32, 64, 64, 56, 0, 0}; /* "{" */
|
|
||||||
static const GLubyte Fixed8x13_Character_125[] = { 8, 0, 0,224, 16, 16, 32, 24, 32, 16, 16,224, 0, 0}; /* "}" */
|
|
||||||
static const GLubyte Fixed8x13_Character_093[] = { 8, 0, 0,240, 16, 16, 16, 16, 16, 16, 16,240, 0, 0}; /* "]" */
|
|
||||||
static const GLubyte Fixed8x13_Character_059[] = { 8, 0,128, 96,112, 0, 0, 32,112, 32, 0, 0, 0, 0}; /* ";" */
|
|
||||||
static const GLubyte Fixed8x13_Character_058[] = { 8, 0, 64,224, 64, 0, 0, 64,224, 64, 0, 0, 0, 0}; /* ":" */
|
|
||||||
static const GLubyte Fixed8x13_Character_044[] = { 8, 0,128, 96,112, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "," */
|
|
||||||
static const GLubyte Fixed8x13_Character_046[] = { 8, 0, 64,224, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "." */
|
|
||||||
static const GLubyte Fixed8x13_Character_060[] = { 8, 0, 0, 8, 16, 32, 64,128, 64, 32, 16, 8, 0, 0}; /* "<" */
|
|
||||||
static const GLubyte Fixed8x13_Character_062[] = { 8, 0, 0,128, 64, 32, 16, 8, 16, 32, 64,128, 0, 0}; /* ">" */
|
|
||||||
static const GLubyte Fixed8x13_Character_047[] = { 8, 0, 0,128,128, 64, 32, 16, 8, 4, 2, 2, 0, 0}; /* "/" */
|
|
||||||
static const GLubyte Fixed8x13_Character_063[] = { 8, 0, 0, 16, 0, 16, 16, 8, 4,132,132,120, 0, 0}; /* "?" */
|
|
||||||
static const GLubyte Fixed8x13_Character_092[] = { 8, 0, 0, 2, 2, 4, 8, 16, 32, 64,128,128, 0, 0}; /* "\" */
|
|
||||||
static const GLubyte Fixed8x13_Character_034[] = { 8, 0, 0, 0, 0, 0, 0, 0, 0,144,144,144, 0, 0}; /* """ */
|
|
||||||
|
|
||||||
/* Missing Characters filled in by John Fay by hand ... */
|
|
||||||
static const GLubyte Fixed8x13_Character_039[] = { 8, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 0}; /* """ */
|
|
||||||
static const GLubyte Fixed8x13_Character_124[] = { 8, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0}; /* """ */
|
|
||||||
|
|
||||||
|
|
||||||
/* The font characters mapping: */
|
|
||||||
static const GLubyte* Fixed8x13_Character_Map[] = {Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_032,Fixed8x13_Character_033,Fixed8x13_Character_034,Fixed8x13_Character_035,Fixed8x13_Character_036,Fixed8x13_Character_037,Fixed8x13_Character_038,Fixed8x13_Character_039,Fixed8x13_Character_040,
|
|
||||||
Fixed8x13_Character_041,Fixed8x13_Character_042,Fixed8x13_Character_043,Fixed8x13_Character_044,Fixed8x13_Character_045,Fixed8x13_Character_046,Fixed8x13_Character_047,Fixed8x13_Character_048,Fixed8x13_Character_049,Fixed8x13_Character_050,Fixed8x13_Character_051,Fixed8x13_Character_052,Fixed8x13_Character_053,Fixed8x13_Character_054,Fixed8x13_Character_055,Fixed8x13_Character_056,Fixed8x13_Character_057,Fixed8x13_Character_058,Fixed8x13_Character_059,Fixed8x13_Character_060,Fixed8x13_Character_061,Fixed8x13_Character_062,Fixed8x13_Character_063,Fixed8x13_Character_064,Fixed8x13_Character_065,Fixed8x13_Character_066,Fixed8x13_Character_067,Fixed8x13_Character_068,Fixed8x13_Character_069,Fixed8x13_Character_070,Fixed8x13_Character_071,Fixed8x13_Character_072,Fixed8x13_Character_073,Fixed8x13_Character_074,Fixed8x13_Character_075,Fixed8x13_Character_076,Fixed8x13_Character_077,Fixed8x13_Character_078,Fixed8x13_Character_079,Fixed8x13_Character_080,Fixed8x13_Character_081,Fixed8x13_Character_082,
|
|
||||||
Fixed8x13_Character_083,Fixed8x13_Character_084,Fixed8x13_Character_085,Fixed8x13_Character_086,Fixed8x13_Character_087,Fixed8x13_Character_088,Fixed8x13_Character_089,Fixed8x13_Character_090,Fixed8x13_Character_091,Fixed8x13_Character_092,Fixed8x13_Character_093,Fixed8x13_Character_094,Fixed8x13_Character_095,Fixed8x13_Character_096,Fixed8x13_Character_097,Fixed8x13_Character_098,Fixed8x13_Character_099,Fixed8x13_Character_100,Fixed8x13_Character_101,Fixed8x13_Character_102,Fixed8x13_Character_103,Fixed8x13_Character_104,Fixed8x13_Character_105,Fixed8x13_Character_106,Fixed8x13_Character_107,Fixed8x13_Character_108,Fixed8x13_Character_109,Fixed8x13_Character_110,Fixed8x13_Character_111,Fixed8x13_Character_112,Fixed8x13_Character_113,Fixed8x13_Character_114,Fixed8x13_Character_115,Fixed8x13_Character_116,Fixed8x13_Character_117,Fixed8x13_Character_118,Fixed8x13_Character_119,Fixed8x13_Character_120,Fixed8x13_Character_121,Fixed8x13_Character_122,Fixed8x13_Character_123,Fixed8x13_Character_124,
|
|
||||||
Fixed8x13_Character_125,Fixed8x13_Character_126,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,
|
|
||||||
Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,
|
|
||||||
Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,
|
|
||||||
Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,Fixed8x13_Character_042,NULL};
|
|
||||||
|
|
||||||
/* The font structure: */
|
|
||||||
const SFG_Font fgFontFixed8x13 = { "-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1", 93, 13, Fixed8x13_Character_Map, -1.0f, 2.0f };
|
|
||||||
|
|
||||||
static const GLubyte Fixed9x15_Character_032[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* blank */
|
|
||||||
static const GLubyte Fixed9x15_Character_097[] = { 9, 0, 0, 0, 0, 0, 0,122, 0,134, 0,130, 0,126, 0, 2, 0, 2, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "a" */
|
|
||||||
static const GLubyte Fixed9x15_Character_098[] = { 9, 0, 0, 0, 0, 0, 0,188, 0,194, 0,130, 0,130, 0,130, 0,194, 0,188, 0,128, 0,128, 0,128, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_099[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,130, 0,128, 0,128, 0,128, 0,130, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_100[] = { 9, 0, 0, 0, 0, 0, 0,122, 0,134, 0,130, 0,130, 0,130, 0,134, 0,122, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_101[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,128, 0,128, 0,254, 0,130, 0,130, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_102[] = { 9, 0, 0, 0, 0, 0, 0, 32, 0, 32, 0, 32, 0, 32, 0,248, 0, 32, 0, 32, 0, 34, 0, 34, 0, 28, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_103[] = { 9,124, 0,130, 0,130, 0,124, 0,128, 0,120, 0,132, 0,132, 0,132, 0,122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_104[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,130, 0,130, 0,130, 0,130, 0,194, 0,188, 0,128, 0,128, 0,128, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_105[] = { 9, 0, 0, 0, 0, 0, 0,248, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0,224, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_106[] = { 9,120, 0,132, 0,132, 0,132, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 28, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_107[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,140, 0,176, 0,192, 0,176, 0,140, 0,130, 0,128, 0,128, 0,128, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_108[] = { 9, 0, 0, 0, 0, 0, 0,248, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0,224, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_109[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,146, 0,146, 0,146, 0,146, 0,146, 0,236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_110[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,130, 0,130, 0,130, 0,130, 0,194, 0,188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_111[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,130, 0,130, 0,130, 0,130, 0,130, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_112[] = { 9,128, 0,128, 0,128, 0,188, 0,194, 0,130, 0,130, 0,130, 0,194, 0,188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_113[] = { 9, 2, 0, 2, 0, 2, 0,122, 0,134, 0,130, 0,130, 0,130, 0,134, 0,122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_114[] = { 9, 0, 0, 0, 0, 0, 0, 64, 0, 64, 0, 64, 0, 64, 0, 66, 0, 98, 0,156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_115[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,130, 0, 2, 0,124, 0,128, 0,130, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_116[] = { 9, 0, 0, 0, 0, 0, 0, 28, 0, 34, 0, 32, 0, 32, 0, 32, 0, 32, 0,252, 0, 32, 0, 32, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_117[] = { 9, 0, 0, 0, 0, 0, 0,122, 0,132, 0,132, 0,132, 0,132, 0,132, 0,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_119[] = { 9, 0, 0, 0, 0, 0, 0, 68, 0,170, 0,146, 0,146, 0,146, 0,130, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_118[] = { 9, 0, 0, 0, 0, 0, 0, 16, 0, 40, 0, 40, 0, 68, 0, 68, 0,130, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_120[] = { 9, 0, 0, 0, 0, 0, 0,130, 0, 68, 0, 40, 0, 16, 0, 40, 0, 68, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_121[] = { 9,120, 0,132, 0, 4, 0,116, 0,140, 0,132, 0,132, 0,132, 0,132, 0,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_122[] = { 9, 0, 0, 0, 0, 0, 0,254, 0, 64, 0, 32, 0, 16, 0, 8, 0, 4, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "z" */
|
|
||||||
static const GLubyte Fixed9x15_Character_065[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,130, 0,130, 0,254, 0,130, 0,130, 0,130, 0, 68, 0, 40, 0, 16, 0, 0, 0, 0, 0}; /* "A" */
|
|
||||||
static const GLubyte Fixed9x15_Character_066[] = { 9, 0, 0, 0, 0, 0, 0,252, 0, 66, 0, 66, 0, 66, 0, 66, 0,124, 0, 66, 0, 66, 0, 66, 0,252, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_067[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,130, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0,130, 0,124, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_068[] = { 9, 0, 0, 0, 0, 0, 0,252, 0, 66, 0, 66, 0, 66, 0, 66, 0, 66, 0, 66, 0, 66, 0, 66, 0,252, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_069[] = { 9, 0, 0, 0, 0, 0, 0,254, 0, 64, 0, 64, 0, 64, 0, 64, 0,120, 0, 64, 0, 64, 0, 64, 0,254, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_070[] = { 9, 0, 0, 0, 0, 0, 0, 64, 0, 64, 0, 64, 0, 64, 0, 64, 0,120, 0, 64, 0, 64, 0, 64, 0,254, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_071[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,130, 0,130, 0,130, 0,142, 0,128, 0,128, 0,128, 0,130, 0,124, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_072[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,130, 0,130, 0,130, 0,130, 0,254, 0,130, 0,130, 0,130, 0,130, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_073[] = { 9, 0, 0, 0, 0, 0, 0,248, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0,248, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_074[] = { 9, 0, 0, 0, 0, 0, 0,120, 0,132, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 30, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_075[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,132, 0,136, 0,144, 0,160, 0,224, 0,144, 0,136, 0,132, 0,130, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_076[] = { 9, 0, 0, 0, 0, 0, 0,254, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_077[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,130, 0,130, 0,146, 0,146, 0,170, 0,170, 0,198, 0,130, 0,130, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_078[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,130, 0,130, 0,134, 0,138, 0,146, 0,162, 0,194, 0,130, 0,130, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_079[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,130, 0,130, 0,130, 0,130, 0,130, 0,130, 0,130, 0,130, 0,124, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_080[] = { 9, 0, 0, 0, 0, 0, 0,128, 0,128, 0,128, 0,128, 0,128, 0,252, 0,130, 0,130, 0,130, 0,252, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_081[] = { 9, 0, 0, 6, 0, 8, 0,124, 0,146, 0,162, 0,130, 0,130, 0,130, 0,130, 0,130, 0,130, 0,124, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_082[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,130, 0,132, 0,136, 0,144, 0,252, 0,130, 0,130, 0,130, 0,252, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_083[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,130, 0,130, 0, 2, 0, 12, 0,112, 0,128, 0,130, 0,130, 0,124, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_084[] = { 9, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0,254, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_085[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,130, 0,130, 0,130, 0,130, 0,130, 0,130, 0,130, 0,130, 0,130, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_087[] = { 9, 0, 0, 0, 0, 0, 0, 68, 0,170, 0,146, 0,146, 0,146, 0,146, 0,130, 0,130, 0,130, 0,130, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_086[] = { 9, 0, 0, 0, 0, 0, 0, 16, 0, 40, 0, 40, 0, 40, 0, 68, 0, 68, 0, 68, 0,130, 0,130, 0,130, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_088[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,130, 0, 68, 0, 40, 0, 16, 0, 16, 0, 40, 0, 68, 0,130, 0,130, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_089[] = { 9, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 40, 0, 68, 0,130, 0,130, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_090[] = { 9, 0, 0, 0, 0, 0, 0,254, 0,128, 0,128, 0, 64, 0, 32, 0, 16, 0, 8, 0, 4, 0, 2, 0,254, 0, 0, 0, 0, 0}; /* "Z" */
|
|
||||||
static const GLubyte Fixed9x15_Character_048[] = { 9, 0, 0, 0, 0, 0, 0, 56, 0, 68, 0,130, 0,130, 0,130, 0,130, 0,130, 0,130, 0, 68, 0, 56, 0, 0, 0, 0, 0}; /* "0" */
|
|
||||||
static const GLubyte Fixed9x15_Character_049[] = { 9, 0, 0, 0, 0, 0, 0,254, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0,144, 0, 80, 0, 48, 0, 16, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_050[] = { 9, 0, 0, 0, 0, 0, 0,254, 0,128, 0, 64, 0, 48, 0, 8, 0, 4, 0, 2, 0,130, 0,130, 0,124, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_051[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,130, 0, 2, 0, 2, 0, 2, 0, 28, 0, 8, 0, 4, 0, 2, 0,254, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_052[] = { 9, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 4, 0,254, 0,132, 0, 68, 0, 36, 0, 20, 0, 12, 0, 4, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_053[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,130, 0, 2, 0, 2, 0, 2, 0,194, 0,188, 0,128, 0,128, 0,254, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_054[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,130, 0,130, 0,130, 0,194, 0,188, 0,128, 0,128, 0, 64, 0, 60, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_055[] = { 9, 0, 0, 0, 0, 0, 0, 64, 0, 64, 0, 32, 0, 32, 0, 16, 0, 8, 0, 4, 0, 2, 0, 2, 0,254, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_056[] = { 9, 0, 0, 0, 0, 0, 0, 56, 0, 68, 0,130, 0,130, 0, 68, 0, 56, 0, 68, 0,130, 0, 68, 0, 56, 0, 0, 0, 0, 0};
|
|
||||||
static const GLubyte Fixed9x15_Character_057[] = { 9, 0, 0, 0, 0, 0, 0,120, 0, 4, 0, 2, 0, 2, 0,122, 0,134, 0,130, 0,130, 0,130, 0,124, 0, 0, 0, 0, 0}; /* "9" */
|
|
||||||
static const GLubyte Fixed9x15_Character_096[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 64, 0,192, 0, 0, 0, 0, 0}; /* "`" */
|
|
||||||
static const GLubyte Fixed9x15_Character_126[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 0,146, 0, 98, 0, 0, 0, 0, 0}; /* "~" */
|
|
||||||
static const GLubyte Fixed9x15_Character_033[] = { 9, 0, 0, 0, 0, 0, 0,128, 0,128, 0, 0, 0, 0, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0, 0, 0}; /* "!" */
|
|
||||||
static const GLubyte Fixed9x15_Character_064[] = { 9, 0, 0, 0, 0, 0, 0,124, 0,128, 0,128, 0,154, 0,166, 0,162, 0,158, 0,130, 0,130, 0,124, 0, 0, 0, 0, 0}; /* "@" */
|
|
||||||
static const GLubyte Fixed9x15_Character_035[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 72, 0,252, 0, 72, 0, 72, 0,252, 0, 72, 0, 72, 0, 0, 0, 0, 0, 0, 0}; /* "#" */
|
|
||||||
static const GLubyte Fixed9x15_Character_036[] = { 9, 0, 0, 0, 0, 16, 0,124, 0,146, 0, 18, 0, 18, 0, 20, 0, 56, 0, 80, 0,144, 0,146, 0,124, 0, 16, 0, 0, 0}; /* "$" */
|
|
||||||
static const GLubyte Fixed9x15_Character_037[] = { 9, 0, 0, 0, 0, 0, 0,132, 0, 74, 0, 74, 0, 36, 0, 16, 0, 16, 0, 72, 0,164, 0,164, 0, 66, 0, 0, 0, 0, 0}; /* "%" */
|
|
||||||
static const GLubyte Fixed9x15_Character_094[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130, 0, 68, 0, 40, 0, 16, 0, 0, 0, 0, 0}; /* "^" */
|
|
||||||
static const GLubyte Fixed9x15_Character_038[] = { 9, 0, 0, 0, 0, 0, 0, 98, 0,148, 0,136, 0,148, 0, 98, 0, 96, 0,144, 0,144, 0,144, 0, 96, 0, 0, 0, 0, 0}; /* "&" */
|
|
||||||
static const GLubyte Fixed9x15_Character_042[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,146, 0, 84, 0, 56, 0, 84, 0,146, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "*" */
|
|
||||||
static const GLubyte Fixed9x15_Character_040[] = { 9, 0, 0, 0, 0, 32, 0, 64, 0, 64, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0, 64, 0, 64, 0, 32, 0, 0, 0}; /* "(" */
|
|
||||||
static const GLubyte Fixed9x15_Character_041[] = { 9, 0, 0, 0, 0,128, 0, 64, 0, 64, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 64, 0, 64, 0,128, 0, 0, 0}; /* ")" */
|
|
||||||
static const GLubyte Fixed9x15_Character_045[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "-" */
|
|
||||||
static const GLubyte Fixed9x15_Character_095[] = { 9, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "_" */
|
|
||||||
static const GLubyte Fixed9x15_Character_061[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 0, 0, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "=" */
|
|
||||||
static const GLubyte Fixed9x15_Character_043[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 16, 0,254, 0, 16, 0, 16, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "+" */
|
|
||||||
static const GLubyte Fixed9x15_Character_091[] = { 9, 0, 0, 0, 0,240, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0,128, 0,240, 0, 0, 0}; /* "[" */
|
|
||||||
static const GLubyte Fixed9x15_Character_123[] = { 9, 0, 0, 0, 0, 56, 0, 64, 0, 64, 0, 64, 0, 32, 0,192, 0,192, 0, 32, 0, 64, 0, 64, 0, 64, 0, 56, 0, 0, 0}; /* "{" */
|
|
||||||
static const GLubyte Fixed9x15_Character_125[] = { 9, 0, 0, 0, 0,224, 0, 16, 0, 16, 0, 16, 0, 32, 0, 24, 0, 24, 0, 32, 0, 16, 0, 16, 0, 16, 0,224, 0, 0, 0}; /* "}" */
|
|
||||||
static const GLubyte Fixed9x15_Character_093[] = { 9, 0, 0, 0, 0,240, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0, 16, 0,240, 0, 0, 0}; /* "]" */
|
|
||||||
static const GLubyte Fixed9x15_Character_059[] = { 9,128, 0, 64, 0, 64, 0,192, 0,192, 0, 0, 0, 0, 0, 0, 0,192, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* ";" */
|
|
||||||
static const GLubyte Fixed9x15_Character_058[] = { 9, 0, 0, 0, 0, 0, 0,192, 0,192, 0, 0, 0, 0, 0, 0, 0,192, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* ":" */
|
|
||||||
static const GLubyte Fixed9x15_Character_044[] = { 9,128, 0, 64, 0, 64, 0,192, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "," */
|
|
||||||
static const GLubyte Fixed9x15_Character_046[] = { 9, 0, 0, 0, 0, 0, 0,192, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "." */
|
|
||||||
static const GLubyte Fixed9x15_Character_060[] = { 9, 0, 0, 0, 0, 0, 0, 8, 0, 16, 0, 32, 0, 64, 0,128, 0,128, 0, 64, 0, 32, 0, 16, 0, 8, 0, 0, 0, 0, 0}; /* "<" */
|
|
||||||
static const GLubyte Fixed9x15_Character_062[] = { 9, 0, 0, 0, 0, 0, 0,128, 0, 64, 0, 32, 0, 16, 0, 8, 0, 8, 0, 16, 0, 32, 0, 64, 0,128, 0, 0, 0, 0, 0}; /* ">" */
|
|
||||||
static const GLubyte Fixed9x15_Character_047[] = { 9, 0, 0, 0, 0, 0, 0,128, 0, 64, 0, 64, 0, 32, 0, 16, 0, 16, 0, 8, 0, 4, 0, 4, 0, 2, 0, 0, 0, 0, 0}; /* "/" */
|
|
||||||
static const GLubyte Fixed9x15_Character_063[] = { 9, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 16, 0, 8, 0, 4, 0, 2, 0,130, 0,130, 0,124, 0, 0, 0, 0, 0}; /* "?" */
|
|
||||||
static const GLubyte Fixed9x15_Character_092[] = { 9, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 4, 0, 8, 0, 16, 0, 16, 0, 32, 0, 64, 0, 64, 0,128, 0, 0, 0, 0, 0}; /* "\" */
|
|
||||||
static const GLubyte Fixed9x15_Character_034[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 0,144, 0,144, 0, 0, 0, 0, 0}; /* """ */
|
|
||||||
|
|
||||||
/* Missing Characters filled in by John Fay by hand ... */
|
|
||||||
static const GLubyte Fixed9x15_Character_039[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 32, 0, 32, 0, 32, 0, 0, 0, 0, 0}; /* "'" */
|
|
||||||
static const GLubyte Fixed9x15_Character_124[] = { 9, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 0, 0, 0, 0}; /* "|" */
|
|
||||||
|
|
||||||
|
|
||||||
/* The font characters mapping: */
|
|
||||||
static const GLubyte* Fixed9x15_Character_Map[] = {Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_032,Fixed9x15_Character_033,Fixed9x15_Character_034,Fixed9x15_Character_035,Fixed9x15_Character_036,Fixed9x15_Character_037,Fixed9x15_Character_038,Fixed9x15_Character_039,Fixed9x15_Character_040,
|
|
||||||
Fixed9x15_Character_041,Fixed9x15_Character_042,Fixed9x15_Character_043,Fixed9x15_Character_044,Fixed9x15_Character_045,Fixed9x15_Character_046,Fixed9x15_Character_047,Fixed9x15_Character_048,Fixed9x15_Character_049,Fixed9x15_Character_050,Fixed9x15_Character_051,Fixed9x15_Character_052,Fixed9x15_Character_053,Fixed9x15_Character_054,Fixed9x15_Character_055,Fixed9x15_Character_056,Fixed9x15_Character_057,Fixed9x15_Character_058,Fixed9x15_Character_059,Fixed9x15_Character_060,Fixed9x15_Character_061,Fixed9x15_Character_062,Fixed9x15_Character_063,Fixed9x15_Character_064,Fixed9x15_Character_065,Fixed9x15_Character_066,Fixed9x15_Character_067,Fixed9x15_Character_068,Fixed9x15_Character_069,Fixed9x15_Character_070,Fixed9x15_Character_071,Fixed9x15_Character_072,Fixed9x15_Character_073,Fixed9x15_Character_074,Fixed9x15_Character_075,Fixed9x15_Character_076,Fixed9x15_Character_077,Fixed9x15_Character_078,Fixed9x15_Character_079,Fixed9x15_Character_080,Fixed9x15_Character_081,Fixed9x15_Character_082,
|
|
||||||
Fixed9x15_Character_083,Fixed9x15_Character_084,Fixed9x15_Character_085,Fixed9x15_Character_086,Fixed9x15_Character_087,Fixed9x15_Character_088,Fixed9x15_Character_089,Fixed9x15_Character_090,Fixed9x15_Character_091,Fixed9x15_Character_092,Fixed9x15_Character_093,Fixed9x15_Character_094,Fixed9x15_Character_095,Fixed9x15_Character_096,Fixed9x15_Character_097,Fixed9x15_Character_098,Fixed9x15_Character_099,Fixed9x15_Character_100,Fixed9x15_Character_101,Fixed9x15_Character_102,Fixed9x15_Character_103,Fixed9x15_Character_104,Fixed9x15_Character_105,Fixed9x15_Character_106,Fixed9x15_Character_107,Fixed9x15_Character_108,Fixed9x15_Character_109,Fixed9x15_Character_110,Fixed9x15_Character_111,Fixed9x15_Character_112,Fixed9x15_Character_113,Fixed9x15_Character_114,Fixed9x15_Character_115,Fixed9x15_Character_116,Fixed9x15_Character_117,Fixed9x15_Character_118,Fixed9x15_Character_119,Fixed9x15_Character_120,Fixed9x15_Character_121,Fixed9x15_Character_122,Fixed9x15_Character_123,Fixed9x15_Character_124,
|
|
||||||
Fixed9x15_Character_125,Fixed9x15_Character_126,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,
|
|
||||||
Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,
|
|
||||||
Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,
|
|
||||||
Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,Fixed9x15_Character_042,NULL};
|
|
||||||
|
|
||||||
/* The font structure: */
|
|
||||||
const SFG_Font fgFontFixed9x15 = { "-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1", 93, 15, Fixed9x15_Character_Map, -1.0f, 3.0f };
|
|
||||||
|
|
||||||
static const GLubyte Helvetica10_Character_032[] = { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* " " */
|
|
||||||
static const GLubyte Helvetica10_Character_097[] = { 5, 0, 0,104,144,144,112, 16,224, 0, 0, 0, 0, 0}; /* "a" */
|
|
||||||
static const GLubyte Helvetica10_Character_098[] = { 6, 0, 0,176,200,136,136,200,176,128,128, 0, 0, 0}; /* "b" */
|
|
||||||
static const GLubyte Helvetica10_Character_099[] = { 5, 0, 0, 96,144,128,128,144, 96, 0, 0, 0, 0, 0}; /* "c" */
|
|
||||||
static const GLubyte Helvetica10_Character_100[] = { 6, 0, 0,104,152,136,136,152,104, 8, 8, 0, 0, 0}; /* "d" */
|
|
||||||
static const GLubyte Helvetica10_Character_101[] = { 5, 0, 0, 96,144,128,240,144, 96, 0, 0, 0, 0, 0}; /* "e" */
|
|
||||||
static const GLubyte Helvetica10_Character_102[] = { 4, 0, 0, 64, 64, 64, 64, 64,224, 64, 48, 0, 0, 0}; /* "f" */
|
|
||||||
static const GLubyte Helvetica10_Character_103[] = { 6,112, 8,104,152,136,136,152,104, 0, 0, 0, 0, 0}; /* "g" */
|
|
||||||
static const GLubyte Helvetica10_Character_104[] = { 6, 0, 0,136,136,136,136,200,176,128,128, 0, 0, 0}; /* "h" */
|
|
||||||
static const GLubyte Helvetica10_Character_105[] = { 2, 0, 0,128,128,128,128,128,128, 0,128, 0, 0, 0}; /* "i" */
|
|
||||||
static const GLubyte Helvetica10_Character_106[] = { 2, 0,128,128,128,128,128,128,128, 0,128, 0, 0, 0}; /* "j" */
|
|
||||||
static const GLubyte Helvetica10_Character_107[] = { 5, 0, 0,144,144,160,192,160,144,128,128, 0, 0, 0}; /* "k" */
|
|
||||||
static const GLubyte Helvetica10_Character_108[] = { 2, 0, 0,128,128,128,128,128,128,128,128, 0, 0, 0}; /* "l" */
|
|
||||||
static const GLubyte Helvetica10_Character_109[] = { 8, 0, 0,146,146,146,146,146,236, 0, 0, 0, 0, 0}; /* "m" */
|
|
||||||
static const GLubyte Helvetica10_Character_110[] = { 6, 0, 0,136,136,136,136,200,176, 0, 0, 0, 0, 0}; /* "n" */
|
|
||||||
static const GLubyte Helvetica10_Character_111[] = { 6, 0, 0,112,136,136,136,136,112, 0, 0, 0, 0, 0}; /* "o" */
|
|
||||||
static const GLubyte Helvetica10_Character_112[] = { 6,128,128,176,200,136,136,200,176, 0, 0, 0, 0, 0}; /* "p" */
|
|
||||||
static const GLubyte Helvetica10_Character_113[] = { 6, 8, 8,104,152,136,136,152,104, 0, 0, 0, 0, 0}; /* "q" */
|
|
||||||
static const GLubyte Helvetica10_Character_114[] = { 4, 0, 0,128,128,128,128,192,160, 0, 0, 0, 0, 0}; /* "r" */
|
|
||||||
static const GLubyte Helvetica10_Character_115[] = { 5, 0, 0, 96,144, 16, 96,144, 96, 0, 0, 0, 0, 0}; /* "s" */
|
|
||||||
static const GLubyte Helvetica10_Character_116[] = { 4, 0, 0, 96, 64, 64, 64, 64,224, 64, 64, 0, 0, 0}; /* "t" */
|
|
||||||
static const GLubyte Helvetica10_Character_117[] = { 5, 0, 0,112,144,144,144,144,144, 0, 0, 0, 0, 0}; /* "u" */
|
|
||||||
static const GLubyte Helvetica10_Character_118[] = { 6, 0, 0, 32, 32, 80, 80,136,136, 0, 0, 0, 0, 0}; /* "v" */
|
|
||||||
static const GLubyte Helvetica10_Character_119[] = { 8, 0, 0, 40, 40, 84, 84,146,146, 0, 0, 0, 0, 0}; /* "w" */
|
|
||||||
static const GLubyte Helvetica10_Character_120[] = { 6, 0, 0,136,136, 80, 32, 80,136, 0, 0, 0, 0, 0}; /* "x" */
|
|
||||||
static const GLubyte Helvetica10_Character_121[] = { 5,128, 64, 64, 96,160,160,144,144, 0, 0, 0, 0, 0}; /* "y" */
|
|
||||||
static const GLubyte Helvetica10_Character_122[] = { 5, 0, 0,240,128, 64, 32, 16,240, 0, 0, 0, 0, 0}; /* "z" */
|
|
||||||
static const GLubyte Helvetica10_Character_065[] = { 7, 0, 0,130,130,124, 68, 40, 40, 16, 16, 0, 0, 0}; /* "A" */
|
|
||||||
static const GLubyte Helvetica10_Character_066[] = { 7, 0, 0,240,136,136,136,240,136,136,240, 0, 0, 0}; /* "B" */
|
|
||||||
static const GLubyte Helvetica10_Character_067[] = { 8, 0, 0,120,132,128,128,128,128,132,120, 0, 0, 0}; /* "C" */
|
|
||||||
static const GLubyte Helvetica10_Character_068[] = { 8, 0, 0,240,136,132,132,132,132,136,240, 0, 0, 0}; /* "D" */
|
|
||||||
static const GLubyte Helvetica10_Character_069[] = { 7, 0, 0,248,128,128,128,248,128,128,248, 0, 0, 0}; /* "E" */
|
|
||||||
static const GLubyte Helvetica10_Character_070[] = { 6, 0, 0,128,128,128,128,240,128,128,248, 0, 0, 0}; /* "F" */
|
|
||||||
static const GLubyte Helvetica10_Character_071[] = { 8, 0, 0,116,140,132,140,128,128,132,120, 0, 0, 0}; /* "G" */
|
|
||||||
static const GLubyte Helvetica10_Character_072[] = { 8, 0, 0,132,132,132,132,252,132,132,132, 0, 0, 0}; /* "H" */
|
|
||||||
static const GLubyte Helvetica10_Character_073[] = { 3, 0, 0,128,128,128,128,128,128,128,128, 0, 0, 0}; /* "I" */
|
|
||||||
static const GLubyte Helvetica10_Character_074[] = { 5, 0, 0, 96,144, 16, 16, 16, 16, 16, 16, 0, 0, 0}; /* "J" */
|
|
||||||
static const GLubyte Helvetica10_Character_075[] = { 7, 0, 0,136,136,144,144,224,160,144,136, 0, 0, 0}; /* "K" */
|
|
||||||
static const GLubyte Helvetica10_Character_076[] = { 6, 0, 0,240,128,128,128,128,128,128,128, 0, 0, 0}; /* "L" */
|
|
||||||
static const GLubyte Helvetica10_Character_077[] = { 9, 0, 0, 0, 0,146, 0,146, 0,146, 0,170, 0,170, 0,198, 0,198, 0,130, 0, 0, 0, 0, 0, 0, 0}; /* "M" */
|
|
||||||
static const GLubyte Helvetica10_Character_078[] = { 8, 0, 0,140,140,148,148,164,164,196,196, 0, 0, 0}; /* "N" */
|
|
||||||
static const GLubyte Helvetica10_Character_079[] = { 8, 0, 0,120,132,132,132,132,132,132,120, 0, 0, 0}; /* "O" */
|
|
||||||
static const GLubyte Helvetica10_Character_080[] = { 7, 0, 0,128,128,128,128,240,136,136,240, 0, 0, 0}; /* "P" */
|
|
||||||
static const GLubyte Helvetica10_Character_081[] = { 8, 0, 2,124,140,148,132,132,132,132,120, 0, 0, 0}; /* "Q" */
|
|
||||||
static const GLubyte Helvetica10_Character_082[] = { 7, 0, 0,136,136,136,136,240,136,136,240, 0, 0, 0}; /* "R" */
|
|
||||||
static const GLubyte Helvetica10_Character_083[] = { 7, 0, 0,112,136,136, 8,112,128,136,112, 0, 0, 0}; /* "S" */
|
|
||||||
static const GLubyte Helvetica10_Character_084[] = { 5, 0, 0, 32, 32, 32, 32, 32, 32, 32,248, 0, 0, 0}; /* "T" */
|
|
||||||
static const GLubyte Helvetica10_Character_085[] = { 8, 0, 0,120,132,132,132,132,132,132,132, 0, 0, 0}; /* "U" */
|
|
||||||
static const GLubyte Helvetica10_Character_086[] = { 7, 0, 0, 16, 40, 40, 68, 68, 68,130,130, 0, 0, 0}; /* "V" */
|
|
||||||
static const GLubyte Helvetica10_Character_087[] = { 9, 0, 0, 0, 0, 34, 0, 34, 0, 34, 0, 85, 0, 73, 0, 73, 0,136,128,136,128, 0, 0, 0, 0, 0, 0}; /* "W" */
|
|
||||||
static const GLubyte Helvetica10_Character_088[] = { 7, 0, 0,136,136, 80, 80, 32, 80,136,136, 0, 0, 0}; /* "X" */
|
|
||||||
static const GLubyte Helvetica10_Character_089[] = { 7, 0, 0, 16, 16, 16, 40, 40, 68, 68,130, 0, 0, 0}; /* "Y" */
|
|
||||||
static const GLubyte Helvetica10_Character_090[] = { 7, 0, 0,248,128, 64, 32, 32, 16, 8,248, 0, 0, 0}; /* "Z" */
|
|
||||||
static const GLubyte Helvetica10_Character_048[] = { 6, 0, 0,112,136,136,136,136,136,136,112, 0, 0, 0}; /* "0" */
|
|
||||||
static const GLubyte Helvetica10_Character_049[] = { 6, 0, 0, 64, 64, 64, 64, 64, 64,192, 64, 0, 0, 0}; /* "1" */
|
|
||||||
static const GLubyte Helvetica10_Character_050[] = { 6, 0, 0,248,128, 64, 48, 8, 8,136,112, 0, 0, 0}; /* "2" */
|
|
||||||
static const GLubyte Helvetica10_Character_051[] = { 6, 0, 0,112,136, 8, 8, 48, 8,136,112, 0, 0, 0}; /* "3" */
|
|
||||||
static const GLubyte Helvetica10_Character_052[] = { 6, 0, 0, 16, 16,248,144, 80, 80, 48, 16, 0, 0, 0}; /* "4" */
|
|
||||||
static const GLubyte Helvetica10_Character_053[] = { 6, 0, 0,112,136, 8, 8,240,128,128,248, 0, 0, 0}; /* "5" */
|
|
||||||
static const GLubyte Helvetica10_Character_054[] = { 6, 0, 0,112,136,136,200,176,128,136,112, 0, 0, 0}; /* "6" */
|
|
||||||
static const GLubyte Helvetica10_Character_055[] = { 6, 0, 0, 64, 64, 32, 32, 16, 16, 8,248, 0, 0, 0}; /* "7" */
|
|
||||||
static const GLubyte Helvetica10_Character_056[] = { 6, 0, 0,112,136,136,136,112,136,136,112, 0, 0, 0}; /* "8" */
|
|
||||||
static const GLubyte Helvetica10_Character_057[] = { 6, 0, 0,112,136, 8,104,152,136,136,112, 0, 0, 0}; /* "9" */
|
|
||||||
static const GLubyte Helvetica10_Character_096[] = { 3, 0, 0, 0, 0, 0, 0, 0,128,128, 64, 0, 0, 0}; /* "`" */
|
|
||||||
static const GLubyte Helvetica10_Character_126[] = { 7, 0, 0, 0, 0, 0,152,100, 0, 0, 0, 0, 0, 0}; /* "~" */
|
|
||||||
static const GLubyte Helvetica10_Character_033[] = { 3, 0, 0,128, 0,128,128,128,128,128,128, 0, 0, 0}; /* "!" */
|
|
||||||
static const GLubyte Helvetica10_Character_064[] = { 11, 62, 0, 64, 0,155, 0,164,128,164,128,162, 64,146, 64, 77, 64, 32,128, 31, 0, 0, 0, 0, 0, 0, 0}; /* "@" */
|
|
||||||
static const GLubyte Helvetica10_Character_035[] = { 6, 0, 0, 80, 80,248, 40,124, 40, 40, 0, 0, 0, 0}; /* "#" */
|
|
||||||
static const GLubyte Helvetica10_Character_036[] = { 6, 0, 32,112,168, 40,112,160,168,112, 32, 0, 0, 0}; /* "$" */
|
|
||||||
static const GLubyte Helvetica10_Character_037[] = { 9, 0, 0, 0, 0, 38, 0, 41, 0, 22, 0, 16, 0, 8, 0,104, 0,148, 0,100, 0, 0, 0, 0, 0, 0, 0}; /* "%" */
|
|
||||||
static const GLubyte Helvetica10_Character_094[] = { 6, 0, 0, 0, 0, 0,136, 80, 80, 32, 32, 0, 0, 0}; /* "^" */
|
|
||||||
static const GLubyte Helvetica10_Character_038[] = { 8, 0, 0,100,152,152,164, 96, 80, 80, 32, 0, 0, 0}; /* "&" */
|
|
||||||
static const GLubyte Helvetica10_Character_042[] = { 4, 0, 0, 0, 0, 0, 0, 0,160, 64,160, 0, 0, 0}; /* "*" */
|
|
||||||
static const GLubyte Helvetica10_Character_040[] = { 4, 32, 64, 64,128,128,128,128, 64, 64, 32, 0, 0, 0}; /* "(" */
|
|
||||||
static const GLubyte Helvetica10_Character_041[] = { 4,128, 64, 64, 32, 32, 32, 32, 64, 64,128, 0, 0, 0}; /* ")" */
|
|
||||||
static const GLubyte Helvetica10_Character_045[] = { 7, 0, 0, 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 0}; /* "-" */
|
|
||||||
static const GLubyte Helvetica10_Character_095[] = { 6,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "_" */
|
|
||||||
static const GLubyte Helvetica10_Character_061[] = { 5, 0, 0, 0, 0,240, 0,240, 0, 0, 0, 0, 0, 0}; /* "=" */
|
|
||||||
static const GLubyte Helvetica10_Character_043[] = { 6, 0, 0, 0, 32, 32,248, 32, 32, 0, 0, 0, 0, 0}; /* "+" */
|
|
||||||
static const GLubyte Helvetica10_Character_091[] = { 3,192,128,128,128,128,128,128,128,128,192, 0, 0, 0}; /* "[" */
|
|
||||||
static const GLubyte Helvetica10_Character_123[] = { 3, 32, 64, 64, 64, 64,128, 64, 64, 64, 32, 0, 0, 0}; /* "{" */
|
|
||||||
static const GLubyte Helvetica10_Character_125[] = { 3,128, 64, 64, 64, 64, 32, 64, 64, 64,128, 0, 0, 0}; /* "}" */
|
|
||||||
static const GLubyte Helvetica10_Character_093[] = { 3,192, 64, 64, 64, 64, 64, 64, 64, 64,192, 0, 0, 0}; /* "]" */
|
|
||||||
static const GLubyte Helvetica10_Character_059[] = { 3,128, 64, 64, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0}; /* ";" */
|
|
||||||
static const GLubyte Helvetica10_Character_058[] = { 3, 0, 0,128, 0, 0, 0, 0,128, 0, 0, 0, 0, 0}; /* ":" */
|
|
||||||
static const GLubyte Helvetica10_Character_044[] = { 3,128, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "," */
|
|
||||||
static const GLubyte Helvetica10_Character_046[] = { 3, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "." */
|
|
||||||
static const GLubyte Helvetica10_Character_060[] = { 6, 0, 0, 0, 32, 64,128, 64, 32, 0, 0, 0, 0, 0}; /* "<" */
|
|
||||||
static const GLubyte Helvetica10_Character_062[] = { 6, 0, 0, 0,128, 64, 32, 64,128, 0, 0, 0, 0, 0}; /* ">" */
|
|
||||||
static const GLubyte Helvetica10_Character_047[] = { 3, 0, 0,128,128, 64, 64, 64, 64, 32, 32, 0, 0, 0}; /* "/" */
|
|
||||||
static const GLubyte Helvetica10_Character_063[] = { 6, 0, 0, 64, 0, 64, 64, 32, 16,144, 96, 0, 0, 0}; /* "?" */
|
|
||||||
static const GLubyte Helvetica10_Character_092[] = { 3, 0, 0, 32, 32, 64, 64, 64, 64,128,128, 0, 0, 0}; /* "\" */
|
|
||||||
static const GLubyte Helvetica10_Character_034[] = { 4, 0, 0, 0, 0, 0, 0, 0, 0,160,160, 0, 0, 0}; /* """ */
|
|
||||||
|
|
||||||
/* Missing Characters filled in by John Fay by hand ... */
|
|
||||||
static const GLubyte Helvetica10_Character_039[] = { 3, 0, 0, 0, 0, 0, 0, 0,128, 64, 64, 0, 0, 0}; /* "'" */
|
|
||||||
static const GLubyte Helvetica10_Character_124[] = { 3, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0}; /* "|" */
|
|
||||||
|
|
||||||
|
|
||||||
/* The font characters mapping: */
|
|
||||||
static const GLubyte* Helvetica10_Character_Map[] = {Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_032,Helvetica10_Character_033,Helvetica10_Character_034,Helvetica10_Character_035,Helvetica10_Character_036,Helvetica10_Character_037,
|
|
||||||
Helvetica10_Character_038,Helvetica10_Character_039,Helvetica10_Character_040,Helvetica10_Character_041,Helvetica10_Character_042,Helvetica10_Character_043,Helvetica10_Character_044,Helvetica10_Character_045,Helvetica10_Character_046,Helvetica10_Character_047,Helvetica10_Character_048,Helvetica10_Character_049,Helvetica10_Character_050,Helvetica10_Character_051,Helvetica10_Character_052,Helvetica10_Character_053,Helvetica10_Character_054,Helvetica10_Character_055,Helvetica10_Character_056,Helvetica10_Character_057,Helvetica10_Character_058,Helvetica10_Character_059,Helvetica10_Character_060,Helvetica10_Character_061,Helvetica10_Character_062,Helvetica10_Character_063,Helvetica10_Character_064,Helvetica10_Character_065,Helvetica10_Character_066,Helvetica10_Character_067,Helvetica10_Character_068,Helvetica10_Character_069,Helvetica10_Character_070,Helvetica10_Character_071,Helvetica10_Character_072,Helvetica10_Character_073,Helvetica10_Character_074,Helvetica10_Character_075,Helvetica10_Character_076,
|
|
||||||
Helvetica10_Character_077,Helvetica10_Character_078,Helvetica10_Character_079,Helvetica10_Character_080,Helvetica10_Character_081,Helvetica10_Character_082,Helvetica10_Character_083,Helvetica10_Character_084,Helvetica10_Character_085,Helvetica10_Character_086,Helvetica10_Character_087,Helvetica10_Character_088,Helvetica10_Character_089,Helvetica10_Character_090,Helvetica10_Character_091,Helvetica10_Character_092,Helvetica10_Character_093,Helvetica10_Character_094,Helvetica10_Character_095,Helvetica10_Character_096,Helvetica10_Character_097,Helvetica10_Character_098,Helvetica10_Character_099,Helvetica10_Character_100,Helvetica10_Character_101,Helvetica10_Character_102,Helvetica10_Character_103,Helvetica10_Character_104,Helvetica10_Character_105,Helvetica10_Character_106,Helvetica10_Character_107,Helvetica10_Character_108,Helvetica10_Character_109,Helvetica10_Character_110,Helvetica10_Character_111,Helvetica10_Character_112,Helvetica10_Character_113,Helvetica10_Character_114,Helvetica10_Character_115,
|
|
||||||
Helvetica10_Character_116,Helvetica10_Character_117,Helvetica10_Character_118,Helvetica10_Character_119,Helvetica10_Character_120,Helvetica10_Character_121,Helvetica10_Character_122,Helvetica10_Character_123,Helvetica10_Character_124,Helvetica10_Character_125,Helvetica10_Character_126,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,
|
|
||||||
Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,
|
|
||||||
Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,
|
|
||||||
Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,Helvetica10_Character_042,NULL};
|
|
||||||
|
|
||||||
/* The font structure: */
|
|
||||||
const SFG_Font fgFontHelvetica10 = { "-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1", 93, 13, Helvetica10_Character_Map, -1.0f, 2.0f };
|
|
||||||
|
|
||||||
static const GLubyte Helvetica12_Character_032[] = { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* " " */
|
|
||||||
static const GLubyte Helvetica12_Character_097[] = { 7, 0, 0, 0,116,136,136,120, 8,136,112, 0, 0, 0, 0, 0}; /* "a" */
|
|
||||||
static const GLubyte Helvetica12_Character_098[] = { 7, 0, 0, 0,176,200,136,136,136,200,176,128,128, 0, 0, 0}; /* "b" */
|
|
||||||
static const GLubyte Helvetica12_Character_099[] = { 7, 0, 0, 0,112,136,128,128,128,136,112, 0, 0, 0, 0, 0}; /* "c" */
|
|
||||||
static const GLubyte Helvetica12_Character_100[] = { 7, 0, 0, 0,104,152,136,136,136,152,104, 8, 8, 0, 0, 0}; /* "d" */
|
|
||||||
static const GLubyte Helvetica12_Character_101[] = { 7, 0, 0, 0,112,136,128,248,136,136,112, 0, 0, 0, 0, 0}; /* "e" */
|
|
||||||
static const GLubyte Helvetica12_Character_102[] = { 3, 0, 0, 0, 64, 64, 64, 64, 64, 64,224, 64, 48, 0, 0, 0}; /* "f" */
|
|
||||||
static const GLubyte Helvetica12_Character_103[] = { 7,112,136, 8,104,152,136,136,136,152,104, 0, 0, 0, 0, 0}; /* "g" */
|
|
||||||
static const GLubyte Helvetica12_Character_104[] = { 7, 0, 0, 0,136,136,136,136,136,200,176,128,128, 0, 0, 0}; /* "h" */
|
|
||||||
static const GLubyte Helvetica12_Character_105[] = { 3, 0, 0, 0,128,128,128,128,128,128,128, 0,128, 0, 0, 0}; /* "i" */
|
|
||||||
static const GLubyte Helvetica12_Character_106[] = { 3,128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 0, 0, 0}; /* "j" */
|
|
||||||
static const GLubyte Helvetica12_Character_107[] = { 6, 0, 0, 0,136,144,160,192,192,160,144,128,128, 0, 0, 0}; /* "k" */
|
|
||||||
static const GLubyte Helvetica12_Character_108[] = { 3, 0, 0, 0,128,128,128,128,128,128,128,128,128, 0, 0, 0}; /* "l" */
|
|
||||||
static const GLubyte Helvetica12_Character_109[] = { 9, 0, 0, 0, 0, 0, 0,146, 0,146, 0,146, 0,146, 0,146, 0,218, 0,164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "m" */
|
|
||||||
static const GLubyte Helvetica12_Character_110[] = { 7, 0, 0, 0,136,136,136,136,136,200,176, 0, 0, 0, 0, 0}; /* "n" */
|
|
||||||
static const GLubyte Helvetica12_Character_111[] = { 7, 0, 0, 0,112,136,136,136,136,136,112, 0, 0, 0, 0, 0}; /* "o" */
|
|
||||||
static const GLubyte Helvetica12_Character_112[] = { 7,128,128,128,176,200,136,136,136,200,176, 0, 0, 0, 0, 0}; /* "p" */
|
|
||||||
static const GLubyte Helvetica12_Character_113[] = { 7, 8, 8, 8,104,152,136,136,136,152,104, 0, 0, 0, 0, 0}; /* "q" */
|
|
||||||
static const GLubyte Helvetica12_Character_114[] = { 4, 0, 0, 0,128,128,128,128,128,192,160, 0, 0, 0, 0, 0}; /* "r" */
|
|
||||||
static const GLubyte Helvetica12_Character_115[] = { 6, 0, 0, 0, 96,144, 16, 96,128,144, 96, 0, 0, 0, 0, 0}; /* "s" */
|
|
||||||
static const GLubyte Helvetica12_Character_116[] = { 4, 0, 0, 0, 96, 64, 64, 64, 64, 64,224, 64, 64, 0, 0, 0}; /* "t" */
|
|
||||||
static const GLubyte Helvetica12_Character_117[] = { 7, 0, 0, 0,104,152,136,136,136,136,136, 0, 0, 0, 0, 0}; /* "u" */
|
|
||||||
static const GLubyte Helvetica12_Character_118[] = { 7, 0, 0, 0, 32, 32, 80, 80,136,136,136, 0, 0, 0, 0, 0}; /* "v" */
|
|
||||||
static const GLubyte Helvetica12_Character_119[] = { 10, 0, 0, 0, 0, 0, 0, 34, 0, 34, 0, 85, 0, 73, 0, 73, 0,136,128,136,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "w" */
|
|
||||||
static const GLubyte Helvetica12_Character_120[] = { 6, 0, 0, 0,132,132, 72, 48, 48, 72,132, 0, 0, 0, 0, 0}; /* "x" */
|
|
||||||
static const GLubyte Helvetica12_Character_121[] = { 7,128, 64, 32, 32, 80, 80,144,136,136,136, 0, 0, 0, 0, 0}; /* "y" */
|
|
||||||
static const GLubyte Helvetica12_Character_122[] = { 6, 0, 0, 0,240,128, 64, 64, 32, 16,240, 0, 0, 0, 0, 0}; /* "z" */
|
|
||||||
static const GLubyte Helvetica12_Character_065[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,130, 0,130, 0,124, 0, 68, 0, 68, 0, 40, 0, 40, 0, 16, 0, 0, 0, 0, 0, 0, 0}; /* "A" */
|
|
||||||
static const GLubyte Helvetica12_Character_066[] = { 8, 0, 0, 0,248,132,132,132,248,132,132,132,248, 0, 0, 0}; /* "B" */
|
|
||||||
static const GLubyte Helvetica12_Character_067[] = { 9, 0, 0, 0, 0, 0, 0, 60, 0, 66, 0,128, 0,128, 0,128, 0,128, 0,128, 0, 66, 0, 60, 0, 0, 0, 0, 0, 0, 0}; /* "C" */
|
|
||||||
static const GLubyte Helvetica12_Character_068[] = { 9, 0, 0, 0, 0, 0, 0,248, 0,132, 0,130, 0,130, 0,130, 0,130, 0,130, 0,132, 0,248, 0, 0, 0, 0, 0, 0, 0}; /* "D" */
|
|
||||||
static const GLubyte Helvetica12_Character_069[] = { 8, 0, 0, 0,252,128,128,128,252,128,128,128,252, 0, 0, 0}; /* "E" */
|
|
||||||
static const GLubyte Helvetica12_Character_070[] = { 8, 0, 0, 0,128,128,128,128,248,128,128,128,252, 0, 0, 0}; /* "F" */
|
|
||||||
static const GLubyte Helvetica12_Character_071[] = { 9, 0, 0, 0, 0, 0, 0, 58, 0, 70, 0,130, 0,130, 0,142, 0,128, 0,128, 0, 66, 0, 60, 0, 0, 0, 0, 0, 0, 0}; /* "G" */
|
|
||||||
static const GLubyte Helvetica12_Character_072[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,130, 0,130, 0,130, 0,254, 0,130, 0,130, 0,130, 0,130, 0, 0, 0, 0, 0, 0, 0}; /* "H" */
|
|
||||||
static const GLubyte Helvetica12_Character_073[] = { 3, 0, 0, 0,128,128,128,128,128,128,128,128,128, 0, 0, 0}; /* "I" */
|
|
||||||
static const GLubyte Helvetica12_Character_074[] = { 7, 0, 0, 0,112,136,136, 8, 8, 8, 8, 8, 8, 0, 0, 0}; /* "J" */
|
|
||||||
static const GLubyte Helvetica12_Character_075[] = { 8, 0, 0, 0,130,132,136,144,224,160,144,136,132, 0, 0, 0}; /* "K" */
|
|
||||||
static const GLubyte Helvetica12_Character_076[] = { 7, 0, 0, 0,248,128,128,128,128,128,128,128,128, 0, 0, 0}; /* "L" */
|
|
||||||
static const GLubyte Helvetica12_Character_077[] = { 11, 0, 0, 0, 0, 0, 0,136,128,136,128,148,128,148,128,162,128,162,128,193,128,193,128,128,128, 0, 0, 0, 0, 0, 0}; /* "M" */
|
|
||||||
static const GLubyte Helvetica12_Character_078[] = { 9, 0, 0, 0, 0, 0, 0,130, 0,134, 0,138, 0,138, 0,146, 0,162, 0,162, 0,194, 0,130, 0, 0, 0, 0, 0, 0, 0}; /* "N" */
|
|
||||||
static const GLubyte Helvetica12_Character_079[] = { 10, 0, 0, 0, 0, 0, 0, 60, 0, 66, 0,129, 0,129, 0,129, 0,129, 0,129, 0, 66, 0, 60, 0, 0, 0, 0, 0, 0, 0}; /* "O" */
|
|
||||||
static const GLubyte Helvetica12_Character_080[] = { 8, 0, 0, 0,128,128,128,128,248,132,132,132,248, 0, 0, 0}; /* "P" */
|
|
||||||
static const GLubyte Helvetica12_Character_081[] = { 10, 0, 0, 0, 0, 0, 0, 61, 0, 66, 0,133, 0,137, 0,129, 0,129, 0,129, 0, 66, 0, 60, 0, 0, 0, 0, 0, 0, 0}; /* "Q" */
|
|
||||||
static const GLubyte Helvetica12_Character_082[] = { 8, 0, 0, 0,132,132,132,136,248,132,132,132,248, 0, 0, 0}; /* "R" */
|
|
||||||
static const GLubyte Helvetica12_Character_083[] = { 8, 0, 0, 0,120,132,132, 4, 24, 96,128,132,120, 0, 0, 0}; /* "S" */
|
|
||||||
static const GLubyte Helvetica12_Character_084[] = { 7, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16,254, 0, 0, 0}; /* "T" */
|
|
||||||
static const GLubyte Helvetica12_Character_085[] = { 8, 0, 0, 0,120,132,132,132,132,132,132,132,132, 0, 0, 0}; /* "U" */
|
|
||||||
static const GLubyte Helvetica12_Character_086[] = { 9, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 40, 0, 40, 0, 68, 0, 68, 0, 68, 0,130, 0,130, 0, 0, 0, 0, 0, 0, 0}; /* "V" */
|
|
||||||
static const GLubyte Helvetica12_Character_087[] = { 11, 0, 0, 0, 0, 0, 0, 34, 0, 34, 0, 34, 0, 85, 0, 85, 0, 73, 0,136,128,136,128,136,128, 0, 0, 0, 0, 0, 0}; /* "W" */
|
|
||||||
static const GLubyte Helvetica12_Character_088[] = { 9, 0, 0, 0, 0, 0, 0,130, 0, 68, 0, 68, 0, 40, 0, 16, 0, 40, 0, 68, 0, 68, 0,130, 0, 0, 0, 0, 0, 0, 0}; /* "X" */
|
|
||||||
static const GLubyte Helvetica12_Character_089[] = { 9, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 16, 0, 16, 0, 40, 0, 68, 0, 68, 0,130, 0,130, 0, 0, 0, 0, 0, 0, 0}; /* "Y" */
|
|
||||||
static const GLubyte Helvetica12_Character_090[] = { 9, 0, 0, 0, 0, 0, 0,254, 0,128, 0, 64, 0, 32, 0, 16, 0, 8, 0, 4, 0, 2, 0,254, 0, 0, 0, 0, 0, 0, 0}; /* "Z" */
|
|
||||||
static const GLubyte Helvetica12_Character_048[] = { 7, 0, 0, 0,112,136,136,136,136,136,136,136,112, 0, 0, 0}; /* "0" */
|
|
||||||
static const GLubyte Helvetica12_Character_049[] = { 7, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32,224, 32, 0, 0, 0}; /* "1" */
|
|
||||||
static const GLubyte Helvetica12_Character_050[] = { 7, 0, 0, 0,248,128,128, 64, 32, 16, 8,136,112, 0, 0, 0}; /* "2" */
|
|
||||||
static const GLubyte Helvetica12_Character_051[] = { 7, 0, 0, 0,112,136,136, 8, 8, 48, 8,136,112, 0, 0, 0}; /* "3" */
|
|
||||||
static const GLubyte Helvetica12_Character_052[] = { 7, 0, 0, 0, 8, 8,252,136, 72, 40, 40, 24, 8, 0, 0, 0}; /* "4" */
|
|
||||||
static const GLubyte Helvetica12_Character_053[] = { 7, 0, 0, 0,112,136,136, 8, 8,240,128,128,248, 0, 0, 0}; /* "5" */
|
|
||||||
static const GLubyte Helvetica12_Character_054[] = { 7, 0, 0, 0,112,136,136,136,200,176,128,136,112, 0, 0, 0}; /* "6" */
|
|
||||||
static const GLubyte Helvetica12_Character_055[] = { 7, 0, 0, 0, 64, 64, 32, 32, 32, 16, 16, 8,248, 0, 0, 0}; /* "7" */
|
|
||||||
static const GLubyte Helvetica12_Character_056[] = { 7, 0, 0, 0,112,136,136,136,136,112,136,136,112, 0, 0, 0}; /* "8" */
|
|
||||||
static const GLubyte Helvetica12_Character_057[] = { 7, 0, 0, 0,112,136, 8, 8,120,136,136,136,112, 0, 0, 0}; /* "9" */
|
|
||||||
static const GLubyte Helvetica12_Character_096[] = { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,128, 64, 0, 0, 0}; /* "`" */
|
|
||||||
static const GLubyte Helvetica12_Character_126[] = { 8, 0, 0, 0, 0, 0, 0,152,100, 0, 0, 0, 0, 0, 0, 0}; /* "~" */
|
|
||||||
static const GLubyte Helvetica12_Character_033[] = { 3, 0, 0, 0,128, 0,128,128,128,128,128,128,128, 0, 0, 0}; /* "!" */
|
|
||||||
static const GLubyte Helvetica12_Character_064[] = { 12, 0, 0, 0, 0, 62, 0, 64, 0,155, 0,166,128,162, 64,162, 64,146, 64, 77, 64, 96,128, 31, 0, 0, 0, 0, 0, 0, 0}; /* "@" */
|
|
||||||
static const GLubyte Helvetica12_Character_035[] = { 7, 0, 0, 0, 80, 80, 80,252, 40,252, 40, 40, 0, 0, 0, 0}; /* "#" */
|
|
||||||
static const GLubyte Helvetica12_Character_036[] = { 7, 0, 0, 32,112,168,168, 40,112,160,168,112, 32, 0, 0, 0}; /* "$" */
|
|
||||||
static const GLubyte Helvetica12_Character_037[] = { 11, 0, 0, 0, 0, 0, 0, 35, 0, 20,128, 20,128, 19, 0, 8, 0,104, 0,148, 0,148, 0, 98, 0, 0, 0, 0, 0, 0, 0}; /* "%" */
|
|
||||||
static const GLubyte Helvetica12_Character_094[] = { 6, 0, 0, 0, 0, 0, 0, 0, 0,136, 80, 32, 0, 0, 0, 0}; /* "^" */
|
|
||||||
static const GLubyte Helvetica12_Character_038[] = { 9, 0, 0, 0, 0, 0, 0,114, 0,140, 0,132, 0,138, 0, 80, 0, 48, 0, 72, 0, 72, 0, 48, 0, 0, 0, 0, 0, 0, 0}; /* "&" */
|
|
||||||
static const GLubyte Helvetica12_Character_042[] = { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 64,160, 0, 0, 0}; /* "*" */
|
|
||||||
static const GLubyte Helvetica12_Character_040[] = { 4, 32, 64, 64,128,128,128,128,128,128, 64, 64, 32, 0, 0, 0}; /* "(" */
|
|
||||||
static const GLubyte Helvetica12_Character_041[] = { 4,128, 64, 64, 32, 32, 32, 32, 32, 32, 64, 64,128, 0, 0, 0}; /* ")" */
|
|
||||||
static const GLubyte Helvetica12_Character_045[] = { 8, 0, 0, 0, 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 0, 0}; /* "-" */
|
|
||||||
static const GLubyte Helvetica12_Character_095[] = { 7, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "_" */
|
|
||||||
static const GLubyte Helvetica12_Character_061[] = { 7, 0, 0, 0, 0, 0,248, 0,248, 0, 0, 0, 0, 0, 0, 0}; /* "=" */
|
|
||||||
static const GLubyte Helvetica12_Character_043[] = { 7, 0, 0, 0, 0, 32, 32,248, 32, 32, 0, 0, 0, 0, 0, 0}; /* "+" */
|
|
||||||
static const GLubyte Helvetica12_Character_091[] = { 3,192,128,128,128,128,128,128,128,128,128,128,192, 0, 0, 0}; /* "[" */
|
|
||||||
static const GLubyte Helvetica12_Character_123[] = { 4, 48, 64, 64, 64, 64, 64,128, 64, 64, 64, 64, 48, 0, 0, 0}; /* "{" */
|
|
||||||
static const GLubyte Helvetica12_Character_125[] = { 4,192, 32, 32, 32, 32, 32, 16, 32, 32, 32, 32,192, 0, 0, 0}; /* "}" */
|
|
||||||
static const GLubyte Helvetica12_Character_093[] = { 3,192, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,192, 0, 0, 0}; /* "]" */
|
|
||||||
static const GLubyte Helvetica12_Character_059[] = { 3, 0,128, 64, 64, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0}; /* ";" */
|
|
||||||
static const GLubyte Helvetica12_Character_058[] = { 3, 0, 0, 0,128, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0}; /* ":" */
|
|
||||||
static const GLubyte Helvetica12_Character_044[] = { 4, 0,128, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "," */
|
|
||||||
static const GLubyte Helvetica12_Character_046[] = { 3, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "." */
|
|
||||||
static const GLubyte Helvetica12_Character_060[] = { 7, 0, 0, 0, 0, 12, 48,192, 48, 12, 0, 0, 0, 0, 0, 0}; /* "<" */
|
|
||||||
static const GLubyte Helvetica12_Character_062[] = { 7, 0, 0, 0, 0,192, 48, 12, 48,192, 0, 0, 0, 0, 0, 0}; /* ">" */
|
|
||||||
static const GLubyte Helvetica12_Character_047[] = { 4, 0, 0, 0,128,128,128, 64, 64, 64, 32, 32, 32, 0, 0, 0}; /* "/" */
|
|
||||||
static const GLubyte Helvetica12_Character_063[] = { 7, 0, 0, 0, 32, 0, 32, 32, 16, 16,136,136,112, 0, 0, 0}; /* "?" */
|
|
||||||
static const GLubyte Helvetica12_Character_092[] = { 4, 0, 0, 0, 32, 32, 32, 64, 64, 64,128,128,128, 0, 0, 0}; /* "\" */
|
|
||||||
static const GLubyte Helvetica12_Character_034[] = { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,160,160, 0, 0, 0}; /* """ */
|
|
||||||
|
|
||||||
/* Missing Characters filled in by John Fay by hand ... */
|
|
||||||
static const GLubyte Helvetica12_Character_039[] = { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 64, 0, 0}; /* "'" */
|
|
||||||
static const GLubyte Helvetica12_Character_124[] = { 3, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 0}; /* "|" */
|
|
||||||
|
|
||||||
|
|
||||||
/* The font characters mapping: */
|
|
||||||
static const GLubyte* Helvetica12_Character_Map[] = {Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_032,Helvetica12_Character_033,Helvetica12_Character_034,Helvetica12_Character_035,Helvetica12_Character_036,Helvetica12_Character_037,
|
|
||||||
Helvetica12_Character_038,Helvetica12_Character_039,Helvetica12_Character_040,Helvetica12_Character_041,Helvetica12_Character_042,Helvetica12_Character_043,Helvetica12_Character_044,Helvetica12_Character_045,Helvetica12_Character_046,Helvetica12_Character_047,Helvetica12_Character_048,Helvetica12_Character_049,Helvetica12_Character_050,Helvetica12_Character_051,Helvetica12_Character_052,Helvetica12_Character_053,Helvetica12_Character_054,Helvetica12_Character_055,Helvetica12_Character_056,Helvetica12_Character_057,Helvetica12_Character_058,Helvetica12_Character_059,Helvetica12_Character_060,Helvetica12_Character_061,Helvetica12_Character_062,Helvetica12_Character_063,Helvetica12_Character_064,Helvetica12_Character_065,Helvetica12_Character_066,Helvetica12_Character_067,Helvetica12_Character_068,Helvetica12_Character_069,Helvetica12_Character_070,Helvetica12_Character_071,Helvetica12_Character_072,Helvetica12_Character_073,Helvetica12_Character_074,Helvetica12_Character_075,Helvetica12_Character_076,
|
|
||||||
Helvetica12_Character_077,Helvetica12_Character_078,Helvetica12_Character_079,Helvetica12_Character_080,Helvetica12_Character_081,Helvetica12_Character_082,Helvetica12_Character_083,Helvetica12_Character_084,Helvetica12_Character_085,Helvetica12_Character_086,Helvetica12_Character_087,Helvetica12_Character_088,Helvetica12_Character_089,Helvetica12_Character_090,Helvetica12_Character_091,Helvetica12_Character_092,Helvetica12_Character_093,Helvetica12_Character_094,Helvetica12_Character_095,Helvetica12_Character_096,Helvetica12_Character_097,Helvetica12_Character_098,Helvetica12_Character_099,Helvetica12_Character_100,Helvetica12_Character_101,Helvetica12_Character_102,Helvetica12_Character_103,Helvetica12_Character_104,Helvetica12_Character_105,Helvetica12_Character_106,Helvetica12_Character_107,Helvetica12_Character_108,Helvetica12_Character_109,Helvetica12_Character_110,Helvetica12_Character_111,Helvetica12_Character_112,Helvetica12_Character_113,Helvetica12_Character_114,Helvetica12_Character_115,
|
|
||||||
Helvetica12_Character_116,Helvetica12_Character_117,Helvetica12_Character_118,Helvetica12_Character_119,Helvetica12_Character_120,Helvetica12_Character_121,Helvetica12_Character_122,Helvetica12_Character_123,Helvetica12_Character_124,Helvetica12_Character_125,Helvetica12_Character_126,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,
|
|
||||||
Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,
|
|
||||||
Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,
|
|
||||||
Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,Helvetica12_Character_042,NULL};
|
|
||||||
|
|
||||||
/* The font structure: */
|
|
||||||
const SFG_Font fgFontHelvetica12 = { "-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1", 93, 15, Helvetica12_Character_Map, -1.0f, 3.0f };
|
|
||||||
|
|
||||||
static const GLubyte Helvetica18_Character_032[] = { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* " " */
|
|
||||||
static const GLubyte Helvetica18_Character_097[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0,118, 0,238, 0,198, 0,198, 0,230, 0,126, 0, 14, 0,198, 0,238, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "a" */
|
|
||||||
static const GLubyte Helvetica18_Character_098[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0,222, 0,255, 0,227, 0,193,128,193,128,193,128,193,128,227, 0,255, 0,222, 0,192, 0,192, 0,192, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "b" */
|
|
||||||
static const GLubyte Helvetica18_Character_099[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0,127, 0, 99, 0,192, 0,192, 0,192, 0,192, 0, 99, 0,127, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "c" */
|
|
||||||
static const GLubyte Helvetica18_Character_100[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 61,128,127,128, 99,128,193,128,193,128,193,128,193,128, 99,128,127,128, 61,128, 1,128, 1,128, 1,128, 1,128, 0, 0, 0, 0, 0, 0, 0, 0}; /* "d" */
|
|
||||||
static const GLubyte Helvetica18_Character_101[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0,127, 0,227, 0,192, 0,192, 0,255, 0,195, 0,195, 0,126, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "e" */
|
|
||||||
static const GLubyte Helvetica18_Character_102[] = { 6, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,252,252, 48, 48, 60, 28, 0, 0, 0, 0}; /* "f" */
|
|
||||||
static const GLubyte Helvetica18_Character_103[] = { 11, 28, 0,127, 0, 99, 0, 1,128, 61,128,127,128, 99,128,193,128,193,128,193,128,193,128, 97,128,127,128, 61,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "g" */
|
|
||||||
static const GLubyte Helvetica18_Character_104[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,195, 0,195, 0,195, 0,195, 0,195, 0,195, 0,227, 0,223, 0,206, 0,192, 0,192, 0,192, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "h" */
|
|
||||||
static const GLubyte Helvetica18_Character_105[] = { 4, 0, 0, 0, 0,192,192,192,192,192,192,192,192,192,192, 0, 0,192,192, 0, 0, 0, 0}; /* "i" */
|
|
||||||
static const GLubyte Helvetica18_Character_106[] = { 4,224,240, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, 0, 0}; /* "j" */
|
|
||||||
static const GLubyte Helvetica18_Character_107[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0,199, 0,198, 0,206, 0,204, 0,216, 0,248, 0,240, 0,216, 0,204, 0,198, 0,192, 0,192, 0,192, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "k" */
|
|
||||||
static const GLubyte Helvetica18_Character_108[] = { 4, 0, 0, 0, 0,192,192,192,192,192,192,192,192,192,192,192,192,192,192, 0, 0, 0, 0}; /* "l" */
|
|
||||||
static const GLubyte Helvetica18_Character_109[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0,198, 48,198, 48,198, 48,198, 48,198, 48,198, 48,198, 48,231, 48,222,240,204, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "m" */
|
|
||||||
static const GLubyte Helvetica18_Character_110[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,195, 0,195, 0,195, 0,195, 0,195, 0,195, 0,227, 0,223, 0,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "n" */
|
|
||||||
static const GLubyte Helvetica18_Character_111[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0,127, 0, 99, 0,193,128,193,128,193,128,193,128, 99, 0,127, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "o" */
|
|
||||||
static const GLubyte Helvetica18_Character_112[] = { 11,192, 0,192, 0,192, 0,192, 0,222, 0,255, 0,227, 0,193,128,193,128,193,128,193,128,227, 0,255, 0,222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "p" */
|
|
||||||
static const GLubyte Helvetica18_Character_113[] = { 11, 1,128, 1,128, 1,128, 1,128, 61,128,127,128, 99,128,193,128,193,128,193,128,193,128, 99,128,127,128, 61,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "q" */
|
|
||||||
static const GLubyte Helvetica18_Character_114[] = { 6, 0, 0, 0, 0,192,192,192,192,192,192,192,224,216,216, 0, 0, 0, 0, 0, 0, 0, 0}; /* "r" */
|
|
||||||
static const GLubyte Helvetica18_Character_115[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0,120, 0,252, 0,198, 0, 6, 0, 62, 0,252, 0,192, 0,198, 0,126, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "s" */
|
|
||||||
static const GLubyte Helvetica18_Character_116[] = { 6, 0, 0, 0, 0, 24, 56, 48, 48, 48, 48, 48, 48,252,252, 48, 48, 48, 0, 0, 0, 0, 0}; /* "t" */
|
|
||||||
static const GLubyte Helvetica18_Character_117[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0,115, 0,251, 0,199, 0,195, 0,195, 0,195, 0,195, 0,195, 0,195, 0,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "u" */
|
|
||||||
static const GLubyte Helvetica18_Character_118[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 24, 0, 60, 0, 36, 0,102, 0,102, 0,102, 0,195, 0,195, 0,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "v" */
|
|
||||||
static const GLubyte Helvetica18_Character_119[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 25,128, 25,128, 57,192, 41, 64,105, 96,102, 96,102, 96,198, 48,198, 48,198, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "w" */
|
|
||||||
static const GLubyte Helvetica18_Character_120[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0,195, 0,231, 0,102, 0, 60, 0, 24, 0, 24, 0, 60, 0,102, 0,231, 0,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "x" */
|
|
||||||
static const GLubyte Helvetica18_Character_121[] = { 10,112, 0,112, 0, 24, 0, 24, 0, 24, 0, 24, 0, 60, 0, 36, 0,102, 0,102, 0,102, 0,195, 0,195, 0,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "y" */
|
|
||||||
static const GLubyte Helvetica18_Character_122[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0,254, 0,254, 0,192, 0, 96, 0, 48, 0, 24, 0, 12, 0, 6, 0,254, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "z" */
|
|
||||||
static const GLubyte Helvetica18_Character_065[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0,192, 48,192, 48, 96, 96, 96, 96,127,224, 63,192, 48,192, 48,192, 25,128, 25,128, 15, 0, 15, 0, 6, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "A" */
|
|
||||||
static const GLubyte Helvetica18_Character_066[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0,255,128,255,192,192,224,192, 96,192, 96,192,224,255,192,255,128,193,128,192,192,192,192,193,192,255,128,255, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "B" */
|
|
||||||
static const GLubyte Helvetica18_Character_067[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 15,128, 63,224,112,112, 96, 48,224, 0,192, 0,192, 0,192, 0,192, 0,224, 0, 96, 48,112,112, 63,224, 15,128, 0, 0, 0, 0, 0, 0, 0, 0}; /* "C" */
|
|
||||||
static const GLubyte Helvetica18_Character_068[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255,128,193,192,192,192,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192,192,193,192,255,128,255, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "D" */
|
|
||||||
static const GLubyte Helvetica18_Character_069[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0,255,128,255,128,192, 0,192, 0,192, 0,192, 0,255, 0,255, 0,192, 0,192, 0,192, 0,192, 0,255,128,255,128, 0, 0, 0, 0, 0, 0, 0, 0}; /* "E" */
|
|
||||||
static const GLubyte Helvetica18_Character_070[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,255, 0,255, 0,192, 0,192, 0,192, 0,192, 0,255,128,255,128, 0, 0, 0, 0, 0, 0, 0, 0}; /* "F" */
|
|
||||||
static const GLubyte Helvetica18_Character_071[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 15,176, 63,240,112,112, 96, 48,224, 48,193,240,193,240,192, 0,192, 0,224, 48, 96, 48,112,112, 63,224, 15,128, 0, 0, 0, 0, 0, 0, 0, 0}; /* "G" */
|
|
||||||
static const GLubyte Helvetica18_Character_072[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,255,224,255,224,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96, 0, 0, 0, 0, 0, 0, 0, 0}; /* "H" */
|
|
||||||
static const GLubyte Helvetica18_Character_073[] = { 6, 0, 0, 0, 0,192,192,192,192,192,192,192,192,192,192,192,192,192,192, 0, 0, 0, 0}; /* "I" */
|
|
||||||
static const GLubyte Helvetica18_Character_074[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0,126, 0,231, 0,195, 0,195, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "J" */
|
|
||||||
static const GLubyte Helvetica18_Character_075[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0,192,112,192,224,193,192,195,128,199, 0,206, 0,252, 0,248, 0,220, 0,206, 0,199, 0,195,128,193,192,192,224, 0, 0, 0, 0, 0, 0, 0, 0}; /* "K" */
|
|
||||||
static const GLubyte Helvetica18_Character_076[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "L" */
|
|
||||||
static const GLubyte Helvetica18_Character_077[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0,195, 12,195, 12,199,140,196,140,204,204,204,204,216,108,216,108,240, 60,240, 60,224, 28,224, 28,192, 12,192, 12, 0, 0, 0, 0, 0, 0, 0, 0}; /* "M" */
|
|
||||||
static const GLubyte Helvetica18_Character_078[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0,192, 96,192,224,193,224,193,224,195, 96,198, 96,198, 96,204, 96,204, 96,216, 96,240, 96,240, 96,224, 96,192, 96, 0, 0, 0, 0, 0, 0, 0, 0}; /* "N" */
|
|
||||||
static const GLubyte Helvetica18_Character_079[] = { 15, 0, 0, 0, 0, 0, 0, 0, 0, 15,128, 63,224,112,112, 96, 48,224, 56,192, 24,192, 24,192, 24,192, 24,224, 56, 96, 48,112,112, 63,224, 15,128, 0, 0, 0, 0, 0, 0, 0, 0}; /* "O" */
|
|
||||||
static const GLubyte Helvetica18_Character_080[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,255, 0,255,128,193,192,192,192,192,192,193,192,255,128,255, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "P" */
|
|
||||||
static const GLubyte Helvetica18_Character_081[] = { 15, 0, 0, 0, 0, 0, 0, 0, 48, 15,176, 63,224,112,240, 97,176,225,184,192, 24,192, 24,192, 24,192, 24,224, 56, 96, 48,112,112, 63,224, 15,128, 0, 0, 0, 0, 0, 0, 0, 0}; /* "Q" */
|
|
||||||
static const GLubyte Helvetica18_Character_082[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0,192,192,192,192,192,192,192,192,193,128,193,128,255, 0,255,128,193,192,192,192,192,192,193,192,255,128,255, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "R" */
|
|
||||||
static const GLubyte Helvetica18_Character_083[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0,127,192,224,224,192, 96, 0, 96, 0,224, 3,192, 31, 0,124, 0,224, 0,192, 96,224,224,127,192, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "S" */
|
|
||||||
static const GLubyte Helvetica18_Character_084[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0,255,192,255,192, 0, 0, 0, 0, 0, 0, 0, 0}; /* "T" */
|
|
||||||
static const GLubyte Helvetica18_Character_085[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0,127,192, 96,192,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96, 0, 0, 0, 0, 0, 0, 0, 0}; /* "U" */
|
|
||||||
static const GLubyte Helvetica18_Character_086[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 15, 0, 15, 0, 25,128, 25,128, 25,128, 48,192, 48,192, 48,192, 96, 96, 96, 96, 96, 96,192, 48,192, 48, 0, 0, 0, 0, 0, 0, 0, 0}; /* "V" */
|
|
||||||
static const GLubyte Helvetica18_Character_087[] = { 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 0, 24, 24, 0, 28, 56, 0, 52, 44, 0, 54,108, 0, 54,108, 0,102,102, 0,102,102, 0, 98, 70, 0, 99,198, 0,195,195, 0,193,131, 0,193,131, 0,193,131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "W" */
|
|
||||||
static const GLubyte Helvetica18_Character_088[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0,192, 96,224,224, 96,192,113,192, 49,128, 27, 0, 14, 0, 14, 0, 27, 0, 49,128,113,192, 96,192,224,224,192, 96, 0, 0, 0, 0, 0, 0, 0, 0}; /* "X" */
|
|
||||||
static const GLubyte Helvetica18_Character_089[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 15, 0, 25,128, 48,192, 48,192, 96, 96, 96, 96,192, 48,192, 48, 0, 0, 0, 0, 0, 0, 0, 0}; /* "Y" */
|
|
||||||
static const GLubyte Helvetica18_Character_090[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0,255,192,255,192,192, 0, 96, 0, 48, 0, 24, 0, 28, 0, 12, 0, 6, 0, 3, 0, 1,128, 0,192,255,192,255,192, 0, 0, 0, 0, 0, 0, 0, 0}; /* "Z" */
|
|
||||||
static const GLubyte Helvetica18_Character_048[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0,126, 0,102, 0,195, 0,195, 0,195, 0,195, 0,195, 0,195, 0,195, 0,102, 0,126, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "0" */
|
|
||||||
static const GLubyte Helvetica18_Character_049[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0,248, 0,248, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "1" */
|
|
||||||
static const GLubyte Helvetica18_Character_050[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255, 0,192, 0,224, 0,112, 0, 56, 0, 28, 0, 14, 0, 7, 0, 3, 0,195, 0,254, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "2" */
|
|
||||||
static const GLubyte Helvetica18_Character_051[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0,126, 0,199, 0,195, 0, 3, 0, 7, 0, 30, 0, 28, 0, 6, 0,195, 0,195, 0,126, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "3" */
|
|
||||||
static const GLubyte Helvetica18_Character_052[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0,255,128,255,128,195, 0, 99, 0, 51, 0, 51, 0, 27, 0, 15, 0, 7, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "4" */
|
|
||||||
static const GLubyte Helvetica18_Character_053[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0,124, 0,254, 0,199, 0,195, 0, 3, 0, 3, 0,199, 0,254, 0,252, 0,192, 0,192, 0,254, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "5" */
|
|
||||||
static const GLubyte Helvetica18_Character_054[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0,126, 0,227, 0,195, 0,195, 0,195, 0,254, 0,220, 0,192, 0,192, 0, 99, 0,127, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "6" */
|
|
||||||
static const GLubyte Helvetica18_Character_055[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 96, 0, 48, 0, 48, 0, 48, 0, 24, 0, 24, 0, 12, 0, 12, 0, 6, 0, 3, 0,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "7" */
|
|
||||||
static const GLubyte Helvetica18_Character_056[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0,126, 0,231, 0,195, 0,195, 0,102, 0,126, 0,102, 0,195, 0,195, 0,231, 0,126, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "8" */
|
|
||||||
static const GLubyte Helvetica18_Character_057[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0,124, 0,254, 0,198, 0, 3, 0, 3, 0, 59, 0,127, 0,195, 0,195, 0,195, 0,199, 0,126, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "9" */
|
|
||||||
static const GLubyte Helvetica18_Character_096[] = { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,192,128,128, 64, 0, 0, 0, 0}; /* "`" */
|
|
||||||
static const GLubyte Helvetica18_Character_126[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,204, 0,126, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "~" */
|
|
||||||
static const GLubyte Helvetica18_Character_033[] = { 6, 0, 0, 0, 0,192,192, 0, 0,128,128,192,192,192,192,192,192,192,192, 0, 0, 0, 0}; /* "!" */
|
|
||||||
static const GLubyte Helvetica18_Character_064[] = { 18, 0, 0, 0, 7,224, 0, 31,240, 0, 56, 0, 0,112, 0, 0,103,112, 0,207,248, 0,204,204, 0,204,102, 0,204,102, 0,204, 99, 0,198, 51, 0,103,115, 0, 99,179, 0, 48, 6, 0, 28, 14, 0, 15,252, 0, 3,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "@" */
|
|
||||||
static const GLubyte Helvetica18_Character_035[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 36, 0, 36, 0,255,128,255,128, 18, 0, 18, 0, 18, 0,127,192,127,192, 9, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "#" */
|
|
||||||
static const GLubyte Helvetica18_Character_036[] = { 10, 0, 0, 0, 0, 8, 0, 8, 0, 62, 0,127, 0,235,128,201,128, 9,128, 15, 0, 62, 0,120, 0,232, 0,200, 0,203, 0,127, 0, 62, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "$" */
|
|
||||||
static const GLubyte Helvetica18_Character_037[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 24,120, 24,252, 12,204, 12,204, 6,252, 6,120, 3, 0,123, 0,253,128,205,128,204,192,252,192,120, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "%" */
|
|
||||||
static const GLubyte Helvetica18_Character_094[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130, 0,198, 0,108, 0, 56, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "^" */
|
|
||||||
static const GLubyte Helvetica18_Character_038[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 60,112,126,224,231,192,195,128,195,192,198,192,238,192,124, 0, 60, 0,102, 0,102, 0,126, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "&" */
|
|
||||||
static const GLubyte Helvetica18_Character_042[] = { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,112,112,248, 32, 32, 0, 0, 0, 0}; /* "*" */
|
|
||||||
static const GLubyte Helvetica18_Character_040[] = { 6, 16, 48, 96, 96,192,192,192,192,192,192,192,192,192,192, 96, 96, 48, 16, 0, 0, 0, 0}; /* "(" */
|
|
||||||
static const GLubyte Helvetica18_Character_041[] = { 6,128,192, 96, 96, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 96, 96,192,128, 0, 0, 0, 0}; /* ")" */
|
|
||||||
static const GLubyte Helvetica18_Character_045[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "-" */
|
|
||||||
static const GLubyte Helvetica18_Character_095[] = { 10,255,248,255,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "_" */
|
|
||||||
static const GLubyte Helvetica18_Character_061[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 0,254, 0, 0, 0, 0, 0,254, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "=" */
|
|
||||||
static const GLubyte Helvetica18_Character_043[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 24, 0, 24, 0, 24, 0,255, 0,255, 0, 24, 0, 24, 0, 24, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "+" */
|
|
||||||
static const GLubyte Helvetica18_Character_091[] = { 5,240,240,192,192,192,192,192,192,192,192,192,192,192,192,192,192,240,240, 0, 0, 0, 0}; /* "[" */
|
|
||||||
static const GLubyte Helvetica18_Character_123[] = { 7, 12, 24, 48, 48, 48, 48, 48, 48, 96,192, 96, 48, 48, 48, 48, 48, 24, 12, 0, 0, 0, 0}; /* "{" */
|
|
||||||
static const GLubyte Helvetica18_Character_125[] = { 7,192, 96, 48, 48, 48, 48, 48, 48, 24, 12, 24, 48, 48, 48, 48, 48, 96,192, 0, 0, 0, 0}; /* "}" */
|
|
||||||
static const GLubyte Helvetica18_Character_093[] = { 5,240,240, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,240,240, 0, 0, 0, 0}; /* "]" */
|
|
||||||
static const GLubyte Helvetica18_Character_059[] = { 5, 0,128, 64, 64,192,192, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0}; /* ";" */
|
|
||||||
static const GLubyte Helvetica18_Character_058[] = { 5, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0}; /* ":" */
|
|
||||||
static const GLubyte Helvetica18_Character_044[] = { 5, 0,128, 64, 64,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "," */
|
|
||||||
static const GLubyte Helvetica18_Character_046[] = { 5, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "." */
|
|
||||||
static const GLubyte Helvetica18_Character_060[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 15, 0, 60, 0,112, 0,192, 0,112, 0, 60, 0, 15, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "<" */
|
|
||||||
static const GLubyte Helvetica18_Character_062[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0,192, 0,240, 0, 60, 0, 14, 0, 3, 0, 14, 0, 60, 0,240, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* ">" */
|
|
||||||
static const GLubyte Helvetica18_Character_047[] = { 5, 0, 0, 0, 0,192,192, 64, 64, 96, 96, 32, 32, 48, 48, 16, 16, 24, 24, 0, 0, 0, 0}; /* "/" */
|
|
||||||
static const GLubyte Helvetica18_Character_063[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 48, 0, 0, 0, 0, 0, 48, 0, 48, 0, 48, 0, 56, 0, 28, 0, 14, 0,198, 0,198, 0,254, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "?" */
|
|
||||||
static const GLubyte Helvetica18_Character_092[] = { 5, 0, 0, 0, 0, 24, 24, 16, 16, 48, 48, 32, 32, 96, 96, 64, 64,192,192, 0, 0, 0, 0}; /* "\" */
|
|
||||||
static const GLubyte Helvetica18_Character_034[] = { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,144,216,216,216, 0, 0, 0, 0}; /* """ */
|
|
||||||
|
|
||||||
/* Missing Characters filled in by John Fay by hand ... */
|
|
||||||
static const GLubyte Helvetica18_Character_039[] = { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 64,192,192, 0, 0, 0, 0}; /* "'" */
|
|
||||||
static const GLubyte Helvetica18_Character_124[] = { 4, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96}; /* "|" */
|
|
||||||
|
|
||||||
|
|
||||||
/* The font characters mapping: */
|
|
||||||
static const GLubyte* Helvetica18_Character_Map[] = {Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_032,Helvetica18_Character_033,Helvetica18_Character_034,Helvetica18_Character_035,Helvetica18_Character_036,Helvetica18_Character_037,
|
|
||||||
Helvetica18_Character_038,Helvetica18_Character_039,Helvetica18_Character_040,Helvetica18_Character_041,Helvetica18_Character_042,Helvetica18_Character_043,Helvetica18_Character_044,Helvetica18_Character_045,Helvetica18_Character_046,Helvetica18_Character_047,Helvetica18_Character_048,Helvetica18_Character_049,Helvetica18_Character_050,Helvetica18_Character_051,Helvetica18_Character_052,Helvetica18_Character_053,Helvetica18_Character_054,Helvetica18_Character_055,Helvetica18_Character_056,Helvetica18_Character_057,Helvetica18_Character_058,Helvetica18_Character_059,Helvetica18_Character_060,Helvetica18_Character_061,Helvetica18_Character_062,Helvetica18_Character_063,Helvetica18_Character_064,Helvetica18_Character_065,Helvetica18_Character_066,Helvetica18_Character_067,Helvetica18_Character_068,Helvetica18_Character_069,Helvetica18_Character_070,Helvetica18_Character_071,Helvetica18_Character_072,Helvetica18_Character_073,Helvetica18_Character_074,Helvetica18_Character_075,Helvetica18_Character_076,
|
|
||||||
Helvetica18_Character_077,Helvetica18_Character_078,Helvetica18_Character_079,Helvetica18_Character_080,Helvetica18_Character_081,Helvetica18_Character_082,Helvetica18_Character_083,Helvetica18_Character_084,Helvetica18_Character_085,Helvetica18_Character_086,Helvetica18_Character_087,Helvetica18_Character_088,Helvetica18_Character_089,Helvetica18_Character_090,Helvetica18_Character_091,Helvetica18_Character_092,Helvetica18_Character_093,Helvetica18_Character_094,Helvetica18_Character_095,Helvetica18_Character_096,Helvetica18_Character_097,Helvetica18_Character_098,Helvetica18_Character_099,Helvetica18_Character_100,Helvetica18_Character_101,Helvetica18_Character_102,Helvetica18_Character_103,Helvetica18_Character_104,Helvetica18_Character_105,Helvetica18_Character_106,Helvetica18_Character_107,Helvetica18_Character_108,Helvetica18_Character_109,Helvetica18_Character_110,Helvetica18_Character_111,Helvetica18_Character_112,Helvetica18_Character_113,Helvetica18_Character_114,Helvetica18_Character_115,
|
|
||||||
Helvetica18_Character_116,Helvetica18_Character_117,Helvetica18_Character_118,Helvetica18_Character_119,Helvetica18_Character_120,Helvetica18_Character_121,Helvetica18_Character_122,Helvetica18_Character_123,Helvetica18_Character_124,Helvetica18_Character_125,Helvetica18_Character_126,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,
|
|
||||||
Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,
|
|
||||||
Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,
|
|
||||||
Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,Helvetica18_Character_042,NULL};
|
|
||||||
|
|
||||||
/* The font structure: */
|
|
||||||
const SFG_Font fgFontHelvetica18 = { "-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1", 93, 22, Helvetica18_Character_Map, -1.0f, 4.0f };
|
|
||||||
|
|
||||||
static const GLubyte TimesRoman10_Character_032[] = { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* " " */
|
|
||||||
static const GLubyte TimesRoman10_Character_097[] = { 4, 0, 0, 0,224,160, 96, 32,192, 0, 0, 0, 0, 0}; /* "a" */
|
|
||||||
static const GLubyte TimesRoman10_Character_098[] = { 5, 0, 0, 0,224,144,144,144,224,128,128, 0, 0, 0}; /* "b" */
|
|
||||||
static const GLubyte TimesRoman10_Character_099[] = { 4, 0, 0, 0, 96,128,128,128, 96, 0, 0, 0, 0, 0}; /* "c" */
|
|
||||||
static const GLubyte TimesRoman10_Character_100[] = { 5, 0, 0, 0,104,144,144,144,112, 16, 48, 0, 0, 0}; /* "d" */
|
|
||||||
static const GLubyte TimesRoman10_Character_101[] = { 4, 0, 0, 0, 96,128,192,160, 96, 0, 0, 0, 0, 0}; /* "e" */
|
|
||||||
static const GLubyte TimesRoman10_Character_102[] = { 4, 0, 0, 0,224, 64, 64, 64,224, 64, 48, 0, 0, 0}; /* "f" */
|
|
||||||
static const GLubyte TimesRoman10_Character_103[] = { 5, 0,224,144, 96, 64,160,160,112, 0, 0, 0, 0, 0}; /* "g" */
|
|
||||||
static const GLubyte TimesRoman10_Character_104[] = { 5, 0, 0, 0,216,144,144,144,224,128,128, 0, 0, 0}; /* "h" */
|
|
||||||
static const GLubyte TimesRoman10_Character_105[] = { 3, 0, 0, 0, 64, 64, 64, 64,192, 0, 64, 0, 0, 0}; /* "i" */
|
|
||||||
static const GLubyte TimesRoman10_Character_106[] = { 3, 0,128, 64, 64, 64, 64, 64,192, 0, 64, 0, 0, 0}; /* "j" */
|
|
||||||
static const GLubyte TimesRoman10_Character_107[] = { 5, 0, 0, 0,152,144,224,160,144,128,128, 0, 0, 0}; /* "k" */
|
|
||||||
static const GLubyte TimesRoman10_Character_108[] = { 4, 0, 0, 0,224, 64, 64, 64, 64, 64,192, 0, 0, 0}; /* "l" */
|
|
||||||
static const GLubyte TimesRoman10_Character_109[] = { 8, 0, 0, 0,219,146,146,146,236, 0, 0, 0, 0, 0}; /* "m" */
|
|
||||||
static const GLubyte TimesRoman10_Character_110[] = { 5, 0, 0, 0,216,144,144,144,224, 0, 0, 0, 0, 0}; /* "n" */
|
|
||||||
static const GLubyte TimesRoman10_Character_111[] = { 5, 0, 0, 0, 96,144,144,144, 96, 0, 0, 0, 0, 0}; /* "o" */
|
|
||||||
static const GLubyte TimesRoman10_Character_112[] = { 5, 0,192,128,224,144,144,144,224, 0, 0, 0, 0, 0}; /* "p" */
|
|
||||||
static const GLubyte TimesRoman10_Character_113[] = { 5, 0, 56, 16,112,144,144,144,112, 0, 0, 0, 0, 0}; /* "q" */
|
|
||||||
static const GLubyte TimesRoman10_Character_114[] = { 4, 0, 0, 0,224, 64, 64, 96,160, 0, 0, 0, 0, 0}; /* "r" */
|
|
||||||
static const GLubyte TimesRoman10_Character_115[] = { 4, 0, 0, 0,224, 32, 96,128,224, 0, 0, 0, 0, 0}; /* "s" */
|
|
||||||
static const GLubyte TimesRoman10_Character_116[] = { 4, 0, 0, 0, 48, 64, 64, 64,224, 64, 0, 0, 0, 0}; /* "t" */
|
|
||||||
static const GLubyte TimesRoman10_Character_117[] = { 5, 0, 0, 0,104,144,144,144,144, 0, 0, 0, 0, 0}; /* "u" */
|
|
||||||
static const GLubyte TimesRoman10_Character_118[] = { 5, 0, 0, 0, 32, 96, 80,144,216, 0, 0, 0, 0, 0}; /* "v" */
|
|
||||||
static const GLubyte TimesRoman10_Character_119[] = { 8, 0, 0, 0, 40,108, 84,146,219, 0, 0, 0, 0, 0}; /* "w" */
|
|
||||||
static const GLubyte TimesRoman10_Character_120[] = { 6, 0, 0, 0,216, 80, 32, 80,216, 0, 0, 0, 0, 0}; /* "x" */
|
|
||||||
static const GLubyte TimesRoman10_Character_121[] = { 5, 0, 64, 64, 32, 48, 80, 72,220, 0, 0, 0, 0, 0}; /* "y" */
|
|
||||||
static const GLubyte TimesRoman10_Character_122[] = { 5, 0, 0, 0,240,144, 64, 32,240, 0, 0, 0, 0, 0}; /* "z" */
|
|
||||||
static const GLubyte TimesRoman10_Character_065[] = { 8, 0, 0, 0,238, 68,124, 40, 40, 56, 16, 0, 0, 0}; /* "A" */
|
|
||||||
static const GLubyte TimesRoman10_Character_066[] = { 6, 0, 0, 0,240, 72, 72,112, 72, 72,240, 0, 0, 0}; /* "B" */
|
|
||||||
static const GLubyte TimesRoman10_Character_067[] = { 7, 0, 0, 0,120,196,128,128,128,196,124, 0, 0, 0}; /* "C" */
|
|
||||||
static const GLubyte TimesRoman10_Character_068[] = { 7, 0, 0, 0,248, 76, 68, 68, 68, 76,248, 0, 0, 0}; /* "D" */
|
|
||||||
static const GLubyte TimesRoman10_Character_069[] = { 6, 0, 0, 0,248, 72, 64,112, 64, 72,248, 0, 0, 0}; /* "E" */
|
|
||||||
static const GLubyte TimesRoman10_Character_070[] = { 6, 0, 0, 0,224, 64, 64,112, 64, 72,248, 0, 0, 0}; /* "F" */
|
|
||||||
static const GLubyte TimesRoman10_Character_071[] = { 7, 0, 0, 0,120,196,132,156,128,196,124, 0, 0, 0}; /* "G" */
|
|
||||||
static const GLubyte TimesRoman10_Character_072[] = { 8, 0, 0, 0,238, 68, 68,124, 68, 68,238, 0, 0, 0}; /* "H" */
|
|
||||||
static const GLubyte TimesRoman10_Character_073[] = { 4, 0, 0, 0,224, 64, 64, 64, 64, 64,224, 0, 0, 0}; /* "I" */
|
|
||||||
static const GLubyte TimesRoman10_Character_074[] = { 4, 0, 0, 0,192,160, 32, 32, 32, 32,112, 0, 0, 0}; /* "J" */
|
|
||||||
static const GLubyte TimesRoman10_Character_075[] = { 7, 0, 0, 0,236, 72, 80, 96, 80, 72,236, 0, 0, 0}; /* "K" */
|
|
||||||
static const GLubyte TimesRoman10_Character_076[] = { 6, 0, 0, 0,248, 72, 64, 64, 64, 64,224, 0, 0, 0}; /* "L" */
|
|
||||||
static const GLubyte TimesRoman10_Character_077[] = { 10, 0, 0, 0, 0, 0, 0,235,128, 73, 0, 85, 0, 85, 0, 99, 0, 99, 0,227,128, 0, 0, 0, 0, 0, 0}; /* "M" */
|
|
||||||
static const GLubyte TimesRoman10_Character_078[] = { 8, 0, 0, 0,228, 76, 76, 84, 84,100,238, 0, 0, 0}; /* "N" */
|
|
||||||
static const GLubyte TimesRoman10_Character_079[] = { 7, 0, 0, 0,120,204,132,132,132,204,120, 0, 0, 0}; /* "O" */
|
|
||||||
static const GLubyte TimesRoman10_Character_080[] = { 6, 0, 0, 0,224, 64, 64,112, 72, 72,240, 0, 0, 0}; /* "P" */
|
|
||||||
static const GLubyte TimesRoman10_Character_081[] = { 7, 0, 12, 24,112,204,132,132,132,204,120, 0, 0, 0}; /* "Q" */
|
|
||||||
static const GLubyte TimesRoman10_Character_082[] = { 7, 0, 0, 0,236, 72, 80,112, 72, 72,240, 0, 0, 0}; /* "R" */
|
|
||||||
static const GLubyte TimesRoman10_Character_083[] = { 5, 0, 0, 0,224,144, 16, 96,192,144,112, 0, 0, 0}; /* "S" */
|
|
||||||
static const GLubyte TimesRoman10_Character_084[] = { 6, 0, 0, 0,112, 32, 32, 32, 32,168,248, 0, 0, 0}; /* "T" */
|
|
||||||
static const GLubyte TimesRoman10_Character_085[] = { 8, 0, 0, 0, 56,108, 68, 68, 68, 68,238, 0, 0, 0}; /* "U" */
|
|
||||||
static const GLubyte TimesRoman10_Character_086[] = { 8, 0, 0, 0, 16, 16, 40, 40,108, 68,238, 0, 0, 0}; /* "V" */
|
|
||||||
static const GLubyte TimesRoman10_Character_087[] = { 10, 0, 0, 0, 0, 0, 0, 34, 0, 34, 0, 85, 0, 85, 0,201,128,136,128,221,192, 0, 0, 0, 0, 0, 0}; /* "W" */
|
|
||||||
static const GLubyte TimesRoman10_Character_088[] = { 8, 0, 0, 0,238, 68, 40, 16, 40, 68,238, 0, 0, 0}; /* "X" */
|
|
||||||
static const GLubyte TimesRoman10_Character_089[] = { 8, 0, 0, 0, 56, 16, 16, 40, 40, 68,238, 0, 0, 0}; /* "Y" */
|
|
||||||
static const GLubyte TimesRoman10_Character_090[] = { 6, 0, 0, 0,248,136, 64, 32, 16,136,248, 0, 0, 0}; /* "Z" */
|
|
||||||
static const GLubyte TimesRoman10_Character_048[] = { 5, 0, 0, 0, 96,144,144,144,144,144, 96, 0, 0, 0}; /* "0" */
|
|
||||||
static const GLubyte TimesRoman10_Character_049[] = { 5, 0, 0, 0,224, 64, 64, 64, 64,192, 64, 0, 0, 0}; /* "1" */
|
|
||||||
static const GLubyte TimesRoman10_Character_050[] = { 5, 0, 0, 0,240, 64, 32, 32, 16,144, 96, 0, 0, 0}; /* "2" */
|
|
||||||
static const GLubyte TimesRoman10_Character_051[] = { 5, 0, 0, 0,224, 16, 16, 96, 16,144, 96, 0, 0, 0}; /* "3" */
|
|
||||||
static const GLubyte TimesRoman10_Character_052[] = { 5, 0, 0, 0, 16, 16,248,144, 80, 48, 16, 0, 0, 0}; /* "4" */
|
|
||||||
static const GLubyte TimesRoman10_Character_053[] = { 5, 0, 0, 0,224,144, 16, 16,224, 64,112, 0, 0, 0}; /* "5" */
|
|
||||||
static const GLubyte TimesRoman10_Character_054[] = { 5, 0, 0, 0, 96,144,144,144,224, 64, 48, 0, 0, 0}; /* "6" */
|
|
||||||
static const GLubyte TimesRoman10_Character_055[] = { 5, 0, 0, 0, 64, 64, 64, 32, 32,144,240, 0, 0, 0}; /* "7" */
|
|
||||||
static const GLubyte TimesRoman10_Character_056[] = { 5, 0, 0, 0, 96,144,144, 96,144,144, 96, 0, 0, 0}; /* "8" */
|
|
||||||
static const GLubyte TimesRoman10_Character_057[] = { 5, 0, 0, 0,192, 32,112,144,144,144, 96, 0, 0, 0}; /* "9" */
|
|
||||||
static const GLubyte TimesRoman10_Character_096[] = { 3, 0, 0, 0, 0, 0, 0, 0, 0,192,128, 0, 0, 0}; /* "`" */
|
|
||||||
static const GLubyte TimesRoman10_Character_126[] = { 7, 0, 0, 0, 0, 0,152,100, 0, 0, 0, 0, 0, 0}; /* "~" */
|
|
||||||
static const GLubyte TimesRoman10_Character_033[] = { 3, 0, 0, 0,128, 0,128,128,128,128,128, 0, 0, 0}; /* "!" */
|
|
||||||
static const GLubyte TimesRoman10_Character_064[] = { 9, 0, 0, 62, 0, 64, 0,146, 0,173, 0,165, 0,165, 0,157, 0, 66, 0, 60, 0, 0, 0, 0, 0, 0, 0}; /* "@" */
|
|
||||||
static const GLubyte TimesRoman10_Character_035[] = { 5, 0, 0, 0, 80, 80,248, 80,248, 80, 80, 0, 0, 0}; /* "#" */
|
|
||||||
static const GLubyte TimesRoman10_Character_036[] = { 5, 0, 0, 32,224,144, 16, 96,128,144,112, 32, 0, 0}; /* "$" */
|
|
||||||
static const GLubyte TimesRoman10_Character_037[] = { 8, 0, 0, 0, 68, 42, 42, 86,168,164,126, 0, 0, 0}; /* "%" */
|
|
||||||
static const GLubyte TimesRoman10_Character_094[] = { 5, 0, 0, 0, 0, 0, 0, 0,160,160, 64, 0, 0, 0}; /* "^" */
|
|
||||||
static const GLubyte TimesRoman10_Character_038[] = { 8, 0, 0, 0,118,141,152,116,110, 80, 48, 0, 0, 0}; /* "&" */
|
|
||||||
static const GLubyte TimesRoman10_Character_042[] = { 5, 0, 0, 0, 0, 0, 0, 0,160, 64,160, 0, 0, 0}; /* "*" */
|
|
||||||
static const GLubyte TimesRoman10_Character_040[] = { 4, 0, 32, 64, 64,128,128,128, 64, 64, 32, 0, 0, 0}; /* "(" */
|
|
||||||
static const GLubyte TimesRoman10_Character_041[] = { 4, 0,128, 64, 64, 32, 32, 32, 64, 64,128, 0, 0, 0}; /* ")" */
|
|
||||||
static const GLubyte TimesRoman10_Character_045[] = { 7, 0, 0, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0}; /* "-" */
|
|
||||||
static const GLubyte TimesRoman10_Character_095[] = { 5,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "_" */
|
|
||||||
static const GLubyte TimesRoman10_Character_061[] = { 6, 0, 0, 0, 0,248, 0,248, 0, 0, 0, 0, 0, 0}; /* "=" */
|
|
||||||
static const GLubyte TimesRoman10_Character_043[] = { 6, 0, 0, 0, 32, 32,248, 32, 32, 0, 0, 0, 0, 0}; /* "+" */
|
|
||||||
static const GLubyte TimesRoman10_Character_091[] = { 3, 0,192,128,128,128,128,128,128,128,192, 0, 0, 0}; /* "[" */
|
|
||||||
static const GLubyte TimesRoman10_Character_123[] = { 4, 0, 32, 64, 64, 64,128, 64, 64, 64, 32, 0, 0, 0}; /* "{" */
|
|
||||||
static const GLubyte TimesRoman10_Character_125[] = { 4, 0,128, 64, 64, 64, 32, 64, 64, 64,128, 0, 0, 0}; /* "}" */
|
|
||||||
static const GLubyte TimesRoman10_Character_093[] = { 3, 0,192, 64, 64, 64, 64, 64, 64, 64,192, 0, 0, 0}; /* "]" */
|
|
||||||
static const GLubyte TimesRoman10_Character_059[] = { 3, 0,128,128,128, 0, 0, 0,128, 0, 0, 0, 0, 0}; /* ";" */
|
|
||||||
static const GLubyte TimesRoman10_Character_058[] = { 3, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0, 0, 0}; /* ":" */
|
|
||||||
static const GLubyte TimesRoman10_Character_044[] = { 3, 0,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "," */
|
|
||||||
static const GLubyte TimesRoman10_Character_046[] = { 3, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "." */
|
|
||||||
static const GLubyte TimesRoman10_Character_060[] = { 5, 0, 0, 0, 32, 64,128, 64, 32, 0, 0, 0, 0, 0}; /* "<" */
|
|
||||||
static const GLubyte TimesRoman10_Character_062[] = { 5, 0, 0, 0,128, 64, 32, 64,128, 0, 0, 0, 0, 0}; /* ">" */
|
|
||||||
static const GLubyte TimesRoman10_Character_047[] = { 3, 0, 0, 0,128,128, 64, 64, 64, 32, 32, 0, 0, 0}; /* "/" */
|
|
||||||
static const GLubyte TimesRoman10_Character_063[] = { 4, 0, 0, 0, 64, 0, 64, 64, 32,160,224, 0, 0, 0}; /* "?" */
|
|
||||||
static const GLubyte TimesRoman10_Character_092[] = { 3, 0, 0, 0, 32, 32, 64, 64, 64,128,128, 0, 0, 0}; /* "\" */
|
|
||||||
static const GLubyte TimesRoman10_Character_034[] = { 4, 0, 0, 0, 0, 0, 0, 0, 0,160,160, 0, 0, 0}; /* """ */
|
|
||||||
|
|
||||||
/* Missing Characters filled in by John Fay by hand ... */
|
|
||||||
static const GLubyte TimesRoman10_Character_039[] = { 3, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64,192, 0, 0}; /* "'" */
|
|
||||||
static const GLubyte TimesRoman10_Character_124[] = { 2,128,128,128,128,128,128,128,128,128,128,128,128,128}; /* "|" */
|
|
||||||
|
|
||||||
|
|
||||||
/* The font characters mapping: */
|
|
||||||
static const GLubyte* TimesRoman10_Character_Map[] = {TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_032,TimesRoman10_Character_033,TimesRoman10_Character_034,TimesRoman10_Character_035,
|
|
||||||
TimesRoman10_Character_036,TimesRoman10_Character_037,TimesRoman10_Character_038,TimesRoman10_Character_039,TimesRoman10_Character_040,TimesRoman10_Character_041,TimesRoman10_Character_042,TimesRoman10_Character_043,TimesRoman10_Character_044,TimesRoman10_Character_045,TimesRoman10_Character_046,TimesRoman10_Character_047,TimesRoman10_Character_048,TimesRoman10_Character_049,TimesRoman10_Character_050,TimesRoman10_Character_051,TimesRoman10_Character_052,TimesRoman10_Character_053,TimesRoman10_Character_054,TimesRoman10_Character_055,TimesRoman10_Character_056,TimesRoman10_Character_057,TimesRoman10_Character_058,TimesRoman10_Character_059,TimesRoman10_Character_060,TimesRoman10_Character_061,TimesRoman10_Character_062,TimesRoman10_Character_063,TimesRoman10_Character_064,TimesRoman10_Character_065,TimesRoman10_Character_066,TimesRoman10_Character_067,TimesRoman10_Character_068,TimesRoman10_Character_069,TimesRoman10_Character_070,TimesRoman10_Character_071,TimesRoman10_Character_072,
|
|
||||||
TimesRoman10_Character_073,TimesRoman10_Character_074,TimesRoman10_Character_075,TimesRoman10_Character_076,TimesRoman10_Character_077,TimesRoman10_Character_078,TimesRoman10_Character_079,TimesRoman10_Character_080,TimesRoman10_Character_081,TimesRoman10_Character_082,TimesRoman10_Character_083,TimesRoman10_Character_084,TimesRoman10_Character_085,TimesRoman10_Character_086,TimesRoman10_Character_087,TimesRoman10_Character_088,TimesRoman10_Character_089,TimesRoman10_Character_090,TimesRoman10_Character_091,TimesRoman10_Character_092,TimesRoman10_Character_093,TimesRoman10_Character_094,TimesRoman10_Character_095,TimesRoman10_Character_096,TimesRoman10_Character_097,TimesRoman10_Character_098,TimesRoman10_Character_099,TimesRoman10_Character_100,TimesRoman10_Character_101,TimesRoman10_Character_102,TimesRoman10_Character_103,TimesRoman10_Character_104,TimesRoman10_Character_105,TimesRoman10_Character_106,TimesRoman10_Character_107,TimesRoman10_Character_108,TimesRoman10_Character_109,
|
|
||||||
TimesRoman10_Character_110,TimesRoman10_Character_111,TimesRoman10_Character_112,TimesRoman10_Character_113,TimesRoman10_Character_114,TimesRoman10_Character_115,TimesRoman10_Character_116,TimesRoman10_Character_117,TimesRoman10_Character_118,TimesRoman10_Character_119,TimesRoman10_Character_120,TimesRoman10_Character_121,TimesRoman10_Character_122,TimesRoman10_Character_123,TimesRoman10_Character_124,TimesRoman10_Character_125,TimesRoman10_Character_126,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,
|
|
||||||
TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,
|
|
||||||
TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,
|
|
||||||
TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,TimesRoman10_Character_042,NULL};
|
|
||||||
|
|
||||||
/* The font structure: */
|
|
||||||
const SFG_Font fgFontTimesRoman10 = { "-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1", 93, 13, TimesRoman10_Character_Map, 0.0f, 3.0f };
|
|
||||||
|
|
||||||
static const GLubyte TimesRoman24_Character_032[] = { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* " " */
|
|
||||||
static const GLubyte TimesRoman24_Character_097[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113,128,251, 0,199, 0,195, 0,195, 0, 99, 0, 59, 0, 15, 0, 3, 0, 99, 0,103, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "a" */
|
|
||||||
static const GLubyte TimesRoman24_Character_098[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0,115,128, 97,128, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 97,128,115,128,110, 0, 96, 0, 96, 0, 96, 0, 96, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "b" */
|
|
||||||
static const GLubyte TimesRoman24_Character_099[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,127, 0,112,128,224, 0,192, 0,192, 0,192, 0,192, 0,192, 0, 65,128, 99,128, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "c" */
|
|
||||||
static const GLubyte TimesRoman24_Character_100[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,192,115,128, 97,128,193,128,193,128,193,128,193,128,193,128,193,128, 97,128,115,128, 29,128, 1,128, 1,128, 1,128, 1,128, 3,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "d" */
|
|
||||||
static const GLubyte TimesRoman24_Character_101[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,127, 0,112,128,224, 0,192, 0,192, 0,192, 0,255,128,193,128, 65,128, 99, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "e" */
|
|
||||||
static const GLubyte TimesRoman24_Character_102[] = { 7, 0, 0, 0, 0, 0, 0,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,254, 48, 48, 48, 22, 14, 0, 0, 0, 0, 0}; /* "f" */
|
|
||||||
static const GLubyte TimesRoman24_Character_103[] = { 12, 0, 0, 63, 0,241,192,192, 96,192, 32, 96, 96, 63,192,127, 0, 96, 0, 48, 0, 62, 0, 51, 0, 97,128, 97,128, 97,128, 97,128, 51, 0, 31,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "g" */
|
|
||||||
static const GLubyte TimesRoman24_Character_104[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241,224, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192,113,192,111,128,103, 0, 96, 0, 96, 0, 96, 0, 96, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "h" */
|
|
||||||
static const GLubyte TimesRoman24_Character_105[] = { 6, 0, 0, 0, 0, 0, 0,240, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,224, 0, 0, 0, 96, 96, 0, 0, 0, 0, 0}; /* "i" */
|
|
||||||
static const GLubyte TimesRoman24_Character_106[] = { 6, 0,192,224, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,112, 0, 0, 0, 48, 48, 0, 0, 0, 0, 0}; /* "j" */
|
|
||||||
static const GLubyte TimesRoman24_Character_107[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,243,224, 97,192, 99,128,103, 0,110, 0,108, 0,120, 0,104, 0,100, 0,102, 0, 99, 0,103,192, 96, 0, 96, 0, 96, 0, 96, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "k" */
|
|
||||||
static const GLubyte TimesRoman24_Character_108[] = { 6, 0, 0, 0, 0, 0, 0,240, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,224, 0, 0, 0, 0, 0}; /* "l" */
|
|
||||||
static const GLubyte TimesRoman24_Character_109[] = { 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241,227,192, 96,193,128, 96,193,128, 96,193,128, 96,193,128, 96,193,128, 96,193,128, 96,193,128, 96,193,128,113,227,128,111,159, 0,231, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "m" */
|
|
||||||
static const GLubyte TimesRoman24_Character_110[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241,224, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192,113,192,111,128,231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "n" */
|
|
||||||
static const GLubyte TimesRoman24_Character_111[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,115,128, 97,128,192,192,192,192,192,192,192,192,192,192,192,192, 97,128,115,128, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "o" */
|
|
||||||
static const GLubyte TimesRoman24_Character_112[] = { 12, 0, 0,240, 0, 96, 0, 96, 0, 96, 0, 96, 0,110, 0,115,128, 97,128, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 97,128,115,128,238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "p" */
|
|
||||||
static const GLubyte TimesRoman24_Character_113[] = { 12, 0, 0, 3,192, 1,128, 1,128, 1,128, 1,128, 29,128,115,128, 97,128,193,128,193,128,193,128,193,128,193,128,193,128, 97,128,115,128, 29,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "q" */
|
|
||||||
static const GLubyte TimesRoman24_Character_114[] = { 8, 0, 0, 0, 0, 0, 0,240, 96, 96, 96, 96, 96, 96, 96, 96,118,110,230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "r" */
|
|
||||||
static const GLubyte TimesRoman24_Character_115[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 0,198, 0,131, 0, 3, 0, 7, 0, 30, 0,124, 0,112, 0,224, 0,194, 0,102, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "s" */
|
|
||||||
static const GLubyte TimesRoman24_Character_116[] = { 7, 0, 0, 0, 0, 0, 0, 28, 50, 48, 48, 48, 48, 48, 48, 48, 48, 48,254,112, 48, 16, 0, 0, 0, 0, 0, 0, 0}; /* "t" */
|
|
||||||
static const GLubyte TimesRoman24_Character_117[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,224, 62,192,113,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192, 96,192,225,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "u" */
|
|
||||||
static const GLubyte TimesRoman24_Character_118[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 14, 0, 14, 0, 26, 0, 25, 0, 25, 0, 49, 0, 48,128, 48,128, 96,128, 96,192,241,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "v" */
|
|
||||||
static const GLubyte TimesRoman24_Character_119[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 16, 0, 14, 56, 0, 14, 56, 0, 26, 40, 0, 26,100, 0, 25,100, 0, 49,100, 0, 48,194, 0, 48,194, 0, 96,194, 0, 96,195, 0,241,231,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "w" */
|
|
||||||
static const GLubyte TimesRoman24_Character_120[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241,224, 96,192, 33,128, 51,128, 27, 0, 14, 0, 12, 0, 26, 0, 57, 0, 49,128, 96,192,241,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "x" */
|
|
||||||
static const GLubyte TimesRoman24_Character_121[] = { 11, 0, 0,224, 0,240, 0, 24, 0, 8, 0, 12, 0, 4, 0, 14, 0, 14, 0, 26, 0, 25, 0, 25, 0, 49, 0, 48,128, 48,128, 96,128, 96,192,241,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "y" */
|
|
||||||
static const GLubyte TimesRoman24_Character_122[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0,195, 0, 97, 0,112, 0, 48, 0, 56, 0, 24, 0, 28, 0, 14, 0,134, 0,195, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "z" */
|
|
||||||
static const GLubyte TimesRoman24_Character_065[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 31,128, 48, 6, 0, 16, 6, 0, 16, 12, 0, 24, 12, 0, 8, 12, 0, 15,248, 0, 12, 24, 0, 4, 24, 0, 4, 48, 0, 6, 48, 0, 2, 48, 0, 2, 96, 0, 1, 96, 0, 1,192, 0, 1,192, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "A" */
|
|
||||||
static const GLubyte TimesRoman24_Character_066[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,224, 48,120, 48, 24, 48, 12, 48, 12, 48, 12, 48, 24, 48, 56, 63,224, 48, 64, 48, 48, 48, 24, 48, 24, 48, 24, 48, 48, 48,112,255,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "B" */
|
|
||||||
static const GLubyte TimesRoman24_Character_067[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,224, 30, 56, 56, 8, 96, 4, 96, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0, 96, 4, 96, 4, 56, 12, 28, 60, 7,228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "C" */
|
|
||||||
static const GLubyte TimesRoman24_Character_068[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,192, 0, 48,112, 0, 48, 56, 0, 48, 12, 0, 48, 12, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 12, 0, 48, 12, 0, 48, 56, 0, 48,112, 0,255,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "D" */
|
|
||||||
static const GLubyte TimesRoman24_Character_069[] = { 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,248, 48, 24, 48, 8, 48, 8, 48, 0, 48, 0, 48, 64, 48, 64, 63,192, 48, 64, 48, 64, 48, 0, 48, 0, 48, 16, 48, 16, 48, 48,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "E" */
|
|
||||||
static const GLubyte TimesRoman24_Character_070[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 32, 48, 32, 63,224, 48, 32, 48, 32, 48, 0, 48, 0, 48, 16, 48, 16, 48, 48,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "F" */
|
|
||||||
static const GLubyte TimesRoman24_Character_071[] = { 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,224, 0, 30, 56, 0, 56, 28, 0, 96, 12, 0, 96, 12, 0,192, 12, 0,192, 12, 0,192, 63, 0,192, 0, 0,192, 0, 0,192, 0, 0,192, 0, 0, 96, 4, 0, 96, 4, 0, 56, 12, 0, 28, 60, 0, 7,228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "G" */
|
|
||||||
static const GLubyte TimesRoman24_Character_072[] = { 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 31,128, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 63,254, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0, 48, 6, 0,252, 31,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "H" */
|
|
||||||
static const GLubyte TimesRoman24_Character_073[] = { 8, 0, 0, 0, 0, 0, 0,252, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,252, 0, 0, 0, 0, 0}; /* "I" */
|
|
||||||
static const GLubyte TimesRoman24_Character_074[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0,204, 0,198, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 31,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "J" */
|
|
||||||
static const GLubyte TimesRoman24_Character_075[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 31, 0, 48, 14, 0, 48, 28, 0, 48, 56, 0, 48,112, 0, 48,224, 0, 49,192, 0, 51,128, 0, 63, 0, 0, 62, 0, 0, 51, 0, 0, 49,128, 0, 48,192, 0, 48, 96, 0, 48, 48, 0, 48, 24, 0,252,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "K" */
|
|
||||||
static const GLubyte TimesRoman24_Character_076[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,248, 48, 24, 48, 8, 48, 8, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "L" */
|
|
||||||
static const GLubyte TimesRoman24_Character_077[] = { 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 33,248, 32, 96, 96, 32, 96, 96, 32,208, 96, 32,208, 96, 33,136, 96, 33,136, 96, 35, 8, 96, 35, 4, 96, 38, 4, 96, 38, 2, 96, 44, 2, 96, 44, 2, 96, 56, 1, 96, 56, 1, 96, 48, 0,224,240, 0,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "M" */
|
|
||||||
static const GLubyte TimesRoman24_Character_078[] = { 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 12, 0, 32, 28, 0, 32, 28, 0, 32, 52, 0, 32,100, 0, 32,100, 0, 32,196, 0, 33,132, 0, 33,132, 0, 35, 4, 0, 38, 4, 0, 38, 4, 0, 44, 4, 0, 56, 4, 0, 56, 4, 0, 48, 4, 0,240, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "N" */
|
|
||||||
static const GLubyte TimesRoman24_Character_079[] = { 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,224, 0, 28, 56, 0, 56, 28, 0, 96, 6, 0, 96, 6, 0,192, 3, 0,192, 3, 0,192, 3, 0,192, 3, 0,192, 3, 0,192, 3, 0,192, 3, 0, 96, 6, 0, 96, 6, 0, 56, 28, 0, 28, 56, 0, 7,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "O" */
|
|
||||||
static const GLubyte TimesRoman24_Character_080[] = { 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, 0, 63,192, 48,112, 48, 48, 48, 24, 48, 24, 48, 24, 48, 48, 48,112,255,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "P" */
|
|
||||||
static const GLubyte TimesRoman24_Character_081[] = { 18, 0, 0, 0, 0, 15, 0, 0, 56, 0, 0,112, 0, 0,224, 0, 1,192, 0, 7,224, 0, 28, 56, 0, 56, 28, 0, 96, 6, 0, 96, 6, 0,192, 3, 0,192, 3, 0,192, 3, 0,192, 3, 0,192, 3, 0,192, 3, 0,192, 3, 0, 96, 6, 0, 96, 6, 0, 56, 28, 0, 28, 56, 0, 7,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "Q" */
|
|
||||||
static const GLubyte TimesRoman24_Character_082[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 30, 48, 28, 48, 56, 48,112, 48, 96, 48,192, 49,192, 51,128, 63,192, 48,112, 48, 48, 48, 56, 48, 24, 48, 56, 48, 48, 48,112,255,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "R" */
|
|
||||||
static const GLubyte TimesRoman24_Character_083[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,158, 0,241,128,192,192,128, 96,128, 96, 0, 96, 0,224, 3,192, 15,128, 30, 0,120, 0,224, 0,192, 64,192, 64,192,192, 99,192, 30, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "S" */
|
|
||||||
static const GLubyte TimesRoman24_Character_084[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15,192, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0,131, 4,131, 4,195, 12,255,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "T" */
|
|
||||||
static const GLubyte TimesRoman24_Character_085[] = { 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,224, 0, 28, 48, 0, 24, 8, 0, 48, 8, 0, 48, 4, 0, 48, 4, 0, 48, 4, 0, 48, 4, 0, 48, 4, 0, 48, 4, 0, 48, 4, 0, 48, 4, 0, 48, 4, 0, 48, 4, 0, 48, 4, 0, 48, 4, 0,252, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "U" */
|
|
||||||
static const GLubyte TimesRoman24_Character_086[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,128, 0, 1,128, 0, 1,128, 0, 3,192, 0, 3, 64, 0, 3, 96, 0, 6, 32, 0, 6, 32, 0, 6, 48, 0, 12, 16, 0, 12, 24, 0, 24, 8, 0, 24, 8, 0, 24, 12, 0, 48, 4, 0, 48, 6, 0,252, 31,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "V" */
|
|
||||||
static const GLubyte TimesRoman24_Character_087[] = { 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,131, 0, 1,131, 0, 1,131,128, 3,135,128, 3, 70,128, 3, 70,192, 6, 70, 64, 6, 76, 64, 6, 76, 96, 12, 44, 96, 12, 44, 32, 24, 44, 32, 24, 24, 48, 24, 24, 16, 48, 24, 16, 48, 24, 24,252,126,126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "W" */
|
|
||||||
static const GLubyte TimesRoman24_Character_088[] = { 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 15,192, 48, 3,128, 24, 7, 0, 8, 14, 0, 4, 12, 0, 6, 24, 0, 2, 56, 0, 1,112, 0, 0,224, 0, 0,192, 0, 1,192, 0, 3,160, 0, 3, 16, 0, 6, 8, 0, 14, 12, 0, 28, 6, 0,126, 15,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "X" */
|
|
||||||
static const GLubyte TimesRoman24_Character_089[] = { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,224, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 3,192, 3, 64, 6, 96, 6, 32, 12, 48, 28, 16, 24, 24, 56, 8, 48, 12,252, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "Y" */
|
|
||||||
static const GLubyte TimesRoman24_Character_090[] = { 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,248,224, 24,112, 8, 48, 8, 56, 0, 24, 0, 28, 0, 14, 0, 6, 0, 7, 0, 3, 0, 3,128, 1,192,128,192,128,224,192,112,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "Z" */
|
|
||||||
static const GLubyte TimesRoman24_Character_048[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 51, 0, 97,128, 97,128,225,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, 97,128, 97,128, 51, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "0" */
|
|
||||||
static const GLubyte TimesRoman24_Character_049[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0,120, 0, 24, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "1" */
|
|
||||||
static const GLubyte TimesRoman24_Character_050[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,128,255,192, 96, 64, 48, 0, 24, 0, 12, 0, 4, 0, 6, 0, 3, 0, 3, 0, 1,128, 1,128,129,128,129,128, 67,128,127, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "2" */
|
|
||||||
static const GLubyte TimesRoman24_Character_051[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0,230, 0,195, 0, 1, 0, 1,128, 1,128, 1,128, 3,128, 7, 0, 30, 0, 12, 0, 6, 0,131, 0,131, 0, 71, 0,126, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "3" */
|
|
||||||
static const GLubyte TimesRoman24_Character_052[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 3, 0,255,192,255,192,195, 0, 67, 0, 99, 0, 35, 0, 51, 0, 19, 0, 27, 0, 11, 0, 7, 0, 7, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "4" */
|
|
||||||
static const GLubyte TimesRoman24_Character_053[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 0,227,128,193,128, 0,192, 0,192, 0,192, 0,192, 1,192, 3,128, 15,128,126, 0,120, 0, 96, 0, 32, 0, 32, 0, 31,128, 31,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "5" */
|
|
||||||
static const GLubyte TimesRoman24_Character_054[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,123,128, 97,128,224,192,192,192,192,192,192,192,192,192,193,128,243,128,238, 0, 96, 0,112, 0, 48, 0, 24, 0, 14, 0, 3,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "6" */
|
|
||||||
static const GLubyte TimesRoman24_Character_055[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 24, 0, 12, 0, 12, 0, 12, 0, 4, 0, 6, 0, 6, 0, 2, 0, 3, 0, 3, 0, 1, 0, 1,128,129,128,192,192,255,192,127,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "7" */
|
|
||||||
static const GLubyte TimesRoman24_Character_056[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,115,128,225,128,192,192,192,192,192,192, 65,192, 97,128, 55, 0, 30, 0, 30, 0, 51, 0, 97,128, 97,128, 97,128, 51, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "8" */
|
|
||||||
static const GLubyte TimesRoman24_Character_057[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 0, 28, 0, 6, 0, 3, 0, 3,128, 1,128, 29,128,115,192, 97,192,192,192,192,192,192,192,192,192,193,192, 97,128,119,128, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "9" */
|
|
||||||
static const GLubyte TimesRoman24_Character_096[] = { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,224,128,192, 96, 0, 0, 0, 0, 0}; /* "`" */
|
|
||||||
static const GLubyte TimesRoman24_Character_126[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131,128,199,192,124, 96, 56, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "~" */
|
|
||||||
static const GLubyte TimesRoman24_Character_033[] = { 8, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0,192,192,192,192,192,192,192,192,192,192,192,192, 0, 0, 0, 0, 0}; /* "!" */
|
|
||||||
static const GLubyte TimesRoman24_Character_064[] = { 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,240, 0, 14, 12, 0, 24, 0, 0, 48, 0, 0, 97,222, 0, 99,123, 0,198, 57,128,198, 24,128,198, 24,192,198, 24, 64,198, 12, 64,195, 12, 64,195,140, 64,225,252, 64, 96,236,192,112, 0,128, 56, 1,128, 28, 3, 0, 15, 14, 0, 3,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "@" */
|
|
||||||
static const GLubyte TimesRoman24_Character_035[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 34, 0, 34, 0, 34, 0, 34, 0,255,192,255,192, 17, 0, 17, 0, 17, 0,127,224,127,224, 8,128, 8,128, 8,128, 8,128, 8,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "#" */
|
|
||||||
static const GLubyte TimesRoman24_Character_036[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 63, 0,229,192,196,192,132, 96,132, 96, 4, 96, 4,224, 7,192, 7,128, 30, 0, 60, 0,116, 0,100, 0,100, 32,100, 96, 52,224, 31,128, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0}; /* "$" */
|
|
||||||
static const GLubyte TimesRoman24_Character_037[] = { 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 60, 0, 24,114, 0, 12, 97, 0, 4, 96,128, 6, 96,128, 3, 48,128, 1, 25,128, 1,143, 0,120,192, 0,228, 64, 0,194, 96, 0,193, 48, 0,193, 16, 0, 97, 24, 0, 51,252, 0, 30, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "%" */
|
|
||||||
static const GLubyte TimesRoman24_Character_094[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,193,128, 65, 0, 99, 0, 34, 0, 54, 0, 20, 0, 28, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "^" */
|
|
||||||
static const GLubyte TimesRoman24_Character_038[] = { 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 0,127,126, 0,225,225, 0,192,192, 0,193,192, 0,193,160, 0, 99, 32, 0, 55, 16, 0, 30, 24, 0, 14, 62, 0, 15, 0, 0, 29,128, 0, 24,192, 0, 24, 64, 0, 24, 64, 0, 12,192, 0, 7,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "&" */
|
|
||||||
static const GLubyte TimesRoman24_Character_042[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 28, 0,201,128,235,128, 28, 0,235,128,201,128, 28, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "*" */
|
|
||||||
static const GLubyte TimesRoman24_Character_040[] = { 8, 0, 4, 8, 16, 48, 32, 96, 96,192,192,192,192,192,192,192,192, 96, 96, 32, 48, 16, 8, 4, 0, 0, 0, 0, 0}; /* "(" */
|
|
||||||
static const GLubyte TimesRoman24_Character_041[] = { 8, 0,128, 64, 32, 48, 16, 24, 24, 12, 12, 12, 12, 12, 12, 12, 12, 24, 24, 16, 48, 32, 64,128, 0, 0, 0, 0, 0}; /* ")" */
|
|
||||||
static const GLubyte TimesRoman24_Character_045[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,240,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "-" */
|
|
||||||
static const GLubyte TimesRoman24_Character_095[] = { 13, 0, 0,255,248,255,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "_" */
|
|
||||||
static const GLubyte TimesRoman24_Character_061[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,240,255,240, 0, 0, 0, 0,255,240,255,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "=" */
|
|
||||||
static const GLubyte TimesRoman24_Character_043[] = { 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0,255,240,255,240, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "+" */
|
|
||||||
static const GLubyte TimesRoman24_Character_091[] = { 8, 0, 0,248,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,248, 0, 0, 0, 0, 0}; /* "[" */
|
|
||||||
static const GLubyte TimesRoman24_Character_123[] = { 10, 0, 0, 7, 0, 12, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 16, 0, 48, 0, 32, 0,192, 0, 32, 0, 48, 0, 16, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 12, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "{" */
|
|
||||||
static const GLubyte TimesRoman24_Character_125[] = { 10, 0, 0,224, 0, 48, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 8, 0, 12, 0, 4, 0, 3, 0, 4, 0, 12, 0, 8, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 48, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "}" */
|
|
||||||
static const GLubyte TimesRoman24_Character_093[] = { 8, 0, 0,248, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,248, 0, 0, 0, 0, 0}; /* "]" */
|
|
||||||
static const GLubyte TimesRoman24_Character_059[] = { 7, 0, 0, 0,192, 96, 32,224,192, 0, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* ";" */
|
|
||||||
static const GLubyte TimesRoman24_Character_058[] = { 6, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* ":" */
|
|
||||||
static const GLubyte TimesRoman24_Character_044[] = { 7, 0, 0, 0,192, 96, 32,224,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "," */
|
|
||||||
static const GLubyte TimesRoman24_Character_046[] = { 6, 0, 0, 0, 0, 0, 0,192,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "." */
|
|
||||||
static const GLubyte TimesRoman24_Character_060[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1,192, 7, 0, 28, 0,112, 0,192, 0,112, 0, 28, 0, 7, 0, 1,192, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "<" */
|
|
||||||
static const GLubyte TimesRoman24_Character_062[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0,112, 0, 28, 0, 7, 0, 1,192, 0, 96, 1,192, 7, 0, 28, 0,112, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* ">" */
|
|
||||||
static const GLubyte TimesRoman24_Character_047[] = { 7, 0, 0, 0,192,192,192, 96, 96, 32, 48, 48, 16, 24, 24, 8, 12, 12, 4, 6, 6, 3, 3, 3, 0, 0, 0, 0, 0}; /* "/" */
|
|
||||||
static const GLubyte TimesRoman24_Character_063[] = { 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 48, 0, 0, 0, 0, 0, 16, 0, 16, 0, 16, 0, 24, 0, 24, 0, 12, 0, 14, 0, 7, 0,195, 0,195, 0,131, 0,198, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* "?" */
|
|
||||||
static const GLubyte TimesRoman24_Character_092[] = { 7, 0, 0, 0, 0, 0, 0, 6, 6, 4, 12, 12, 8, 24, 24, 16, 48, 48, 32, 96, 96, 64,192,192, 0, 0, 0, 0, 0}; /* "\" */
|
|
||||||
static const GLubyte TimesRoman24_Character_034[] = { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 0,204, 0,204, 0,204, 0,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* """ */
|
|
||||||
|
|
||||||
/* Missing Characters filled in by John Fay by hand ... */
|
|
||||||
static const GLubyte TimesRoman24_Character_039[] = { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 96, 32,224,192, 0, 0, 0, 0, 0}; /* "'" */
|
|
||||||
static const GLubyte TimesRoman24_Character_124[] = { 6, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0}; /* "|" */
|
|
||||||
|
|
||||||
|
|
||||||
/* The font characters mapping: */
|
|
||||||
static const GLubyte* TimesRoman24_Character_Map[] = {TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_032,TimesRoman24_Character_033,TimesRoman24_Character_034,TimesRoman24_Character_035,
|
|
||||||
TimesRoman24_Character_036,TimesRoman24_Character_037,TimesRoman24_Character_038,TimesRoman24_Character_039,TimesRoman24_Character_040,TimesRoman24_Character_041,TimesRoman24_Character_042,TimesRoman24_Character_043,TimesRoman24_Character_044,TimesRoman24_Character_045,TimesRoman24_Character_046,TimesRoman24_Character_047,TimesRoman24_Character_048,TimesRoman24_Character_049,TimesRoman24_Character_050,TimesRoman24_Character_051,TimesRoman24_Character_052,TimesRoman24_Character_053,TimesRoman24_Character_054,TimesRoman24_Character_055,TimesRoman24_Character_056,TimesRoman24_Character_057,TimesRoman24_Character_058,TimesRoman24_Character_059,TimesRoman24_Character_060,TimesRoman24_Character_061,TimesRoman24_Character_062,TimesRoman24_Character_063,TimesRoman24_Character_064,TimesRoman24_Character_065,TimesRoman24_Character_066,TimesRoman24_Character_067,TimesRoman24_Character_068,TimesRoman24_Character_069,TimesRoman24_Character_070,TimesRoman24_Character_071,TimesRoman24_Character_072,
|
|
||||||
TimesRoman24_Character_073,TimesRoman24_Character_074,TimesRoman24_Character_075,TimesRoman24_Character_076,TimesRoman24_Character_077,TimesRoman24_Character_078,TimesRoman24_Character_079,TimesRoman24_Character_080,TimesRoman24_Character_081,TimesRoman24_Character_082,TimesRoman24_Character_083,TimesRoman24_Character_084,TimesRoman24_Character_085,TimesRoman24_Character_086,TimesRoman24_Character_087,TimesRoman24_Character_088,TimesRoman24_Character_089,TimesRoman24_Character_090,TimesRoman24_Character_091,TimesRoman24_Character_092,TimesRoman24_Character_093,TimesRoman24_Character_094,TimesRoman24_Character_095,TimesRoman24_Character_096,TimesRoman24_Character_097,TimesRoman24_Character_098,TimesRoman24_Character_099,TimesRoman24_Character_100,TimesRoman24_Character_101,TimesRoman24_Character_102,TimesRoman24_Character_103,TimesRoman24_Character_104,TimesRoman24_Character_105,TimesRoman24_Character_106,TimesRoman24_Character_107,TimesRoman24_Character_108,TimesRoman24_Character_109,
|
|
||||||
TimesRoman24_Character_110,TimesRoman24_Character_111,TimesRoman24_Character_112,TimesRoman24_Character_113,TimesRoman24_Character_114,TimesRoman24_Character_115,TimesRoman24_Character_116,TimesRoman24_Character_117,TimesRoman24_Character_118,TimesRoman24_Character_119,TimesRoman24_Character_120,TimesRoman24_Character_121,TimesRoman24_Character_122,TimesRoman24_Character_123,TimesRoman24_Character_124,TimesRoman24_Character_125,TimesRoman24_Character_126,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,
|
|
||||||
TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,
|
|
||||||
TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,
|
|
||||||
TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,TimesRoman24_Character_042,NULL};
|
|
||||||
|
|
||||||
/* The font structure: */
|
|
||||||
const SFG_Font fgFontTimesRoman24 = { "-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1", 93, 28, TimesRoman24_Character_Map, -1.0f, 6.0f };
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
||||||
|
|
@ -1,558 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_gamemode.c
|
|
||||||
*
|
|
||||||
* The game mode handling code.
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Thu Dec 16 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-gamemode"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO BEFORE THE STABLE RELEASE:
|
|
||||||
*
|
|
||||||
* glutGameModeString() -- missing
|
|
||||||
* glutEnterGameMode() -- X11 version
|
|
||||||
* glutLeaveGameMode() -- is that correct?
|
|
||||||
* glutGameModeGet() -- is that correct?
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Remembers the current visual settings, so that
|
|
||||||
* we can change them and restore later...
|
|
||||||
*/
|
|
||||||
void fghRememberState( void )
|
|
||||||
{
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This highly depends on the XFree86 extensions, not approved as X Consortium standards
|
|
||||||
*/
|
|
||||||
# ifdef X_XF86VidModeGetModeLine
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Query the current display settings:
|
|
||||||
*/
|
|
||||||
XF86VidModeGetModeLine(
|
|
||||||
fgDisplay.Display,
|
|
||||||
fgDisplay.Screen,
|
|
||||||
&fgDisplay.DisplayModeClock,
|
|
||||||
&fgDisplay.DisplayMode
|
|
||||||
);
|
|
||||||
|
|
||||||
# else
|
|
||||||
# warning fghRememberState: missing XFree86 video mode extensions, game mode will not change screen resolution when activated
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
|
|
||||||
/* DEVMODE devMode; */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Grab the current desktop settings...
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* hack to get around my stupid cross-gcc headers */
|
|
||||||
#define FREEGLUT_ENUM_CURRENT_SETTINGS -1
|
|
||||||
|
|
||||||
EnumDisplaySettings( NULL, FREEGLUT_ENUM_CURRENT_SETTINGS, &fgDisplay.DisplayMode );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure we will be restoring all settings needed
|
|
||||||
*/
|
|
||||||
fgDisplay.DisplayMode.dmFields |= DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Restores the previously remembered visual settings
|
|
||||||
*/
|
|
||||||
void fghRestoreState( void )
|
|
||||||
{
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This highly depends on the XFree86 extensions, not approved as X Consortium standards
|
|
||||||
*/
|
|
||||||
# ifdef X_XF86VidModeGetAllModeLines
|
|
||||||
|
|
||||||
XF86VidModeModeInfo** displayModes;
|
|
||||||
int i, displayModesCount;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Query for all the display available...
|
|
||||||
*/
|
|
||||||
XF86VidModeGetAllModeLines(
|
|
||||||
fgDisplay.Display,
|
|
||||||
fgDisplay.Screen,
|
|
||||||
&displayModesCount,
|
|
||||||
&displayModes
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check every of the modes looking for one that matches our demands
|
|
||||||
*/
|
|
||||||
for( i=0; i<displayModesCount; i++ )
|
|
||||||
{
|
|
||||||
if( displayModes[ i ]->hdisplay == fgDisplay.DisplayMode.hdisplay &&
|
|
||||||
displayModes[ i ]->vdisplay == fgDisplay.DisplayMode.vdisplay &&
|
|
||||||
displayModes[ i ]->dotclock == fgDisplay.DisplayModeClock )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* OKi, this is the display mode we have been looking for...
|
|
||||||
*/
|
|
||||||
XF86VidModeSwitchToMode(
|
|
||||||
fgDisplay.Display,
|
|
||||||
fgDisplay.Screen,
|
|
||||||
displayModes[ i ]
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* In case this will be the last X11 call we do before exit,
|
|
||||||
* we've to flush the X11 output queue to be sure the command
|
|
||||||
* is really brought onto it's way to the X server.
|
|
||||||
* The application should not do this because it
|
|
||||||
* would not be platform independent then.
|
|
||||||
*/
|
|
||||||
XFlush(fgDisplay.Display);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# else
|
|
||||||
# warning fghRestoreState: missing XFree86 video mode extensions, game mode will not change screen resolution when activated
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Restore the previously rememebered desktop display settings
|
|
||||||
*/
|
|
||||||
ChangeDisplaySettings( &fgDisplay.DisplayMode, 0 );
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Checks the display mode settings against user's preferences
|
|
||||||
*/
|
|
||||||
GLboolean fghCheckDisplayMode( int width, int height, int depth, int refresh )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* The desired values should be stored in fgState structure...
|
|
||||||
*/
|
|
||||||
return( (width == fgState.GameModeSize.X) && (height == fgState.GameModeSize.Y) &&
|
|
||||||
(depth == fgState.GameModeDepth) && (refresh == fgState.GameModeRefresh) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Changes the current display mode to match user's settings
|
|
||||||
*/
|
|
||||||
GLboolean fghChangeDisplayMode( GLboolean haveToTest )
|
|
||||||
{
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This highly depends on the XFree86 extensions, not approved as X Consortium standards
|
|
||||||
*/
|
|
||||||
# ifdef X_XF86VidModeGetAllModeLines
|
|
||||||
|
|
||||||
XF86VidModeModeInfo** displayModes;
|
|
||||||
int i, displayModesCount;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Query for all the display available...
|
|
||||||
*/
|
|
||||||
XF86VidModeGetAllModeLines(
|
|
||||||
fgDisplay.Display,
|
|
||||||
fgDisplay.Screen,
|
|
||||||
&displayModesCount,
|
|
||||||
&displayModes
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check every of the modes looking for one that matches our demands
|
|
||||||
*/
|
|
||||||
for( i=0; i<displayModesCount; i++ )
|
|
||||||
{
|
|
||||||
if( fghCheckDisplayMode( displayModes[ i ]->hdisplay, displayModes[ i ]->vdisplay,
|
|
||||||
fgState.GameModeDepth, fgState.GameModeRefresh ) )
|
|
||||||
{
|
|
||||||
if( haveToTest )
|
|
||||||
return( TRUE );
|
|
||||||
/*
|
|
||||||
* OKi, this is the display mode we have been looking for...
|
|
||||||
*/
|
|
||||||
XF86VidModeSwitchToMode(
|
|
||||||
fgDisplay.Display,
|
|
||||||
fgDisplay.Screen,
|
|
||||||
displayModes[ i ]
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the viewport's origin to (0,0) (the game mode window's top-left corner)
|
|
||||||
*/
|
|
||||||
XF86VidModeSetViewPort(
|
|
||||||
fgDisplay.Display,
|
|
||||||
fgDisplay.Screen,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return successfull...
|
|
||||||
*/
|
|
||||||
return( TRUE );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Something must have went wrong
|
|
||||||
*/
|
|
||||||
return( FALSE );
|
|
||||||
|
|
||||||
# else
|
|
||||||
# warning fghChangeDisplayMode: missing XFree86 video mode extensions, game mode will not change screen resolution when activated
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
|
|
||||||
unsigned int displayModes = 0, mode = 0xffffffff;
|
|
||||||
GLboolean success = FALSE;
|
|
||||||
/* HDC desktopDC; */
|
|
||||||
DEVMODE devMode;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Enumerate the available display modes
|
|
||||||
* Try to get a complete match
|
|
||||||
*/
|
|
||||||
while( EnumDisplaySettings( NULL, displayModes, &devMode ) == TRUE )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Does the enumerated display mode match the user's preferences?
|
|
||||||
*/
|
|
||||||
if( fghCheckDisplayMode( devMode.dmPelsWidth, devMode.dmPelsHeight,
|
|
||||||
devMode.dmBitsPerPel, devMode.dmDisplayFrequency ) )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* OKi, we've found a matching display mode, remember its number and break
|
|
||||||
*/
|
|
||||||
mode = displayModes;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Switch to the next display mode, if any
|
|
||||||
*/
|
|
||||||
displayModes++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( mode == 0xffffffff )
|
|
||||||
{
|
|
||||||
/* then try without Display Frequency */
|
|
||||||
displayModes = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Enumerate the available display modes
|
|
||||||
*/
|
|
||||||
while( EnumDisplaySettings( NULL, displayModes, &devMode ) == TRUE )
|
|
||||||
{
|
|
||||||
/* then try without Display Frequency */
|
|
||||||
|
|
||||||
if( fghCheckDisplayMode( devMode.dmPelsWidth, devMode.dmPelsHeight,
|
|
||||||
devMode.dmBitsPerPel, fgState.GameModeRefresh))
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* OKi, we've found a matching display mode, remember its number and break
|
|
||||||
*/
|
|
||||||
mode = displayModes;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Switch to the next display mode, if any
|
|
||||||
*/
|
|
||||||
displayModes++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Did we find a matching display mode?
|
|
||||||
*/
|
|
||||||
if( mode != 0xffffffff )
|
|
||||||
{
|
|
||||||
int retVal = DISP_CHANGE_SUCCESSFUL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Mark the values we want to modify in the display change call
|
|
||||||
*/
|
|
||||||
devMode.dmFields |= DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Change the current display mode (possibly in test mode only)
|
|
||||||
*/
|
|
||||||
retVal = ChangeDisplaySettings( &devMode, haveToTest ? CDS_TEST : 0 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* I don't know if it's really needed, but looks nice:
|
|
||||||
*/
|
|
||||||
success = (retVal == DISP_CHANGE_SUCCESSFUL) || (retVal == DISP_CHANGE_NOTUPDATED);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If it was not a test, remember the current screen settings
|
|
||||||
*/
|
|
||||||
if( !haveToTest && success )
|
|
||||||
{
|
|
||||||
fgState.GameModeSize.X = devMode.dmPelsWidth;
|
|
||||||
fgState.GameModeSize.Y = devMode.dmPelsHeight;
|
|
||||||
fgState.GameModeDepth = devMode.dmBitsPerPel;
|
|
||||||
fgState.GameModeRefresh = devMode.dmDisplayFrequency;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Otherwise we must have failed somewhere
|
|
||||||
*/
|
|
||||||
return( success );
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the game mode display string
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutGameModeString( const char* string )
|
|
||||||
{
|
|
||||||
int width = 640, height = 480, depth = 16, refresh = 72;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This one seems a bit easier than glutInitDisplayString. The bad thing
|
|
||||||
* about it that I was unable to find the game mode string definition, so
|
|
||||||
* that I assumed it is: "[width]x[height]:[depth]@[refresh rate]", which
|
|
||||||
* appears in all GLUT game mode programs I have seen to date.
|
|
||||||
*/
|
|
||||||
if( sscanf( string, "%ix%i:%i@%i", &width, &height, &depth, &refresh ) != 4 )
|
|
||||||
if( sscanf( string, "%ix%i:%i", &width, &height, &depth ) != 3 )
|
|
||||||
if( sscanf( string, "%ix%i@%i", &width, &height, &refresh ) != 3 )
|
|
||||||
if( sscanf( string, "%ix%i", &width, &height ) != 2 )
|
|
||||||
if( sscanf( string, ":%i@%i", &depth, &refresh ) != 2 )
|
|
||||||
if( sscanf( string, ":%i", &depth ) != 1 )
|
|
||||||
if( sscanf( string, "@%i", &refresh ) != 1 )
|
|
||||||
fgWarning( "unable to parse game mode string `%s'", string );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hopefully it worked, and if not, we still have the default values
|
|
||||||
*/
|
|
||||||
fgState.GameModeSize.X = width;
|
|
||||||
fgState.GameModeSize.Y = height;
|
|
||||||
fgState.GameModeDepth = depth;
|
|
||||||
fgState.GameModeRefresh = refresh;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Enters the game mode
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutEnterGameMode( void )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Check if a game mode window already exists...
|
|
||||||
*/
|
|
||||||
if( fgStructure.GameMode != NULL )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* ...if so, delete it before proceeding...
|
|
||||||
*/
|
|
||||||
fgAddToWindowDestroyList( fgStructure.GameMode, TRUE );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* ...otherwise remember the current resolution, etc.
|
|
||||||
*/
|
|
||||||
fghRememberState();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We are ready to change the current screen's resolution now
|
|
||||||
*/
|
|
||||||
if( fghChangeDisplayMode( FALSE ) == FALSE )
|
|
||||||
{
|
|
||||||
fgWarning( "failed to change screen settings" );
|
|
||||||
return( FALSE );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Finally, have the game mode window created
|
|
||||||
*/
|
|
||||||
fgStructure.GameMode = fgCreateWindow(
|
|
||||||
NULL, "FREEGLUT", 0, 0, fgState.GameModeSize.X, fgState.GameModeSize.Y, TRUE
|
|
||||||
);
|
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Move the mouse pointer over the game mode window
|
|
||||||
*/
|
|
||||||
XSetInputFocus(
|
|
||||||
fgDisplay.Display,
|
|
||||||
fgStructure.GameMode->Window.Handle,
|
|
||||||
RevertToNone,
|
|
||||||
CurrentTime
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Confine the mouse pointer to the window's client area
|
|
||||||
*/
|
|
||||||
XGrabPointer(
|
|
||||||
fgDisplay.Display,
|
|
||||||
fgStructure.GameMode->Window.Handle,
|
|
||||||
TRUE,
|
|
||||||
ButtonPressMask|ButtonReleaseMask|ButtonMotionMask|PointerMotionMask,
|
|
||||||
GrabModeAsync, GrabModeAsync,
|
|
||||||
fgStructure.GameMode->Window.Handle,
|
|
||||||
None,
|
|
||||||
CurrentTime
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Grab the keyboard, too
|
|
||||||
*/
|
|
||||||
XGrabKeyboard(
|
|
||||||
fgDisplay.Display,
|
|
||||||
fgStructure.GameMode->Window.Handle,
|
|
||||||
FALSE,
|
|
||||||
GrabModeAsync, GrabModeAsync,
|
|
||||||
CurrentTime
|
|
||||||
);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return successfull
|
|
||||||
*/
|
|
||||||
return( TRUE );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Leaves the game mode
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutLeaveGameMode( void )
|
|
||||||
{
|
|
||||||
freeglut_return_if_fail( fgStructure.GameMode != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First of all, have the game mode window destroyed
|
|
||||||
*/
|
|
||||||
fgAddToWindowDestroyList( fgStructure.GameMode, TRUE );
|
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Ungrab the mouse and keyboard
|
|
||||||
*/
|
|
||||||
XUngrabPointer( fgDisplay.Display, CurrentTime );
|
|
||||||
XUngrabKeyboard( fgDisplay.Display, CurrentTime );
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Then, have the desktop visual settings restored
|
|
||||||
*/
|
|
||||||
fghRestoreState();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns information concerning the freeglut game mode
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutGameModeGet( GLenum eWhat )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* See why are we bothered
|
|
||||||
*/
|
|
||||||
switch( eWhat )
|
|
||||||
{
|
|
||||||
case GLUT_GAME_MODE_ACTIVE:
|
|
||||||
/*
|
|
||||||
* Check if the game mode is currently active
|
|
||||||
*/
|
|
||||||
return( fgStructure.GameMode != NULL );
|
|
||||||
|
|
||||||
case GLUT_GAME_MODE_POSSIBLE:
|
|
||||||
/*
|
|
||||||
* Check if the current game mode settings are valid
|
|
||||||
*/
|
|
||||||
return( fghChangeDisplayMode( TRUE ) );
|
|
||||||
|
|
||||||
case GLUT_GAME_MODE_WIDTH:
|
|
||||||
/*
|
|
||||||
* The game mode screen width
|
|
||||||
*/
|
|
||||||
return( fgState.GameModeSize.X );
|
|
||||||
|
|
||||||
case GLUT_GAME_MODE_HEIGHT:
|
|
||||||
/*
|
|
||||||
* The game mode screen height
|
|
||||||
*/
|
|
||||||
return( fgState.GameModeSize.Y );
|
|
||||||
|
|
||||||
case GLUT_GAME_MODE_PIXEL_DEPTH:
|
|
||||||
/*
|
|
||||||
* The game mode pixel depth
|
|
||||||
*/
|
|
||||||
return( fgState.GameModeDepth );
|
|
||||||
|
|
||||||
case GLUT_GAME_MODE_REFRESH_RATE:
|
|
||||||
/*
|
|
||||||
* The game mode refresh rate
|
|
||||||
*/
|
|
||||||
return( fgState.GameModeRefresh );
|
|
||||||
|
|
||||||
case GLUT_GAME_MODE_DISPLAY_CHANGED:
|
|
||||||
/*
|
|
||||||
* This is true if the game mode has been activated successfully..
|
|
||||||
*/
|
|
||||||
return( fgStructure.GameMode != NULL );
|
|
||||||
}
|
|
||||||
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,705 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_internal.h
|
|
||||||
*
|
|
||||||
* The freeglut library private include file.
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Thu Dec 2 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FREEGLUT_INTERNAL_H
|
|
||||||
#define FREEGLUT_INTERNAL_H
|
|
||||||
|
|
||||||
/* XXX Update these for each release! */
|
|
||||||
#define VERSION_MAJOR 1
|
|
||||||
#define VERSION_MINOR 4
|
|
||||||
#define VERSION_PATCH 0
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Freeglut is meant to be available under all Unix/X11 and Win32 platforms.
|
|
||||||
*/
|
|
||||||
#if !defined(_WIN32)
|
|
||||||
# define TARGET_HOST_UNIX_X11 1
|
|
||||||
# define TARGET_HOST_WIN32 0
|
|
||||||
#else
|
|
||||||
# define TARGET_HOST_UNIX_X11 0
|
|
||||||
# define TARGET_HOST_WIN32 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define FREEGLUT_MAX_MENUS 3
|
|
||||||
#define FREEGLUT_DEBUG 1
|
|
||||||
|
|
||||||
#if FREEGLUT_DEBUG
|
|
||||||
#undef G_DISABLE_ASSERT
|
|
||||||
#undef G_DISABLE_CHECKS
|
|
||||||
#else
|
|
||||||
#define G_DISABLE_ASSERT
|
|
||||||
#define G_DISABLE_CHECKS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Somehow all Win32 include headers depend on this one:
|
|
||||||
*/
|
|
||||||
#if TARGET_HOST_WIN32
|
|
||||||
#include <windows.h>
|
|
||||||
#include <windowsx.h>
|
|
||||||
|
|
||||||
#define strdup _strdup
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Those files should be available on every platform.
|
|
||||||
*/
|
|
||||||
#include <GL/gl.h>
|
|
||||||
#include <GL/glu.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
#include <sys/time.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The system-dependant include files should go here:
|
|
||||||
*/
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
#include <GL/glx.h>
|
|
||||||
#include <X11/Xlib.h>
|
|
||||||
#include <X11/Xatom.h>
|
|
||||||
#include <X11/keysym.h>
|
|
||||||
|
|
||||||
#ifndef __sgi
|
|
||||||
#include <X11/extensions/xf86vmode.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Microsoft VisualC++ 5.0's <math.h> does not define the PI
|
|
||||||
*/
|
|
||||||
#ifndef M_PI
|
|
||||||
# define M_PI 3.14159265358979323846
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef TRUE
|
|
||||||
# define TRUE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef FALSE
|
|
||||||
# define FALSE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* -- GLOBAL TYPE DEFINITIONS ---------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Freeglut callbacks type definitions
|
|
||||||
*/
|
|
||||||
typedef void (* FGCBdisplay )( void );
|
|
||||||
typedef void (* FGCBreshape )( int, int );
|
|
||||||
typedef void (* FGCBvisibility )( int );
|
|
||||||
typedef void (* FGCBkeyboard )( unsigned char, int, int );
|
|
||||||
typedef void (* FGCBspecial )( int, int, int );
|
|
||||||
typedef void (* FGCBmouse )( int, int, int, int );
|
|
||||||
typedef void (* FGCBmotion )( int, int );
|
|
||||||
typedef void (* FGCBpassive )( int, int );
|
|
||||||
typedef void (* FGCBentry )( int );
|
|
||||||
typedef void (* FGCBwindowStatus )( int );
|
|
||||||
typedef void (* FGCBselect )( int, int, int );
|
|
||||||
typedef void (* FGCBjoystick )( unsigned int, int, int, int );
|
|
||||||
typedef void (* FGCBkeyboardUp )( unsigned char, int, int );
|
|
||||||
typedef void (* FGCBspecialUp )( int, int, int );
|
|
||||||
typedef void (* FGCBoverlayDisplay)( void );
|
|
||||||
typedef void (* FGCBspaceMotion )( int, int, int );
|
|
||||||
typedef void (* FGCBspaceRotate )( int, int, int );
|
|
||||||
typedef void (* FGCBspaceButton )( int, int );
|
|
||||||
typedef void (* FGCBdials )( int, int );
|
|
||||||
typedef void (* FGCBbuttonBox )( int, int );
|
|
||||||
typedef void (* FGCBtabletMotion )( int, int );
|
|
||||||
typedef void (* FGCBtabletButton )( int, int, int, int );
|
|
||||||
typedef void (* FGCBdestroy )( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The global callbacks type definitions
|
|
||||||
*/
|
|
||||||
typedef void (* FGCBidle )( void );
|
|
||||||
typedef void (* FGCBtimer )( int );
|
|
||||||
typedef void (* FGCBmenuState )( int );
|
|
||||||
typedef void (* FGCBmenuStatus )( int, int, int );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The callback used when creating/using menus
|
|
||||||
*/
|
|
||||||
typedef void (* FGCBmenu )( int );
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A list structure
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_List SFG_List;
|
|
||||||
struct tagSFG_List
|
|
||||||
{
|
|
||||||
void *First;
|
|
||||||
void *Last;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A list node structure
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Node SFG_Node;
|
|
||||||
struct tagSFG_Node
|
|
||||||
{
|
|
||||||
void *Next;
|
|
||||||
void *Prev;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A helper structure holding two ints and a boolean
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_XYUse SFG_XYUse;
|
|
||||||
struct tagSFG_XYUse
|
|
||||||
{
|
|
||||||
GLint X, Y; /* The two integers... */
|
|
||||||
GLboolean Use; /* ...and a single boolean. */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A helper structure holding a timeval and a boolean
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Time SFG_Time;
|
|
||||||
struct tagSFG_Time
|
|
||||||
{
|
|
||||||
#ifdef WIN32
|
|
||||||
DWORD Value;
|
|
||||||
#else
|
|
||||||
struct timeval Value;
|
|
||||||
#endif
|
|
||||||
GLboolean Set;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* An enumeration containing the state of the GLUT execution: initializing, running, or stopping
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
GLUT_EXEC_STATE_INIT,
|
|
||||||
GLUT_EXEC_STATE_RUNNING,
|
|
||||||
GLUT_EXEC_STATE_STOP
|
|
||||||
} fgExecutionState ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This structure holds different freeglut settings
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_State SFG_State;
|
|
||||||
struct tagSFG_State
|
|
||||||
{
|
|
||||||
SFG_XYUse Position; /* The default windows' position */
|
|
||||||
SFG_XYUse Size; /* The default windows' size */
|
|
||||||
unsigned int DisplayMode; /* The display mode for new windows */
|
|
||||||
|
|
||||||
GLboolean ForceDirectContext; /* Should we force direct contexts? */
|
|
||||||
GLboolean TryDirectContext; /* What about giving a try to? */
|
|
||||||
|
|
||||||
GLboolean ForceIconic; /* All new top windows are iconified */
|
|
||||||
|
|
||||||
GLboolean GLDebugSwitch; /* OpenGL state debugging switch */
|
|
||||||
GLboolean XSyncSwitch; /* X11 sync protocol switch */
|
|
||||||
|
|
||||||
GLboolean IgnoreKeyRepeat; /* Whether to ignore key repeat... */
|
|
||||||
|
|
||||||
GLuint FPSInterval; /* Interval between FPS printfs */
|
|
||||||
GLuint SwapCount; /* Count of glutSwapBuffer calls */
|
|
||||||
GLuint SwapTime; /* Time of last SwapBuffers */
|
|
||||||
|
|
||||||
SFG_Time Time; /* The time that glutInit was called */
|
|
||||||
SFG_List Timers; /* The freeglut timer hooks */
|
|
||||||
|
|
||||||
FGCBidle IdleCallback; /* The global idle callback */
|
|
||||||
|
|
||||||
FGCBmenuState MenuStateCallback; /* Menu callbacks are global */
|
|
||||||
FGCBmenuStatus MenuStatusCallback;
|
|
||||||
|
|
||||||
SFG_XYUse GameModeSize; /* The game mode screen's dimensions */
|
|
||||||
int GameModeDepth; /* The pixel depth for game mode */
|
|
||||||
int GameModeRefresh; /* The refresh rate for game mode */
|
|
||||||
|
|
||||||
int ActionOnWindowClose ; /* Action when user clicks "x" on window header bar */
|
|
||||||
|
|
||||||
fgExecutionState ExecState ; /* Current state of the GLUT execution */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The structure used by display initialization in freeglut_init.c
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Display SFG_Display;
|
|
||||||
struct tagSFG_Display
|
|
||||||
{
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
Display* Display; /* The display we are being run in. */
|
|
||||||
int Screen; /* The screen we are about to use. */
|
|
||||||
Window RootWindow; /* The screen's root window. */
|
|
||||||
int Connection; /* The display's connection number */
|
|
||||||
Atom DeleteWindow; /* The window deletion atom */
|
|
||||||
|
|
||||||
#ifdef X_XF86VidModeGetModeLine
|
|
||||||
XF86VidModeModeLine DisplayMode; /* Current screen's display settings */
|
|
||||||
int DisplayModeClock; /* The display mode's refresh rate */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
HINSTANCE Instance; /* The application's instance */
|
|
||||||
DEVMODE DisplayMode; /* Desktop's display settings */
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int ScreenWidth; /* The screen's width in pixels */
|
|
||||||
int ScreenHeight; /* The screen's height in pixels */
|
|
||||||
int ScreenWidthMM; /* The screen's width in milimeters */
|
|
||||||
int ScreenHeightMM; /* The screen's height in milimeters */
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The user can create any number of timer hooks
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Timer SFG_Timer;
|
|
||||||
struct tagSFG_Timer
|
|
||||||
{
|
|
||||||
SFG_Node Node;
|
|
||||||
int ID; /* The timer ID integer */
|
|
||||||
FGCBtimer Callback; /* The timer callback */
|
|
||||||
long TriggerTime; /* The timer trigger time */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A window and its OpenGL context. The contents of this structure
|
|
||||||
* are highly dependant on the target operating system we aim at...
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Context SFG_Context;
|
|
||||||
struct tagSFG_Context
|
|
||||||
{
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
Window Handle; /* The window's handle */
|
|
||||||
GLXContext Context; /* The OpenGL context */
|
|
||||||
XVisualInfo* VisualInfo; /* The window's visual information */
|
|
||||||
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
HWND Handle; /* The window's handle */
|
|
||||||
HDC Device; /* The window's device context */
|
|
||||||
HGLRC Context; /* The window's WGL context */
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int DoubleBuffered; /* Treat the window as double-buffered */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Window's state description. This structure should be kept portable.
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_WindowState SFG_WindowState;
|
|
||||||
struct tagSFG_WindowState
|
|
||||||
{
|
|
||||||
int Width; /* Window's width in pixels */
|
|
||||||
int Height; /* The same about the height */
|
|
||||||
|
|
||||||
GLboolean Redisplay; /* Do we have to redisplay? */
|
|
||||||
GLboolean Visible; /* Is the window visible now */
|
|
||||||
|
|
||||||
int Cursor; /* The currently selected cursor */
|
|
||||||
int Modifiers; /* The current ALT/SHIFT/CTRL state */
|
|
||||||
|
|
||||||
long JoystickPollRate; /* The joystick polling rate */
|
|
||||||
long JoystickLastPoll; /* When the last poll has happened */
|
|
||||||
|
|
||||||
int MouseX, MouseY; /* The most recent mouse position */
|
|
||||||
|
|
||||||
GLboolean IsGameMode; /* Is this the game mode window? */
|
|
||||||
|
|
||||||
#if TARGET_HOST_WIN32
|
|
||||||
GLboolean NeedToResize; /* Do we need to explicitly resize? */
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The window callbacks the user can supply us with. Should be kept portable.
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_WindowCallbacks SFG_WindowCallbacks;
|
|
||||||
struct tagSFG_WindowCallbacks
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Following callbacks are fully supported right now
|
|
||||||
* and are ready to be tested for GLUT conformance:
|
|
||||||
*/
|
|
||||||
FGCBdisplay Display;
|
|
||||||
FGCBreshape Reshape;
|
|
||||||
FGCBkeyboard Keyboard;
|
|
||||||
FGCBkeyboardUp KeyboardUp;
|
|
||||||
FGCBspecial Special;
|
|
||||||
FGCBspecialUp SpecialUp;
|
|
||||||
FGCBmouse Mouse;
|
|
||||||
FGCBmotion Motion;
|
|
||||||
FGCBpassive Passive;
|
|
||||||
FGCBentry Entry;
|
|
||||||
FGCBvisibility Visibility;
|
|
||||||
FGCBwindowStatus WindowStatus;
|
|
||||||
FGCBjoystick Joystick;
|
|
||||||
FGCBdestroy Destroy;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Those callbacks are being ignored for the moment
|
|
||||||
*/
|
|
||||||
FGCBselect Select;
|
|
||||||
FGCBoverlayDisplay OverlayDisplay;
|
|
||||||
FGCBspaceMotion SpaceMotion;
|
|
||||||
FGCBspaceRotate SpaceRotation;
|
|
||||||
FGCBspaceButton SpaceButton;
|
|
||||||
FGCBdials Dials;
|
|
||||||
FGCBbuttonBox ButtonBox;
|
|
||||||
FGCBtabletMotion TabletMotion;
|
|
||||||
FGCBtabletButton TabletButton;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This structure describes a menu
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Menu SFG_Menu;
|
|
||||||
struct tagSFG_Menu
|
|
||||||
{
|
|
||||||
SFG_Node Node;
|
|
||||||
void *UserData ; /* A. Donev: User data passed back at callback */
|
|
||||||
int ID; /* The global menu ID */
|
|
||||||
SFG_List Entries; /* The menu entries list */
|
|
||||||
FGCBmenu Callback; /* The menu callback */
|
|
||||||
FGCBdestroy Destroy; /* A. Donev: Destruction callback */
|
|
||||||
GLboolean IsActive; /* Is the menu selected? */
|
|
||||||
int Width; /* Menu box width in pixels */
|
|
||||||
int Height; /* Menu box height in pixels */
|
|
||||||
int X, Y; /* Menu box raster position */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is a menu entry
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_MenuEntry SFG_MenuEntry;
|
|
||||||
struct tagSFG_MenuEntry
|
|
||||||
{
|
|
||||||
SFG_Node Node;
|
|
||||||
int ID; /* The menu entry ID (local) */
|
|
||||||
int Ordinal; /* The menu's ordinal number */
|
|
||||||
char* Text; /* The text to be displayed */
|
|
||||||
SFG_Menu* SubMenu; /* Optional sub-menu tree */
|
|
||||||
GLboolean IsActive; /* Is the entry highlighted? */
|
|
||||||
int Width; /* Label's width in pixels */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A window, making part of freeglut windows hierarchy. Should be kept portable.
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Window SFG_Window;
|
|
||||||
struct tagSFG_Window
|
|
||||||
{
|
|
||||||
SFG_Node Node;
|
|
||||||
int ID; /* Window's ID number */
|
|
||||||
|
|
||||||
SFG_Context Window; /* Window and OpenGL context */
|
|
||||||
SFG_WindowState State; /* The window state */
|
|
||||||
SFG_WindowCallbacks Callbacks; /* The window callbacks */
|
|
||||||
void *UserData ; /* A. Donev: A pointer to user data used in rendering */
|
|
||||||
|
|
||||||
SFG_Menu* Menu[ FREEGLUT_MAX_MENUS ]; /* Menus appended to window */
|
|
||||||
SFG_Menu* ActiveMenu; /* The window's active menu */
|
|
||||||
|
|
||||||
SFG_Window* Parent; /* The parent to this window */
|
|
||||||
SFG_List Children; /* The subwindows d.l. list */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A linked list structure of windows
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_WindowList SFG_WindowList ;
|
|
||||||
struct tagSFG_WindowList
|
|
||||||
{
|
|
||||||
SFG_Window *window ;
|
|
||||||
GLboolean needToClose ;
|
|
||||||
SFG_WindowList *next ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This holds information about all the windows, menus etc.
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Structure SFG_Structure;
|
|
||||||
struct tagSFG_Structure
|
|
||||||
{
|
|
||||||
SFG_List Windows; /* The global windows list */
|
|
||||||
SFG_List Menus; /* The global menus list */
|
|
||||||
|
|
||||||
SFG_Window* Window; /* The currently active win. */
|
|
||||||
SFG_Menu* Menu; /* Same, but menu... */
|
|
||||||
|
|
||||||
SFG_Window* GameMode; /* The game mode window */
|
|
||||||
|
|
||||||
int WindowID; /* The new current window ID */
|
|
||||||
int MenuID; /* The new current menu ID */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This structure is used for the enumeration purposes.
|
|
||||||
* You can easily extend its functionalities by declaring
|
|
||||||
* a structure containing enumerator's contents and custom
|
|
||||||
* data, then casting its pointer to (SFG_Enumerator *).
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Enumerator SFG_Enumerator;
|
|
||||||
struct tagSFG_Enumerator
|
|
||||||
{
|
|
||||||
GLboolean found; /* Used to terminate search */
|
|
||||||
void* data; /* Custom data pointer */
|
|
||||||
};
|
|
||||||
typedef void (* FGCBenumerator )( SFG_Window *, SFG_Enumerator * );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The bitmap font structure
|
|
||||||
*/
|
|
||||||
typedef struct tagSFG_Font SFG_Font;
|
|
||||||
struct tagSFG_Font
|
|
||||||
{
|
|
||||||
char* Name; /* The source font name */
|
|
||||||
int Quantity; /* Number of chars in font */
|
|
||||||
int Height; /* Height of the characters */
|
|
||||||
const GLubyte** Characters; /* The characters mapping */
|
|
||||||
|
|
||||||
float xorig, yorig ; /* The origin of the character relative to the draw location */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The stroke font structures
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct tagSFG_StrokeVertex SFG_StrokeVertex;
|
|
||||||
struct tagSFG_StrokeVertex
|
|
||||||
{
|
|
||||||
GLfloat X, Y;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct tagSFG_StrokeStrip SFG_StrokeStrip;
|
|
||||||
struct tagSFG_StrokeStrip
|
|
||||||
{
|
|
||||||
int Number;
|
|
||||||
const SFG_StrokeVertex* Vertices;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct tagSFG_StrokeChar SFG_StrokeChar;
|
|
||||||
struct tagSFG_StrokeChar
|
|
||||||
{
|
|
||||||
GLfloat Right;
|
|
||||||
int Number;
|
|
||||||
const SFG_StrokeStrip* Strips;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct tagSFG_StrokeFont SFG_StrokeFont;
|
|
||||||
struct tagSFG_StrokeFont
|
|
||||||
{
|
|
||||||
char* Name; /* The source font name */
|
|
||||||
int Quantity; /* Number of chars in font */
|
|
||||||
GLfloat Height; /* Height of the characters */
|
|
||||||
const SFG_StrokeChar** Characters; /* The characters mapping */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* -- GLOBAL VARIABLES EXPORTS --------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Freeglut display related stuff (initialized once per session)
|
|
||||||
*/
|
|
||||||
extern SFG_Display fgDisplay;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Freeglut internal structure
|
|
||||||
*/
|
|
||||||
extern SFG_Structure fgStructure;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The current freeglut settings
|
|
||||||
*/
|
|
||||||
extern SFG_State fgState;
|
|
||||||
|
|
||||||
|
|
||||||
/* -- PRIVATE FUNCTION DECLARATIONS ---------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A call to this function makes us sure that the Display and Structure
|
|
||||||
* subsystems have been properly initialized and are ready to be used
|
|
||||||
*/
|
|
||||||
#define freeglut_assert_ready assert( fgState.Time.Set );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Following definitions are somewhat similiar to GLib's,
|
|
||||||
* but do not generate any log messages:
|
|
||||||
*/
|
|
||||||
#define freeglut_return_if_fail( expr ) if( !(expr) ) return;
|
|
||||||
#define freeglut_return_val_if_fail( expr, val ) if( !(expr) ) return( val );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A call to those macros assures us that there is a current
|
|
||||||
* window and menu set, respectively:
|
|
||||||
*/
|
|
||||||
#define freeglut_assert_window assert( fgStructure.Window != NULL );
|
|
||||||
#define freeglut_assert_menu assert( fgStructure.Menu != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The initialize and deinitialize functions get called on glutInit()
|
|
||||||
* and glutMainLoop() end respectively. They should create/clean up
|
|
||||||
* everything inside of the freeglut
|
|
||||||
*/
|
|
||||||
void fgInitialize( const char* displayName );
|
|
||||||
void fgDeinitialize( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Those two functions are used to create/destroy the freeglut internal
|
|
||||||
* structures. This actually happens when calling glutInit() and when
|
|
||||||
* quitting the glutMainLoop() (which actually happens, when all windows
|
|
||||||
* have been closed).
|
|
||||||
*/
|
|
||||||
void fgCreateStructure( void );
|
|
||||||
void fgDestroyStructure( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A helper function to check if a display mode is possible to use
|
|
||||||
*/
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
XVisualInfo* fgChooseVisual( void );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The window procedure for Win32 events handling
|
|
||||||
*/
|
|
||||||
#if TARGET_HOST_WIN32
|
|
||||||
LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
|
||||||
GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly, unsigned char layer_type );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Window creation, opening, closing and destruction.
|
|
||||||
* Defined in freeglut_structure.c, freeglut_window.c.
|
|
||||||
*/
|
|
||||||
SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title, int x, int y, int w, int h, GLboolean gameMode );
|
|
||||||
void fgSetWindow ( SFG_Window *window ) ;
|
|
||||||
void fgOpenWindow( SFG_Window* window, const char* title, int x, int y, int w, int h, GLboolean gameMode, int isSubWindow );
|
|
||||||
void fgCloseWindow( SFG_Window* window );
|
|
||||||
void fgAddToWindowDestroyList ( SFG_Window* window, GLboolean needToClose ) ;
|
|
||||||
void fgCloseWindows () ;
|
|
||||||
void fgDestroyWindow( SFG_Window* window, GLboolean needToClose );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Menu creation and destruction. Defined in freeglut_structure.c
|
|
||||||
*/
|
|
||||||
SFG_Menu* fgCreateMenu( FGCBmenu menuCallback );
|
|
||||||
void fgDestroyMenu( SFG_Menu* menu );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Joystick device management functions, defined in freeglut_joystick.c
|
|
||||||
*/
|
|
||||||
void fgJoystickInit( int ident );
|
|
||||||
void fgJoystickClose( void );
|
|
||||||
void fgJoystickPollWindow( SFG_Window* window );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Helper function to enumerate through all registered windows
|
|
||||||
* and one to enumerate all of a window's subwindows...
|
|
||||||
*
|
|
||||||
* The GFunc callback for those functions will be defined as:
|
|
||||||
*
|
|
||||||
* void enumCallback( gpointer window, gpointer enumerator );
|
|
||||||
*
|
|
||||||
* where window is the enumerated (sub)window pointer (SFG_Window *),
|
|
||||||
* and userData is the a custom user-supplied pointer. Functions
|
|
||||||
* are defined and exported from freeglut_structure.c file.
|
|
||||||
*/
|
|
||||||
void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator );
|
|
||||||
void fgEnumSubWindows( SFG_Window* window, FGCBenumerator enumCallback, SFG_Enumerator* enumerator );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* fgWindowByHandle returns a (SFG_Window *) value pointing to the
|
|
||||||
* first window in the queue matching the specified window handle.
|
|
||||||
* The function is defined in freeglut_structure.c file.
|
|
||||||
*/
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
SFG_Window* fgWindowByHandle( Window hWindow );
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
|
|
||||||
SFG_Window* fgWindowByHandle( HWND hWindow );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function is similiar to the previous one, except it is
|
|
||||||
* looking for a specified (sub)window identifier. The function
|
|
||||||
* is defined in freeglut_structure.c file.
|
|
||||||
*/
|
|
||||||
SFG_Window* fgWindowByID( int windowID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Looks up a menu given its ID. This is easier that fgWindowByXXX
|
|
||||||
* as all menus are placed in a single doubly linked list...
|
|
||||||
*/
|
|
||||||
SFG_Menu* fgMenuByID( int menuID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The menu activation and deactivation the code. This is the meat
|
|
||||||
* of the menu user interface handling code...
|
|
||||||
*/
|
|
||||||
void fgActivateMenu( SFG_Window* window, int button );
|
|
||||||
void fgExecuteMenuCallback( SFG_Menu* menu ) ;
|
|
||||||
GLboolean fgCheckActiveMenu ( SFG_Window *window, SFG_Menu *menu ) ;
|
|
||||||
void fgDeactivateMenu( SFG_Window *window );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function gets called just before the buffers swap, so that
|
|
||||||
* freeglut can display the pull-down menus via OpenGL. The function
|
|
||||||
* is defined in freeglut_menu.c file.
|
|
||||||
*/
|
|
||||||
void fgDisplayMenu( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Display the mouse cursor using OpenGL calls. The function
|
|
||||||
* is defined in freeglut_cursor.c file.
|
|
||||||
*/
|
|
||||||
void fgDisplayCursor( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Elapsed time as per glutGet(GLUT_ELAPSED_TIME).
|
|
||||||
*/
|
|
||||||
long fgElapsedTime( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* List functions
|
|
||||||
*/
|
|
||||||
void fgListInit(SFG_List *list);
|
|
||||||
void fgListAppend(SFG_List *list, SFG_Node *node);
|
|
||||||
void fgListRemove(SFG_List *list, SFG_Node *node);
|
|
||||||
int fgListLength(SFG_List *list);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Error Messages functions
|
|
||||||
*/
|
|
||||||
void fgError( const char *fmt, ... );
|
|
||||||
void fgWarning( const char *fmt, ... );
|
|
||||||
|
|
||||||
#endif /* FREEGLUT_INTERNAL_H */
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
@ -1,605 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_joystick.c
|
|
||||||
*
|
|
||||||
* Joystick handling code
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Steve Baker, <sjbaker1@airmail.net>
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* PWO: this is not exactly what Steve Baker has done for PLIB, as I had to convert
|
|
||||||
* it from C++ to C. And I've also reformatted it a bit (that's my little
|
|
||||||
* personal deviation :]) I don't really know if it is still portable...
|
|
||||||
* Steve: could you please add some comments to the code? :)
|
|
||||||
*
|
|
||||||
* FreeBSD port - courtesy of Stephen Montgomery-Smith <stephen@math.missouri.edu>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-joystick"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* PWO: I don't like it at all. It's a mess. Could it be cleared?
|
|
||||||
*/
|
|
||||||
#ifdef WIN32
|
|
||||||
# include <windows.h>
|
|
||||||
# if defined( __CYGWIN32__ ) || defined( __CYGWIN__ )
|
|
||||||
# define NEAR /* */
|
|
||||||
# define FAR /* */
|
|
||||||
# endif
|
|
||||||
# include <mmsystem.h>
|
|
||||||
# include <string.h>
|
|
||||||
#else
|
|
||||||
# include <unistd.h>
|
|
||||||
# include <fcntl.h>
|
|
||||||
# ifdef __FreeBSD__
|
|
||||||
# include <machine/joystick.h>
|
|
||||||
# define JS_DATA_TYPE joystick
|
|
||||||
# define JS_RETURN (sizeof(struct JS_DATA_TYPE))
|
|
||||||
# elif defined(__linux__)
|
|
||||||
# include <sys/ioctl.h>
|
|
||||||
# include <linux/joystick.h>
|
|
||||||
# include <errno.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check the joystick driver version
|
|
||||||
*/
|
|
||||||
# ifdef JS_VERSION
|
|
||||||
# if JS_VERSION >= 0x010000
|
|
||||||
# define JS_NEW
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
# ifndef JS_DATA_TYPE
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Not Windoze and no joystick driver...
|
|
||||||
*
|
|
||||||
* Well - we'll put these values in and that should
|
|
||||||
* allow the code to at least compile. The JS open
|
|
||||||
* routine should error out and shut off all the code
|
|
||||||
* downstream anyway
|
|
||||||
*/
|
|
||||||
struct JS_DATA_TYPE
|
|
||||||
{
|
|
||||||
int buttons;
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
};
|
|
||||||
|
|
||||||
# define JS_RETURN (sizeof(struct JS_DATA_TYPE))
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
# define _JS_MAX_AXES 6
|
|
||||||
#else
|
|
||||||
# ifdef __FreeBSD__
|
|
||||||
# define _JS_MAX_AXES 2
|
|
||||||
# else
|
|
||||||
# define _JS_MAX_AXES 6
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct tagSFG_Joystick SFG_Joystick;
|
|
||||||
struct tagSFG_Joystick
|
|
||||||
{
|
|
||||||
#ifdef __FreeBSD__
|
|
||||||
int id;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
JOYINFOEX js;
|
|
||||||
UINT js_id;
|
|
||||||
#else
|
|
||||||
# ifdef JS_NEW
|
|
||||||
struct js_event js;
|
|
||||||
int tmp_buttons;
|
|
||||||
float tmp_axes[ _JS_MAX_AXES ];
|
|
||||||
# else
|
|
||||||
struct JS_DATA_TYPE js;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
char fname[ 128 ];
|
|
||||||
int fd;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
GLboolean error;
|
|
||||||
int num_axes;
|
|
||||||
int num_buttons;
|
|
||||||
|
|
||||||
float dead_band[ _JS_MAX_AXES ];
|
|
||||||
float saturate [ _JS_MAX_AXES ];
|
|
||||||
float center [ _JS_MAX_AXES ];
|
|
||||||
float max [ _JS_MAX_AXES ];
|
|
||||||
float min [ _JS_MAX_AXES ];
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The static joystick structure pointer
|
|
||||||
*/
|
|
||||||
static SFG_Joystick* fgJoystick = NULL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Read the raw joystick data
|
|
||||||
*/
|
|
||||||
static void fghJoystickRawRead ( SFG_Joystick* joy, int* buttons, float* axes )
|
|
||||||
{
|
|
||||||
#ifdef WIN32
|
|
||||||
MMRESULT status;
|
|
||||||
#else
|
|
||||||
int status;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if( joy->error )
|
|
||||||
{
|
|
||||||
if( buttons )
|
|
||||||
*buttons = 0 ;
|
|
||||||
|
|
||||||
if( axes )
|
|
||||||
for( i=0; i<joy->num_axes; i++ )
|
|
||||||
axes[ i ] = 1500.0f;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
status = joyGetPosEx( joy->js_id, &joy->js );
|
|
||||||
|
|
||||||
if( status != JOYERR_NOERROR )
|
|
||||||
{
|
|
||||||
joy->error = TRUE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( buttons )
|
|
||||||
*buttons = joy->js.dwButtons;
|
|
||||||
|
|
||||||
if( axes )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* WARNING - Fall through case clauses!!
|
|
||||||
*/
|
|
||||||
switch( joy->num_axes )
|
|
||||||
{
|
|
||||||
case 6: axes[5] = (float) joy->js.dwVpos;
|
|
||||||
case 5: axes[4] = (float) joy->js.dwUpos;
|
|
||||||
case 4: axes[3] = (float) joy->js.dwRpos;
|
|
||||||
case 3: axes[2] = (float) joy->js.dwZpos;
|
|
||||||
case 2: axes[1] = (float) joy->js.dwYpos;
|
|
||||||
case 1: axes[0] = (float) joy->js.dwXpos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
# ifdef JS_NEW
|
|
||||||
|
|
||||||
while( 1 )
|
|
||||||
{
|
|
||||||
status = read( joy->fd, &joy->js, sizeof(struct js_event) );
|
|
||||||
|
|
||||||
if( status != sizeof(struct js_event) )
|
|
||||||
{
|
|
||||||
if( errno == EAGAIN )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Use the old values
|
|
||||||
*/
|
|
||||||
if( buttons ) *buttons = joy->tmp_buttons;
|
|
||||||
if( axes ) memcpy( axes, joy->tmp_axes, sizeof(float) * joy->num_axes );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
fgWarning( "%s", joy->fname );
|
|
||||||
joy->error = TRUE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch( joy->js.type & ~JS_EVENT_INIT )
|
|
||||||
{
|
|
||||||
case JS_EVENT_BUTTON:
|
|
||||||
if ( joy->js.value == 0 ) /* clear the flag */
|
|
||||||
joy->tmp_buttons &= ~(1 << joy->js.number);
|
|
||||||
else
|
|
||||||
joy->tmp_buttons |= (1 << joy->js.number);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case JS_EVENT_AXIS:
|
|
||||||
joy->tmp_axes[ joy->js.number ] = (float) joy->js.value;
|
|
||||||
|
|
||||||
if( axes )
|
|
||||||
memcpy( axes, joy->tmp_axes, sizeof(float) * joy->num_axes );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( buttons )
|
|
||||||
*buttons = joy->tmp_buttons;
|
|
||||||
}
|
|
||||||
# else
|
|
||||||
|
|
||||||
status = read( joy->fd, &joy->js, JS_RETURN );
|
|
||||||
|
|
||||||
if( status != JS_RETURN )
|
|
||||||
{
|
|
||||||
g_warning( joy->fname );
|
|
||||||
joy->error = TRUE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( buttons )
|
|
||||||
# ifdef __FreeBSD__
|
|
||||||
*buttons = (joy->js.b1 ? 1 : 0) | (joy->js.b2 ? 2 : 0);
|
|
||||||
# else
|
|
||||||
*buttons = joy->js.buttons;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
if( axes )
|
|
||||||
{
|
|
||||||
axes[ 0 ] = (float) joy->js.x;
|
|
||||||
axes[ 1 ] = (float) joy->js.y;
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Correct the joystick axis data
|
|
||||||
*/
|
|
||||||
static float fghJoystickFudgeAxis( SFG_Joystick* joy, float value, int axis )
|
|
||||||
{
|
|
||||||
if( value < joy->center[ axis ] )
|
|
||||||
{
|
|
||||||
float xx = (value - joy->center[ axis ]) / (joy->center[ axis ] - joy->min[ axis ]);
|
|
||||||
|
|
||||||
if( xx < -joy->saturate[ axis ] )
|
|
||||||
return( -1.0f );
|
|
||||||
|
|
||||||
if( xx > -joy->dead_band [ axis ] )
|
|
||||||
return( 0.0f );
|
|
||||||
|
|
||||||
xx = (xx + joy->dead_band[ axis ]) / (joy->saturate[ axis ] - joy->dead_band[ axis ]);
|
|
||||||
|
|
||||||
return( ( xx < -1.0f ) ? -1.0f : xx );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
float xx = (value - joy->center [ axis ]) / (joy->max[ axis ] - joy->center[ axis ]);
|
|
||||||
|
|
||||||
if( xx > joy->saturate[ axis ] )
|
|
||||||
return 1.0f ;
|
|
||||||
|
|
||||||
if( xx < joy->dead_band[ axis ] )
|
|
||||||
return 0.0f ;
|
|
||||||
|
|
||||||
xx = (xx - joy->dead_band[ axis ]) / (joy->saturate[ axis ] - joy->dead_band[ axis ]);
|
|
||||||
|
|
||||||
return( ( xx > 1.0f ) ? 1.0f : xx );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Read the corrected joystick data
|
|
||||||
*/
|
|
||||||
static void fghJoystickRead( SFG_Joystick* joy, int* buttons, float* axes )
|
|
||||||
{
|
|
||||||
float raw_axes[ _JS_MAX_AXES ];
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if( joy->error )
|
|
||||||
{
|
|
||||||
if( buttons )
|
|
||||||
*buttons = 0;
|
|
||||||
|
|
||||||
if( axes )
|
|
||||||
for ( i=0; i<joy->num_axes ; i++ )
|
|
||||||
axes[ i ] = 0.0f ;
|
|
||||||
}
|
|
||||||
|
|
||||||
fghJoystickRawRead( joy, buttons, raw_axes );
|
|
||||||
|
|
||||||
if( axes )
|
|
||||||
for( i=0 ; i<joy->num_axes ; i++ )
|
|
||||||
axes[ i ] = fghJoystickFudgeAxis( joy, raw_axes[ i ], i );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Happy happy happy joy joy joy (happy new year toudi :D)
|
|
||||||
*/
|
|
||||||
static void fghJoystickOpen( SFG_Joystick* joy )
|
|
||||||
{
|
|
||||||
#ifdef WIN32
|
|
||||||
JOYCAPS jsCaps;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
joy->js.dwFlags = JOY_RETURNALL;
|
|
||||||
joy->js.dwSize = sizeof( joy->js );
|
|
||||||
|
|
||||||
memset( &jsCaps, 0, sizeof(jsCaps) );
|
|
||||||
|
|
||||||
joy->error = (joyGetDevCaps( joy->js_id, &jsCaps, sizeof(jsCaps) ) != JOYERR_NOERROR);
|
|
||||||
joy->num_axes = (jsCaps.wNumAxes < _JS_MAX_AXES ) ? jsCaps.wNumAxes : _JS_MAX_AXES;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* WARNING - Fall through case clauses!!
|
|
||||||
*/
|
|
||||||
switch( joy->num_axes )
|
|
||||||
{
|
|
||||||
case 6 : joy->min[ 5 ] = (float) jsCaps.wVmin; joy->max[ 5 ] = (float) jsCaps.wVmax;
|
|
||||||
case 5 : joy->min[ 4 ] = (float) jsCaps.wUmin; joy->max[ 4 ] = (float) jsCaps.wUmax;
|
|
||||||
case 4 : joy->min[ 3 ] = (float) jsCaps.wRmin; joy->max[ 3 ] = (float) jsCaps.wRmax;
|
|
||||||
case 3 : joy->min[ 2 ] = (float) jsCaps.wZmin; joy->max[ 2 ] = (float) jsCaps.wZmax;
|
|
||||||
case 2 : joy->min[ 1 ] = (float) jsCaps.wYmin; joy->max[ 1 ] = (float) jsCaps.wYmax;
|
|
||||||
case 1 : joy->min[ 0 ] = (float) jsCaps.wXmin; joy->max[ 0 ] = (float) jsCaps.wXmax; break;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* I guess we have no axes at all
|
|
||||||
*/
|
|
||||||
default: joy->error = TRUE; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Guess all the rest judging on the axes extremals
|
|
||||||
*/
|
|
||||||
for( i=0 ; i<joy->num_axes ; i++ )
|
|
||||||
{
|
|
||||||
joy->center [ i ] = (joy->max[i] + joy->min[i]) * 0.5f;
|
|
||||||
joy->dead_band[ i ] = 0.0f;
|
|
||||||
joy->saturate [ i ] = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
# ifdef __FreeBSD__
|
|
||||||
int buttons[ _JS_MAX_AXES ];
|
|
||||||
float axes[ _JS_MAX_AXES ];
|
|
||||||
int noargs, in_no_axes;
|
|
||||||
char joyfname[ 1024 ];
|
|
||||||
FILE* joyfile;
|
|
||||||
# else
|
|
||||||
# ifndef JS_NEW
|
|
||||||
int counter;
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Default for older Linux systems.
|
|
||||||
*/
|
|
||||||
joy->num_axes = 2;
|
|
||||||
joy->num_buttons = 32;
|
|
||||||
|
|
||||||
# ifdef JS_NEW
|
|
||||||
for( i=0 ; i<_JS_MAX_AXES ; i++ )
|
|
||||||
joy->tmp_axes[ i ] = 0.0f ;
|
|
||||||
|
|
||||||
joy->tmp_buttons = 0 ;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
joy->fd = open( joy->fname, O_RDONLY );
|
|
||||||
|
|
||||||
joy->error = (joy->fd < 0);
|
|
||||||
|
|
||||||
if( joy->error )
|
|
||||||
return;
|
|
||||||
|
|
||||||
# ifdef __FreeBSD__
|
|
||||||
fghJoystickRawRead(joy, buttons, axes );
|
|
||||||
joy->error = axes[ 0 ] < -1000000000.0f;
|
|
||||||
if( joy->error )
|
|
||||||
return ;
|
|
||||||
|
|
||||||
sprintf( joyfname, "%s/.joy%drc", g_getenv( "HOME" ), joy->id );
|
|
||||||
|
|
||||||
joyfile = fopen( joyfname, "r" );
|
|
||||||
joy->error = (joyfile == NULL);
|
|
||||||
if( joy->error )
|
|
||||||
return;
|
|
||||||
|
|
||||||
noargs = fscanf(
|
|
||||||
joyfile, "%d%f%f%f%f%f%f",
|
|
||||||
&in_no_axes,
|
|
||||||
&joy->min[ 0 ], &joy->center[ 0 ], &joy->max[ 0 ],
|
|
||||||
&joy->min[ 1 ], &joy->center[ 1 ], &joy->max[ 1 ]
|
|
||||||
);
|
|
||||||
|
|
||||||
joy->error = (noargs != 7) || (in_no_axes != _JS_MAX_AXES);
|
|
||||||
fclose( joyfile );
|
|
||||||
if( joy->error )
|
|
||||||
return;
|
|
||||||
|
|
||||||
for( i=0 ; i<_JS_MAX_AXES ; i++ )
|
|
||||||
{
|
|
||||||
joy->dead_band[ i ] = 0.0f;
|
|
||||||
joy->saturate [ i ] = 1.0f;
|
|
||||||
}
|
|
||||||
# else
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the correct number of axes for the linux driver
|
|
||||||
*/
|
|
||||||
# ifdef JS_NEW
|
|
||||||
ioctl( joy->fd, JSIOCGAXES , &joy->num_axes );
|
|
||||||
ioctl( joy->fd, JSIOCGBUTTONS, &joy->num_buttons );
|
|
||||||
fcntl( joy->fd, F_SETFL, O_NONBLOCK );
|
|
||||||
|
|
||||||
# endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The Linux driver seems to return 512 for all axes
|
|
||||||
* when no stick is present - but there is a chance
|
|
||||||
* that could happen by accident - so it's gotta happen
|
|
||||||
* on both axes for at least 100 attempts.
|
|
||||||
*
|
|
||||||
* PWO: shouldn't be that done somehow wiser on the kernel level?
|
|
||||||
*/
|
|
||||||
# ifndef JS_NEW
|
|
||||||
counter = 0 ;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
fghJoystickRawRead( joy, NULL, joy->center );
|
|
||||||
counter++;
|
|
||||||
} while( !joy->error && counter < 100 && joy->center[ 0 ] == 512.0f && joy->center[ 1 ] == 512.0f );
|
|
||||||
|
|
||||||
if( counter >= 100 )
|
|
||||||
joy->error = TRUE;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
for( i=0 ; i<_JS_MAX_AXES ; i++ )
|
|
||||||
{
|
|
||||||
# ifdef JS_NEW
|
|
||||||
joy->max [ i ] = 32767.0f;
|
|
||||||
joy->center[ i ] = 0.0f;
|
|
||||||
joy->min [ i ] = -32767.0f;
|
|
||||||
# else
|
|
||||||
joy->max[ i ] = joy->center[ i ] * 2.0f;
|
|
||||||
joy->min[ i ] = 0.0f;
|
|
||||||
# endif
|
|
||||||
joy->dead_band[ i ] = 0.0f ;
|
|
||||||
joy->saturate [ i ] = 1.0f ;
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void fgJoystickInit( int ident )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Make sure we don't get reinitialized
|
|
||||||
*/
|
|
||||||
if( fgJoystick != NULL )
|
|
||||||
fgError( "illegal attemp to initialize joystick device" );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Have the global joystick structure created
|
|
||||||
*/
|
|
||||||
fgJoystick = calloc( sizeof(SFG_Joystick), 1 );
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
switch( ident )
|
|
||||||
{
|
|
||||||
case 0: fgJoystick->js_id = JOYSTICKID1; fghJoystickOpen( fgJoystick ); break;
|
|
||||||
case 1: fgJoystick->js_id = JOYSTICKID2; fghJoystickOpen( fgJoystick ); break;
|
|
||||||
default: fgJoystick->num_axes = 0; fgJoystick->error = TRUE; break;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
|
|
||||||
# ifdef __FreeBSD__
|
|
||||||
fgJoystick->id = ident;
|
|
||||||
sprintf( fgJoystick->fname, "/dev/joy%d", ident );
|
|
||||||
# else
|
|
||||||
sprintf( fgJoystick->fname, "/dev/js%d", ident );
|
|
||||||
# endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Let's try opening the joystick device now:
|
|
||||||
*/
|
|
||||||
fghJoystickOpen( fgJoystick );
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void fgJoystickClose( void )
|
|
||||||
{
|
|
||||||
if( fgJoystick == NULL )
|
|
||||||
fgError( "illegal attempt to deinitialize joystick device" );
|
|
||||||
|
|
||||||
#ifndef WIN32
|
|
||||||
if( fgJoystick->error != TRUE )
|
|
||||||
close( fgJoystick->fd );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
free ( fgJoystick ) ;
|
|
||||||
fgJoystick = NULL ; /* show joystick has been deinitialized */
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Polls the joystick and executes the joystick callback hooked to the
|
|
||||||
* window specified in the function's parameter:
|
|
||||||
*/
|
|
||||||
void fgJoystickPollWindow( SFG_Window* window )
|
|
||||||
{
|
|
||||||
float axes[ _JS_MAX_AXES ];
|
|
||||||
int buttons;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the joystick device is initialized, the window seems valid
|
|
||||||
* and that there is a joystick callback hooked to it:
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( fgJoystick != NULL && window != NULL );
|
|
||||||
freeglut_return_if_fail( window->Callbacks.Joystick != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Poll the joystick now:
|
|
||||||
*/
|
|
||||||
fghJoystickRead( fgJoystick, &buttons, axes );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Execute the freeglut joystick callback now
|
|
||||||
*/
|
|
||||||
window->Callbacks.Joystick(
|
|
||||||
buttons,
|
|
||||||
(int) (axes[ 0 ] * 1000.0f),
|
|
||||||
(int) (axes[ 1 ] * 1000.0f),
|
|
||||||
(int) (axes[ 2 ] * 1000.0f)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* PWO: These jsJoystick class methods have not been implemented.
|
|
||||||
* We might consider adding such functions to freeglut-2.0.
|
|
||||||
*/
|
|
||||||
#if 0
|
|
||||||
int getNumAxes () { return num_axes ; }
|
|
||||||
int notWorking () { return error ; }
|
|
||||||
|
|
||||||
float getDeadBand ( int axis ) { return dead_band [ axis ] ; }
|
|
||||||
void setDeadBand ( int axis, float db ) { dead_band [ axis ] = db ; }
|
|
||||||
|
|
||||||
float getSaturation ( int axis ) { return saturate [ axis ] ; }
|
|
||||||
void setSaturation ( int axis, float st ) { saturate [ axis ] = st ; }
|
|
||||||
|
|
||||||
void setMinRange ( float *axes ) { memcpy ( min , axes, num_axes * sizeof(float) ) ; }
|
|
||||||
void setMaxRange ( float *axes ) { memcpy ( max , axes, num_axes * sizeof(float) ) ; }
|
|
||||||
void setCenter ( float *axes ) { memcpy ( center, axes, num_axes * sizeof(float) ) ; }
|
|
||||||
|
|
||||||
void getMinRange ( float *axes ) { memcpy ( axes, min , num_axes * sizeof(float) ) ; }
|
|
||||||
void getMaxRange ( float *axes ) { memcpy ( axes, max , num_axes * sizeof(float) ) ; }
|
|
||||||
void getCenter ( float *axes ) { memcpy ( axes, center, num_axes * sizeof(float) ) ; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,860 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_menu.c
|
|
||||||
*
|
|
||||||
* Pull-down menu creation and handling.
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Thu Dec 16 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-menu"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO BEFORE THE STABLE RELEASE:
|
|
||||||
*
|
|
||||||
* It would be cool if the submenu entries were somehow marked, for example with a dings
|
|
||||||
* on the right menu border or something like that. Think about the possibility of doing
|
|
||||||
* the menu on layers *or* using the native window system instead of OpenGL.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* -- DEFINITIONS ---------------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We'll be using freeglut fonts to draw the menu
|
|
||||||
*/
|
|
||||||
#define FREEGLUT_MENU_FONT GLUT_BITMAP_8_BY_13
|
|
||||||
#define FREEGLUT_MENU_HEIGHT 15
|
|
||||||
#define FREEGLUT_MENU_BORDER 8
|
|
||||||
|
|
||||||
|
|
||||||
/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Private static function to find a menu entry by index
|
|
||||||
*/
|
|
||||||
static SFG_MenuEntry *fghFindMenuEntry( SFG_Menu* menu, int index )
|
|
||||||
{
|
|
||||||
SFG_MenuEntry *entry;
|
|
||||||
int i = 1;
|
|
||||||
|
|
||||||
for( entry = menu->Entries.First; entry; entry = entry->Node.Next)
|
|
||||||
{
|
|
||||||
if (i == index)
|
|
||||||
break;
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
|
|
||||||
return entry;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Private static function to check for the current menu/sub menu activity state
|
|
||||||
*/
|
|
||||||
static GLboolean fghCheckMenuStatus( SFG_Window* window, SFG_Menu* menu )
|
|
||||||
{
|
|
||||||
SFG_MenuEntry* menuEntry;
|
|
||||||
int x, y;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First of all check any of the active sub menus...
|
|
||||||
*/
|
|
||||||
for( menuEntry = menu->Entries.First; menuEntry;
|
|
||||||
menuEntry = menuEntry->Node.Next )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Is that an active sub menu by any case?
|
|
||||||
*/
|
|
||||||
if( menuEntry->SubMenu != NULL && menuEntry->IsActive == TRUE )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* OK, have the sub-menu checked, too. If it returns TRUE, it will mean
|
|
||||||
* that it caught the mouse cursor and we do not need to regenerate
|
|
||||||
* the activity list, and so our parents do...
|
|
||||||
*/
|
|
||||||
if( fghCheckMenuStatus( window, menuEntry->SubMenu ) == TRUE )
|
|
||||||
return( TRUE );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* That much about our sub menus, let's get to checking the current menu:
|
|
||||||
*/
|
|
||||||
x = window->State.MouseX - menu->X;
|
|
||||||
y = window->State.MouseY - menu->Y;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Mark all menu entries inactive...
|
|
||||||
*/
|
|
||||||
for( menuEntry = menu->Entries.First; menuEntry;
|
|
||||||
menuEntry = menuEntry->Node.Next )
|
|
||||||
{
|
|
||||||
menuEntry->IsActive = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
menu->IsActive = FALSE;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if the mouse cursor is contained within the current menu box
|
|
||||||
*/
|
|
||||||
if( x >= 0 && x < menu->Width && y >= 0 && y < menu->Height )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Calculation of the highlighted menu item is easy enough now:
|
|
||||||
*/
|
|
||||||
int menuID = y / FREEGLUT_MENU_HEIGHT;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The mouse cursor is somewhere over our box, check it out.
|
|
||||||
*/
|
|
||||||
menuEntry = fghFindMenuEntry( menu, menuID + 1 );
|
|
||||||
assert( menuEntry != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Mark the menu as active...
|
|
||||||
*/
|
|
||||||
menuEntry->IsActive = TRUE;
|
|
||||||
menuEntry->Ordinal = menuID;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Don't forget about marking the current menu as active, too:
|
|
||||||
*/
|
|
||||||
menu->IsActive = TRUE;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* OKi, we have marked that entry as active, but it would be also
|
|
||||||
* nice to have its contents updated, in case it's a sub menu.
|
|
||||||
* Also, ignore the return value of the check function:
|
|
||||||
*/
|
|
||||||
if( menuEntry->SubMenu != NULL )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Set up the initial menu position now...
|
|
||||||
*/
|
|
||||||
|
|
||||||
menuEntry->SubMenu->X = menu->X + menu->Width ;
|
|
||||||
menuEntry->SubMenu->Y = menu->Y + menuEntry->Ordinal * FREEGLUT_MENU_HEIGHT ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the submenu stays within the window
|
|
||||||
*/
|
|
||||||
if ( menuEntry->SubMenu->X + menuEntry->SubMenu->Width > glutGet ( GLUT_WINDOW_WIDTH ) )
|
|
||||||
{
|
|
||||||
menuEntry->SubMenu->X = menu->X - menuEntry->SubMenu->Width ;
|
|
||||||
if ( menuEntry->SubMenu->X < 0 )
|
|
||||||
menuEntry->SubMenu->X = glutGet ( GLUT_WINDOW_WIDTH ) - menuEntry->SubMenu->Width ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ...then check the submenu's state:
|
|
||||||
*/
|
|
||||||
fghCheckMenuStatus( window, menuEntry->SubMenu );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Even if the submenu turned up inactive, activate it because its parent entry is active
|
|
||||||
*/
|
|
||||||
menuEntry->SubMenu->IsActive = TRUE ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Report back that we have caught the menu cursor
|
|
||||||
*/
|
|
||||||
return( TRUE );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Looks like the menu cursor is somewhere else...
|
|
||||||
*/
|
|
||||||
return( FALSE );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Displays a menu box and all of its submenus (if they are active)
|
|
||||||
*/
|
|
||||||
static void fghDisplayMenuBox( SFG_Menu* menu )
|
|
||||||
{
|
|
||||||
SFG_MenuEntry *menuEntry;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Have the menu box drawn first. The +- values are
|
|
||||||
* here just to make it more nice-looking...
|
|
||||||
*/
|
|
||||||
glColor4f( 0.0f, 0.0f, 0.0f, 1.0f );
|
|
||||||
glBegin( GL_QUADS );
|
|
||||||
glVertex2i( menu->X , menu->Y - 1 );
|
|
||||||
glVertex2i( menu->X + menu->Width, menu->Y - 1 );
|
|
||||||
glVertex2i( menu->X + menu->Width, menu->Y + 4 + menu->Height );
|
|
||||||
glVertex2i( menu->X , menu->Y + 4 + menu->Height );
|
|
||||||
glEnd();
|
|
||||||
|
|
||||||
glColor4f( 0.3f, 0.4f, 0.5f, 1.0f );
|
|
||||||
glBegin( GL_QUADS );
|
|
||||||
glVertex2i( menu->X - 2 , menu->Y + 1 );
|
|
||||||
glVertex2i( menu->X - 2 + menu->Width, menu->Y + 1 );
|
|
||||||
glVertex2i( menu->X - 2 + menu->Width, menu->Y + 2 + menu->Height );
|
|
||||||
glVertex2i( menu->X - 2 , menu->Y + 2 + menu->Height );
|
|
||||||
glEnd();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if any of the submenus is currently active...
|
|
||||||
*/
|
|
||||||
for( menuEntry = menu->Entries.First; menuEntry;
|
|
||||||
menuEntry = menuEntry->Node.Next )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Has the menu been marked as active, maybe?
|
|
||||||
*/
|
|
||||||
if( menuEntry->IsActive == TRUE )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* That's truly right, and we need to have it highlighted.
|
|
||||||
* There is an assumption that mouse cursor didn't move
|
|
||||||
* since the last check of menu activity state:
|
|
||||||
*/
|
|
||||||
int menuID = menuEntry->Ordinal;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* So have the highlight drawn...
|
|
||||||
*/
|
|
||||||
glColor4f( 0.2f, 0.3f, 0.4f, 1.0f );
|
|
||||||
glBegin( GL_QUADS );
|
|
||||||
glVertex2i( menu->X - 2 , menu->Y + (menuID + 0)*FREEGLUT_MENU_HEIGHT + 1 );
|
|
||||||
glVertex2i( menu->X - 2 + menu->Width, menu->Y + (menuID + 0)*FREEGLUT_MENU_HEIGHT + 1 );
|
|
||||||
glVertex2i( menu->X - 2 + menu->Width, menu->Y + (menuID + 1)*FREEGLUT_MENU_HEIGHT + 2 );
|
|
||||||
glVertex2i( menu->X - 2 , menu->Y + (menuID + 1)*FREEGLUT_MENU_HEIGHT + 2 );
|
|
||||||
glEnd();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Print the menu entries now...
|
|
||||||
*/
|
|
||||||
glColor4f( 1, 1, 1, 1 );
|
|
||||||
|
|
||||||
for( menuEntry = menu->Entries.First, i=0; menuEntry;
|
|
||||||
menuEntry = menuEntry->Node.Next, ++i )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Move the raster into position...
|
|
||||||
*/
|
|
||||||
glRasterPos2i(
|
|
||||||
menu->X + FREEGLUT_MENU_BORDER,
|
|
||||||
menu->Y + (i + 1)*FREEGLUT_MENU_HEIGHT
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Have the label drawn, character after character:
|
|
||||||
*/
|
|
||||||
glutBitmapString( FREEGLUT_MENU_FONT, menuEntry->Text);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If it's a submenu, draw a right arrow
|
|
||||||
*/
|
|
||||||
if ( menuEntry->SubMenu != NULL )
|
|
||||||
{
|
|
||||||
GLubyte arrow_char [] = { 0, 0, 32, 48, 56, 60, 62, 63, 62, 60, 56, 48, 32, 0, 0 } ;
|
|
||||||
int width = glutBitmapWidth ( FREEGLUT_MENU_FONT, ' ' ) ;
|
|
||||||
|
|
||||||
glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set up the pixel unpacking ways
|
|
||||||
*/
|
|
||||||
glPixelStorei( GL_UNPACK_SWAP_BYTES, GL_FALSE );
|
|
||||||
glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE );
|
|
||||||
glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
|
|
||||||
glPixelStorei( GL_UNPACK_SKIP_ROWS, 0 );
|
|
||||||
glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );
|
|
||||||
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
|
|
||||||
|
|
||||||
glRasterPos2i ( menu->X + menu->Width - 2 - width,
|
|
||||||
menu->Y + (i + 1)*FREEGLUT_MENU_HEIGHT ) ;
|
|
||||||
glBitmap ( width, FREEGLUT_MENU_HEIGHT, 0, 0, 0.0, 0.0, arrow_char ) ;
|
|
||||||
glPopClientAttrib();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Now we are ready to check if any of our children needs to be redrawn:
|
|
||||||
*/
|
|
||||||
for( menuEntry = menu->Entries.First; menuEntry;
|
|
||||||
menuEntry = menuEntry->Node.Next )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Is that an active sub menu by any case?
|
|
||||||
*/
|
|
||||||
if( menuEntry->SubMenu != NULL && menuEntry->IsActive == TRUE )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Yeah, indeed. Have it redrawn now:
|
|
||||||
*/
|
|
||||||
fghDisplayMenuBox( menuEntry->SubMenu );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Displays the currently active menu for the current window
|
|
||||||
*/
|
|
||||||
void fgDisplayMenu( void )
|
|
||||||
{
|
|
||||||
SFG_Window* window = fgStructure.Window;
|
|
||||||
SFG_Menu* menu = NULL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure there is a current window available
|
|
||||||
*/
|
|
||||||
freeglut_assert_window;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if there is an active menu attached to this window...
|
|
||||||
*/
|
|
||||||
menu = window->ActiveMenu;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Did we find an active window?
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( menu != NULL );
|
|
||||||
/*
|
|
||||||
* Prepare the OpenGL state to do the rendering first:
|
|
||||||
*/
|
|
||||||
glPushAttrib( GL_DEPTH_BUFFER_BIT | GL_TEXTURE_BIT | GL_LIGHTING_BIT | GL_POLYGON_BIT );
|
|
||||||
|
|
||||||
glDisable( GL_DEPTH_TEST );
|
|
||||||
glDisable( GL_TEXTURE_2D );
|
|
||||||
glDisable( GL_LIGHTING );
|
|
||||||
glDisable( GL_CULL_FACE );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We'll use an orthogonal projection matrix to draw the menu:
|
|
||||||
*/
|
|
||||||
glMatrixMode( GL_PROJECTION );
|
|
||||||
glPushMatrix();
|
|
||||||
glLoadIdentity();
|
|
||||||
glOrtho(
|
|
||||||
0, glutGet( GLUT_WINDOW_WIDTH ),
|
|
||||||
glutGet( GLUT_WINDOW_HEIGHT ), 0,
|
|
||||||
-1, 1
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Model-view matix gets reset to identity:
|
|
||||||
*/
|
|
||||||
glMatrixMode( GL_MODELVIEW );
|
|
||||||
glPushMatrix();
|
|
||||||
glLoadIdentity();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First of all, have the exact menu status check:
|
|
||||||
*/
|
|
||||||
fghCheckMenuStatus( window, menu );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The status has been updated and we're ready to have the menu drawn now:
|
|
||||||
*/
|
|
||||||
fghDisplayMenuBox( menu );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Restore the old OpenGL settings now
|
|
||||||
*/
|
|
||||||
glPopAttrib();
|
|
||||||
|
|
||||||
glMatrixMode( GL_PROJECTION );
|
|
||||||
glPopMatrix();
|
|
||||||
glMatrixMode( GL_MODELVIEW );
|
|
||||||
glPopMatrix();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Activates a menu pointed by the function argument
|
|
||||||
*/
|
|
||||||
void fgActivateMenu( SFG_Window* window, int button )
|
|
||||||
{
|
|
||||||
int x, y;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We'll be referencing this menu a lot, so remember its address:
|
|
||||||
*/
|
|
||||||
SFG_Menu* menu = window->Menu[ button ];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Mark the menu as active, so that it gets displayed:
|
|
||||||
*/
|
|
||||||
window->ActiveMenu = menu;
|
|
||||||
menu->IsActive = TRUE ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Grab the mouse cursor position respective to the current window
|
|
||||||
*/
|
|
||||||
x = window->State.MouseX;
|
|
||||||
y = window->State.MouseY;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set up the initial menu position now:
|
|
||||||
*/
|
|
||||||
menu->X = x ;
|
|
||||||
menu->Y = y ;
|
|
||||||
|
|
||||||
fgSetWindow ( window ) ;
|
|
||||||
|
|
||||||
if( x > ( glutGet( GLUT_WINDOW_WIDTH ) - menu->Width ) )
|
|
||||||
menu->X = glutGet( GLUT_WINDOW_WIDTH ) - menu->Width;
|
|
||||||
if( y > ( glutGet( GLUT_WINDOW_HEIGHT ) - menu->Height) )
|
|
||||||
menu->Y = glutGet( GLUT_WINDOW_HEIGHT ) - menu->Height;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check whether an active menu absorbs a mouse click
|
|
||||||
*/
|
|
||||||
GLboolean fgCheckActiveMenu ( SFG_Window *window, SFG_Menu *menu )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Near as I can tell, this is the active menu behaviour:
|
|
||||||
* - Down-click any button outside the menu, menu active: deactivate the menu
|
|
||||||
* - Down-click any button inside the menu, menu active: select the menu entry and deactivate the menu
|
|
||||||
* - Up-click the menu button outside the menu, menu active: nothing happens
|
|
||||||
* - Up-click the menu button inside the menu, menu active: select the menu entry and deactivate the menu
|
|
||||||
* Since menus can have submenus, we need to check this recursively.
|
|
||||||
*/
|
|
||||||
return fghCheckMenuStatus ( window, menu ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Function to check for menu entry selection on menu deactivation
|
|
||||||
*/
|
|
||||||
void fgExecuteMenuCallback( SFG_Menu* menu )
|
|
||||||
{
|
|
||||||
SFG_MenuEntry *menuEntry;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First of all check any of the active sub menus...
|
|
||||||
*/
|
|
||||||
for( menuEntry = menu->Entries.First; menuEntry; menuEntry = menuEntry->Node.Next)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Is this menu entry active?
|
|
||||||
*/
|
|
||||||
if( menuEntry->IsActive == TRUE )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* If there is not a sub menu, execute the menu callback and return...
|
|
||||||
*/
|
|
||||||
if( menuEntry->SubMenu == NULL )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* ...certainly given that there is one...
|
|
||||||
*/
|
|
||||||
if( menu->Callback != NULL )
|
|
||||||
menu->Callback( menuEntry->ID );
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Otherwise recurse into the submenu.
|
|
||||||
*/
|
|
||||||
fgExecuteMenuCallback( menuEntry->SubMenu );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* There is little sense in dwelling the search on
|
|
||||||
*/
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Deactivates a menu pointed by the function argument.
|
|
||||||
*/
|
|
||||||
void fgDeactivateMenu( SFG_Window *window )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Check if there is an active menu attached to this window...
|
|
||||||
*/
|
|
||||||
SFG_Menu* menu = window->ActiveMenu;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Did we find an active window?
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( menu != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Forget about having that menu active anymore, now:
|
|
||||||
*/
|
|
||||||
window->ActiveMenu = NULL;
|
|
||||||
menu->IsActive = FALSE ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Recalculates current menu's box size
|
|
||||||
*/
|
|
||||||
void fghCalculateMenuBoxSize( void )
|
|
||||||
{
|
|
||||||
SFG_MenuEntry* menuEntry;
|
|
||||||
int width = 0, height = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure there is a current menu set
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The menu's box size depends on the menu entries:
|
|
||||||
*/
|
|
||||||
for( menuEntry = fgStructure.Menu->Entries.First; menuEntry;
|
|
||||||
menuEntry = menuEntry->Node.Next)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Update the menu entry's width value
|
|
||||||
*/
|
|
||||||
menuEntry->Width = glutBitmapLength( FREEGLUT_MENU_FONT, menuEntry->Text );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if it's the biggest we've found
|
|
||||||
*/
|
|
||||||
if( menuEntry->Width > width )
|
|
||||||
width = menuEntry->Width;
|
|
||||||
|
|
||||||
height += FREEGLUT_MENU_HEIGHT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Store the menu's box size now:
|
|
||||||
*/
|
|
||||||
fgStructure.Menu->Height = height;
|
|
||||||
fgStructure.Menu->Width = width + 2 * FREEGLUT_MENU_BORDER ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Creates a new menu object, adding it to the freeglut structure
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutCreateMenu( void (* callback)( int ) )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* The menu object creation code resides in freeglut_structure.c
|
|
||||||
*/
|
|
||||||
return( fgCreateMenu( callback )->ID );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Destroys a menu object, removing all references to it
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutDestroyMenu( int menuID )
|
|
||||||
{
|
|
||||||
SFG_Menu* menu = fgMenuByID( menuID );
|
|
||||||
|
|
||||||
freeglut_assert_ready; freeglut_return_if_fail( menu != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The menu object destruction code resides in freeglut_structure.c
|
|
||||||
*/
|
|
||||||
fgDestroyMenu( menu );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns the ID number of the currently active menu
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutGetMenu( void )
|
|
||||||
{
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Is there a current menu set?
|
|
||||||
*/
|
|
||||||
if( fgStructure.Menu != NULL )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Yes, there is indeed...
|
|
||||||
*/
|
|
||||||
return( fgStructure.Menu->ID );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* No, there is no current menu at all
|
|
||||||
*/
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sets the current menu given its menu ID
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutSetMenu( int menuID )
|
|
||||||
{
|
|
||||||
SFG_Menu* menu = fgMenuByID( menuID );
|
|
||||||
|
|
||||||
freeglut_assert_ready; freeglut_return_if_fail( menu != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The current menu pointer is stored in fgStructure.Menu
|
|
||||||
*/
|
|
||||||
fgStructure.Menu = menu;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Adds a menu entry to the bottom of the current menu
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutAddMenuEntry( const char* label, int value )
|
|
||||||
{
|
|
||||||
SFG_MenuEntry* menuEntry = calloc( sizeof(SFG_MenuEntry), 1 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure there is a current menu set
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Fill in the appropriate values...
|
|
||||||
*/
|
|
||||||
menuEntry->Text = strdup( label );
|
|
||||||
menuEntry->ID = value;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Have the new menu entry attached to the current menu
|
|
||||||
*/
|
|
||||||
fgListAppend( &fgStructure.Menu->Entries, &menuEntry->Node );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Update the menu's dimensions now
|
|
||||||
*/
|
|
||||||
fghCalculateMenuBoxSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add a sub menu to the bottom of the current menu
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutAddSubMenu( const char* label, int subMenuID )
|
|
||||||
{
|
|
||||||
SFG_MenuEntry* menuEntry = calloc( sizeof(SFG_MenuEntry), 1 );
|
|
||||||
SFG_Menu* subMenu = fgMenuByID( subMenuID );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure there is a current menu and the sub menu
|
|
||||||
* we want to attach actually exists...
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu != NULL );
|
|
||||||
freeglut_return_if_fail( subMenu != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Fill in the appropriate values
|
|
||||||
*/
|
|
||||||
menuEntry->Text = strdup( label );
|
|
||||||
menuEntry->SubMenu = subMenu;
|
|
||||||
menuEntry->ID = -1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Have the new menu entry attached to the current menu
|
|
||||||
*/
|
|
||||||
fgListAppend( &fgStructure.Menu->Entries, &menuEntry->Node );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Update the menu's dimensions now
|
|
||||||
*/
|
|
||||||
fghCalculateMenuBoxSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Changes the specified menu item in the current menu into a menu entry
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value )
|
|
||||||
{
|
|
||||||
SFG_MenuEntry* menuEntry = NULL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure there is a current menu set...
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get n-th menu entry in the current menu, starting from one:
|
|
||||||
*/
|
|
||||||
menuEntry = fghFindMenuEntry( fgStructure.Menu, item );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the menu entry exists
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( menuEntry != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We want it to become a normal menu entry, so:
|
|
||||||
*/
|
|
||||||
if( menuEntry->Text != NULL )
|
|
||||||
free( menuEntry->Text );
|
|
||||||
|
|
||||||
menuEntry->Text = strdup( label );
|
|
||||||
menuEntry->ID = value;
|
|
||||||
menuEntry->SubMenu = NULL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Update the menu's dimensions now
|
|
||||||
*/
|
|
||||||
fghCalculateMenuBoxSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Changes the specified menu item in the current menu into a sub-menu trigger.
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutChangeToSubMenu( int item, const char* label, int subMenuID )
|
|
||||||
{
|
|
||||||
SFG_Menu* subMenu = fgMenuByID( subMenuID );
|
|
||||||
SFG_MenuEntry* menuEntry = NULL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure there is a current menu set and the sub menu exists...
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu != NULL );
|
|
||||||
freeglut_return_if_fail( subMenu != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get n-th menu entry in the current menu, starting from one:
|
|
||||||
*/
|
|
||||||
menuEntry = fghFindMenuEntry( fgStructure.Menu, item );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the menu entry exists
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( menuEntry != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We want it to become a sub menu entry, so:
|
|
||||||
*/
|
|
||||||
if( menuEntry->Text != NULL )
|
|
||||||
free( menuEntry->Text );
|
|
||||||
|
|
||||||
menuEntry->Text = strdup( label );
|
|
||||||
menuEntry->SubMenu = subMenu;
|
|
||||||
menuEntry->ID = -1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Update the menu's dimensions now
|
|
||||||
*/
|
|
||||||
fghCalculateMenuBoxSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Removes the specified menu item from the current menu
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutRemoveMenuItem( int item )
|
|
||||||
{
|
|
||||||
SFG_MenuEntry* menuEntry;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure there is a current menu set
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready; freeglut_return_if_fail( fgStructure.Menu != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get n-th menu entry in the current menu, starting from one:
|
|
||||||
*/
|
|
||||||
menuEntry = fghFindMenuEntry( fgStructure.Menu, item );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the menu entry exists
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( menuEntry != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Removing a menu entry is quite simple...
|
|
||||||
*/
|
|
||||||
fgListRemove( &fgStructure.Menu->Entries, &menuEntry->Node );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Free the entry label string, too
|
|
||||||
*/
|
|
||||||
free( menuEntry->Text );
|
|
||||||
|
|
||||||
free( menuEntry );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Update the menu's dimensions now
|
|
||||||
*/
|
|
||||||
fghCalculateMenuBoxSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Attaches a menu to the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutAttachMenu( int button )
|
|
||||||
{
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* There must be a current window and a current menu set:
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( fgStructure.Window != NULL || fgStructure.Menu != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the button value is valid (0, 1 or 2, see freeglut.h)
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( button == GLUT_LEFT_BUTTON || button == GLUT_MIDDLE_BUTTON || button == GLUT_RIGHT_BUTTON );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* It is safe now to attach the menu
|
|
||||||
*/
|
|
||||||
fgStructure.Window->Menu[ button ] = fgStructure.Menu;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Detaches a menu from the current window
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutDetachMenu( int button )
|
|
||||||
{
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* There must be a current window set:
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( fgStructure.Window != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the button value is valid (0, 1 or 2, see freeglut.h)
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( button != 0 && button != 1 && button != 2 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* It is safe now to detach the menu
|
|
||||||
*/
|
|
||||||
fgStructure.Window->Menu[ button ] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A.Donev: Set and retrieve the menu's user data
|
|
||||||
*/
|
|
||||||
void* FGAPIENTRY glutGetMenuData( void )
|
|
||||||
{
|
|
||||||
return(fgStructure.Menu->UserData);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FGAPIENTRY glutSetMenuData(void* data)
|
|
||||||
{
|
|
||||||
fgStructure.Menu->UserData=data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
@ -1,244 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_misc.c
|
|
||||||
*
|
|
||||||
* Functions that didn't fit anywhere else...
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Thu Dec 9 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-misc"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO BEFORE THE STABLE RELEASE:
|
|
||||||
*
|
|
||||||
* glutSetColor() --
|
|
||||||
* glutGetColor() --
|
|
||||||
* glutCopyColormap() --
|
|
||||||
* glutSetKeyRepeat() -- this is evil and should be removed from API
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This functions checks if an OpenGL extension is supported or not
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutExtensionSupported( const char* extension )
|
|
||||||
{
|
|
||||||
const char *extensions;
|
|
||||||
const char *ptr;
|
|
||||||
int len = strlen ( extension ) ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure there is a current window, and thus -- a current context available
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready;
|
|
||||||
freeglut_return_val_if_fail( fgStructure.Window != NULL, 0 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Note it is safe to query the extensions
|
|
||||||
*/
|
|
||||||
extensions = glGetString(GL_EXTENSIONS);
|
|
||||||
|
|
||||||
freeglut_return_val_if_fail( extensions != NULL, 0 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if the extension itself looks valid
|
|
||||||
*/
|
|
||||||
if ( strchr ( extension, ' ' ) != NULL )
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Look for our extension
|
|
||||||
*/
|
|
||||||
for (ptr = extensions; *ptr;)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Is it the current extension?
|
|
||||||
*/
|
|
||||||
if ( strncmp ( extension, extensions, len ) == 0 )
|
|
||||||
return 1 ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* No, go find the next extension. They are separated from each other by one or more blank spaces.
|
|
||||||
*/
|
|
||||||
ptr = strchr ( ptr + len, ' ' ) ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If we ran off the end of the "extensions" character string, we didn't find it. Return failure.
|
|
||||||
*/
|
|
||||||
if ( !ptr ) return 0 ;
|
|
||||||
|
|
||||||
while ( *ptr == ' ' )
|
|
||||||
ptr++ ;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0 ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function reports all the OpenGL errors that happened till now
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutReportErrors( void )
|
|
||||||
{
|
|
||||||
GLenum error = glGetError();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Keep reporting errors as long as there are any...
|
|
||||||
*/
|
|
||||||
while( error != GL_NO_ERROR )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Print the current error
|
|
||||||
*/
|
|
||||||
# undef G_LOG_DOMAIN
|
|
||||||
# define G_LOG_DOMAIN ((gchar *) 0)
|
|
||||||
|
|
||||||
fgWarning( "GL error: %s", gluErrorString( error ) );
|
|
||||||
|
|
||||||
# undef G_LOG_DOMAIN
|
|
||||||
# define G_LOG_DOMAIN "freeglut_misc.c"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Grab the next error value
|
|
||||||
*/
|
|
||||||
error = glGetError();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Turns the ignore key auto repeat feature on and off
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutIgnoreKeyRepeat( int ignore ) /* DEPRECATED 11/4/02 - Do not use */
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* This is simple and not damaging...
|
|
||||||
*/
|
|
||||||
fgState.IgnoreKeyRepeat = ignore ? TRUE : FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hints the window system whether to generate key auto repeat, or not. This is evil.
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutSetKeyRepeat( int repeatMode )
|
|
||||||
{
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is really evil, but let's have this done.
|
|
||||||
*/
|
|
||||||
switch( repeatMode )
|
|
||||||
{
|
|
||||||
case GLUT_KEY_REPEAT_OFF: XAutoRepeatOff( fgDisplay.Display ); break;
|
|
||||||
case GLUT_KEY_REPEAT_ON: XAutoRepeatOn( fgDisplay.Display ); break;
|
|
||||||
case GLUT_KEY_REPEAT_DEFAULT:
|
|
||||||
{
|
|
||||||
XKeyboardState keyboardState;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Query the current keyboard state
|
|
||||||
*/
|
|
||||||
XGetKeyboardControl( fgDisplay.Display, &keyboardState );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the auto key repeat basing on the global settings
|
|
||||||
*/
|
|
||||||
glutSetKeyRepeat(
|
|
||||||
keyboardState.global_auto_repeat == AutoRepeatModeOn ?
|
|
||||||
GLUT_KEY_REPEAT_ON : GLUT_KEY_REPEAT_OFF
|
|
||||||
);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
/*
|
|
||||||
* Whoops, this was not expected at all
|
|
||||||
*/
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Forces the joystick callback to be executed
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutForceJoystickFunc( void )
|
|
||||||
{
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Is there a current window selected?
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( fgStructure.Window != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if there is a joystick callback hooked to the current window
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( fgStructure.Window->Callbacks.Joystick != NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Poll the joystick now, using the current window's joystick callback
|
|
||||||
*/
|
|
||||||
fgJoystickPollWindow( fgStructure.Window );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutSetColor( int nColor, GLfloat red, GLfloat green, GLfloat blue )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
GLfloat FGAPIENTRY glutGetColor( int color, int component )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
return( 0.0f );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutCopyColormap( int window )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_overlay.c
|
|
||||||
*
|
|
||||||
* Overlay management functions (as defined by GLUT API)
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Thu Dec 16 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-overlay"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NOTE: functions declared in this file probably will not be implemented.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
|
||||||
|
|
||||||
void FGAPIENTRY glutEstablishOverlay( void ) { /* Not implemented */ }
|
|
||||||
void FGAPIENTRY glutRemoveOverlay( void ) { /* Not implemented */ }
|
|
||||||
void FGAPIENTRY glutUseLayer( GLenum layer ) { /* Not implemented */ }
|
|
||||||
void FGAPIENTRY glutPostOverlayRedisplay( void ) { /* Not implemented */ }
|
|
||||||
void FGAPIENTRY glutPostWindowOverlayRedisplay( int ID ) { /* Not implemented */ }
|
|
||||||
void FGAPIENTRY glutShowOverlay( void ) { /* Not implemented */ }
|
|
||||||
void FGAPIENTRY glutHideOverlay( void ) { /* Not implemented */ }
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
@ -1,704 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_state.c
|
|
||||||
*
|
|
||||||
* Freeglut state query methods.
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Thu Dec 16 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-state"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO BEFORE THE STABLE RELEASE:
|
|
||||||
*
|
|
||||||
* glutGet() -- X11 tests passed, but check if all enums handled (what about Win32?)
|
|
||||||
* glutDeviceGet() -- X11 tests passed, but check if all enums handled (what about Win32?)
|
|
||||||
* glutGetModifiers() -- OK, but could also remove the limitation
|
|
||||||
* glutLayerGet() -- what about GLUT_NORMAL_DAMAGED?
|
|
||||||
*
|
|
||||||
* The fail-on-call policy will help adding the most needed things imho.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* -- LOCAL DEFINITIONS ---------------------------------------------------- */
|
|
||||||
|
|
||||||
/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
|
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
/*
|
|
||||||
* Queries the GL context about some attributes
|
|
||||||
*/
|
|
||||||
static int fghGetConfig( int attribute )
|
|
||||||
{
|
|
||||||
int returnValue ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return nothing if there is no current window set
|
|
||||||
*/
|
|
||||||
if( fgStructure.Window == NULL )
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* glXGetConfig should work fine
|
|
||||||
*/
|
|
||||||
glXGetConfig( fgDisplay.Display, fgStructure.Window->Window.VisualInfo, attribute, &returnValue );
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Have the query results returned
|
|
||||||
*/
|
|
||||||
return ( returnValue ) ;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* General settings assignment method
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutSetOption( GLenum eWhat, int value )
|
|
||||||
{
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check what is the caller querying for. In chronological code add order.
|
|
||||||
*/
|
|
||||||
switch( eWhat )
|
|
||||||
{
|
|
||||||
case GLUT_INIT_WINDOW_X: fgState.Position.X = (GLint)value ;
|
|
||||||
break ;
|
|
||||||
case GLUT_INIT_WINDOW_Y: fgState.Position.Y = (GLint)value ;
|
|
||||||
break ;
|
|
||||||
case GLUT_INIT_WINDOW_WIDTH: fgState.Size.X = (GLint)value ;
|
|
||||||
break ;
|
|
||||||
case GLUT_INIT_WINDOW_HEIGHT: fgState.Size.Y = (GLint)value ;
|
|
||||||
break ;
|
|
||||||
case GLUT_INIT_DISPLAY_MODE: fgState.DisplayMode = (unsigned int)value ;
|
|
||||||
break ;
|
|
||||||
|
|
||||||
case GLUT_ACTION_ON_WINDOW_CLOSE: fgState.ActionOnWindowClose = value ;
|
|
||||||
break ;
|
|
||||||
|
|
||||||
case GLUT_WINDOW_CURSOR:
|
|
||||||
if( fgStructure.Window != NULL ) fgStructure.Window->State.Cursor = value ;
|
|
||||||
break ;
|
|
||||||
|
|
||||||
default:
|
|
||||||
/*
|
|
||||||
* Just have it reported, so that we can see what needs to be implemented
|
|
||||||
*/
|
|
||||||
fgWarning( "glutSetOption(): missing enum handle %i\n", eWhat );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* General settings query method
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutGet( GLenum eWhat )
|
|
||||||
{
|
|
||||||
int returnValue ;
|
|
||||||
GLboolean boolValue ;
|
|
||||||
|
|
||||||
if ( eWhat == GLUT_INIT_STATE )
|
|
||||||
return ( fgState.Time.Set ) ;
|
|
||||||
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check what is the caller querying for. In chronological code add order.
|
|
||||||
*/
|
|
||||||
switch( eWhat )
|
|
||||||
{
|
|
||||||
case GLUT_ELAPSED_TIME:
|
|
||||||
/*
|
|
||||||
* This is easy and nicely portable, as we are using GLib...
|
|
||||||
*/
|
|
||||||
return( fgElapsedTime() );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Following values are stored in fgState and fgDisplay global structures
|
|
||||||
*/
|
|
||||||
case GLUT_SCREEN_WIDTH: return( fgDisplay.ScreenWidth );
|
|
||||||
case GLUT_SCREEN_HEIGHT: return( fgDisplay.ScreenHeight );
|
|
||||||
case GLUT_SCREEN_WIDTH_MM: return( fgDisplay.ScreenWidthMM );
|
|
||||||
case GLUT_SCREEN_HEIGHT_MM: return( fgDisplay.ScreenHeightMM );
|
|
||||||
case GLUT_INIT_WINDOW_X: return( fgState.Position.X );
|
|
||||||
case GLUT_INIT_WINDOW_Y: return( fgState.Position.Y );
|
|
||||||
case GLUT_INIT_WINDOW_WIDTH: return( fgState.Size.X );
|
|
||||||
case GLUT_INIT_WINDOW_HEIGHT: return( fgState.Size.Y );
|
|
||||||
case GLUT_INIT_DISPLAY_MODE: return( fgState.DisplayMode );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The window/context specific queries are handled mostly by fghGetConfig().
|
|
||||||
*/
|
|
||||||
case GLUT_WINDOW_NUM_SAMPLES:
|
|
||||||
/*
|
|
||||||
* Multisampling. Return what I know about multisampling.
|
|
||||||
*/
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
/*
|
|
||||||
* The rest of GLX queries under X are general enough to use a macro to check them
|
|
||||||
*/
|
|
||||||
# define GLX_QUERY(a,b) case a: return( fghGetConfig( b ) );
|
|
||||||
|
|
||||||
GLX_QUERY( GLUT_WINDOW_RGBA, GLX_RGBA );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_DOUBLEBUFFER, GLX_DOUBLEBUFFER );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_BUFFER_SIZE, GLX_BUFFER_SIZE );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_STENCIL_SIZE, GLX_STENCIL_SIZE );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_DEPTH_SIZE, GLX_DEPTH_SIZE );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_RED_SIZE, GLX_RED_SIZE );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_GREEN_SIZE, GLX_GREEN_SIZE );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_BLUE_SIZE, GLX_BLUE_SIZE );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_ALPHA_SIZE, GLX_ALPHA_SIZE );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_ACCUM_RED_SIZE, GLX_ACCUM_RED_SIZE );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_ACCUM_GREEN_SIZE, GLX_ACCUM_GREEN_SIZE );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_ACCUM_BLUE_SIZE, GLX_ACCUM_BLUE_SIZE );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_ACCUM_ALPHA_SIZE, GLX_ACCUM_ALPHA_SIZE );
|
|
||||||
GLX_QUERY( GLUT_WINDOW_STEREO, GLX_STEREO );
|
|
||||||
|
|
||||||
# undef GLX_QUERY
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Colormap size is handled in a bit different way than all the rest
|
|
||||||
*/
|
|
||||||
case GLUT_WINDOW_COLORMAP_SIZE:
|
|
||||||
/*
|
|
||||||
* Check for the visual type
|
|
||||||
*/
|
|
||||||
if( (fghGetConfig( GLX_RGBA )) || (fgStructure.Window == NULL) )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* We've got a RGBA visual, so there is no colormap at all.
|
|
||||||
* The other possibility is that we have no current window set.
|
|
||||||
*/
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Otherwise return the number of entries in the colormap
|
|
||||||
*/
|
|
||||||
return( fgStructure.Window->Window.VisualInfo->visual->map_entries );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Those calls are somewhat similiar, as they use XGetWindowAttributes() function
|
|
||||||
*/
|
|
||||||
case GLUT_WINDOW_X:
|
|
||||||
case GLUT_WINDOW_Y:
|
|
||||||
case GLUT_WINDOW_WIDTH:
|
|
||||||
case GLUT_WINDOW_HEIGHT:
|
|
||||||
case GLUT_WINDOW_BORDER_WIDTH :
|
|
||||||
case GLUT_WINDOW_HEADER_HEIGHT :
|
|
||||||
{
|
|
||||||
XWindowAttributes winAttributes;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return zero if there is no current window set
|
|
||||||
*/
|
|
||||||
if( fgStructure.Window == NULL )
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Grab the current window's attributes now
|
|
||||||
*/
|
|
||||||
XGetWindowAttributes(
|
|
||||||
fgDisplay.Display,
|
|
||||||
fgStructure.Window->Window.Handle,
|
|
||||||
&winAttributes
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* See which window attribute to return
|
|
||||||
*/
|
|
||||||
switch ( eWhat )
|
|
||||||
{
|
|
||||||
case GLUT_WINDOW_X: return winAttributes.x ;
|
|
||||||
case GLUT_WINDOW_Y: return winAttributes.y ;
|
|
||||||
case GLUT_WINDOW_WIDTH: return winAttributes.width ;
|
|
||||||
case GLUT_WINDOW_HEIGHT: return winAttributes.height ;
|
|
||||||
case GLUT_WINDOW_BORDER_WIDTH : return winAttributes.border_width ;
|
|
||||||
case GLUT_WINDOW_HEADER_HEIGHT : return winAttributes.border_width * 3 ; /* a kludge for now */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* I do not know yet if there will be a fgChooseVisual() function for Win32
|
|
||||||
*/
|
|
||||||
case GLUT_DISPLAY_MODE_POSSIBLE:
|
|
||||||
/*
|
|
||||||
* Check if the current display mode is possible
|
|
||||||
*/
|
|
||||||
return( fgChooseVisual() == NULL ? 0 : 1 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is system-dependant
|
|
||||||
*/
|
|
||||||
case GLUT_WINDOW_FORMAT_ID:
|
|
||||||
/*
|
|
||||||
* Return the visual ID, if there is a current window naturally:
|
|
||||||
*/
|
|
||||||
if( fgStructure.Window == NULL )
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
return( fgStructure.Window->Window.VisualInfo->visualid );
|
|
||||||
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Handle the OpenGL inquiries
|
|
||||||
*/
|
|
||||||
case GLUT_WINDOW_RGBA:
|
|
||||||
glGetBooleanv ( GL_RGBA_MODE, &boolValue ) ; /* True if color buffers store RGBA */
|
|
||||||
returnValue = boolValue ? 1 : 0 ;
|
|
||||||
return ( returnValue ) ;
|
|
||||||
case GLUT_WINDOW_DOUBLEBUFFER:
|
|
||||||
glGetBooleanv ( GL_DOUBLEBUFFER, &boolValue ) ; /* True if front and back buffers exist */
|
|
||||||
returnValue = boolValue ? 1 : 0 ;
|
|
||||||
return ( returnValue ) ;
|
|
||||||
case GLUT_WINDOW_STEREO:
|
|
||||||
glGetBooleanv ( GL_STEREO, &boolValue ) ; /* True if left and right buffers exist */
|
|
||||||
returnValue = boolValue ? 1 : 0 ;
|
|
||||||
return ( returnValue ) ;
|
|
||||||
|
|
||||||
case GLUT_WINDOW_RED_SIZE:
|
|
||||||
glGetIntegerv ( GL_RED_BITS, &returnValue ) ; /* Number of bits per red component in color buffers */
|
|
||||||
return ( returnValue ) ;
|
|
||||||
case GLUT_WINDOW_GREEN_SIZE:
|
|
||||||
glGetIntegerv ( GL_GREEN_BITS, &returnValue ) ; /* Number of bits per green component in color buffers */
|
|
||||||
return ( returnValue ) ;
|
|
||||||
case GLUT_WINDOW_BLUE_SIZE:
|
|
||||||
glGetIntegerv ( GL_BLUE_BITS, &returnValue ) ; /* Number of bits per blue component in color buffers */
|
|
||||||
return ( returnValue ) ;
|
|
||||||
case GLUT_WINDOW_ALPHA_SIZE:
|
|
||||||
glGetIntegerv ( GL_ALPHA_BITS, &returnValue ) ; /* Number of bits per alpha component in color buffers */
|
|
||||||
return ( returnValue ) ;
|
|
||||||
case GLUT_WINDOW_ACCUM_RED_SIZE:
|
|
||||||
glGetIntegerv ( GL_ACCUM_RED_BITS, &returnValue ) ; /* Number of bits per red component in the accumulation buffer */
|
|
||||||
return ( returnValue ) ;
|
|
||||||
case GLUT_WINDOW_ACCUM_GREEN_SIZE:
|
|
||||||
glGetIntegerv ( GL_ACCUM_GREEN_BITS, &returnValue ) ; /* Number of bits per green component in the accumulation buffer */
|
|
||||||
return ( returnValue ) ;
|
|
||||||
case GLUT_WINDOW_ACCUM_BLUE_SIZE:
|
|
||||||
glGetIntegerv ( GL_ACCUM_BLUE_BITS, &returnValue ) ; /* Number of bits per blue component in the accumulation buffer */
|
|
||||||
return ( returnValue ) ;
|
|
||||||
case GLUT_WINDOW_ACCUM_ALPHA_SIZE:
|
|
||||||
glGetIntegerv ( GL_ACCUM_ALPHA_BITS, &returnValue ) ; /* Number of bits per alpha component in the accumulation buffer */
|
|
||||||
return ( returnValue ) ;
|
|
||||||
case GLUT_WINDOW_DEPTH_SIZE:
|
|
||||||
glGetIntegerv ( GL_DEPTH_BITS, &returnValue ) ; /* Number of depth-buffer bitplanes */
|
|
||||||
return ( returnValue ) ;
|
|
||||||
|
|
||||||
case GLUT_WINDOW_BUFFER_SIZE:
|
|
||||||
returnValue = 1 ; /* ????? */
|
|
||||||
return ( returnValue ) ;
|
|
||||||
case GLUT_WINDOW_STENCIL_SIZE:
|
|
||||||
returnValue = 0 ; /* ????? */
|
|
||||||
return ( returnValue ) ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Window position and size
|
|
||||||
*/
|
|
||||||
case GLUT_WINDOW_X:
|
|
||||||
case GLUT_WINDOW_Y:
|
|
||||||
case GLUT_WINDOW_WIDTH:
|
|
||||||
case GLUT_WINDOW_HEIGHT:
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* There is considerable confusion about the "right thing to do" concerning window
|
|
||||||
* size and position. GLUT itself is not consistent between Windows and Linux; since
|
|
||||||
* platform independence is a virtue for "freeglut", we decided to break with GLUT's
|
|
||||||
* behaviour.
|
|
||||||
* Under Linux, it is apparently not possible to get the window border sizes in order
|
|
||||||
* to subtract them off the window's initial position until some time after the window
|
|
||||||
* has been created. Therefore we decided on the following behaviour, both under
|
|
||||||
* Windows and under Linux:
|
|
||||||
* - When you create a window with position (x,y) and size (w,h), the upper left hand
|
|
||||||
* corner of the outside of the window is at (x,y) and the size of the drawable area
|
|
||||||
* is (w,h).
|
|
||||||
* - When you query the size and position of the window--as is happening here for
|
|
||||||
* Windows--"freeglut" will return the size of the drawable area--the (w,h) that you
|
|
||||||
* specified when you created the window--and the coordinates of the upper left hand
|
|
||||||
* corner of the drawable area--which is NOT the (x,y) you specified.
|
|
||||||
*/
|
|
||||||
|
|
||||||
RECT winRect;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if there is a window to be queried for dimensions:
|
|
||||||
*/
|
|
||||||
freeglut_return_val_if_fail( fgStructure.Window != NULL, 0 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We need to call GetWindowRect() first...
|
|
||||||
* (this returns the pixel coordinates of the outside of the window)
|
|
||||||
*/
|
|
||||||
GetWindowRect( fgStructure.Window->Window.Handle, &winRect );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ...then we've got to correct the results we've just received...
|
|
||||||
*/
|
|
||||||
if (fgStructure.GameMode != fgStructure.Window &&
|
|
||||||
fgStructure.Window->Parent == NULL )
|
|
||||||
{
|
|
||||||
winRect.left += GetSystemMetrics( SM_CXSIZEFRAME );
|
|
||||||
winRect.right -= GetSystemMetrics( SM_CXSIZEFRAME );
|
|
||||||
winRect.top += GetSystemMetrics( SM_CYSIZEFRAME ) + GetSystemMetrics( SM_CYCAPTION );
|
|
||||||
winRect.bottom -= GetSystemMetrics( SM_CYSIZEFRAME );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ...and finally return the caller the desired value:
|
|
||||||
*/
|
|
||||||
switch( eWhat )
|
|
||||||
{
|
|
||||||
case GLUT_WINDOW_X: return( winRect.left );
|
|
||||||
case GLUT_WINDOW_Y: return( winRect.top );
|
|
||||||
case GLUT_WINDOW_WIDTH: return( winRect.right - winRect.left );
|
|
||||||
case GLUT_WINDOW_HEIGHT: return( winRect.bottom - winRect.top );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GLUT_WINDOW_BORDER_WIDTH :
|
|
||||||
return ( GetSystemMetrics( SM_CXSIZEFRAME ) ) ;
|
|
||||||
|
|
||||||
case GLUT_WINDOW_HEADER_HEIGHT :
|
|
||||||
return ( GetSystemMetrics( SM_CYCAPTION ) ) ;
|
|
||||||
|
|
||||||
case GLUT_DISPLAY_MODE_POSSIBLE:
|
|
||||||
/*
|
|
||||||
* Check if the current display mode is possible
|
|
||||||
*/
|
|
||||||
return( fgSetupPixelFormat( fgStructure.Window, TRUE, PFD_MAIN_PLANE ) );
|
|
||||||
|
|
||||||
case GLUT_WINDOW_FORMAT_ID:
|
|
||||||
/*
|
|
||||||
* Return the pixel format of the current window
|
|
||||||
*/
|
|
||||||
if( fgStructure.Window != NULL )
|
|
||||||
return( GetPixelFormat( fgStructure.Window->Window.Device ) );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the current window does not exist, fail:
|
|
||||||
*/
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The window structure queries
|
|
||||||
*/
|
|
||||||
case GLUT_WINDOW_PARENT:
|
|
||||||
/*
|
|
||||||
* Return the ID number of current window's parent, if any
|
|
||||||
*/
|
|
||||||
if( fgStructure.Window == NULL ) return( 0 );
|
|
||||||
if( fgStructure.Window->Parent == NULL ) return( 0 );
|
|
||||||
|
|
||||||
return( fgStructure.Window->Parent->ID );
|
|
||||||
|
|
||||||
case GLUT_WINDOW_NUM_CHILDREN:
|
|
||||||
/*
|
|
||||||
* Return the number of children attached to the current window
|
|
||||||
*/
|
|
||||||
if( fgStructure.Window == NULL )
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
return( fgListLength( &fgStructure.Window->Children ) );
|
|
||||||
|
|
||||||
case GLUT_WINDOW_CURSOR:
|
|
||||||
/*
|
|
||||||
* Return the currently selected window cursor
|
|
||||||
*/
|
|
||||||
if( fgStructure.Window == NULL )
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
return( fgStructure.Window->State.Cursor );
|
|
||||||
|
|
||||||
case GLUT_MENU_NUM_ITEMS:
|
|
||||||
/*
|
|
||||||
* Return the number of menu entries in the current menu
|
|
||||||
*/
|
|
||||||
if( fgStructure.Menu == NULL )
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
return( fgListLength( &fgStructure.Menu->Entries ) );
|
|
||||||
|
|
||||||
case GLUT_ACTION_ON_WINDOW_CLOSE:
|
|
||||||
return fgState.ActionOnWindowClose;
|
|
||||||
|
|
||||||
case GLUT_VERSION:
|
|
||||||
return VERSION_MAJOR * 10000 + VERSION_MINOR * 100 + VERSION_PATCH;
|
|
||||||
|
|
||||||
default:
|
|
||||||
/*
|
|
||||||
* Just have it reported, so that we can see what needs to be implemented
|
|
||||||
*/
|
|
||||||
fgWarning( "glutGet(): missing enum handle %i\n", eWhat );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If nothing happens, then we are in deep trouble...
|
|
||||||
*/
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns various device information.
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutDeviceGet( GLenum eWhat )
|
|
||||||
{
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* See why are we bothered...
|
|
||||||
*
|
|
||||||
* WARNING: we are mostly lying in this function.
|
|
||||||
*/
|
|
||||||
switch( eWhat )
|
|
||||||
{
|
|
||||||
case GLUT_HAS_KEYBOARD:
|
|
||||||
/*
|
|
||||||
* We always have a keyboard present on PC machines...
|
|
||||||
*/
|
|
||||||
return( TRUE );
|
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
|
|
||||||
case GLUT_HAS_MOUSE:
|
|
||||||
/*
|
|
||||||
* Hey, my Atari 65XE hasn't had a mouse!
|
|
||||||
*/
|
|
||||||
return( TRUE );
|
|
||||||
|
|
||||||
case GLUT_NUM_MOUSE_BUTTONS:
|
|
||||||
/*
|
|
||||||
* Return the number of mouse buttons available. This is a big guess.
|
|
||||||
*/
|
|
||||||
return( 3 );
|
|
||||||
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
|
|
||||||
case GLUT_HAS_MOUSE:
|
|
||||||
/*
|
|
||||||
* The Windows can be booted without a mouse.
|
|
||||||
* It would be nice to have this reported.
|
|
||||||
*/
|
|
||||||
return( GetSystemMetrics( SM_MOUSEPRESENT ) );
|
|
||||||
|
|
||||||
case GLUT_NUM_MOUSE_BUTTONS:
|
|
||||||
/*
|
|
||||||
* We are much more fortunate under Win32 about this...
|
|
||||||
*/
|
|
||||||
return( GetSystemMetrics( SM_CMOUSEBUTTONS ) );
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
case GLUT_JOYSTICK_POLL_RATE:
|
|
||||||
case GLUT_HAS_JOYSTICK:
|
|
||||||
case GLUT_JOYSTICK_BUTTONS:
|
|
||||||
case GLUT_JOYSTICK_AXES:
|
|
||||||
/*
|
|
||||||
* WARNING: THIS IS A BIG LIE!
|
|
||||||
*/
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
case GLUT_HAS_SPACEBALL:
|
|
||||||
case GLUT_HAS_DIAL_AND_BUTTON_BOX:
|
|
||||||
case GLUT_HAS_TABLET:
|
|
||||||
/*
|
|
||||||
* Sounds cool. And unuseful.
|
|
||||||
*/
|
|
||||||
return( FALSE );
|
|
||||||
|
|
||||||
case GLUT_NUM_SPACEBALL_BUTTONS:
|
|
||||||
case GLUT_NUM_BUTTON_BOX_BUTTONS:
|
|
||||||
case GLUT_NUM_DIALS:
|
|
||||||
case GLUT_NUM_TABLET_BUTTONS:
|
|
||||||
/*
|
|
||||||
* Zero is not the answer. Zero is the question. Continuum is the answer.
|
|
||||||
*/
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
case GLUT_DEVICE_IGNORE_KEY_REPEAT:
|
|
||||||
/*
|
|
||||||
* Return what we think about the key auto repeat settings
|
|
||||||
*/
|
|
||||||
return( fgState.IgnoreKeyRepeat );
|
|
||||||
|
|
||||||
case GLUT_DEVICE_KEY_REPEAT:
|
|
||||||
/*
|
|
||||||
* WARNING: THIS IS A BIG LIE!
|
|
||||||
*/
|
|
||||||
return( GLUT_KEY_REPEAT_DEFAULT );
|
|
||||||
|
|
||||||
default:
|
|
||||||
/*
|
|
||||||
* Complain.
|
|
||||||
*/
|
|
||||||
fgWarning( "glutDeviceGet(): missing enum handle %i\n", eWhat );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* And now -- the failure.
|
|
||||||
*/
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This should return the current state of ALT, SHIFT and CTRL keys.
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutGetModifiers( void )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Fail if there is no current window or called outside an input callback
|
|
||||||
*/
|
|
||||||
if( fgStructure.Window == NULL )
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
if( fgStructure.Window->State.Modifiers == 0xffffffff )
|
|
||||||
{
|
|
||||||
fgWarning( "glutGetModifiers() called outside an input callback" );
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return the current modifiers state otherwise
|
|
||||||
*/
|
|
||||||
return( fgStructure.Window->State.Modifiers );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return the state of the GLUT API overlay subsystem. A misery ;-)
|
|
||||||
*/
|
|
||||||
int FGAPIENTRY glutLayerGet( GLenum eWhat )
|
|
||||||
{
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is easy as layers are not implemented ;-)
|
|
||||||
*/
|
|
||||||
switch( eWhat )
|
|
||||||
{
|
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
|
|
||||||
case GLUT_OVERLAY_POSSIBLE:
|
|
||||||
/*
|
|
||||||
* Nope, overlays are not possible.
|
|
||||||
*/
|
|
||||||
return( FALSE );
|
|
||||||
|
|
||||||
case GLUT_LAYER_IN_USE:
|
|
||||||
/*
|
|
||||||
* The normal plane is always in use
|
|
||||||
*/
|
|
||||||
return( GLUT_NORMAL );
|
|
||||||
|
|
||||||
case GLUT_HAS_OVERLAY:
|
|
||||||
/*
|
|
||||||
* No window is allowed to have an overlay
|
|
||||||
*/
|
|
||||||
return( FALSE );
|
|
||||||
|
|
||||||
case GLUT_TRANSPARENT_INDEX:
|
|
||||||
/*
|
|
||||||
* Return just anything, which is always defined as zero
|
|
||||||
*/
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
case GLUT_NORMAL_DAMAGED:
|
|
||||||
/*
|
|
||||||
* Actually I do not know. Maybe.
|
|
||||||
*/
|
|
||||||
return( FALSE );
|
|
||||||
|
|
||||||
case GLUT_OVERLAY_DAMAGED:
|
|
||||||
/*
|
|
||||||
* Return minus one to mark that no layer is in use
|
|
||||||
*/
|
|
||||||
return( -1 );
|
|
||||||
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
|
|
||||||
case GLUT_OVERLAY_POSSIBLE:
|
|
||||||
/*
|
|
||||||
* Check if an overlay display mode is possible
|
|
||||||
*/
|
|
||||||
return( fgSetupPixelFormat( fgStructure.Window, TRUE, PFD_OVERLAY_PLANE ) );
|
|
||||||
|
|
||||||
case GLUT_LAYER_IN_USE:
|
|
||||||
/*
|
|
||||||
* The normal plane is always in use
|
|
||||||
*/
|
|
||||||
return( GLUT_NORMAL );
|
|
||||||
|
|
||||||
case GLUT_HAS_OVERLAY:
|
|
||||||
/*
|
|
||||||
* No window is allowed to have an overlay
|
|
||||||
*/
|
|
||||||
return( FALSE );
|
|
||||||
|
|
||||||
case GLUT_TRANSPARENT_INDEX:
|
|
||||||
/*
|
|
||||||
* Return just anything, which is always defined as zero
|
|
||||||
*/
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
case GLUT_NORMAL_DAMAGED:
|
|
||||||
/*
|
|
||||||
* Actually I do not know. Maybe.
|
|
||||||
*/
|
|
||||||
return( FALSE );
|
|
||||||
|
|
||||||
case GLUT_OVERLAY_DAMAGED:
|
|
||||||
/*
|
|
||||||
* Return minus one to mark that no layer is in use
|
|
||||||
*/
|
|
||||||
return( -1 );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
default:
|
|
||||||
/*
|
|
||||||
* Complain to the user about the obvious bug
|
|
||||||
*/
|
|
||||||
fgWarning( "glutLayerGet(): missing enum handle %i\n", eWhat );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* And fail. That's good. Programs do love failing.
|
|
||||||
*/
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,721 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_structure.c
|
|
||||||
*
|
|
||||||
* Windows and menus need tree structure
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Sat Dec 18 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-structure"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* -- GLOBAL EXPORTS ------------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The SFG_Structure container holds information about windows and menus
|
|
||||||
* created between glutInit() and glutMainLoop() return.
|
|
||||||
*/
|
|
||||||
SFG_Structure fgStructure;
|
|
||||||
|
|
||||||
|
|
||||||
/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This private function creates, opens and adds to the hierarchy
|
|
||||||
* a freeglut window complete with OpenGL context and stuff...
|
|
||||||
*
|
|
||||||
* If parent is set to NULL, the window created will be a topmost one.
|
|
||||||
*/
|
|
||||||
SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title, int x, int y, int w, int h, GLboolean gameMode )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Have the window object created
|
|
||||||
*/
|
|
||||||
SFG_Window* window = calloc( sizeof(SFG_Window), 1 );
|
|
||||||
int fakeArgc = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the freeglut internals haven't been initialized yet,
|
|
||||||
* do it now. Hack's idea courtesy of Chris Purnell...
|
|
||||||
*/
|
|
||||||
if( !fgState.Time.Set )
|
|
||||||
glutInit( &fakeArgc, NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initialize the object properties
|
|
||||||
*/
|
|
||||||
window->ID = ++fgStructure.WindowID;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initialize the children list
|
|
||||||
*/
|
|
||||||
fgListInit( &window->Children );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Does this window have a parent?
|
|
||||||
*/
|
|
||||||
if( parent != NULL )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* That's quite right, attach this windows as a child window
|
|
||||||
*/
|
|
||||||
fgListAppend( &parent->Children, &window->Node );
|
|
||||||
window->Parent = parent;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Otherwise add the newly created window to the topmost windows list
|
|
||||||
*/
|
|
||||||
fgListAppend( &fgStructure.Windows, &window->Node );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the default mouse cursor and reset the modifiers value
|
|
||||||
*/
|
|
||||||
window->State.Cursor = GLUT_CURSOR_INHERIT;
|
|
||||||
window->State.Modifiers = 0xffffffff;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Open the window now. The fgOpenWindow() function is system
|
|
||||||
* dependant, and resides in freeglut_window.c. Uses fgState.
|
|
||||||
*/
|
|
||||||
fgOpenWindow( window, title, x, y, w, h, gameMode, (parent != NULL) ? TRUE : FALSE );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return a pointer to the newly created window
|
|
||||||
*/
|
|
||||||
return( window );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This private function creates a menu and adds it to the menus list
|
|
||||||
*/
|
|
||||||
SFG_Menu* fgCreateMenu( FGCBmenu menuCallback )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Have the menu object created
|
|
||||||
*/
|
|
||||||
SFG_Menu* menu = calloc( sizeof(SFG_Menu), 1 );
|
|
||||||
int fakeArgc = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the freeglut internals haven't been initialized yet,
|
|
||||||
* do it now. Hack's idea courtesy of Chris Purnell...
|
|
||||||
*/
|
|
||||||
if( !fgState.Time.Set )
|
|
||||||
glutInit( &fakeArgc, NULL );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initialize the object properties:
|
|
||||||
*/
|
|
||||||
menu->ID = ++fgStructure.MenuID;
|
|
||||||
menu->Callback = menuCallback;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initialize the entries list
|
|
||||||
*/
|
|
||||||
fgListInit( &menu->Entries );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add it to the menu structure hierarchy
|
|
||||||
*/
|
|
||||||
fgListAppend( &fgStructure.Menus, &menu->Node );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Newly created menus implicitly become current ones
|
|
||||||
*/
|
|
||||||
fgStructure.Menu = menu;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return the result to the caller
|
|
||||||
*/
|
|
||||||
return( menu );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Linked list of windows to destroy ... this is so we don't destroy a window from the middle of
|
|
||||||
* its callback. Some C compilers take an extremely dim view of this.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static SFG_WindowList* WindowsToDestroy = (SFG_WindowList*)NULL ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Function to add a window to the linked list of windows to destroy. Subwindows are automatically
|
|
||||||
* added because they hang from the window structure.
|
|
||||||
*/
|
|
||||||
void fgAddToWindowDestroyList ( SFG_Window* window, GLboolean needToClose )
|
|
||||||
{
|
|
||||||
SFG_WindowList *new_list_entry = (SFG_WindowList*)malloc ( sizeof(SFG_WindowList) ) ;
|
|
||||||
new_list_entry->window = window ;
|
|
||||||
new_list_entry->needToClose = needToClose ;
|
|
||||||
new_list_entry->next = WindowsToDestroy ;
|
|
||||||
WindowsToDestroy = new_list_entry ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if the window is the current one...
|
|
||||||
*/
|
|
||||||
if ( fgStructure.Window == window )
|
|
||||||
fgStructure.Window = NULL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the destroyed window has the highest window ID number, decrement the window ID number
|
|
||||||
*/
|
|
||||||
if ( window->ID == fgStructure.WindowID ) fgStructure.WindowID-- ;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check the execution state. If this has been called from "glutDestroyWindow",
|
|
||||||
* a statement in that function will reset the "ExecState" after this function returns.
|
|
||||||
*/
|
|
||||||
if ( fgState.ActionOnWindowClose != GLUT_ACTION_CONTINUE_EXECUTION )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Set the execution state flag to drop out of the main loop.
|
|
||||||
*/
|
|
||||||
if ( fgState.ActionOnWindowClose == GLUT_ACTION_EXIT )
|
|
||||||
fgState.ExecState = GLUT_EXEC_STATE_STOP ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Function to close down all the windows in the "WindowsToDestroy" list
|
|
||||||
*/
|
|
||||||
void fgCloseWindows ()
|
|
||||||
{
|
|
||||||
SFG_WindowList *window_ptr = WindowsToDestroy ;
|
|
||||||
WindowsToDestroy = (SFG_WindowList*)NULL ; /* In case the destroy callbacks cause more windows to be closed */
|
|
||||||
|
|
||||||
while ( window_ptr )
|
|
||||||
{
|
|
||||||
SFG_WindowList *next = window_ptr->next ;
|
|
||||||
fgDestroyWindow ( window_ptr->window, window_ptr->needToClose ) ;
|
|
||||||
free ( window_ptr ) ;
|
|
||||||
window_ptr = next ;
|
|
||||||
|
|
||||||
if ( !window_ptr )
|
|
||||||
{
|
|
||||||
window_ptr = WindowsToDestroy ;
|
|
||||||
WindowsToDestroy = (SFG_WindowList*)NULL ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function destroys a window and all of its subwindows. Actually,
|
|
||||||
* another function, defined in freeglut_window.c is called, but this is
|
|
||||||
* a whole different story...
|
|
||||||
*/
|
|
||||||
void fgDestroyWindow( SFG_Window* window, GLboolean needToClose )
|
|
||||||
{
|
|
||||||
SFG_Window* subWindow;
|
|
||||||
|
|
||||||
assert( window != NULL );
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Does this window have any subwindows?
|
|
||||||
*/
|
|
||||||
while ( (subWindow = window->Children.First) != NULL )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Destroy the first window in the list (possibly destroying
|
|
||||||
* its subwindows too). This is not very effective, but works
|
|
||||||
*/
|
|
||||||
fgDestroyWindow( subWindow, needToClose );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the programmer defined a destroy callback, call it
|
|
||||||
* A. Donev: But first make this the active window
|
|
||||||
*/
|
|
||||||
if ( window->Callbacks.Destroy != NULL )
|
|
||||||
{
|
|
||||||
SFG_Window *activeWindow = fgStructure.Window ;
|
|
||||||
fgStructure.Window = window ;
|
|
||||||
window->Callbacks.Destroy () ;
|
|
||||||
fgStructure.Window = activeWindow ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Now we should remove the reference to this window from its parent
|
|
||||||
*/
|
|
||||||
if ( window->Parent != NULL )
|
|
||||||
fgListRemove( &window->Parent->Children, &window->Node );
|
|
||||||
else
|
|
||||||
fgListRemove( &fgStructure.Windows, &window->Node );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* OK, this window seems disconnected from the structure enough
|
|
||||||
* in order to be closed without any bigger risks...
|
|
||||||
*/
|
|
||||||
if( needToClose == TRUE )
|
|
||||||
fgCloseWindow( window );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Finally, we can delete the window's object. It hopefully does
|
|
||||||
* have everything inside it freed and we do not have to care...
|
|
||||||
*/
|
|
||||||
free( window );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is a helper static function that removes a menu (given its pointer)
|
|
||||||
* from any windows that can be accessed from a given parent...
|
|
||||||
*/
|
|
||||||
static void fghRemoveMenuFromWindow( SFG_Window* window, SFG_Menu* menu )
|
|
||||||
{
|
|
||||||
SFG_Window *subWindow;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if the menu is attached to the current window,
|
|
||||||
* if so, have it detached (by overwriting with a NULL):
|
|
||||||
*/
|
|
||||||
for( i=0; i<3; i++ )
|
|
||||||
{
|
|
||||||
if( window->Menu[ i ] == menu )
|
|
||||||
window->Menu[ i ] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Call this function for all of the window's children recursively:
|
|
||||||
*/
|
|
||||||
for( subWindow = window->Children.First; subWindow;
|
|
||||||
subWindow = subWindow->Node.Next)
|
|
||||||
{
|
|
||||||
fghRemoveMenuFromWindow( subWindow, menu );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is a static helper function that removes menu references
|
|
||||||
* from another menu, given two pointers to them...
|
|
||||||
*/
|
|
||||||
static void fghRemoveMenuFromMenu( SFG_Menu* from, SFG_Menu* menu )
|
|
||||||
{
|
|
||||||
SFG_MenuEntry *entry;
|
|
||||||
|
|
||||||
for( entry = from->Entries.First; entry; entry = entry->Node.Next )
|
|
||||||
{
|
|
||||||
if (entry->SubMenu == menu)
|
|
||||||
{
|
|
||||||
entry->SubMenu = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function destroys a menu specified by the parameter. All menus
|
|
||||||
* and windows are updated to make sure no ill pointers hang around.
|
|
||||||
*/
|
|
||||||
void fgDestroyMenu( SFG_Menu* menu )
|
|
||||||
{
|
|
||||||
SFG_Window *window;
|
|
||||||
SFG_Menu *from;
|
|
||||||
SFG_MenuEntry *entry;
|
|
||||||
|
|
||||||
assert( menu != NULL );
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* First of all, have all references to this menu removed from all windows:
|
|
||||||
*/
|
|
||||||
for( window = fgStructure.Windows.First; window; window = window->Node.Next )
|
|
||||||
{
|
|
||||||
fghRemoveMenuFromWindow( window, menu );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Now proceed with removing menu entries that lead to this menu
|
|
||||||
*/
|
|
||||||
for( from = fgStructure.Menus.First; from; from = from->Node.Next )
|
|
||||||
{
|
|
||||||
fghRemoveMenuFromMenu( from, menu );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the programmer defined a destroy callback, call it
|
|
||||||
* A. Donev: But first make this the active menu
|
|
||||||
*/
|
|
||||||
if ( menu->Destroy != NULL )
|
|
||||||
{
|
|
||||||
SFG_Menu *activeMenu=fgStructure.Menu;
|
|
||||||
fgStructure.Menu = menu;
|
|
||||||
menu->Destroy () ;
|
|
||||||
fgStructure.Menu = activeMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Now we are pretty sure the menu is not used anywhere
|
|
||||||
* and that we can remove all of its entries
|
|
||||||
*/
|
|
||||||
while( (entry = menu->Entries.First) != NULL )
|
|
||||||
{
|
|
||||||
fgListRemove(&menu->Entries, &entry->Node);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* There might be a string allocated, have it freed:
|
|
||||||
*/
|
|
||||||
free( entry->Text );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Deallocate the entry itself:
|
|
||||||
*/
|
|
||||||
free( entry );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Remove the menu from the menus list
|
|
||||||
*/
|
|
||||||
fgListRemove( &fgStructure.Menus, &menu->Node );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If that menu was the current one...
|
|
||||||
*/
|
|
||||||
if( fgStructure.Menu == menu )
|
|
||||||
fgStructure.Menu = NULL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Have the menu structure freed
|
|
||||||
*/
|
|
||||||
free( menu );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function should be called on glutInit(). It will prepare the internal
|
|
||||||
* structure of freeglut to be used in the application. The structure will be
|
|
||||||
* destroyed using fgDestroyStructure() on glutMainLoop() return. In that
|
|
||||||
* case further use of freeglut should be preceeded with a glutInit() call.
|
|
||||||
*/
|
|
||||||
void fgCreateStructure( void )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* We will be needing two lists: the first containing windows,
|
|
||||||
* and the second containing the user-defined menus.
|
|
||||||
* Also, no current window/menu is set, as none has been created yet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
fgListInit(&fgStructure.Windows);
|
|
||||||
fgListInit(&fgStructure.Menus);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function is automatically called on glutMainLoop() return. It should deallocate
|
|
||||||
* and destroy all remnants of previous glutInit()-enforced structure initialization...
|
|
||||||
*/
|
|
||||||
void fgDestroyStructure( void )
|
|
||||||
{
|
|
||||||
SFG_Window *window;
|
|
||||||
SFG_Menu *menu;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Just make sure we are not called in vain...
|
|
||||||
*/
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure all windows and menus have been deallocated
|
|
||||||
*/
|
|
||||||
while( (window = fgStructure.Windows.First) != NULL )
|
|
||||||
fgDestroyWindow( window, TRUE );
|
|
||||||
|
|
||||||
while( (menu = fgStructure.Menus.First) != NULL )
|
|
||||||
fgDestroyMenu( menu );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Helper function to enumerate through all registered top-level windows
|
|
||||||
*/
|
|
||||||
void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator )
|
|
||||||
{
|
|
||||||
SFG_Window *window;
|
|
||||||
|
|
||||||
assert( (enumCallback != NULL) && (enumerator != NULL) );
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check every of the top-level windows
|
|
||||||
*/
|
|
||||||
for( window = fgStructure.Windows.First; window;
|
|
||||||
window = window->Node.Next )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Execute the callback...
|
|
||||||
*/
|
|
||||||
enumCallback( window, enumerator );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If it has been marked as 'found', stop searching
|
|
||||||
*/
|
|
||||||
if( enumerator->found == TRUE )
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Helper function to enumerate through all a window's subwindows (single level descent)
|
|
||||||
*/
|
|
||||||
void fgEnumSubWindows( SFG_Window* window, FGCBenumerator enumCallback, SFG_Enumerator* enumerator )
|
|
||||||
{
|
|
||||||
SFG_Window *child;
|
|
||||||
|
|
||||||
assert( (enumCallback != NULL) && (enumerator != NULL) );
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check every of the window's children:
|
|
||||||
*/
|
|
||||||
for( child = window->Children.First; child; child = child->Node.Next )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Execute the callback...
|
|
||||||
*/
|
|
||||||
enumCallback( child, enumerator );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If it has been marked as 'found', stop searching
|
|
||||||
*/
|
|
||||||
if( enumerator->found == TRUE )
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A static helper function to look for a window given its handle
|
|
||||||
*/
|
|
||||||
static void fghcbWindowByHandle( SFG_Window *window, SFG_Enumerator *enumerator )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Make sure we do not overwrite our precious results...
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( enumerator->found == FALSE );
|
|
||||||
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
#define WBHANDLE (Window)
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
#define WBHANDLE (HWND)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check the window's handle. Hope this works. Looks ugly. That's for sure.
|
|
||||||
*/
|
|
||||||
if( window->Window.Handle == WBHANDLE (enumerator->data) )
|
|
||||||
{
|
|
||||||
enumerator->found = TRUE;
|
|
||||||
enumerator->data = window;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Otherwise, check this window's children
|
|
||||||
*/
|
|
||||||
fgEnumSubWindows( window, fghcbWindowByHandle, enumerator );
|
|
||||||
|
|
||||||
#undef WBHANDLE
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* fgWindowByHandle returns a (SFG_Window *) value pointing to the
|
|
||||||
* first window in the queue matching the specified window handle.
|
|
||||||
* The function is defined in freeglut_structure.c file.
|
|
||||||
*/
|
|
||||||
SFG_Window* fgWindowByHandle
|
|
||||||
#if TARGET_HOST_UNIX_X11
|
|
||||||
( Window hWindow )
|
|
||||||
#elif TARGET_HOST_WIN32
|
|
||||||
( HWND hWindow )
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
SFG_Enumerator enumerator;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is easy and makes use of the windows enumeration defined above
|
|
||||||
*/
|
|
||||||
enumerator.found = FALSE;
|
|
||||||
enumerator.data = (void *)hWindow;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Start the enumeration now:
|
|
||||||
*/
|
|
||||||
fgEnumWindows( fghcbWindowByHandle, &enumerator );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if the window has been found or not:
|
|
||||||
*/
|
|
||||||
if( enumerator.found == TRUE )
|
|
||||||
return( (SFG_Window *) enumerator.data );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Otherwise return NULL to mark the failure
|
|
||||||
*/
|
|
||||||
return( NULL );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A static helper function to look for a window given its ID
|
|
||||||
*/
|
|
||||||
static void fghcbWindowByID( SFG_Window *window, SFG_Enumerator *enumerator )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Make sure we do not overwrite our precious results...
|
|
||||||
*/
|
|
||||||
freeglut_return_if_fail( enumerator->found == FALSE );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check the window's handle. Hope this works. Looks ugly. That's for sure.
|
|
||||||
*/
|
|
||||||
if( window->ID == (int) (enumerator->data) )
|
|
||||||
{
|
|
||||||
enumerator->found = TRUE;
|
|
||||||
enumerator->data = window;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Otherwise, check this window's children
|
|
||||||
*/
|
|
||||||
fgEnumSubWindows( window, fghcbWindowByID, enumerator );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function is similiar to the previous one, except it is
|
|
||||||
* looking for a specified (sub)window identifier. The function
|
|
||||||
* is defined in freeglut_structure.c file.
|
|
||||||
*/
|
|
||||||
SFG_Window* fgWindowByID( int windowID )
|
|
||||||
{
|
|
||||||
SFG_Enumerator enumerator;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Uses a method very similiar for fgWindowByHandle...
|
|
||||||
*/
|
|
||||||
enumerator.found = FALSE;
|
|
||||||
enumerator.data = (void *) windowID;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Start the enumeration now:
|
|
||||||
*/
|
|
||||||
fgEnumWindows( fghcbWindowByID, &enumerator );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if the window has been found or not:
|
|
||||||
*/
|
|
||||||
if( enumerator.found == TRUE )
|
|
||||||
return( (SFG_Window *) enumerator.data );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Otherwise return NULL to mark the failure
|
|
||||||
*/
|
|
||||||
return( NULL );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Looks up a menu given its ID. This is easier that fgWindowByXXX
|
|
||||||
* as all menus are placed in a single doubly linked list...
|
|
||||||
*/
|
|
||||||
SFG_Menu* fgMenuByID( int menuID )
|
|
||||||
{
|
|
||||||
SFG_Menu *menu = NULL;
|
|
||||||
|
|
||||||
freeglut_assert_ready;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* It's enough to check all entries in fgStructure.Menus...
|
|
||||||
*/
|
|
||||||
for( menu = fgStructure.Menus.First; menu; menu = menu->Node.Next )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Does the ID number match?
|
|
||||||
*/
|
|
||||||
if( menu->ID == menuID )
|
|
||||||
return( menu );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We have not found the requested menu ID
|
|
||||||
*/
|
|
||||||
return( NULL );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* List functions...
|
|
||||||
*/
|
|
||||||
void fgListInit(SFG_List *list)
|
|
||||||
{
|
|
||||||
list->First = NULL;
|
|
||||||
list->Last = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void fgListAppend(SFG_List *list, SFG_Node *node)
|
|
||||||
{
|
|
||||||
SFG_Node *ln;
|
|
||||||
|
|
||||||
if ( (ln = list->Last) != NULL )
|
|
||||||
{
|
|
||||||
ln->Next = node;
|
|
||||||
node->Prev = ln;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
node->Prev = NULL;
|
|
||||||
list->First = node;
|
|
||||||
}
|
|
||||||
|
|
||||||
node->Next = NULL;
|
|
||||||
list->Last = node;
|
|
||||||
}
|
|
||||||
|
|
||||||
void fgListRemove(SFG_List *list, SFG_Node *node)
|
|
||||||
{
|
|
||||||
SFG_Node *ln;
|
|
||||||
|
|
||||||
if ( (ln = node->Next) != NULL )
|
|
||||||
ln->Prev = node->Prev;
|
|
||||||
if ( (ln = node->Prev) != NULL )
|
|
||||||
ln->Next = node->Next;
|
|
||||||
if ( (ln = list->First) == node )
|
|
||||||
list->First = node->Next;
|
|
||||||
if ( (ln = list->Last) == node )
|
|
||||||
list->Last = node->Prev;
|
|
||||||
}
|
|
||||||
|
|
||||||
int fgListLength(SFG_List *list)
|
|
||||||
{
|
|
||||||
SFG_Node *node;
|
|
||||||
int length = 0;
|
|
||||||
|
|
||||||
for( node = list->First; node; node = node->Next )
|
|
||||||
++length;
|
|
||||||
|
|
||||||
return( length );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
@ -1,247 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_teapot.c
|
|
||||||
*
|
|
||||||
* Teapot(tm) rendering code.
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Fri Dec 24 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Original teapot code copyright follows:
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (c) Copyright 1993, Silicon Graphics, Inc.
|
|
||||||
*
|
|
||||||
* ALL RIGHTS RESERVED
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software
|
|
||||||
* for any purpose and without fee is hereby granted, provided
|
|
||||||
* that the above copyright notice appear in all copies and that
|
|
||||||
* both the copyright notice and this permission notice appear in
|
|
||||||
* supporting documentation, and that the name of Silicon
|
|
||||||
* Graphics, Inc. not be used in advertising or publicity
|
|
||||||
* pertaining to distribution of the software without specific,
|
|
||||||
* written prior permission.
|
|
||||||
*
|
|
||||||
* THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU
|
|
||||||
* "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
|
|
||||||
* OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
|
|
||||||
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO
|
|
||||||
* EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE
|
|
||||||
* ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR
|
|
||||||
* CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
|
|
||||||
* INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,
|
|
||||||
* SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR
|
|
||||||
* NOT SILICON GRAPHICS, INC. HAS BEEN ADVISED OF THE POSSIBILITY
|
|
||||||
* OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR
|
|
||||||
* PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
|
||||||
* US Government Users Restricted Rights
|
|
||||||
*
|
|
||||||
* Use, duplication, or disclosure by the Government is subject to
|
|
||||||
* restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
|
|
||||||
* (c)(1)(ii) of the Rights in Technical Data and Computer
|
|
||||||
* Software clause at DFARS 252.227-7013 and/or in similar or
|
|
||||||
* successor clauses in the FAR or the DOD or NASA FAR
|
|
||||||
* Supplement. Unpublished-- rights reserved under the copyright
|
|
||||||
* laws of the United States. Contractor/manufacturer is Silicon
|
|
||||||
* Graphics, Inc., 2011 N. Shoreline Blvd., Mountain View, CA
|
|
||||||
* 94039-7311.
|
|
||||||
*
|
|
||||||
* OpenGL(TM) is a trademark of Silicon Graphics, Inc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-teapot"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Rim, body, lid, and bottom data must be reflected in x and y;
|
|
||||||
* handle and spout data across the y axis only.
|
|
||||||
*/
|
|
||||||
static int patchdata[][16] =
|
|
||||||
{
|
|
||||||
{ 102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, /* rim */
|
|
||||||
{ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, /* body */
|
|
||||||
{ 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 },
|
|
||||||
{ 96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101, 101, 0, 1, 2, 3 }, /* lid */
|
|
||||||
{ 0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117 },
|
|
||||||
{ 118, 118, 118, 118, 124, 122, 119, 121, 123, 126, 125, 120, 40, 39, 38, 37 }, /* bottom */
|
|
||||||
{ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56 }, /* handle */
|
|
||||||
{ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 28, 65, 66, 67 },
|
|
||||||
{ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83 }, /* spout */
|
|
||||||
{ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 }
|
|
||||||
};
|
|
||||||
|
|
||||||
static double cpdata[][3] =
|
|
||||||
{
|
|
||||||
{0.2, 0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7}, {0,
|
|
||||||
-0.2, 2.7}, {1.3375, 0, 2.53125}, {1.3375, -0.749, 2.53125},
|
|
||||||
{0.749, -1.3375, 2.53125}, {0, -1.3375, 2.53125}, {1.4375,
|
|
||||||
0, 2.53125}, {1.4375, -0.805, 2.53125}, {0.805, -1.4375,
|
|
||||||
2.53125}, {0, -1.4375, 2.53125}, {1.5, 0, 2.4}, {1.5, -0.84,
|
|
||||||
2.4}, {0.84, -1.5, 2.4}, {0, -1.5, 2.4}, {1.75, 0, 1.875},
|
|
||||||
{1.75, -0.98, 1.875}, {0.98, -1.75, 1.875}, {0, -1.75,
|
|
||||||
1.875}, {2, 0, 1.35}, {2, -1.12, 1.35}, {1.12, -2, 1.35},
|
|
||||||
{0, -2, 1.35}, {2, 0, 0.9}, {2, -1.12, 0.9}, {1.12, -2,
|
|
||||||
0.9}, {0, -2, 0.9}, {-2, 0, 0.9}, {2, 0, 0.45}, {2, -1.12,
|
|
||||||
0.45}, {1.12, -2, 0.45}, {0, -2, 0.45}, {1.5, 0, 0.225},
|
|
||||||
{1.5, -0.84, 0.225}, {0.84, -1.5, 0.225}, {0, -1.5, 0.225},
|
|
||||||
{1.5, 0, 0.15}, {1.5, -0.84, 0.15}, {0.84, -1.5, 0.15}, {0,
|
|
||||||
-1.5, 0.15}, {-1.6, 0, 2.025}, {-1.6, -0.3, 2.025}, {-1.5,
|
|
||||||
-0.3, 2.25}, {-1.5, 0, 2.25}, {-2.3, 0, 2.025}, {-2.3, -0.3,
|
|
||||||
2.025}, {-2.5, -0.3, 2.25}, {-2.5, 0, 2.25}, {-2.7, 0,
|
|
||||||
2.025}, {-2.7, -0.3, 2.025}, {-3, -0.3, 2.25}, {-3, 0,
|
|
||||||
2.25}, {-2.7, 0, 1.8}, {-2.7, -0.3, 1.8}, {-3, -0.3, 1.8},
|
|
||||||
{-3, 0, 1.8}, {-2.7, 0, 1.575}, {-2.7, -0.3, 1.575}, {-3,
|
|
||||||
-0.3, 1.35}, {-3, 0, 1.35}, {-2.5, 0, 1.125}, {-2.5, -0.3,
|
|
||||||
1.125}, {-2.65, -0.3, 0.9375}, {-2.65, 0, 0.9375}, {-2,
|
|
||||||
-0.3, 0.9}, {-1.9, -0.3, 0.6}, {-1.9, 0, 0.6}, {1.7, 0,
|
|
||||||
1.425}, {1.7, -0.66, 1.425}, {1.7, -0.66, 0.6}, {1.7, 0,
|
|
||||||
0.6}, {2.6, 0, 1.425}, {2.6, -0.66, 1.425}, {3.1, -0.66,
|
|
||||||
0.825}, {3.1, 0, 0.825}, {2.3, 0, 2.1}, {2.3, -0.25, 2.1},
|
|
||||||
{2.4, -0.25, 2.025}, {2.4, 0, 2.025}, {2.7, 0, 2.4}, {2.7,
|
|
||||||
-0.25, 2.4}, {3.3, -0.25, 2.4}, {3.3, 0, 2.4}, {2.8, 0,
|
|
||||||
2.475}, {2.8, -0.25, 2.475}, {3.525, -0.25, 2.49375},
|
|
||||||
{3.525, 0, 2.49375}, {2.9, 0, 2.475}, {2.9, -0.15, 2.475},
|
|
||||||
{3.45, -0.15, 2.5125}, {3.45, 0, 2.5125}, {2.8, 0, 2.4},
|
|
||||||
{2.8, -0.15, 2.4}, {3.2, -0.15, 2.4}, {3.2, 0, 2.4}, {0, 0,
|
|
||||||
3.15}, {0.8, 0, 3.15}, {0.8, -0.45, 3.15}, {0.45, -0.8,
|
|
||||||
3.15}, {0, -0.8, 3.15}, {0, 0, 2.85}, {1.4, 0, 2.4}, {1.4,
|
|
||||||
-0.784, 2.4}, {0.784, -1.4, 2.4}, {0, -1.4, 2.4}, {0.4, 0,
|
|
||||||
2.55}, {0.4, -0.224, 2.55}, {0.224, -0.4, 2.55}, {0, -0.4,
|
|
||||||
2.55}, {1.3, 0, 2.55}, {1.3, -0.728, 2.55}, {0.728, -1.3,
|
|
||||||
2.55}, {0, -1.3, 2.55}, {1.3, 0, 2.4}, {1.3, -0.728, 2.4},
|
|
||||||
{0.728, -1.3, 2.4}, {0, -1.3, 2.4}, {0, 0, 0}, {1.425,
|
|
||||||
-0.798, 0}, {1.5, 0, 0.075}, {1.425, 0, 0}, {0.798, -1.425,
|
|
||||||
0}, {0, -1.5, 0.075}, {0, -1.425, 0}, {1.5, -0.84, 0.075},
|
|
||||||
{0.84, -1.5, 0.075}
|
|
||||||
};
|
|
||||||
|
|
||||||
static double tex[2][2][2] =
|
|
||||||
{
|
|
||||||
{ {0.0, 0.0}, {1.0, 0.0} },
|
|
||||||
{ {0.0, 1.0}, {1.0, 1.0} }
|
|
||||||
};
|
|
||||||
|
|
||||||
static void teapot( GLint grid, GLdouble scale, GLenum type )
|
|
||||||
{
|
|
||||||
double p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];
|
|
||||||
long i, j, k, l;
|
|
||||||
|
|
||||||
glPushAttrib( GL_ENABLE_BIT | GL_EVAL_BIT );
|
|
||||||
glEnable( GL_AUTO_NORMAL );
|
|
||||||
glEnable( GL_NORMALIZE );
|
|
||||||
glEnable( GL_MAP2_VERTEX_3 );
|
|
||||||
glEnable( GL_MAP2_TEXTURE_COORD_2 );
|
|
||||||
|
|
||||||
glPushMatrix();
|
|
||||||
glRotated(270.0, 1.0, 0.0, 0.0);
|
|
||||||
glScaled(0.5 * scale, 0.5 * scale, 0.5 * scale);
|
|
||||||
glTranslated(0.0, 0.0, -1.5);
|
|
||||||
|
|
||||||
for (i = 0; i < 10; i++) {
|
|
||||||
for (j = 0; j < 4; j++) {
|
|
||||||
for (k = 0; k < 4; k++) {
|
|
||||||
for (l = 0; l < 3; l++) {
|
|
||||||
p[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];
|
|
||||||
q[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l];
|
|
||||||
if (l == 1)
|
|
||||||
q[j][k][l] *= -1.0;
|
|
||||||
if (i < 6) {
|
|
||||||
r[j][k][l] =
|
|
||||||
cpdata[patchdata[i][j * 4 + (3 - k)]][l];
|
|
||||||
if (l == 0)
|
|
||||||
r[j][k][l] *= -1.0;
|
|
||||||
s[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];
|
|
||||||
if (l == 0)
|
|
||||||
s[j][k][l] *= -1.0;
|
|
||||||
if (l == 1)
|
|
||||||
s[j][k][l] *= -1.0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
glMap2d(GL_MAP2_TEXTURE_COORD_2, 0.0, 1.0, 2, 2, 0.0, 1.0, 4, 2,
|
|
||||||
&tex[0][0][0]);
|
|
||||||
glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
|
|
||||||
&p[0][0][0]);
|
|
||||||
glMapGrid2d(grid, 0.0, 1.0, grid, 0.0, 1.0);
|
|
||||||
glEvalMesh2(type, 0, grid, 0, grid);
|
|
||||||
glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
|
|
||||||
&q[0][0][0]);
|
|
||||||
glEvalMesh2(type, 0, grid, 0, grid);
|
|
||||||
if (i < 6) {
|
|
||||||
glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
|
|
||||||
&r[0][0][0]);
|
|
||||||
glEvalMesh2(type, 0, grid, 0, grid);
|
|
||||||
glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
|
|
||||||
&s[0][0][0]);
|
|
||||||
glEvalMesh2(type, 0, grid, 0, grid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
glPopMatrix();
|
|
||||||
glPopAttrib();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Renders a beautiful wired teapot...
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutWireTeapot( GLdouble size )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* We will use the general teapot rendering code
|
|
||||||
*/
|
|
||||||
teapot( 10, size, GL_LINE );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Renders a beautiful filled teapot...
|
|
||||||
*/
|
|
||||||
void FGAPIENTRY glutSolidTeapot( GLdouble size )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* We will use the general teapot rendering code
|
|
||||||
*/
|
|
||||||
teapot( 7, size, GL_FILL );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* freeglut_videoresize.c
|
|
||||||
*
|
|
||||||
* Video resize functions (as defined by GLUT API)
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Thu Dec 16 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define G_LOG_DOMAIN "freeglut-videoresize"
|
|
||||||
|
|
||||||
#include "../include/GL/freeglut.h"
|
|
||||||
#include "freeglut_internal.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NOTE: functions declared in this file probably will not be implemented.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
|
|
||||||
|
|
||||||
int FGAPIENTRY glutVideoResizeGet( GLenum eWhat ) { return( 0x00 ); }
|
|
||||||
void FGAPIENTRY glutSetupVideoResizing( void ) { /* Not implemented */ }
|
|
||||||
void FGAPIENTRY glutStopVideoResizing( void ) { /* Not implemented */ }
|
|
||||||
void FGAPIENTRY glutVideoResize( int x, int y, int w, int h ) { /* Not implemented */ }
|
|
||||||
void FGAPIENTRY glutVideoPan( int x, int y, int w, int h ) { /* Not implemented */ }
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,132 +0,0 @@
|
|||||||
LIBRARY freeglutdll
|
|
||||||
DESCRIPTION "Freeglut OpenGL Utility Toolkit"
|
|
||||||
VERSION 1.3
|
|
||||||
EXPORTS
|
|
||||||
glutInit
|
|
||||||
glutInitWindowPosition
|
|
||||||
glutInitWindowSize
|
|
||||||
glutInitDisplayMode
|
|
||||||
glutInitDisplayString
|
|
||||||
glutMainLoop
|
|
||||||
glutMainLoopEvent
|
|
||||||
glutLeaveMainLoop
|
|
||||||
glutCreateWindow
|
|
||||||
glutCreateSubWindow
|
|
||||||
glutDestroyWindow
|
|
||||||
glutSetWindow
|
|
||||||
glutGetWindow
|
|
||||||
glutSetWindowTitle
|
|
||||||
glutSetIconTitle
|
|
||||||
glutReshapeWindow
|
|
||||||
glutPositionWindow
|
|
||||||
glutShowWindow
|
|
||||||
glutHideWindow
|
|
||||||
glutIconifyWindow
|
|
||||||
glutPushWindow
|
|
||||||
glutPopWindow
|
|
||||||
glutFullScreen
|
|
||||||
glutPostWindowRedisplay
|
|
||||||
glutPostRedisplay
|
|
||||||
glutSwapBuffers
|
|
||||||
glutWarpPointer
|
|
||||||
glutSetCursor
|
|
||||||
glutEstablishOverlay
|
|
||||||
glutRemoveOverlay
|
|
||||||
glutUseLayer
|
|
||||||
glutPostOverlayRedisplay
|
|
||||||
glutPostWindowOverlayRedisplay
|
|
||||||
glutShowOverlay
|
|
||||||
glutHideOverlay
|
|
||||||
glutCreateMenu
|
|
||||||
glutDestroyMenu
|
|
||||||
glutGetMenu
|
|
||||||
glutSetMenu
|
|
||||||
glutAddMenuEntry
|
|
||||||
glutAddSubMenu
|
|
||||||
glutChangeToMenuEntry
|
|
||||||
glutChangeToSubMenu
|
|
||||||
glutRemoveMenuItem
|
|
||||||
glutAttachMenu
|
|
||||||
glutDetachMenu
|
|
||||||
glutTimerFunc
|
|
||||||
glutIdleFunc
|
|
||||||
glutKeyboardFunc
|
|
||||||
glutSpecialFunc
|
|
||||||
glutReshapeFunc
|
|
||||||
glutVisibilityFunc
|
|
||||||
glutDisplayFunc
|
|
||||||
glutMouseFunc
|
|
||||||
glutMotionFunc
|
|
||||||
glutPassiveMotionFunc
|
|
||||||
glutEntryFunc
|
|
||||||
glutCloseFunc
|
|
||||||
glutWMCloseFunc
|
|
||||||
glutKeyboardUpFunc
|
|
||||||
glutSpecialUpFunc
|
|
||||||
glutJoystickFunc
|
|
||||||
glutMenuStateFunc
|
|
||||||
glutMenuStatusFunc
|
|
||||||
glutOverlayDisplayFunc
|
|
||||||
glutWindowStatusFunc
|
|
||||||
glutSpaceballMotionFunc
|
|
||||||
glutSpaceballRotateFunc
|
|
||||||
glutSpaceballButtonFunc
|
|
||||||
glutButtonBoxFunc
|
|
||||||
glutDialsFunc
|
|
||||||
glutTabletMotionFunc
|
|
||||||
glutTabletButtonFunc
|
|
||||||
glutSetOption
|
|
||||||
glutGet
|
|
||||||
glutDeviceGet
|
|
||||||
glutGetModifiers
|
|
||||||
glutLayerGet
|
|
||||||
glutBitmapCharacter
|
|
||||||
glutBitmapWidth
|
|
||||||
glutStrokeCharacter
|
|
||||||
glutStrokeWidth
|
|
||||||
glutBitmapLength
|
|
||||||
glutStrokeLength
|
|
||||||
glutBitmapHeight
|
|
||||||
glutStrokeHeight
|
|
||||||
glutBitmapString
|
|
||||||
glutStrokeString
|
|
||||||
glutWireCube
|
|
||||||
glutSolidCube
|
|
||||||
glutWireSphere
|
|
||||||
glutSolidSphere
|
|
||||||
glutWireCone
|
|
||||||
glutSolidCone
|
|
||||||
glutWireTorus
|
|
||||||
glutSolidTorus
|
|
||||||
glutWireDodecahedron
|
|
||||||
glutSolidDodecahedron
|
|
||||||
glutWireOctahedron
|
|
||||||
glutSolidOctahedron
|
|
||||||
glutWireTetrahedron
|
|
||||||
glutSolidTetrahedron
|
|
||||||
glutWireIcosahedron
|
|
||||||
glutSolidIcosahedron
|
|
||||||
glutWireRhombicDodecahedron
|
|
||||||
glutSolidRhombicDodecahedron
|
|
||||||
glutWireSierpinskiSponge
|
|
||||||
glutSolidSierpinskiSponge
|
|
||||||
glutWireTeapot
|
|
||||||
glutSolidTeapot
|
|
||||||
glutGameModeString
|
|
||||||
glutEnterGameMode
|
|
||||||
glutLeaveGameMode
|
|
||||||
glutGameModeGet
|
|
||||||
glutVideoResizeGet
|
|
||||||
glutSetupVideoResizing
|
|
||||||
glutStopVideoResizing
|
|
||||||
glutVideoResize
|
|
||||||
glutVideoPan
|
|
||||||
glutSetColor
|
|
||||||
glutGetColor
|
|
||||||
glutCopyColormap
|
|
||||||
glutIgnoreKeyRepeat
|
|
||||||
glutSetKeyRepeat
|
|
||||||
glutForceJoystickFunc
|
|
||||||
glutExtensionSupported
|
|
||||||
glutReportErrors
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
|||||||
INVALID TEMPLATE, MOVED TO XFREE86-STYLE LICENSE
|
|
||||||
|
|
||||||
/*
|
|
||||||
* |FILENAME|
|
|
||||||
*
|
|
||||||
* Here comes the file's contents description.
|
|
||||||
*
|
|
||||||
* Copyright (c) |YEAR| by |AUTHOR|
|
|
||||||
* Written by |AUTHOR|, <|EMAIL|>
|
|
||||||
* Creation date: |DATE|
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*/
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
|||||||
INVALID TEMPLATE, MOVED TO XFREE86-STYLE LICENSE
|
|
||||||
|
|
||||||
/*
|
|
||||||
* |FILENAME|
|
|
||||||
*
|
|
||||||
* Here comes the file's contents description.
|
|
||||||
*
|
|
||||||
* Copyright (c) |YEAR| by |AUTHOR|
|
|
||||||
* Written by |AUTHOR|, <|EMAIL|>
|
|
||||||
* Creation date: |DATE|
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*/
|
|
||||||
|
|
Reference in New Issue
Block a user