diff --git a/ogl_editor/src/External/glfw/include/GL/glfw.h b/ogl_editor/src/External/glfw/include/GL/glfw.h deleted file mode 100644 index e20552e..0000000 --- a/ogl_editor/src/External/glfw/include/GL/glfw.h +++ /dev/null @@ -1,518 +0,0 @@ -/************************************************************************ - * GLFW - An OpenGL framework - * API version: 2.7 - * WWW: http://www.glfw.org/ - *------------------------------------------------------------------------ - * Copyright (c) 2002-2006 Marcus Geelnard - * Copyright (c) 2006-2010 Camilla Berglund - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would - * be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - * - *************************************************************************/ - -#ifndef __glfw_h_ -#define __glfw_h_ - -#ifdef __cplusplus -extern "C" { -#endif - - -/************************************************************************* - * Global definitions - *************************************************************************/ - -/* We need a NULL pointer from time to time */ -#ifndef NULL - #ifdef __cplusplus - #define NULL 0 - #else - #define NULL ((void *)0) - #endif -#endif /* NULL */ - - -/* ------------------- BEGIN SYSTEM/COMPILER SPECIFIC -------------------- */ - -/* Please report any probles that you find with your compiler, which may - * be solved in this section! There are several compilers that I have not - * been able to test this file with yet. - * - * First: If we are we on Windows, we want a single define for it (_WIN32) - * (Note: For Cygwin the compiler flag -mwin32 should be used, but to - * make sure that things run smoothly for Cygwin users, we add __CYGWIN__ - * to the list of "valid Win32 identifiers", which removes the need for - * -mwin32) - */ -#if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__CYGWIN__)) - #define _WIN32 -#endif /* _WIN32 */ - -/* In order for extension support to be portable, we need to define an - * OpenGL function call method. We use the keyword APIENTRY, which is - * defined for Win32. (Note: Windows also needs this for ) - */ -#ifndef APIENTRY - #ifdef _WIN32 - #define APIENTRY __stdcall - #else - #define APIENTRY - #endif - #define GL_APIENTRY_DEFINED -#endif /* APIENTRY */ - - -/* The following three defines are here solely to make some Windows-based - * files happy. Theoretically we could include , but - * it has the major drawback of severely polluting our namespace. - */ - -/* Under Windows, we need WINGDIAPI defined */ -#if !defined(WINGDIAPI) && defined(_WIN32) - #if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__POCC__) - /* Microsoft Visual C++, Borland C++ Builder and Pelles C */ - #define WINGDIAPI __declspec(dllimport) - #elif defined(__LCC__) - /* LCC-Win32 */ - #define WINGDIAPI __stdcall - #else - /* Others (e.g. MinGW, Cygwin) */ - #define WINGDIAPI extern - #endif - #define GL_WINGDIAPI_DEFINED -#endif /* WINGDIAPI */ - -/* Some files also need CALLBACK defined */ -#if !defined(CALLBACK) && defined(_WIN32) - #if defined(_MSC_VER) - /* Microsoft Visual C++ */ - #if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) - #define CALLBACK __stdcall - #else - #define CALLBACK - #endif - #else - /* Other Windows compilers */ - #define CALLBACK __stdcall - #endif - #define GLU_CALLBACK_DEFINED -#endif /* CALLBACK */ - -/* Microsoft Visual C++, Borland C++ and Pelles C needs wchar_t */ -#if defined(_WIN32) && (defined(_MSC_VER) || defined(__BORLANDC__) || defined(__POCC__)) && !defined(_WCHAR_T_DEFINED) - typedef unsigned short wchar_t; - #define _WCHAR_T_DEFINED -#endif /* _WCHAR_T_DEFINED */ - - -/* ---------------- GLFW related system specific defines ----------------- */ - -#if defined(_WIN32) && defined(GLFW_BUILD_DLL) - - /* We are building a Win32 DLL */ - #define GLFWAPI __declspec(dllexport) - #define GLFWAPIENTRY __stdcall - #define GLFWCALL __stdcall - -#elif defined(_WIN32) && defined(GLFW_DLL) - - /* We are calling a Win32 DLL */ - #if defined(__LCC__) - #define GLFWAPI extern - #else - #define GLFWAPI __declspec(dllimport) - #endif - #define GLFWAPIENTRY __stdcall - #define GLFWCALL __stdcall - -#else - - /* We are either building/calling a static lib or we are non-win32 */ - #define GLFWAPIENTRY - #define GLFWAPI - #define GLFWCALL - -#endif - -/* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */ - -/* Include standard OpenGL headers: GLFW uses GL_FALSE/GL_TRUE, and it is - * convenient for the user to only have to include . This also - * solves the problem with Windows and needing some - * special defines which normally requires the user to include - * (which is not a nice solution for portable programs). - */ -#if defined(__APPLE_CC__) - #if defined(GLFW_INCLUDE_GL3) - #include - #else - #define GL_GLEXT_LEGACY - #include - #endif - #ifndef GLFW_NO_GLU - #include - #endif -#else - #if defined(GLFW_INCLUDE_GL3) - #include - #else - #include - #endif - #ifndef GLFW_NO_GLU - #include - #endif -#endif - - -/************************************************************************* - * GLFW version - *************************************************************************/ - -#define GLFW_VERSION_MAJOR 2 -#define GLFW_VERSION_MINOR 7 -#define GLFW_VERSION_REVISION 7 - - -/************************************************************************* - * Input handling definitions - *************************************************************************/ - -/* Key and button state/action definitions */ -#define GLFW_RELEASE 0 -#define GLFW_PRESS 1 - -/* Keyboard key definitions: 8-bit ISO-8859-1 (Latin 1) encoding is used - * for printable keys (such as A-Z, 0-9 etc), and values above 256 - * represent special (non-printable) keys (e.g. F1, Page Up etc). - */ -#define GLFW_KEY_UNKNOWN -1 -#define GLFW_KEY_SPACE 32 -#define GLFW_KEY_SPECIAL 256 -#define GLFW_KEY_ESC (GLFW_KEY_SPECIAL+1) -#define GLFW_KEY_F1 (GLFW_KEY_SPECIAL+2) -#define GLFW_KEY_F2 (GLFW_KEY_SPECIAL+3) -#define GLFW_KEY_F3 (GLFW_KEY_SPECIAL+4) -#define GLFW_KEY_F4 (GLFW_KEY_SPECIAL+5) -#define GLFW_KEY_F5 (GLFW_KEY_SPECIAL+6) -#define GLFW_KEY_F6 (GLFW_KEY_SPECIAL+7) -#define GLFW_KEY_F7 (GLFW_KEY_SPECIAL+8) -#define GLFW_KEY_F8 (GLFW_KEY_SPECIAL+9) -#define GLFW_KEY_F9 (GLFW_KEY_SPECIAL+10) -#define GLFW_KEY_F10 (GLFW_KEY_SPECIAL+11) -#define GLFW_KEY_F11 (GLFW_KEY_SPECIAL+12) -#define GLFW_KEY_F12 (GLFW_KEY_SPECIAL+13) -#define GLFW_KEY_F13 (GLFW_KEY_SPECIAL+14) -#define GLFW_KEY_F14 (GLFW_KEY_SPECIAL+15) -#define GLFW_KEY_F15 (GLFW_KEY_SPECIAL+16) -#define GLFW_KEY_F16 (GLFW_KEY_SPECIAL+17) -#define GLFW_KEY_F17 (GLFW_KEY_SPECIAL+18) -#define GLFW_KEY_F18 (GLFW_KEY_SPECIAL+19) -#define GLFW_KEY_F19 (GLFW_KEY_SPECIAL+20) -#define GLFW_KEY_F20 (GLFW_KEY_SPECIAL+21) -#define GLFW_KEY_F21 (GLFW_KEY_SPECIAL+22) -#define GLFW_KEY_F22 (GLFW_KEY_SPECIAL+23) -#define GLFW_KEY_F23 (GLFW_KEY_SPECIAL+24) -#define GLFW_KEY_F24 (GLFW_KEY_SPECIAL+25) -#define GLFW_KEY_F25 (GLFW_KEY_SPECIAL+26) -#define GLFW_KEY_UP (GLFW_KEY_SPECIAL+27) -#define GLFW_KEY_DOWN (GLFW_KEY_SPECIAL+28) -#define GLFW_KEY_LEFT (GLFW_KEY_SPECIAL+29) -#define GLFW_KEY_RIGHT (GLFW_KEY_SPECIAL+30) -#define GLFW_KEY_LSHIFT (GLFW_KEY_SPECIAL+31) -#define GLFW_KEY_RSHIFT (GLFW_KEY_SPECIAL+32) -#define GLFW_KEY_LCTRL (GLFW_KEY_SPECIAL+33) -#define GLFW_KEY_RCTRL (GLFW_KEY_SPECIAL+34) -#define GLFW_KEY_LALT (GLFW_KEY_SPECIAL+35) -#define GLFW_KEY_RALT (GLFW_KEY_SPECIAL+36) -#define GLFW_KEY_TAB (GLFW_KEY_SPECIAL+37) -#define GLFW_KEY_ENTER (GLFW_KEY_SPECIAL+38) -#define GLFW_KEY_BACKSPACE (GLFW_KEY_SPECIAL+39) -#define GLFW_KEY_INSERT (GLFW_KEY_SPECIAL+40) -#define GLFW_KEY_DEL (GLFW_KEY_SPECIAL+41) -#define GLFW_KEY_PAGEUP (GLFW_KEY_SPECIAL+42) -#define GLFW_KEY_PAGEDOWN (GLFW_KEY_SPECIAL+43) -#define GLFW_KEY_HOME (GLFW_KEY_SPECIAL+44) -#define GLFW_KEY_END (GLFW_KEY_SPECIAL+45) -#define GLFW_KEY_KP_0 (GLFW_KEY_SPECIAL+46) -#define GLFW_KEY_KP_1 (GLFW_KEY_SPECIAL+47) -#define GLFW_KEY_KP_2 (GLFW_KEY_SPECIAL+48) -#define GLFW_KEY_KP_3 (GLFW_KEY_SPECIAL+49) -#define GLFW_KEY_KP_4 (GLFW_KEY_SPECIAL+50) -#define GLFW_KEY_KP_5 (GLFW_KEY_SPECIAL+51) -#define GLFW_KEY_KP_6 (GLFW_KEY_SPECIAL+52) -#define GLFW_KEY_KP_7 (GLFW_KEY_SPECIAL+53) -#define GLFW_KEY_KP_8 (GLFW_KEY_SPECIAL+54) -#define GLFW_KEY_KP_9 (GLFW_KEY_SPECIAL+55) -#define GLFW_KEY_KP_DIVIDE (GLFW_KEY_SPECIAL+56) -#define GLFW_KEY_KP_MULTIPLY (GLFW_KEY_SPECIAL+57) -#define GLFW_KEY_KP_SUBTRACT (GLFW_KEY_SPECIAL+58) -#define GLFW_KEY_KP_ADD (GLFW_KEY_SPECIAL+59) -#define GLFW_KEY_KP_DECIMAL (GLFW_KEY_SPECIAL+60) -#define GLFW_KEY_KP_EQUAL (GLFW_KEY_SPECIAL+61) -#define GLFW_KEY_KP_ENTER (GLFW_KEY_SPECIAL+62) -#define GLFW_KEY_KP_NUM_LOCK (GLFW_KEY_SPECIAL+63) -#define GLFW_KEY_CAPS_LOCK (GLFW_KEY_SPECIAL+64) -#define GLFW_KEY_SCROLL_LOCK (GLFW_KEY_SPECIAL+65) -#define GLFW_KEY_PAUSE (GLFW_KEY_SPECIAL+66) -#define GLFW_KEY_LSUPER (GLFW_KEY_SPECIAL+67) -#define GLFW_KEY_RSUPER (GLFW_KEY_SPECIAL+68) -#define GLFW_KEY_MENU (GLFW_KEY_SPECIAL+69) -#define GLFW_KEY_LAST GLFW_KEY_MENU - -/* Mouse button definitions */ -#define GLFW_MOUSE_BUTTON_1 0 -#define GLFW_MOUSE_BUTTON_2 1 -#define GLFW_MOUSE_BUTTON_3 2 -#define GLFW_MOUSE_BUTTON_4 3 -#define GLFW_MOUSE_BUTTON_5 4 -#define GLFW_MOUSE_BUTTON_6 5 -#define GLFW_MOUSE_BUTTON_7 6 -#define GLFW_MOUSE_BUTTON_8 7 -#define GLFW_MOUSE_BUTTON_LAST GLFW_MOUSE_BUTTON_8 - -/* Mouse button aliases */ -#define GLFW_MOUSE_BUTTON_LEFT GLFW_MOUSE_BUTTON_1 -#define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2 -#define GLFW_MOUSE_BUTTON_MIDDLE GLFW_MOUSE_BUTTON_3 - - -/* Joystick identifiers */ -#define GLFW_JOYSTICK_1 0 -#define GLFW_JOYSTICK_2 1 -#define GLFW_JOYSTICK_3 2 -#define GLFW_JOYSTICK_4 3 -#define GLFW_JOYSTICK_5 4 -#define GLFW_JOYSTICK_6 5 -#define GLFW_JOYSTICK_7 6 -#define GLFW_JOYSTICK_8 7 -#define GLFW_JOYSTICK_9 8 -#define GLFW_JOYSTICK_10 9 -#define GLFW_JOYSTICK_11 10 -#define GLFW_JOYSTICK_12 11 -#define GLFW_JOYSTICK_13 12 -#define GLFW_JOYSTICK_14 13 -#define GLFW_JOYSTICK_15 14 -#define GLFW_JOYSTICK_16 15 -#define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16 - - -/************************************************************************* - * Other definitions - *************************************************************************/ - -/* glfwOpenWindow modes */ -#define GLFW_WINDOW 0x00010001 -#define GLFW_FULLSCREEN 0x00010002 - -/* glfwGetWindowParam tokens */ -#define GLFW_OPENED 0x00020001 -#define GLFW_ACTIVE 0x00020002 -#define GLFW_ICONIFIED 0x00020003 -#define GLFW_ACCELERATED 0x00020004 -#define GLFW_RED_BITS 0x00020005 -#define GLFW_GREEN_BITS 0x00020006 -#define GLFW_BLUE_BITS 0x00020007 -#define GLFW_ALPHA_BITS 0x00020008 -#define GLFW_DEPTH_BITS 0x00020009 -#define GLFW_STENCIL_BITS 0x0002000A - -/* The following constants are used for both glfwGetWindowParam - * and glfwOpenWindowHint - */ -#define GLFW_REFRESH_RATE 0x0002000B -#define GLFW_ACCUM_RED_BITS 0x0002000C -#define GLFW_ACCUM_GREEN_BITS 0x0002000D -#define GLFW_ACCUM_BLUE_BITS 0x0002000E -#define GLFW_ACCUM_ALPHA_BITS 0x0002000F -#define GLFW_AUX_BUFFERS 0x00020010 -#define GLFW_STEREO 0x00020011 -#define GLFW_WINDOW_NO_RESIZE 0x00020012 -#define GLFW_FSAA_SAMPLES 0x00020013 -#define GLFW_OPENGL_VERSION_MAJOR 0x00020014 -#define GLFW_OPENGL_VERSION_MINOR 0x00020015 -#define GLFW_OPENGL_FORWARD_COMPAT 0x00020016 -#define GLFW_OPENGL_DEBUG_CONTEXT 0x00020017 -#define GLFW_OPENGL_PROFILE 0x00020018 - -/* GLFW_OPENGL_PROFILE tokens */ -#define GLFW_OPENGL_CORE_PROFILE 0x00050001 -#define GLFW_OPENGL_COMPAT_PROFILE 0x00050002 - -/* glfwEnable/glfwDisable tokens */ -#define GLFW_MOUSE_CURSOR 0x00030001 -#define GLFW_STICKY_KEYS 0x00030002 -#define GLFW_STICKY_MOUSE_BUTTONS 0x00030003 -#define GLFW_SYSTEM_KEYS 0x00030004 -#define GLFW_KEY_REPEAT 0x00030005 -#define GLFW_AUTO_POLL_EVENTS 0x00030006 - -/* glfwWaitThread wait modes */ -#define GLFW_WAIT 0x00040001 -#define GLFW_NOWAIT 0x00040002 - -/* glfwGetJoystickParam tokens */ -#define GLFW_PRESENT 0x00050001 -#define GLFW_AXES 0x00050002 -#define GLFW_BUTTONS 0x00050003 - -/* glfwReadImage/glfwLoadTexture2D flags */ -#define GLFW_NO_RESCALE_BIT 0x00000001 /* Only for glfwReadImage */ -#define GLFW_ORIGIN_UL_BIT 0x00000002 -#define GLFW_BUILD_MIPMAPS_BIT 0x00000004 /* Only for glfwLoadTexture2D */ -#define GLFW_ALPHA_MAP_BIT 0x00000008 - -/* Time spans longer than this (seconds) are considered to be infinity */ -#define GLFW_INFINITY 100000.0 - - -/************************************************************************* - * Typedefs - *************************************************************************/ - -/* The video mode structure used by glfwGetVideoModes() */ -typedef struct { - int Width, Height; - int RedBits, BlueBits, GreenBits; -} GLFWvidmode; - -/* Image/texture information */ -typedef struct { - int Width, Height; - int Format; - int BytesPerPixel; - unsigned char *Data; -} GLFWimage; - -/* Thread ID */ -typedef int GLFWthread; - -/* Mutex object */ -typedef void * GLFWmutex; - -/* Condition variable object */ -typedef void * GLFWcond; - -/* Function pointer types */ -typedef void (GLFWCALL * GLFWwindowsizefun)(int,int); -typedef int (GLFWCALL * GLFWwindowclosefun)(void); -typedef void (GLFWCALL * GLFWwindowrefreshfun)(void); -typedef void (GLFWCALL * GLFWmousebuttonfun)(int,int); -typedef void (GLFWCALL * GLFWmouseposfun)(int,int); -typedef void (GLFWCALL * GLFWmousewheelfun)(int); -typedef void (GLFWCALL * GLFWkeyfun)(int,int); -typedef void (GLFWCALL * GLFWcharfun)(int,int); -typedef void (GLFWCALL * GLFWthreadfun)(void *); - - -/************************************************************************* - * Prototypes - *************************************************************************/ - -/* GLFW initialization, termination and version querying */ -GLFWAPI int GLFWAPIENTRY glfwInit( void ); -GLFWAPI void GLFWAPIENTRY glfwTerminate( void ); -GLFWAPI void GLFWAPIENTRY glfwGetVersion( int *major, int *minor, int *rev ); - -/* Window handling */ -GLFWAPI int GLFWAPIENTRY glfwOpenWindow( int width, int height, int redbits, int greenbits, int bluebits, int alphabits, int depthbits, int stencilbits, int mode ); -GLFWAPI void GLFWAPIENTRY glfwOpenWindowHint( int target, int hint ); -GLFWAPI void GLFWAPIENTRY glfwCloseWindow( void ); -GLFWAPI void GLFWAPIENTRY glfwSetWindowTitle( const char *title ); -GLFWAPI void GLFWAPIENTRY glfwGetWindowSize( int *width, int *height ); -GLFWAPI void GLFWAPIENTRY glfwSetWindowSize( int width, int height ); -GLFWAPI void GLFWAPIENTRY glfwSetWindowPos( int x, int y ); -GLFWAPI void GLFWAPIENTRY glfwIconifyWindow( void ); -GLFWAPI void GLFWAPIENTRY glfwRestoreWindow( void ); -GLFWAPI void GLFWAPIENTRY glfwSwapBuffers( void ); -GLFWAPI void GLFWAPIENTRY glfwSwapInterval( int interval ); -GLFWAPI int GLFWAPIENTRY glfwGetWindowParam( int param ); -GLFWAPI void GLFWAPIENTRY glfwSetWindowSizeCallback( GLFWwindowsizefun cbfun ); -GLFWAPI void GLFWAPIENTRY glfwSetWindowCloseCallback( GLFWwindowclosefun cbfun ); -GLFWAPI void GLFWAPIENTRY glfwSetWindowRefreshCallback( GLFWwindowrefreshfun cbfun ); - -/* Video mode functions */ -GLFWAPI int GLFWAPIENTRY glfwGetVideoModes( GLFWvidmode *list, int maxcount ); -GLFWAPI void GLFWAPIENTRY glfwGetDesktopMode( GLFWvidmode *mode ); - -/* Input handling */ -GLFWAPI void GLFWAPIENTRY glfwPollEvents( void ); -GLFWAPI void GLFWAPIENTRY glfwWaitEvents( void ); -GLFWAPI int GLFWAPIENTRY glfwGetKey( int key ); -GLFWAPI int GLFWAPIENTRY glfwGetMouseButton( int button ); -GLFWAPI void GLFWAPIENTRY glfwGetMousePos( int *xpos, int *ypos ); -GLFWAPI void GLFWAPIENTRY glfwSetMousePos( int xpos, int ypos ); -GLFWAPI int GLFWAPIENTRY glfwGetMouseWheel( void ); -GLFWAPI void GLFWAPIENTRY glfwSetMouseWheel( int pos ); -GLFWAPI void GLFWAPIENTRY glfwSetKeyCallback( GLFWkeyfun cbfun ); -GLFWAPI void GLFWAPIENTRY glfwSetCharCallback( GLFWcharfun cbfun ); -GLFWAPI void GLFWAPIENTRY glfwSetMouseButtonCallback( GLFWmousebuttonfun cbfun ); -GLFWAPI void GLFWAPIENTRY glfwSetMousePosCallback( GLFWmouseposfun cbfun ); -GLFWAPI void GLFWAPIENTRY glfwSetMouseWheelCallback( GLFWmousewheelfun cbfun ); - -/* Joystick input */ -GLFWAPI int GLFWAPIENTRY glfwGetJoystickParam( int joy, int param ); -GLFWAPI int GLFWAPIENTRY glfwGetJoystickPos( int joy, float *pos, int numaxes ); -GLFWAPI int GLFWAPIENTRY glfwGetJoystickButtons( int joy, unsigned char *buttons, int numbuttons ); - -/* Time */ -GLFWAPI double GLFWAPIENTRY glfwGetTime( void ); -GLFWAPI void GLFWAPIENTRY glfwSetTime( double time ); -GLFWAPI void GLFWAPIENTRY glfwSleep( double time ); - -/* Extension support */ -GLFWAPI int GLFWAPIENTRY glfwExtensionSupported( const char *extension ); -GLFWAPI void* GLFWAPIENTRY glfwGetProcAddress( const char *procname ); -GLFWAPI void GLFWAPIENTRY glfwGetGLVersion( int *major, int *minor, int *rev ); - -/* Threading support */ -GLFWAPI GLFWthread GLFWAPIENTRY glfwCreateThread( GLFWthreadfun fun, void *arg ); -GLFWAPI void GLFWAPIENTRY glfwDestroyThread( GLFWthread ID ); -GLFWAPI int GLFWAPIENTRY glfwWaitThread( GLFWthread ID, int waitmode ); -GLFWAPI GLFWthread GLFWAPIENTRY glfwGetThreadID( void ); -GLFWAPI GLFWmutex GLFWAPIENTRY glfwCreateMutex( void ); -GLFWAPI void GLFWAPIENTRY glfwDestroyMutex( GLFWmutex mutex ); -GLFWAPI void GLFWAPIENTRY glfwLockMutex( GLFWmutex mutex ); -GLFWAPI void GLFWAPIENTRY glfwUnlockMutex( GLFWmutex mutex ); -GLFWAPI GLFWcond GLFWAPIENTRY glfwCreateCond( void ); -GLFWAPI void GLFWAPIENTRY glfwDestroyCond( GLFWcond cond ); -GLFWAPI void GLFWAPIENTRY glfwWaitCond( GLFWcond cond, GLFWmutex mutex, double timeout ); -GLFWAPI void GLFWAPIENTRY glfwSignalCond( GLFWcond cond ); -GLFWAPI void GLFWAPIENTRY glfwBroadcastCond( GLFWcond cond ); -GLFWAPI int GLFWAPIENTRY glfwGetNumberOfProcessors( void ); - -/* Enable/disable functions */ -GLFWAPI void GLFWAPIENTRY glfwEnable( int token ); -GLFWAPI void GLFWAPIENTRY glfwDisable( int token ); - -/* Image/texture I/O support */ -GLFWAPI int GLFWAPIENTRY glfwReadImage( const char *name, GLFWimage *img, int flags ); -GLFWAPI int GLFWAPIENTRY glfwReadMemoryImage( const void *data, long size, GLFWimage *img, int flags ); -GLFWAPI void GLFWAPIENTRY glfwFreeImage( GLFWimage *img ); -GLFWAPI int GLFWAPIENTRY glfwLoadTexture2D( const char *name, int flags ); -GLFWAPI int GLFWAPIENTRY glfwLoadMemoryTexture2D( const void *data, long size, int flags ); -GLFWAPI int GLFWAPIENTRY glfwLoadTextureImage2D( GLFWimage *img, int flags ); - - -#ifdef __cplusplus -} -#endif - -#endif /* __glfw_h_ */ - diff --git a/ogl_editor/src/External/glfw/lib/carbon/Makefile.carbon b/ogl_editor/src/External/glfw/lib/carbon/Makefile.carbon deleted file mode 100644 index 3afa668..0000000 --- a/ogl_editor/src/External/glfw/lib/carbon/Makefile.carbon +++ /dev/null @@ -1,170 +0,0 @@ -########################################################################## -# Makefile for GLFW on Mac OS X using GCC (Apple SDK). -#------------------------------------------------------------------------- -# To compile GLFW using this makefile, run: -# make -f Makefile.carbon -########################################################################## - -########################################################################## -# Installation prefix (default to /usr/local) -########################################################################## -PREFIX ?= /usr/local - - -########################################################################## -# Default: Build GLFW static and shared library -########################################################################## -all: libglfw.a libglfw.dylib - - -########################################################################## -# Compiler settings -########################################################################## -CC = gcc -CFLAGS = -c -I. -I.. -Wall -O2 -fno-common -g -m32 - - -########################################################################## -# Library builder settings -########################################################################## -AR = ar -SED = sed -INSTALL = install -ARFLAGS = -rcs -RANLIB = ranlib -DYLIBFLAGS = -framework AGL -framework Carbon -framework OpenGL \ - -dynamiclib -Wl,-single_module -compatibility_version 1 \ - -current_version 1 -install_name @executable_path/libglfw.dylib -m32 - - -########################################################################## -# Install GLFW header and static library -########################################################################## -install: libglfw.a libglfw.pc - $(INSTALL) -d $(PREFIX)/lib - $(INSTALL) -c -m 644 libglfw.a $(PREFIX)/lib/libglfw.a - $(RANLIB) $(PREFIX)/lib/libglfw.a - $(INSTALL) -d $(PREFIX)/include/GL - $(INSTALL) -c -m 644 ../../include/GL/glfw.h $(PREFIX)/include/GL/glfw.h - $(INSTALL) -d $(PREFIX)/lib/pkgconfig - $(INSTALL) -c -m 644 libglfw.pc $(PREFIX)/lib/pkgconfig/libglfw.pc - - -########################################################################## -# Object files for the GLFW library -########################################################################## -OBJS = \ - enable.o \ - fullscreen.o \ - glext.o \ - image.o \ - init.o \ - input.o \ - joystick.o \ - stream.o \ - tga.o \ - thread.o \ - time.o \ - window.o \ - carbon_enable.o \ - carbon_fullscreen.o \ - carbon_glext.o \ - carbon_init.o \ - carbon_joystick.o \ - carbon_thread.o \ - carbon_time.o \ - carbon_window.o - - -########################################################################## -# Rule for building libglfw.pc -########################################################################## -libglfw.pc: libglfw.pc.in - $(SED) -e 's,\@PREFIX\@,$(PREFIX),' libglfw.pc.in > libglfw.pc - - -########################################################################## -# Rule for building static library -########################################################################## -libglfw.a: $(OBJS) - $(AR) $(ARFLAGS) $@ $(OBJS) - $(RANLIB) $@ - - -########################################################################## -# Rule for building shared library -########################################################################## -libglfw.dylib: $(OBJS) - $(CC) -o $@ $(DYLIBFLAGS) $(OBJS) - - -########################################################################## -# Rule for cleaning up generated files -########################################################################## -clean: - @rm -f *.o libglfw.a libglfw.dylib libglfw.pc - - -########################################################################## -# Rules for building library object files -########################################################################## -enable.o: ../enable.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../enable.c - -fullscreen.o: ../fullscreen.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../fullscreen.c - -glext.o: ../glext.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../glext.c - -image.o: ../image.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../image.c - -init.o: ../init.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../init.c - -input.o: ../input.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../input.c - -joystick.o: ../joystick.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../joystick.c - -stream.o: ../stream.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../stream.c - -tga.o: ../tga.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../tga.c - -thread.o: ../thread.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../thread.c - -time.o: ../time.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../time.c - -window.o: ../window.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../window.c - -carbon_enable.o: carbon_enable.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_enable.c - -carbon_fullscreen.o: carbon_fullscreen.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_fullscreen.c - -carbon_glext.o: carbon_glext.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_glext.c - -carbon_init.o: carbon_init.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_init.c - -carbon_joystick.o: carbon_joystick.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_joystick.c - -carbon_thread.o: carbon_thread.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_thread.c - -carbon_time.o: carbon_time.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_time.c - -carbon_window.o: carbon_window.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_window.c - diff --git a/ogl_editor/src/External/glfw/lib/carbon/Makefile.carbon.universal b/ogl_editor/src/External/glfw/lib/carbon/Makefile.carbon.universal deleted file mode 100644 index b91de26..0000000 --- a/ogl_editor/src/External/glfw/lib/carbon/Makefile.carbon.universal +++ /dev/null @@ -1,163 +0,0 @@ -########################################################################## -# Makefile for GLFW on Mac OS X using GCC (Apple SDK). -#------------------------------------------------------------------------- -# To compile GLFW using this makefile, run: -# make -f Makefile.carbon.universal -########################################################################## - -########################################################################## -# Installation prefix (default to /usr/local) -########################################################################## -PREFIX ?= /usr/local - - -########################################################################## -# Default: Build GLFW static library -########################################################################## -all: libglfw.a - - -########################################################################## -# Compiler settings -########################################################################## -CC = gcc -FATFLAGS = -isysroot /Developer/SDKs/MacOSX10.4u.sdk \ - -mmacosx-version-min=10.4 -arch ppc -arch i386 -CFLAGS = -c -I. -I.. -Wall -O2 -fno-common $(FATFLAGS) - - -########################################################################## -# Library builder settings -########################################################################## -SED = sed -INSTALL = install -MKLIB = ar -LIBFLAGS = -rcs -RANLIB = ranlib - - -########################################################################## -# Install GLFW header and static library -########################################################################## -install: libglfw.a libglfw.pc - $(INSTALL) -d $(PREFIX)/lib - $(INSTALL) -c -m 644 libglfw.a $(PREFIX)/lib/libglfw.a - $(RANLIB) $(PREFIX)/lib/libglfw.a - $(INSTALL) -d $(PREFIX)/include/GL - $(INSTALL) -c -m 644 ../../include/GL/glfw.h $(PREFIX)/include/GL/glfw.h - $(INSTALL) -d $(PREFIX)/lib/pkgconfig - $(INSTALL) -c -m 644 libglfw.pc $(PREFIX)/lib/pkgconfig/libglfw.pc - - -########################################################################## -# Rule for cleaning up generated files -########################################################################## -clean: - rm -f *.o libglfw.a libglfw.pc - - -########################################################################## -# Object files which are part of the GLFW library -########################################################################## -OBJS = \ - enable.o \ - fullscreen.o \ - glext.o \ - image.o \ - init.o \ - input.o \ - joystick.o \ - stream.o \ - tga.o \ - thread.o \ - time.o \ - window.o \ - carbon_enable.o \ - carbon_fullscreen.o \ - carbon_glext.o \ - carbon_init.o \ - carbon_joystick.o \ - carbon_thread.o \ - carbon_time.o \ - carbon_window.o - - -########################################################################## -# Rule for building libglfw.pc -########################################################################## -libglfw.pc: libglfw.pc.in - $(SED) -e 's,\@PREFIX\@,$(PREFIX),' libglfw.pc.in > libglfw.pc - - -########################################################################## -# Rule for building library -########################################################################## -libglfw.a: $(OBJS) - rm -f $@ - $(MKLIB) $(LIBFLAGS) $@ $(OBJS) - $(RANLIB) $@ - - -########################################################################## -# Rules for building library object files -########################################################################## -enable.o: ../enable.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../enable.c - -fullscreen.o: ../fullscreen.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../fullscreen.c - -glext.o: ../glext.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../glext.c - -image.o: ../image.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../image.c - -init.o: ../init.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../init.c - -input.o: ../input.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../input.c - -joystick.o: ../joystick.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../joystick.c - -stream.o: ../stream.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../stream.c - -tga.o: ../tga.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../tga.c - -thread.o: ../thread.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../thread.c - -time.o: ../time.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../time.c - -window.o: ../window.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../window.c - -carbon_enable.o: carbon_enable.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_enable.c - -carbon_fullscreen.o: carbon_fullscreen.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_fullscreen.c - -carbon_glext.o: carbon_glext.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_glext.c - -carbon_init.o: carbon_init.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_init.c - -carbon_joystick.o: carbon_joystick.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_joystick.c - -carbon_thread.o: carbon_thread.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_thread.c - -carbon_time.o: carbon_time.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_time.c - -carbon_window.o: carbon_window.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ carbon_window.c - diff --git a/ogl_editor/src/External/glfw/lib/carbon/carbon_enable.c b/ogl_editor/src/External/glfw/lib/carbon/carbon_enable.c deleted file mode 100644 index 3af95e9..0000000 --- a/ogl_editor/src/External/glfw/lib/carbon/carbon_enable.c +++ /dev/null @@ -1,56 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Carbon/AGL/CGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2003 Keith Bauer -// Copyright (c) 2003-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Enable system keys -//======================================================================== - -void _glfwPlatformEnableSystemKeys( void ) -{ - // Nothing to do; event handling code checks the status of - // _glfwWin.sysKeysDisabled to ensure this behavior. -} - -//======================================================================== -// Disable system keys -//======================================================================== - -void _glfwPlatformDisableSystemKeys( void ) -{ - // Nothing to do; event handling code checks the status of - // _glfwWin.sysKeysDisabled to ensure this behavior. -} - diff --git a/ogl_editor/src/External/glfw/lib/carbon/carbon_fullscreen.c b/ogl_editor/src/External/glfw/lib/carbon/carbon_fullscreen.c deleted file mode 100644 index c3c6699..0000000 --- a/ogl_editor/src/External/glfw/lib/carbon/carbon_fullscreen.c +++ /dev/null @@ -1,133 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Carbon/AGL/CGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2003 Keith Bauer -// Copyright (c) 2003-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -//======================================================================== -// Compares two video modes -//======================================================================== - -static int _glfwVideoModesEqual( GLFWvidmode* first, - GLFWvidmode* second ) -{ - if( first->Width != second->Width ) - return 0; - - if( first->Height != second->Height ) - return 0; - - if( first->RedBits + first->GreenBits + first->BlueBits != - second->RedBits + second->GreenBits + second->BlueBits ) - return 0; - - return 1; -} - -//======================================================================== -// Converts a CG mode to a GLFW mode -//======================================================================== - -static void _glfwCGToGLFWVideoMode( CFDictionaryRef cgMode, - GLFWvidmode* glfwMode ) -{ - int bitsPerSample; - - CFNumberGetValue( CFDictionaryGetValue( cgMode, kCGDisplayWidth ), - kCFNumberIntType, - &(glfwMode->Width) ); - CFNumberGetValue( CFDictionaryGetValue( cgMode, kCGDisplayHeight ), - kCFNumberIntType, - &(glfwMode->Height) ); - - CFNumberGetValue( CFDictionaryGetValue( cgMode, kCGDisplayBitsPerSample ), - kCFNumberIntType, - &bitsPerSample ); - - glfwMode->RedBits = bitsPerSample; - glfwMode->GreenBits = bitsPerSample; - glfwMode->BlueBits = bitsPerSample; -} - -//======================================================================== -// Get a list of available video modes -//======================================================================== - -int _glfwPlatformGetVideoModes( GLFWvidmode *list, int maxcount ) -{ - int i, j, maxModes, numModes; - GLFWvidmode mode; - CFArrayRef availableModes = CGDisplayAvailableModes( kCGDirectMainDisplay ); - CFIndex numberOfAvailableModes = CFArrayGetCount( availableModes ); - - numModes = 0; - maxModes = ( numberOfAvailableModes < maxcount ? - numberOfAvailableModes : - maxcount ); - - for( i = 0; i < maxModes; ++i ) - { - _glfwCGToGLFWVideoMode( CFArrayGetValueAtIndex( availableModes, i ), - &mode ); - - // Is it a valid mode? (only list depths >= 15 bpp) - if( mode.RedBits + mode.GreenBits + mode.BlueBits < 15 ) - { - continue; - } - - // Check for duplicate of current mode in target list - for( j = 0; j < numModes; ++j ) - { - if( _glfwVideoModesEqual( &mode, &(list[j]) ) ) - { - break; - } - } - - // If empty list or no match found - if( numModes == 0 || j == numModes ) - { - list[numModes++] = mode; - } - } - - return numModes; -} - -//======================================================================== -// Get the desktop video mode -//======================================================================== - -void _glfwPlatformGetDesktopMode( GLFWvidmode *mode ) -{ - _glfwCGToGLFWVideoMode( CGDisplayCurrentMode( kCGDirectMainDisplay ), mode ); -} - diff --git a/ogl_editor/src/External/glfw/lib/carbon/carbon_glext.c b/ogl_editor/src/External/glfw/lib/carbon/carbon_glext.c deleted file mode 100644 index ba6183f..0000000 --- a/ogl_editor/src/External/glfw/lib/carbon/carbon_glext.c +++ /dev/null @@ -1,65 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Carbon/AGL/CGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2003 Keith Bauer -// Copyright (c) 2003-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Check if an OpenGL extension is available at runtime -//======================================================================== - -int _glfwPlatformExtensionSupported( const char *extension ) -{ - // There are no AGL, CGL or NSGL extensions. - return GL_FALSE; -} - -//======================================================================== -// Get the function pointer to an OpenGL function -//======================================================================== - -void * _glfwPlatformGetProcAddress( const char *procname ) -{ - CFStringRef symbolName = CFStringCreateWithCString( kCFAllocatorDefault, - procname, - kCFStringEncodingASCII ); - - void *symbol = CFBundleGetFunctionPointerForName( _glfwLibrary.Libs.OpenGLFramework, - symbolName ); - - CFRelease( symbolName ); - - return symbol; -} - diff --git a/ogl_editor/src/External/glfw/lib/carbon/carbon_init.c b/ogl_editor/src/External/glfw/lib/carbon/carbon_init.c deleted file mode 100644 index 10db885..0000000 --- a/ogl_editor/src/External/glfw/lib/carbon/carbon_init.c +++ /dev/null @@ -1,193 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Carbon/AGL/CGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2003 Keith Bauer -// Copyright (c) 2003-2010 Camilla Berglund -// Copyright (c) 2006-2007 Robin Leffmann -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -#include - -//======================================================================== -// Global variables -//======================================================================== - -// KCHR resource pointer for keycode translation -void *KCHRPtr; - - -//======================================================================== -// Terminate GLFW when exiting application -//======================================================================== - -static void glfw_atexit( void ) -{ - glfwTerminate(); -} - - -//======================================================================== -// Initialize GLFW thread package -//======================================================================== - -static void _glfwInitThreads( void ) -{ - // Initialize critical section handle - (void) pthread_mutex_init( &_glfwThrd.CriticalSection, NULL ); - - // The first thread (the main thread) has ID 0 - _glfwThrd.NextID = 0; - - // Fill out information about the main thread (this thread) - _glfwThrd.First.ID = _glfwThrd.NextID ++; - _glfwThrd.First.Function = NULL; - _glfwThrd.First.PosixID = pthread_self(); - _glfwThrd.First.Previous = NULL; - _glfwThrd.First.Next = NULL; -} - -#define NO_BUNDLE_MESSAGE \ - "Working in unbundled mode. " \ - "You should build a .app wrapper for your Mac OS X applications.\n" - -#define UNBUNDLED \ - fprintf(stderr, NO_BUNDLE_MESSAGE); \ - _glfwLibrary.Unbundled = 1; \ - return - -//======================================================================== -// Changes the current directory to the Resources directory of the bundle -// we're in, or leaves it alone if we're not inside a bundle -//======================================================================== - -void _glfwChangeToResourcesDirectory( void ) -{ - CFBundleRef mainBundle = CFBundleGetMainBundle(); - if( mainBundle == NULL ) - { - UNBUNDLED; - } - - CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL( mainBundle ); - char resourcesPath[ _GLFW_MAX_PATH_LENGTH ]; - - CFStringRef lastComponent = CFURLCopyLastPathComponent( resourcesURL ); - if( kCFCompareEqualTo != CFStringCompare( - CFSTR( "Resources" ), - lastComponent, - 0 ) ) - { - UNBUNDLED; - } - - CFRelease( lastComponent ); - - if( !CFURLGetFileSystemRepresentation( resourcesURL, - TRUE, - (UInt8*)resourcesPath, - _GLFW_MAX_PATH_LENGTH ) ) - { - CFRelease( resourcesURL ); - UNBUNDLED; - } - - CFRelease( resourcesURL ); - - if( chdir( resourcesPath ) != 0 ) - { - UNBUNDLED; - } -} - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Initialize various GLFW state -//======================================================================== - -int _glfwPlatformInit( void ) -{ - struct timeval tv; - UInt32 nullDummy = 0; - - _glfwWin.window = NULL; - _glfwWin.aglContext = NULL; - _glfwWin.cglContext = NULL; - _glfwWin.windowUPP = NULL; - - _glfwInput.Modifiers = 0; - - _glfwLibrary.Unbundled = 0; - - _glfwLibrary.Libs.OpenGLFramework = - CFBundleGetBundleWithIdentifier( CFSTR( "com.apple.opengl" ) ); - if( _glfwLibrary.Libs.OpenGLFramework == NULL ) - { - fprintf( stderr, "glfwInit failing because you aren't linked to OpenGL\n" ); - return GL_FALSE; - } - - _glfwPlatformGetDesktopMode( &_glfwLibrary.desktopMode ); - - // Install atexit routine - atexit( glfw_atexit ); - - _glfwInitThreads(); - - _glfwChangeToResourcesDirectory(); - - // Ugly hack to reduce the nasty jump that occurs at the first non- - // sys keypress, caused by OS X loading certain meta scripts used - // for lexical- and raw keycode translation - instead of letting - // this happen while our application is running, we do some blunt - // function calls in advance just to get the script caching out of - // the way BEFORE our window/screen is opened. These calls might - // generate err return codes, but we don't care in this case. - // NOTE: KCHRPtr is declared globally, because we need it later on. - KCHRPtr = (void *)GetScriptVariable( smCurrentScript, smKCHRCache ); - KeyTranslate( KCHRPtr, 0, &nullDummy ); - UppercaseText( (char *)&nullDummy, 0, smSystemScript ); - - gettimeofday( &tv, NULL ); - _glfwLibrary.Timer.t0 = tv.tv_sec + (double) tv.tv_usec / 1000000.0; - - return GL_TRUE; -} - -//======================================================================== -// Close window and kill all threads -//======================================================================== - -int _glfwPlatformTerminate( void ) -{ - return GL_TRUE; -} - diff --git a/ogl_editor/src/External/glfw/lib/carbon/carbon_joystick.c b/ogl_editor/src/External/glfw/lib/carbon/carbon_joystick.c deleted file mode 100644 index a01e76e..0000000 --- a/ogl_editor/src/External/glfw/lib/carbon/carbon_joystick.c +++ /dev/null @@ -1,67 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Carbon/AGL/CGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2003 Keith Bauer -// Copyright (c) 2003-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -// TO DO: use HID manager to implement joystick support. - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Determine joystick capabilities -//======================================================================== - -int _glfwPlatformGetJoystickParam( int joy, int param ) -{ - // GL_FALSE == 0 - return 0; -} - -//======================================================================== -// Get joystick axis positions -//======================================================================== - -int _glfwPlatformGetJoystickPos( int joy, float *pos, int numaxes ) -{ - return 0; -} - -//======================================================================== -// Get joystick button states -//======================================================================== - -int _glfwPlatformGetJoystickButtons( int joy, unsigned char *buttons, int numbuttons ) -{ - return 0; -} - diff --git a/ogl_editor/src/External/glfw/lib/carbon/carbon_thread.c b/ogl_editor/src/External/glfw/lib/carbon/carbon_thread.c deleted file mode 100644 index 7db462e..0000000 --- a/ogl_editor/src/External/glfw/lib/carbon/carbon_thread.c +++ /dev/null @@ -1,410 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Carbon/AGL/CGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2003 Keith Bauer -// Copyright (c) 2003-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// This is simply a "wrapper" for calling the user thread function. -//======================================================================== - -void * _glfwNewThread( void * arg ) -{ - GLFWthreadfun threadfun; - _GLFWthread *t; - - // Get pointer to thread information for current thread - t = _glfwGetThreadPointer( glfwGetThreadID() ); - if( t == NULL ) - { - return 0; - } - - // Get user thread function pointer - threadfun = t->Function; - - // Call the user thread function - threadfun( arg ); - - // Remove thread from thread list - ENTER_THREAD_CRITICAL_SECTION - _glfwRemoveThread( t ); - LEAVE_THREAD_CRITICAL_SECTION - - // When the thread function returns, the thread will die... - return NULL; -} - - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Create a new thread -//======================================================================== - -GLFWthread _glfwPlatformCreateThread( GLFWthreadfun fun, void *arg ) -{ - GLFWthread ID; - _GLFWthread *t; - int result; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Create a new thread information memory area - t = (_GLFWthread *) malloc( sizeof(_GLFWthread) ); - if( t == NULL ) - { - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - return -1; - } - - // Get a new unique thread id - ID = _glfwThrd.NextID ++; - - // Store thread information in the thread list - t->Function = fun; - t->ID = ID; - - // Create thread - result = pthread_create( - &t->PosixID, // Thread handle - NULL, // Default thread attributes - _glfwNewThread, // Thread function (a wrapper function) - (void *)arg // Argument to thread is user argument - ); - - // Did the thread creation fail? - if( result != 0 ) - { - free( (void *) t ); - LEAVE_THREAD_CRITICAL_SECTION - return -1; - } - - // Append thread to thread list - _glfwAppendThread( t ); - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Return the GLFW thread ID - return ID; -} - - -//======================================================================== -// Kill a thread. NOTE: THIS IS A VERY DANGEROUS OPERATION, AND SHOULD NOT -// BE USED EXCEPT IN EXTREME SITUATIONS! -//======================================================================== - -void _glfwPlatformDestroyThread( GLFWthread ID ) -{ - _GLFWthread *t; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Get thread information pointer - t = _glfwGetThreadPointer( ID ); - if( t == NULL ) - { - LEAVE_THREAD_CRITICAL_SECTION - return; - } - - // Simply murder the process, no mercy! - pthread_kill( t->PosixID, SIGKILL ); - - // Remove thread from thread list - _glfwRemoveThread( t ); - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION -} - - -//======================================================================== -// Wait for a thread to die -//======================================================================== - -int _glfwPlatformWaitThread( GLFWthread ID, int waitmode ) -{ - pthread_t thread; - _GLFWthread *t; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Get thread information pointer - t = _glfwGetThreadPointer( ID ); - - // Is the thread already dead? - if( t == NULL ) - { - LEAVE_THREAD_CRITICAL_SECTION - return GL_TRUE; - } - - // If got this far, the thread is alive => polling returns FALSE - if( waitmode == GLFW_NOWAIT ) - { - LEAVE_THREAD_CRITICAL_SECTION - return GL_FALSE; - } - - // Get thread handle - thread = t->PosixID; - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Wait for thread to die - (void) pthread_join( thread, NULL ); - - return GL_TRUE; -} - - -//======================================================================== -// Return the thread ID for the current thread -//======================================================================== - -GLFWthread _glfwPlatformGetThreadID( void ) -{ - _GLFWthread *t; - GLFWthread ID = -1; - pthread_t posixID; - - // Get current thread ID - posixID = pthread_self(); - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Loop through entire list of threads to find the matching POSIX - // thread ID - for( t = &_glfwThrd.First; t != NULL; t = t->Next ) - { - if( t->PosixID == posixID ) - { - ID = t->ID; - break; - } - } - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Return the found GLFW thread identifier - return ID; -} - - -//======================================================================== -// Create a mutual exclusion object -//======================================================================== - -GLFWmutex _glfwPlatformCreateMutex( void ) -{ - pthread_mutex_t *mutex; - - // Allocate memory for mutex - mutex = (pthread_mutex_t *) malloc( sizeof( pthread_mutex_t ) ); - if( !mutex ) - { - return NULL; - } - - // Initialise a mutex object - (void) pthread_mutex_init( mutex, NULL ); - - // Cast to GLFWmutex and return - return (GLFWmutex) mutex; -} - - -//======================================================================== -// Destroy a mutual exclusion object -//======================================================================== - -void _glfwPlatformDestroyMutex( GLFWmutex mutex ) -{ - // Destroy the mutex object - pthread_mutex_destroy( (pthread_mutex_t *) mutex ); - - // Free memory for mutex object - free( (void *) mutex ); -} - - -//======================================================================== -// Request access to a mutex -//======================================================================== - -void _glfwPlatformLockMutex( GLFWmutex mutex ) -{ - // Wait for mutex to be released - (void) pthread_mutex_lock( (pthread_mutex_t *) mutex ); -} - - -//======================================================================== -// Release a mutex -//======================================================================== - -void _glfwPlatformUnlockMutex( GLFWmutex mutex ) -{ - // Release mutex - pthread_mutex_unlock( (pthread_mutex_t *) mutex ); -} - - -//======================================================================== -// Create a new condition variable object -//======================================================================== - -GLFWcond _glfwPlatformCreateCond( void ) -{ - pthread_cond_t *cond; - - // Allocate memory for condition variable - cond = (pthread_cond_t *) malloc( sizeof(pthread_cond_t) ); - if( !cond ) - { - return NULL; - } - - // Initialise condition variable - (void) pthread_cond_init( cond, NULL ); - - // Cast to GLFWcond and return - return (GLFWcond) cond; -} - - -//======================================================================== -// Destroy a condition variable object -//======================================================================== - -void _glfwPlatformDestroyCond( GLFWcond cond ) -{ - // Destroy the condition variable object - (void) pthread_cond_destroy( (pthread_cond_t *) cond ); - - // Free memory for condition variable object - free( (void *) cond ); -} - - -//======================================================================== -// Wait for a condition to be raised -//======================================================================== - -void _glfwPlatformWaitCond( GLFWcond cond, GLFWmutex mutex, - double timeout ) -{ - struct timeval currenttime; - struct timespec wait; - long dt_sec, dt_usec; - - // Select infinite or timed wait - if( timeout >= GLFW_INFINITY ) - { - // Wait for condition (infinite wait) - (void) pthread_cond_wait( (pthread_cond_t *) cond, - (pthread_mutex_t *) mutex ); - } - else - { - // Set timeout time, relatvie to current time - gettimeofday( ¤ttime, NULL ); - dt_sec = (long) timeout; - dt_usec = (long) ((timeout - (double)dt_sec) * 1000000.0); - wait.tv_nsec = (currenttime.tv_usec + dt_usec) * 1000L; - if( wait.tv_nsec > 1000000000L ) - { - wait.tv_nsec -= 1000000000L; - dt_sec ++; - } - wait.tv_sec = currenttime.tv_sec + dt_sec; - - // Wait for condition (timed wait) - (void) pthread_cond_timedwait( (pthread_cond_t *) cond, - (pthread_mutex_t *) mutex, &wait ); - } -} - - -//======================================================================== -// Signal a condition to one waiting thread -//======================================================================== - -void _glfwPlatformSignalCond( GLFWcond cond ) -{ - // Signal condition - (void) pthread_cond_signal( (pthread_cond_t *) cond ); -} - - -//======================================================================== -// Broadcast a condition to all waiting threads -//======================================================================== - -void _glfwPlatformBroadcastCond( GLFWcond cond ) -{ - // Broadcast condition - (void) pthread_cond_broadcast( (pthread_cond_t *) cond ); -} - - -//======================================================================== -// Return the number of processors in the system. -//======================================================================== - -int _glfwPlatformGetNumberOfProcessors( void ) -{ - int n; - - // Get number of processors online - _glfw_numprocessors( n ); - return n; -} - diff --git a/ogl_editor/src/External/glfw/lib/carbon/carbon_time.c b/ogl_editor/src/External/glfw/lib/carbon/carbon_time.c deleted file mode 100644 index 9dceff1..0000000 --- a/ogl_editor/src/External/glfw/lib/carbon/carbon_time.c +++ /dev/null @@ -1,113 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Carbon/AGL/CGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2003 Keith Bauer -// Copyright (c) 2003-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Return timer value in seconds -//======================================================================== - -double _glfwPlatformGetTime( void ) -{ - struct timeval tv; - - gettimeofday( &tv, NULL ); - return tv.tv_sec + (double) tv.tv_usec / 1000000.0 - _glfwLibrary.Timer.t0; -} - - -//======================================================================== -// Set timer value in seconds -//======================================================================== - -void _glfwPlatformSetTime( double time ) -{ - struct timeval tv; - - gettimeofday( &tv, NULL ); - _glfwLibrary.Timer.t0 = tv.tv_sec + (double) tv.tv_usec / 1000000.0 - time; -} - - -//======================================================================== -// Put a thread to sleep for a specified amount of time -//======================================================================== - -void _glfwPlatformSleep( double time ) -{ - if( time == 0.0 ) - { - sched_yield(); - return; - } - - struct timeval currenttime; - struct timespec wait; - pthread_mutex_t mutex; - pthread_cond_t cond; - long dt_sec, dt_usec; - - // Not all pthread implementations have a pthread_sleep() function. We - // do it the portable way, using a timed wait for a condition that we - // will never signal. NOTE: The unistd functions sleep/usleep suspends - // the entire PROCESS, not a signle thread, which is why we can not - // use them to implement glfwSleep. - - // Set timeout time, relatvie to current time - gettimeofday( ¤ttime, NULL ); - dt_sec = (long) time; - dt_usec = (long) ((time - (double)dt_sec) * 1000000.0); - wait.tv_nsec = (currenttime.tv_usec + dt_usec) * 1000L; - if( wait.tv_nsec > 1000000000L ) - { - wait.tv_nsec -= 1000000000L; - dt_sec ++; - } - wait.tv_sec = currenttime.tv_sec + dt_sec; - - // Initialize condition and mutex objects - pthread_mutex_init( &mutex, NULL ); - pthread_cond_init( &cond, NULL ); - - // Do a timed wait - pthread_mutex_lock( &mutex ); - pthread_cond_timedwait( &cond, &mutex, &wait ); - pthread_mutex_unlock( &mutex ); - - // Destroy condition and mutex objects - pthread_mutex_destroy( &mutex ); - pthread_cond_destroy( &cond ); -} - diff --git a/ogl_editor/src/External/glfw/lib/carbon/carbon_window.c b/ogl_editor/src/External/glfw/lib/carbon/carbon_window.c deleted file mode 100644 index a4896cf..0000000 --- a/ogl_editor/src/External/glfw/lib/carbon/carbon_window.c +++ /dev/null @@ -1,1276 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Carbon/AGL/CGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2003 Keith Bauer -// Copyright (c) 2003-2010 Camilla Berglund -// Copyright (c) 2006-2007 Robin Leffmann -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -#define _glfwTestModifier( modifierMask, glfwKey ) \ -if ( changed & modifierMask ) \ -{ \ - _glfwInputKey( glfwKey, (modifiers & modifierMask ? GLFW_PRESS : GLFW_RELEASE) ); \ -} - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -static void handleMacModifierChange( UInt32 modifiers ) -{ - UInt32 changed = modifiers ^ _glfwInput.Modifiers; - - // The right *key variants below never actually occur - // There also isn't even a broken right command key constant - _glfwTestModifier( shiftKey, GLFW_KEY_LSHIFT ); - _glfwTestModifier( rightShiftKey, GLFW_KEY_RSHIFT ); - _glfwTestModifier( controlKey, GLFW_KEY_LCTRL ); - _glfwTestModifier( rightControlKey, GLFW_KEY_RCTRL ); - _glfwTestModifier( optionKey, GLFW_KEY_LALT ); - _glfwTestModifier( rightOptionKey, GLFW_KEY_RALT ); - _glfwTestModifier( cmdKey, GLFW_KEY_LSUPER ); - - _glfwInput.Modifiers = modifiers; -} - -static void handleMacKeyChange( UInt32 keyCode, int action ) -{ - switch ( keyCode ) - { - case MAC_KEY_ENTER: _glfwInputKey( GLFW_KEY_ENTER, action); break; - case MAC_KEY_RETURN: _glfwInputKey( GLFW_KEY_KP_ENTER, action); break; - case MAC_KEY_ESC: _glfwInputKey( GLFW_KEY_ESC, action); break; - case MAC_KEY_F1: _glfwInputKey( GLFW_KEY_F1, action); break; - case MAC_KEY_F2: _glfwInputKey( GLFW_KEY_F2, action); break; - case MAC_KEY_F3: _glfwInputKey( GLFW_KEY_F3, action); break; - case MAC_KEY_F4: _glfwInputKey( GLFW_KEY_F4, action); break; - case MAC_KEY_F5: _glfwInputKey( GLFW_KEY_F5, action); break; - case MAC_KEY_F6: _glfwInputKey( GLFW_KEY_F6, action); break; - case MAC_KEY_F7: _glfwInputKey( GLFW_KEY_F7, action); break; - case MAC_KEY_F8: _glfwInputKey( GLFW_KEY_F8, action); break; - case MAC_KEY_F9: _glfwInputKey( GLFW_KEY_F9, action); break; - case MAC_KEY_F10: _glfwInputKey( GLFW_KEY_F10, action); break; - case MAC_KEY_F11: _glfwInputKey( GLFW_KEY_F11, action); break; - case MAC_KEY_F12: _glfwInputKey( GLFW_KEY_F12, action); break; - case MAC_KEY_F13: _glfwInputKey( GLFW_KEY_F13, action); break; - case MAC_KEY_F14: _glfwInputKey( GLFW_KEY_F14, action); break; - case MAC_KEY_F15: _glfwInputKey( GLFW_KEY_F15, action); break; - case MAC_KEY_UP: _glfwInputKey( GLFW_KEY_UP, action); break; - case MAC_KEY_DOWN: _glfwInputKey( GLFW_KEY_DOWN, action); break; - case MAC_KEY_LEFT: _glfwInputKey( GLFW_KEY_LEFT, action); break; - case MAC_KEY_RIGHT: _glfwInputKey( GLFW_KEY_RIGHT, action); break; - case MAC_KEY_TAB: _glfwInputKey( GLFW_KEY_TAB, action); break; - case MAC_KEY_BACKSPACE: _glfwInputKey( GLFW_KEY_BACKSPACE, action); break; - case MAC_KEY_HELP: _glfwInputKey( GLFW_KEY_INSERT, action); break; - case MAC_KEY_DEL: _glfwInputKey( GLFW_KEY_DEL, action); break; - case MAC_KEY_PAGEUP: _glfwInputKey( GLFW_KEY_PAGEUP, action); break; - case MAC_KEY_PAGEDOWN: _glfwInputKey( GLFW_KEY_PAGEDOWN, action); break; - case MAC_KEY_HOME: _glfwInputKey( GLFW_KEY_HOME, action); break; - case MAC_KEY_END: _glfwInputKey( GLFW_KEY_END, action); break; - case MAC_KEY_KP_0: _glfwInputKey( GLFW_KEY_KP_0, action); break; - case MAC_KEY_KP_1: _glfwInputKey( GLFW_KEY_KP_1, action); break; - case MAC_KEY_KP_2: _glfwInputKey( GLFW_KEY_KP_2, action); break; - case MAC_KEY_KP_3: _glfwInputKey( GLFW_KEY_KP_3, action); break; - case MAC_KEY_KP_4: _glfwInputKey( GLFW_KEY_KP_4, action); break; - case MAC_KEY_KP_5: _glfwInputKey( GLFW_KEY_KP_5, action); break; - case MAC_KEY_KP_6: _glfwInputKey( GLFW_KEY_KP_6, action); break; - case MAC_KEY_KP_7: _glfwInputKey( GLFW_KEY_KP_7, action); break; - case MAC_KEY_KP_8: _glfwInputKey( GLFW_KEY_KP_8, action); break; - case MAC_KEY_KP_9: _glfwInputKey( GLFW_KEY_KP_9, action); break; - case MAC_KEY_KP_DIVIDE: _glfwInputKey( GLFW_KEY_KP_DIVIDE, action); break; - case MAC_KEY_KP_MULTIPLY: _glfwInputKey( GLFW_KEY_KP_MULTIPLY, action); break; - case MAC_KEY_KP_SUBTRACT: _glfwInputKey( GLFW_KEY_KP_SUBTRACT, action); break; - case MAC_KEY_KP_ADD: _glfwInputKey( GLFW_KEY_KP_ADD, action); break; - case MAC_KEY_KP_DECIMAL: _glfwInputKey( GLFW_KEY_KP_DECIMAL, action); break; - case MAC_KEY_KP_EQUAL: _glfwInputKey( GLFW_KEY_KP_EQUAL, action); break; - case MAC_KEY_KP_ENTER: _glfwInputKey( GLFW_KEY_KP_ENTER, action); break; - case MAC_KEY_NUMLOCK: _glfwInputKey( GLFW_KEY_KP_NUM_LOCK, action); break; - default: - { - extern void *KCHRPtr; - UInt32 state = 0; - char charCode = (char)KeyTranslate( KCHRPtr, keyCode, &state ); - UppercaseText( &charCode, 1, smSystemScript ); - _glfwInputKey( (unsigned char)charCode, action ); - } - break; - } -} - -// The set of event class/kind combinations supported by keyEventHandler -// This is used by installEventHandlers below -static const EventTypeSpec GLFW_KEY_EVENT_TYPES[] = -{ - { kEventClassKeyboard, kEventRawKeyDown }, - { kEventClassKeyboard, kEventRawKeyUp }, - { kEventClassKeyboard, kEventRawKeyRepeat }, - { kEventClassKeyboard, kEventRawKeyModifiersChanged } -}; - -static OSStatus keyEventHandler( EventHandlerCallRef handlerCallRef, - EventRef event, - void *userData ) -{ - UInt32 keyCode; - short int keyChar; - UInt32 modifiers; - - switch( GetEventKind( event ) ) - { - case kEventRawKeyRepeat: - case kEventRawKeyDown: - { - if( GetEventParameter( event, - kEventParamKeyCode, - typeUInt32, - NULL, - sizeof( UInt32 ), - NULL, - &keyCode ) == noErr ) - { - handleMacKeyChange( keyCode, GLFW_PRESS ); - } - if( GetEventParameter( event, - kEventParamKeyUnicodes, - typeUnicodeText, - NULL, - sizeof(keyChar), - NULL, - &keyChar) == noErr ) - { - _glfwInputChar( keyChar, GLFW_PRESS ); - } - return noErr; - } - - case kEventRawKeyUp: - { - if( GetEventParameter( event, - kEventParamKeyCode, - typeUInt32, - NULL, - sizeof( UInt32 ), - NULL, - &keyCode ) == noErr ) - { - handleMacKeyChange( keyCode, GLFW_RELEASE ); - } - if( GetEventParameter( event, - kEventParamKeyUnicodes, - typeUnicodeText, - NULL, - sizeof(keyChar), - NULL, - &keyChar) == noErr ) - { - _glfwInputChar( keyChar, GLFW_RELEASE ); - } - return noErr; - } - - case kEventRawKeyModifiersChanged: - { - if( GetEventParameter( event, - kEventParamKeyModifiers, - typeUInt32, - NULL, - sizeof( UInt32 ), - NULL, - &modifiers ) == noErr ) - { - handleMacModifierChange( modifiers ); - return noErr; - } - } - break; - } - - return eventNotHandledErr; -} - -// The set of event class/kind combinations supported by mouseEventHandler -// This is used by installEventHandlers below -static const EventTypeSpec GLFW_MOUSE_EVENT_TYPES[] = -{ - { kEventClassMouse, kEventMouseDown }, - { kEventClassMouse, kEventMouseUp }, - { kEventClassMouse, kEventMouseMoved }, - { kEventClassMouse, kEventMouseDragged }, - { kEventClassMouse, kEventMouseWheelMoved }, -}; - -static OSStatus mouseEventHandler( EventHandlerCallRef handlerCallRef, - EventRef event, - void *userData ) -{ - switch( GetEventKind( event ) ) - { - case kEventMouseDown: - { - WindowRef window; - EventRecord oldStyleMacEvent; - ConvertEventRefToEventRecord( event, &oldStyleMacEvent ); - if( FindWindow ( oldStyleMacEvent.where, &window ) == inMenuBar ) - { - MenuSelect( oldStyleMacEvent.where ); - HiliteMenu(0); - return noErr; - } - else - { - EventMouseButton button; - if( GetEventParameter( event, - kEventParamMouseButton, - typeMouseButton, - NULL, - sizeof( EventMouseButton ), - NULL, - &button ) == noErr ) - { - button -= kEventMouseButtonPrimary; - if( button <= GLFW_MOUSE_BUTTON_LAST ) - { - _glfwInputMouseClick( button + GLFW_MOUSE_BUTTON_LEFT, - GLFW_PRESS ); - } - return noErr; - } - } - break; - } - - case kEventMouseUp: - { - EventMouseButton button; - if( GetEventParameter( event, - kEventParamMouseButton, - typeMouseButton, - NULL, - sizeof( EventMouseButton ), - NULL, - &button ) == noErr ) - { - button -= kEventMouseButtonPrimary; - if( button <= GLFW_MOUSE_BUTTON_LAST ) - { - _glfwInputMouseClick( button + GLFW_MOUSE_BUTTON_LEFT, - GLFW_RELEASE ); - } - return noErr; - } - break; - } - - case kEventMouseMoved: - case kEventMouseDragged: - { - HIPoint mouseLocation; - if( _glfwWin.mouseLock ) - { - if( GetEventParameter( event, - kEventParamMouseDelta, - typeHIPoint, - NULL, - sizeof( HIPoint ), - NULL, - &mouseLocation ) != noErr ) - { - break; - } - - _glfwInput.MousePosX += mouseLocation.x; - _glfwInput.MousePosY += mouseLocation.y; - } - else - { - if( GetEventParameter( event, - kEventParamMouseLocation, - typeHIPoint, - NULL, - sizeof( HIPoint ), - NULL, - &mouseLocation ) != noErr ) - { - break; - } - - _glfwInput.MousePosX = mouseLocation.x; - _glfwInput.MousePosY = mouseLocation.y; - - if( !_glfwWin.fullscreen ) - { - Rect content; - GetWindowBounds( _glfwWin.window, - kWindowContentRgn, - &content ); - - _glfwInput.MousePosX -= content.left; - _glfwInput.MousePosY -= content.top; - } - } - - if( _glfwWin.mousePosCallback ) - { - _glfwWin.mousePosCallback( _glfwInput.MousePosX, - _glfwInput.MousePosY ); - } - - break; - } - - case kEventMouseWheelMoved: - { - EventMouseWheelAxis axis; - if( GetEventParameter( event, - kEventParamMouseWheelAxis, - typeMouseWheelAxis, - NULL, - sizeof( EventMouseWheelAxis ), - NULL, - &axis) == noErr ) - { - long wheelDelta; - if( axis == kEventMouseWheelAxisY && - GetEventParameter( event, - kEventParamMouseWheelDelta, - typeLongInteger, - NULL, - sizeof( long ), - NULL, - &wheelDelta ) == noErr ) - { - _glfwInput.WheelPos += wheelDelta; - if( _glfwWin.mouseWheelCallback ) - { - _glfwWin.mouseWheelCallback( _glfwInput.WheelPos ); - } - return noErr; - } - } - break; - } - } - - return eventNotHandledErr; -} - -// The set of event class/kind combinations supported by commandHandler -// This is used by installEventHandlers below -static const EventTypeSpec GLFW_COMMAND_EVENT_TYPES[] = -{ - { kEventClassCommand, kEventCommandProcess } -}; - -static OSStatus commandHandler( EventHandlerCallRef handlerCallRef, - EventRef event, - void *userData ) -{ - if( _glfwWin.sysKeysDisabled ) - { - // TODO: Give adequate UI feedback that this is the case - return eventNotHandledErr; - } - - HICommand command; - if( GetEventParameter( event, - kEventParamDirectObject, - typeHICommand, - NULL, - sizeof( HICommand ), - NULL, - &command ) == noErr ) - { - switch( command.commandID ) - { - case kHICommandClose: - case kHICommandQuit: - { - // Check if the program wants us to close the window - if( _glfwWin.windowCloseCallback ) - { - if( _glfwWin.windowCloseCallback() ) - { - glfwCloseWindow(); - } - } - else - { - glfwCloseWindow(); - } - return noErr; - } - } - } - - return eventNotHandledErr; -} - -// The set of event class/kind combinations supported by windowEventHandler -// This is used by installEventHandlers below -static const EventTypeSpec GLFW_WINDOW_EVENT_TYPES[] = -{ - { kEventClassWindow, kEventWindowBoundsChanged }, - { kEventClassWindow, kEventWindowClose }, - { kEventClassWindow, kEventWindowDrawContent }, - { kEventClassWindow, kEventWindowActivated }, - { kEventClassWindow, kEventWindowDeactivated }, -}; - -static OSStatus windowEventHandler( EventHandlerCallRef handlerCallRef, - EventRef event, - void *userData ) -{ - switch( GetEventKind(event) ) - { - case kEventWindowBoundsChanged: - { - WindowRef window; - GetEventParameter( event, - kEventParamDirectObject, - typeWindowRef, - NULL, - sizeof(WindowRef), - NULL, - &window ); - - Rect rect; - GetWindowPortBounds( window, &rect ); - - if( _glfwWin.width != rect.right || - _glfwWin.height != rect.bottom ) - { - aglUpdateContext( _glfwWin.aglContext ); - - _glfwWin.width = rect.right; - _glfwWin.height = rect.bottom; - if( _glfwWin.windowSizeCallback ) - { - _glfwWin.windowSizeCallback( _glfwWin.width, _glfwWin.height ); - } - // Emulate (force) content invalidation - if( _glfwWin.windowRefreshCallback ) - { - _glfwWin.windowRefreshCallback(); - } - } - break; - } - - case kEventWindowClose: - { - // Check if the client wants us to close the window - if( _glfwWin.windowCloseCallback ) - { - if( _glfwWin.windowCloseCallback() ) - { - glfwCloseWindow(); - } - } - else - { - glfwCloseWindow(); - } - return noErr; - } - - case kEventWindowDrawContent: - { - if( _glfwWin.windowRefreshCallback ) - { - _glfwWin.windowRefreshCallback(); - } - break; - } - - case kEventWindowActivated: - { - _glfwWin.active = GL_TRUE; - break; - } - - case kEventWindowDeactivated: - { - _glfwWin.active = GL_FALSE; - _glfwInputDeactivation(); - break; - } - } - - return eventNotHandledErr; -} - -static int installEventHandlers( void ) -{ - OSStatus error; - - _glfwWin.mouseUPP = NewEventHandlerUPP( mouseEventHandler ); - - error = InstallEventHandler( GetApplicationEventTarget(), - _glfwWin.mouseUPP, - GetEventTypeCount( GLFW_MOUSE_EVENT_TYPES ), - GLFW_MOUSE_EVENT_TYPES, - NULL, - NULL ); - if( error != noErr ) - { - fprintf( stderr, "Failed to install Carbon application mouse event handler\n" ); - return GL_FALSE; - } - - _glfwWin.commandUPP = NewEventHandlerUPP( commandHandler ); - - error = InstallEventHandler( GetApplicationEventTarget(), - _glfwWin.commandUPP, - GetEventTypeCount( GLFW_COMMAND_EVENT_TYPES ), - GLFW_COMMAND_EVENT_TYPES, - NULL, - NULL ); - if( error != noErr ) - { - fprintf( stderr, "Failed to install Carbon application command event handler\n" ); - return GL_FALSE; - } - - _glfwWin.keyboardUPP = NewEventHandlerUPP( keyEventHandler ); - - error = InstallEventHandler( GetApplicationEventTarget(), - _glfwWin.keyboardUPP, - GetEventTypeCount( GLFW_KEY_EVENT_TYPES ), - GLFW_KEY_EVENT_TYPES, - NULL, - NULL ); - if( error != noErr ) - { - fprintf( stderr, "Failed to install Carbon application key event handler\n" ); - return GL_FALSE; - } - - return GL_TRUE; -} - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -#define _setAGLAttribute( aglAttributeName, AGLparameter ) \ -if ( AGLparameter != 0 ) \ -{ \ - AGLpixelFormatAttributes[numAGLAttrs++] = aglAttributeName; \ - AGLpixelFormatAttributes[numAGLAttrs++] = AGLparameter; \ -} - -#define _setCGLAttribute( cglAttributeName, CGLparameter ) \ -if ( CGLparameter != 0 ) \ -{ \ - CGLpixelFormatAttributes[ numCGLAttrs++ ] = cglAttributeName; \ - CGLpixelFormatAttributes[ numCGLAttrs++ ] = CGLparameter; \ -} - -//======================================================================== -// Here is where the window is created, and -// the OpenGL rendering context is created -//======================================================================== - -int _glfwPlatformOpenWindow( int width, int height, - const _GLFWwndconfig *wndconfig, - const _GLFWfbconfig *fbconfig ) -{ - OSStatus error; - unsigned int windowAttributes; - ProcessSerialNumber psn; - - // TODO: Break up this function! - - _glfwWin.refreshRate = wndconfig->refreshRate; - _glfwWin.windowNoResize = wndconfig->windowNoResize; - - // Fail if OpenGL 3.0 or above was requested - if( wndconfig->glMajor > 2 ) - { - fprintf( stderr, "OpenGL 3.0+ is not yet supported on Mac OS X\n" ); - return GL_FALSE; - } - - if( _glfwLibrary.Unbundled ) - { - if( GetCurrentProcess( &psn ) != noErr ) - { - fprintf( stderr, "Failed to get the process serial number\n" ); - return GL_FALSE; - } - - if( TransformProcessType( &psn, kProcessTransformToForegroundApplication ) != noErr ) - { - fprintf( stderr, "Failed to become a foreground application\n" ); - return GL_FALSE; - } - - if( wndconfig->mode == GLFW_FULLSCREEN ) - { - if( SetFrontProcess( &psn ) != noErr ) - { - fprintf( stderr, "Failed to become the front process\n" ); - return GL_FALSE; - } - } - } - - if( !installEventHandlers() ) - { - fprintf( stderr, "Failed to install Carbon application event handlers\n" ); - return GL_FALSE; - } - - // Windowed or fullscreen; AGL or CGL? Quite the mess... - // AGL appears to be the only choice for attaching OpenGL contexts to - // Carbon windows, but it leaves the user no control over fullscreen - // mode stretching. Solution: AGL for windowed, CGL for fullscreen. - if( wndconfig->mode == GLFW_WINDOW ) - { - // create AGL pixel format attribute list - GLint AGLpixelFormatAttributes[256]; - int numAGLAttrs = 0; - - AGLpixelFormatAttributes[numAGLAttrs++] = AGL_RGBA; - AGLpixelFormatAttributes[numAGLAttrs++] = AGL_DOUBLEBUFFER; - AGLpixelFormatAttributes[numAGLAttrs++] = AGL_CLOSEST_POLICY; - - if( fbconfig->stereo ) - { - AGLpixelFormatAttributes[numAGLAttrs++] = AGL_STEREO; - } - - _setAGLAttribute( AGL_AUX_BUFFERS, fbconfig->auxBuffers); - _setAGLAttribute( AGL_RED_SIZE, fbconfig->redBits ); - _setAGLAttribute( AGL_GREEN_SIZE, fbconfig->greenBits ); - _setAGLAttribute( AGL_BLUE_SIZE, fbconfig->blueBits ); - _setAGLAttribute( AGL_ALPHA_SIZE, fbconfig->alphaBits ); - _setAGLAttribute( AGL_DEPTH_SIZE, fbconfig->depthBits ); - _setAGLAttribute( AGL_STENCIL_SIZE, fbconfig->stencilBits ); - _setAGLAttribute( AGL_ACCUM_RED_SIZE, fbconfig->accumRedBits ); - _setAGLAttribute( AGL_ACCUM_GREEN_SIZE, fbconfig->accumGreenBits ); - _setAGLAttribute( AGL_ACCUM_BLUE_SIZE, fbconfig->accumBlueBits ); - _setAGLAttribute( AGL_ACCUM_ALPHA_SIZE, fbconfig->accumAlphaBits ); - - if( fbconfig->samples > 1 ) - { - _setAGLAttribute( AGL_SAMPLE_BUFFERS_ARB, 1 ); - _setAGLAttribute( AGL_SAMPLES_ARB, fbconfig->samples ); - AGLpixelFormatAttributes[numAGLAttrs++] = AGL_NO_RECOVERY; - } - - AGLpixelFormatAttributes[numAGLAttrs++] = AGL_NONE; - - // create pixel format descriptor - AGLDevice mainMonitor = GetMainDevice(); - _glfwWin.aglPixelFormat = aglChoosePixelFormat( &mainMonitor, - 1, - AGLpixelFormatAttributes ); - if( _glfwWin.aglPixelFormat == NULL ) - { - fprintf( stderr, - "Failed to choose AGL pixel format: %s\n", - aglErrorString( aglGetError() ) ); - - return GL_FALSE; - } - - // create AGL context - _glfwWin.aglContext = aglCreateContext( _glfwWin.aglPixelFormat, NULL ); - - if( _glfwWin.aglContext == NULL ) - { - fprintf( stderr, - "Failed to create AGL context: %s\n", - aglErrorString( aglGetError() ) ); - - return GL_FALSE; - } - - // create window - Rect windowContentBounds; - windowContentBounds.left = 0; - windowContentBounds.top = 0; - windowContentBounds.right = width; - windowContentBounds.bottom = height; - - windowAttributes = ( kWindowCloseBoxAttribute | - kWindowCollapseBoxAttribute | - kWindowStandardHandlerAttribute ); - - if( wndconfig->windowNoResize ) - { - windowAttributes |= kWindowLiveResizeAttribute; - } - else - { - windowAttributes |= ( kWindowFullZoomAttribute | - kWindowResizableAttribute ); - } - - error = CreateNewWindow( kDocumentWindowClass, - windowAttributes, - &windowContentBounds, - &( _glfwWin.window ) ); - if( ( error != noErr ) || ( _glfwWin.window == NULL ) ) - { - fprintf( stderr, "Failed to create Carbon window\n" ); - - return GL_FALSE; - } - - _glfwWin.windowUPP = NewEventHandlerUPP( windowEventHandler ); - - error = InstallWindowEventHandler( _glfwWin.window, - _glfwWin.windowUPP, - GetEventTypeCount( GLFW_WINDOW_EVENT_TYPES ), - GLFW_WINDOW_EVENT_TYPES, - NULL, - NULL ); - if( error != noErr ) - { - fprintf( stderr, "Failed to install Carbon window event handler\n" ); - - return GL_FALSE; - } - - // Don't care if we fail here - (void)SetWindowTitleWithCFString( _glfwWin.window, CFSTR( "GLFW Window" ) ); - (void)RepositionWindow( _glfwWin.window, - NULL, - kWindowCenterOnMainScreen ); - - if( !aglSetDrawable( _glfwWin.aglContext, - GetWindowPort( _glfwWin.window ) ) ) - { - fprintf( stderr, - "Failed to set the AGL context as the Carbon window drawable: %s\n", - aglErrorString( aglGetError() ) ); - - return GL_FALSE; - } - - // Make OpenGL context current - if( !aglSetCurrentContext( _glfwWin.aglContext ) ) - { - fprintf( stderr, - "Failed to make AGL context current: %s\n", - aglErrorString( aglGetError() ) ); - - return GL_FALSE; - } - - ShowWindow( _glfwWin.window ); - } - else - { - CGDisplayErr cgErr; - CGLError cglErr; - - CFDictionaryRef optimalMode; - - GLint numCGLvs = 0; - - CGLPixelFormatAttribute CGLpixelFormatAttributes[64]; - int numCGLAttrs = 0; - - // variables for enumerating color depths - GLint rgbColorDepth; - - // CGL pixel format attributes - _setCGLAttribute( kCGLPFADisplayMask, - CGDisplayIDToOpenGLDisplayMask( kCGDirectMainDisplay ) ); - - if( fbconfig->stereo ) - { - CGLpixelFormatAttributes[ numCGLAttrs++ ] = kCGLPFAStereo; - } - - if( fbconfig->samples > 1 ) - { - _setCGLAttribute( kCGLPFASamples, (CGLPixelFormatAttribute)fbconfig->samples ); - _setCGLAttribute( kCGLPFASampleBuffers, (CGLPixelFormatAttribute)1 ); - CGLpixelFormatAttributes[ numCGLAttrs++ ] = kCGLPFANoRecovery; - } - - CGLpixelFormatAttributes[ numCGLAttrs++ ] = kCGLPFAFullScreen; - CGLpixelFormatAttributes[ numCGLAttrs++ ] = kCGLPFADoubleBuffer; - CGLpixelFormatAttributes[ numCGLAttrs++ ] = kCGLPFAAccelerated; - CGLpixelFormatAttributes[ numCGLAttrs++ ] = kCGLPFANoRecovery; - CGLpixelFormatAttributes[ numCGLAttrs++ ] = kCGLPFAMinimumPolicy; - - _setCGLAttribute( kCGLPFAAccumSize, - (CGLPixelFormatAttribute)( fbconfig->accumRedBits \ - + fbconfig->accumGreenBits \ - + fbconfig->accumBlueBits \ - + fbconfig->accumAlphaBits ) ); - - _setCGLAttribute( kCGLPFAAlphaSize, (CGLPixelFormatAttribute)fbconfig->alphaBits ); - _setCGLAttribute( kCGLPFADepthSize, (CGLPixelFormatAttribute)fbconfig->depthBits ); - _setCGLAttribute( kCGLPFAStencilSize, (CGLPixelFormatAttribute)fbconfig->stencilBits ); - _setCGLAttribute( kCGLPFAAuxBuffers, (CGLPixelFormatAttribute)fbconfig->auxBuffers ); - - CGLpixelFormatAttributes[ numCGLAttrs++ ] = (CGLPixelFormatAttribute)NULL; - - // create a suitable pixel format with above attributes.. - cglErr = CGLChoosePixelFormat( CGLpixelFormatAttributes, - &_glfwWin.cglPixelFormat, - &numCGLvs ); - if( cglErr != kCGLNoError ) - { - fprintf( stderr, - "Failed to choose CGL pixel format: %s\n", - CGLErrorString( cglErr ) ); - - return GL_FALSE; - } - - // ..and create a rendering context using that pixel format - cglErr = CGLCreateContext( _glfwWin.cglPixelFormat, NULL, &_glfwWin.cglContext ); - if( cglErr != kCGLNoError ) - { - fprintf( stderr, - "Failed to create CGL context: %s\n", - CGLErrorString( cglErr ) ); - - return GL_FALSE; - } - - // enumerate depth of RGB channels - unlike AGL, CGL works with - // a single parameter reflecting the full depth of the frame buffer - (void)CGLDescribePixelFormat( _glfwWin.cglPixelFormat, - 0, - kCGLPFAColorSize, - &rgbColorDepth ); - - // capture the display for our application - cgErr = CGCaptureAllDisplays(); - if( cgErr != kCGErrorSuccess ) - { - fprintf( stderr, - "Failed to capture Core Graphics displays\n"); - - return GL_FALSE; - } - - // find closest matching NON-STRETCHED display mode.. - optimalMode = CGDisplayBestModeForParametersAndRefreshRateWithProperty( - kCGDirectMainDisplay, - rgbColorDepth, - width, - height, - wndconfig->refreshRate, - NULL, - NULL ); - if( optimalMode == NULL ) - { - fprintf( stderr, - "Failed to retrieve Core Graphics display mode\n"); - - return GL_FALSE; - } - - // ..and switch to that mode - cgErr = CGDisplaySwitchToMode( kCGDirectMainDisplay, optimalMode ); - if( cgErr != kCGErrorSuccess ) - { - fprintf( stderr, - "Failed to switch to Core Graphics display mode\n"); - - return GL_FALSE; - } - - // switch to our OpenGL context, and bring it up fullscreen - cglErr = CGLSetCurrentContext( _glfwWin.cglContext ); - if( cglErr != kCGLNoError ) - { - fprintf( stderr, - "Failed to make CGL context current: %s\n", - CGLErrorString( cglErr ) ); - - return GL_FALSE; - } - - cglErr = CGLSetFullScreen( _glfwWin.cglContext ); - if( cglErr != kCGLNoError ) - { - fprintf( stderr, - "Failed to set CGL fullscreen mode: %s\n", - CGLErrorString( cglErr ) ); - - return GL_FALSE; - } - } - - return GL_TRUE; -} - -//======================================================================== -// Properly kill the window/video display -//======================================================================== - -void _glfwPlatformCloseWindow( void ) -{ - if( _glfwWin.mouseUPP != NULL ) - { - DisposeEventHandlerUPP( _glfwWin.mouseUPP ); - _glfwWin.mouseUPP = NULL; - } - if( _glfwWin.commandUPP != NULL ) - { - DisposeEventHandlerUPP( _glfwWin.commandUPP ); - _glfwWin.commandUPP = NULL; - } - if( _glfwWin.keyboardUPP != NULL ) - { - DisposeEventHandlerUPP( _glfwWin.keyboardUPP ); - _glfwWin.keyboardUPP = NULL; - } - if( _glfwWin.windowUPP != NULL ) - { - DisposeEventHandlerUPP( _glfwWin.windowUPP ); - _glfwWin.windowUPP = NULL; - } - - if( _glfwWin.fullscreen ) - { - if( _glfwWin.cglContext != NULL ) - { - CGLSetCurrentContext( NULL ); - CGLClearDrawable( _glfwWin.cglContext ); - CGLDestroyContext( _glfwWin.cglContext ); - CGReleaseAllDisplays(); - _glfwWin.cglContext = NULL; - } - - if( _glfwWin.cglPixelFormat != NULL ) - { - CGLDestroyPixelFormat( _glfwWin.cglPixelFormat ); - _glfwWin.cglPixelFormat = NULL; - } - } - else - { - if( _glfwWin.aglContext != NULL ) - { - aglSetCurrentContext( NULL ); - aglSetDrawable( _glfwWin.aglContext, NULL ); - aglDestroyContext( _glfwWin.aglContext ); - _glfwWin.aglContext = NULL; - } - - if( _glfwWin.aglPixelFormat != NULL ) - { - aglDestroyPixelFormat( _glfwWin.aglPixelFormat ); - _glfwWin.aglPixelFormat = NULL; - } - } - - if( _glfwWin.window != NULL ) - { - ReleaseWindow( _glfwWin.window ); - _glfwWin.window = NULL; - } -} - -//======================================================================== -// Set the window title -//======================================================================== - -void _glfwPlatformSetWindowTitle( const char *title ) -{ - CFStringRef windowTitle; - - if( !_glfwWin.fullscreen ) - { - windowTitle = CFStringCreateWithCString( kCFAllocatorDefault, - title, - kCFStringEncodingISOLatin1 ); - - (void)SetWindowTitleWithCFString( _glfwWin.window, windowTitle ); - - CFRelease( windowTitle ); - } -} - -//======================================================================== -// Set the window size -//======================================================================== - -void _glfwPlatformSetWindowSize( int width, int height ) -{ - if( !_glfwWin.fullscreen ) - { - SizeWindow( _glfwWin.window, width, height, TRUE ); - } -} - -//======================================================================== -// Set the window position -//======================================================================== - -void _glfwPlatformSetWindowPos( int x, int y ) -{ - if( !_glfwWin.fullscreen ) - { - MoveWindow( _glfwWin.window, x, y, FALSE ); - } -} - -//======================================================================== -// Window iconification -//======================================================================== - -void _glfwPlatformIconifyWindow( void ) -{ - if( !_glfwWin.fullscreen ) - { - (void)CollapseWindow( _glfwWin.window, TRUE ); - } -} - -//======================================================================== -// Window un-iconification -//======================================================================== - -void _glfwPlatformRestoreWindow( void ) -{ - if( !_glfwWin.fullscreen ) - { - (void)CollapseWindow( _glfwWin.window, FALSE ); - } -} - -//======================================================================== -// Swap buffers (double-buffering) and poll any new events -//======================================================================== - -void _glfwPlatformSwapBuffers( void ) -{ - if( _glfwWin.fullscreen ) - { - CGLFlushDrawable( _glfwWin.cglContext ); - } - else - { - aglSwapBuffers( _glfwWin.aglContext ); - } -} - -//======================================================================== -// Set double buffering swap interval -//======================================================================== - -void _glfwPlatformSwapInterval( int interval ) -{ - GLint AGLparameter = interval; - - // CGL doesn't seem to like intervals other than 0 (vsync off) or 1 (vsync on) - long CGLparameter = ( interval ? 1 : 0 ); - - if( _glfwWin.fullscreen ) - { - // Don't care if we fail here.. - (void)CGLSetParameter( _glfwWin.cglContext, - kCGLCPSwapInterval, - (GLint*) &CGLparameter ); - } - else - { - // ..or here - (void)aglSetInteger( _glfwWin.aglContext, - AGL_SWAP_INTERVAL, - &AGLparameter ); - } -} - -//======================================================================== -// Read back framebuffer parameters from the context -//======================================================================== - -#define _getAGLAttribute( aglAttributeName, variableName ) \ -{ \ - GLint aglValue; \ - (void)aglDescribePixelFormat( _glfwWin.aglPixelFormat, aglAttributeName, &aglValue ); \ - variableName = aglValue; \ -} - -#define _getCGLAttribute( cglAttributeName, variableName ) \ -{ \ - GLint cglValue; \ - (void)CGLDescribePixelFormat( _glfwWin.cglPixelFormat, 0, cglAttributeName, &cglValue ); \ - variableName = cglValue; \ -} - -void _glfwPlatformRefreshWindowParams( void ) -{ - GLint rgbColorDepth; - GLint rgbaAccumDepth = 0; - GLint rgbChannelDepth = 0; - - if( _glfwWin.fullscreen ) - { - _getCGLAttribute( kCGLPFAAccelerated, _glfwWin.accelerated ); - _getCGLAttribute( kCGLPFAAlphaSize, _glfwWin.alphaBits ); - _getCGLAttribute( kCGLPFADepthSize, _glfwWin.depthBits ); - _getCGLAttribute( kCGLPFAStencilSize, _glfwWin.stencilBits ); - _getCGLAttribute( kCGLPFAAuxBuffers, _glfwWin.auxBuffers ); - _getCGLAttribute( kCGLPFAStereo, _glfwWin.stereo ); - _getCGLAttribute( kCGLPFASamples, _glfwWin.samples ); - - // Enumerate depth of RGB channels - unlike AGL, CGL works with - // a single parameter reflecting the full depth of the frame buffer - (void)CGLDescribePixelFormat( _glfwWin.cglPixelFormat, - 0, - kCGLPFAColorSize, - &rgbColorDepth ); - - if( rgbColorDepth == 24 || rgbColorDepth == 32 ) - { - rgbChannelDepth = 8; - } - if( rgbColorDepth == 16 ) - { - rgbChannelDepth = 5; - } - - _glfwWin.redBits = rgbChannelDepth; - _glfwWin.greenBits = rgbChannelDepth; - _glfwWin.blueBits = rgbChannelDepth; - - // Get pixel depth of accumulator - I haven't got the slightest idea - // how this number conforms to any other channel depth than 8 bits, - // so this might end up giving completely knackered results... - _getCGLAttribute( kCGLPFAColorSize, rgbaAccumDepth ); - if( rgbaAccumDepth == 32 ) - { - rgbaAccumDepth = 8; - } - - _glfwWin.accumRedBits = rgbaAccumDepth; - _glfwWin.accumGreenBits = rgbaAccumDepth; - _glfwWin.accumBlueBits = rgbaAccumDepth; - _glfwWin.accumAlphaBits = rgbaAccumDepth; - } - else - { - _getAGLAttribute( AGL_ACCELERATED, _glfwWin.accelerated ); - _getAGLAttribute( AGL_RED_SIZE, _glfwWin.redBits ); - _getAGLAttribute( AGL_GREEN_SIZE, _glfwWin.greenBits ); - _getAGLAttribute( AGL_BLUE_SIZE, _glfwWin.blueBits ); - _getAGLAttribute( AGL_ALPHA_SIZE, _glfwWin.alphaBits ); - _getAGLAttribute( AGL_DEPTH_SIZE, _glfwWin.depthBits ); - _getAGLAttribute( AGL_STENCIL_SIZE, _glfwWin.stencilBits ); - _getAGLAttribute( AGL_ACCUM_RED_SIZE, _glfwWin.accumRedBits ); - _getAGLAttribute( AGL_ACCUM_GREEN_SIZE, _glfwWin.accumGreenBits ); - _getAGLAttribute( AGL_ACCUM_BLUE_SIZE, _glfwWin.accumBlueBits ); - _getAGLAttribute( AGL_ACCUM_ALPHA_SIZE, _glfwWin.accumAlphaBits ); - _getAGLAttribute( AGL_AUX_BUFFERS, _glfwWin.auxBuffers ); - _getAGLAttribute( AGL_STEREO, _glfwWin.stereo ); - _getAGLAttribute( AGL_SAMPLES_ARB, _glfwWin.samples ); - } -} - -//======================================================================== -// Poll for new window and input events -//======================================================================== - -void _glfwPlatformPollEvents( void ) -{ - EventRef event; - EventTargetRef eventDispatcher = GetEventDispatcherTarget(); - - while ( ReceiveNextEvent( 0, NULL, 0.0, TRUE, &event ) == noErr ) - { - SendEventToEventTarget( event, eventDispatcher ); - ReleaseEvent( event ); - } -} - -//======================================================================== -// Wait for new window and input events -//======================================================================== - -void _glfwPlatformWaitEvents( void ) -{ - EventRef event; - - // Wait for new events - ReceiveNextEvent( 0, NULL, kEventDurationForever, FALSE, &event ); - - // Process the new events - _glfwPlatformPollEvents(); -} - -//======================================================================== -// Hide mouse cursor (lock it) -//======================================================================== - -void _glfwPlatformHideMouseCursor( void ) -{ - CGDisplayHideCursor( kCGDirectMainDisplay ); - CGAssociateMouseAndMouseCursorPosition( false ); -} - -//======================================================================== -// Show mouse cursor (unlock it) -//======================================================================== - -void _glfwPlatformShowMouseCursor( void ) -{ - CGDisplayShowCursor( kCGDirectMainDisplay ); - CGAssociateMouseAndMouseCursorPosition( true ); -} - -//======================================================================== -// Set physical mouse cursor position -//======================================================================== - -void _glfwPlatformSetMouseCursorPos( int x, int y ) -{ - Rect content; - - if( _glfwWin.fullscreen ) - { - CGDisplayMoveCursorToPoint( kCGDirectMainDisplay, - CGPointMake( x, y ) ); - } - else - { - GetWindowBounds(_glfwWin.window, kWindowContentRgn, &content); - - _glfwInput.MousePosX = x + content.left; - _glfwInput.MousePosY = y + content.top; - - CGDisplayMoveCursorToPoint( kCGDirectMainDisplay, - CGPointMake( _glfwInput.MousePosX, - _glfwInput.MousePosY ) ); - } -} - diff --git a/ogl_editor/src/External/glfw/lib/carbon/libglfw.pc.in b/ogl_editor/src/External/glfw/lib/carbon/libglfw.pc.in deleted file mode 100644 index f230d0c..0000000 --- a/ogl_editor/src/External/glfw/lib/carbon/libglfw.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@PREFIX@ -exec_prefix=@PREFIX@ -libdir=@PREFIX@/lib -includedir=@PREFIX@/include - -Name: GLFW -Description: A portable framework for OpenGL development -Version: 2.7 -URL: http://www.glfw.org/ -Libs: -L${libdir} -lglfw -framework AGL -framework OpenGL -framework Carbon -Cflags: -I${includedir} diff --git a/ogl_editor/src/External/glfw/lib/carbon/platform.h b/ogl_editor/src/External/glfw/lib/carbon/platform.h deleted file mode 100644 index 86a768d..0000000 --- a/ogl_editor/src/External/glfw/lib/carbon/platform.h +++ /dev/null @@ -1,336 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Carbon/AGL/CGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2003 Keith Bauer -// Copyright (c) 2003-2010 Camilla Berglund -// Copyright (c) 2006-2007 Robin Leffmann -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#ifndef _platform_h_ -#define _platform_h_ - - -// This is the Mac OS X version of GLFW -#define _GLFW_MAC_OS_X - -#include -#include -#include -#include -#include -#include - -#include "../../include/GL/glfw.h" - -#if MACOSX_DEPLOYMENT_TARGET < MAC_OS_X_VERSION_10_3 - -#ifndef kCGLNoError -#define kCGLNoError 0 -#endif - -#endif - - -#ifndef GL_VERSION_3_0 - -typedef const GLubyte * (APIENTRY *PFNGLGETSTRINGIPROC) (GLenum, GLuint); - -#endif /*GL_VERSION_3_0*/ - - -//======================================================================== -// Defines -//======================================================================== - -#define _GLFW_MAX_PATH_LENGTH (8192) - -#define MAC_KEY_ENTER 0x24 -#define MAC_KEY_RETURN 0x34 -#define MAC_KEY_ESC 0x35 -#define MAC_KEY_F1 0x7A -#define MAC_KEY_F2 0x78 -#define MAC_KEY_F3 0x63 -#define MAC_KEY_F4 0x76 -#define MAC_KEY_F5 0x60 -#define MAC_KEY_F6 0x61 -#define MAC_KEY_F7 0x62 -#define MAC_KEY_F8 0x64 -#define MAC_KEY_F9 0x65 -#define MAC_KEY_F10 0x6D -#define MAC_KEY_F11 0x67 -#define MAC_KEY_F12 0x6F -#define MAC_KEY_F13 0x69 -#define MAC_KEY_F14 0x6B -#define MAC_KEY_F15 0x71 -#define MAC_KEY_UP 0x7E -#define MAC_KEY_DOWN 0x7D -#define MAC_KEY_LEFT 0x7B -#define MAC_KEY_RIGHT 0x7C -#define MAC_KEY_TAB 0x30 -#define MAC_KEY_BACKSPACE 0x33 -#define MAC_KEY_HELP 0x72 -#define MAC_KEY_DEL 0x75 -#define MAC_KEY_PAGEUP 0x74 -#define MAC_KEY_PAGEDOWN 0x79 -#define MAC_KEY_HOME 0x73 -#define MAC_KEY_END 0x77 -#define MAC_KEY_KP_0 0x52 -#define MAC_KEY_KP_1 0x53 -#define MAC_KEY_KP_2 0x54 -#define MAC_KEY_KP_3 0x55 -#define MAC_KEY_KP_4 0x56 -#define MAC_KEY_KP_5 0x57 -#define MAC_KEY_KP_6 0x58 -#define MAC_KEY_KP_7 0x59 -#define MAC_KEY_KP_8 0x5B -#define MAC_KEY_KP_9 0x5C -#define MAC_KEY_KP_DIVIDE 0x4B -#define MAC_KEY_KP_MULTIPLY 0x43 -#define MAC_KEY_KP_SUBTRACT 0x4E -#define MAC_KEY_KP_ADD 0x45 -#define MAC_KEY_KP_DECIMAL 0x41 -#define MAC_KEY_KP_EQUAL 0x51 -#define MAC_KEY_KP_ENTER 0x4C -#define MAC_KEY_NUMLOCK 0x47 - - -//======================================================================== -// GLFW platform specific types -//======================================================================== - -//------------------------------------------------------------------------ -// Pointer length integer -//------------------------------------------------------------------------ -typedef intptr_t GLFWintptr; - - -//------------------------------------------------------------------------ -// Window structure -//------------------------------------------------------------------------ -typedef struct _GLFWwin_struct _GLFWwin; - -struct _GLFWwin_struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // User callback functions - GLFWwindowsizefun windowSizeCallback; - GLFWwindowclosefun windowCloseCallback; - GLFWwindowrefreshfun windowRefreshCallback; - GLFWmousebuttonfun mouseButtonCallback; - GLFWmouseposfun mousePosCallback; - GLFWmousewheelfun mouseWheelCallback; - GLFWkeyfun keyCallback; - GLFWcharfun charCallback; - - // User selected window settings - int fullscreen; // Fullscreen flag - int mouseLock; // Mouse-lock flag - int autoPollEvents; // Auto polling flag - int sysKeysDisabled; // System keys disabled flag - int windowNoResize; // Resize- and maximize gadgets disabled flag - int refreshRate; // Vertical monitor refresh rate - - // Window status & parameters - int opened; // Flag telling if window is opened or not - int active; // Application active flag - int iconified; // Window iconified flag - int width, height; // Window width and heigth - int accelerated; // GL_TRUE if window is HW accelerated - - // Framebuffer attributes - int redBits; - int greenBits; - int blueBits; - int alphaBits; - int depthBits; - int stencilBits; - int accumRedBits; - int accumGreenBits; - int accumBlueBits; - int accumAlphaBits; - int auxBuffers; - int stereo; - int samples; - - // OpenGL extensions and context attributes - int has_GL_SGIS_generate_mipmap; - int has_GL_ARB_texture_non_power_of_two; - int glMajor, glMinor, glRevision; - int glForward, glDebug, glProfile; - - PFNGLGETSTRINGIPROC GetStringi; - -// ========= PLATFORM SPECIFIC PART ====================================== - - WindowRef window; - - AGLContext aglContext; - AGLPixelFormat aglPixelFormat; - - CGLContextObj cglContext; - CGLPixelFormatObj cglPixelFormat; - - EventHandlerUPP windowUPP; - EventHandlerUPP mouseUPP; - EventHandlerUPP commandUPP; - EventHandlerUPP keyboardUPP; -}; - -GLFWGLOBAL _GLFWwin _glfwWin; - - -//------------------------------------------------------------------------ -// User input status (some of this should go in _GLFWwin) -//------------------------------------------------------------------------ -GLFWGLOBAL struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // Mouse status - int MousePosX, MousePosY; - int WheelPos; - char MouseButton[ GLFW_MOUSE_BUTTON_LAST + 1 ]; - - // Keyboard status - char Key[ GLFW_KEY_LAST + 1 ]; - int LastChar; - - // User selected settings - int StickyKeys; - int StickyMouseButtons; - int KeyRepeat; - -// ========= PLATFORM SPECIFIC PART ====================================== - - UInt32 Modifiers; - -} _glfwInput; - - - -//------------------------------------------------------------------------ -// Thread information -//------------------------------------------------------------------------ -typedef struct _GLFWthread_struct _GLFWthread; - -// Thread record (one for each thread) -struct _GLFWthread_struct { - - // Pointer to previous and next threads in linked list - _GLFWthread *Previous, *Next; - - // GLFW user side thread information - GLFWthread ID; - GLFWthreadfun Function; - - // System side thread information - pthread_t PosixID; -}; - -// General thread information -GLFWGLOBAL struct { - - // Critical section lock - pthread_mutex_t CriticalSection; - - // Next thread ID to use (increments for every created thread) - GLFWthread NextID; - - // First thread in linked list (always the main thread) - _GLFWthread First; - -} _glfwThrd; - - -//------------------------------------------------------------------------ -// Library global data -//------------------------------------------------------------------------ -GLFWGLOBAL struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // Window opening hints - _GLFWhints hints; - - // Initial desktop mode - GLFWvidmode desktopMode; - -// ========= PLATFORM SPECIFIC PART ====================================== - - // Timer data - struct { - double t0; - } Timer; - - struct { - // Bundle for dynamically-loading extension function pointers - CFBundleRef OpenGLFramework; - } Libs; - - int Unbundled; - -} _glfwLibrary; - - - -//======================================================================== -// Macros for encapsulating critical code sections (i.e. making parts -// of GLFW thread safe) -//======================================================================== - -// Define so we can use the same thread code as X11 -#define _glfw_numprocessors(n) { \ - int mib[2], ncpu; \ - size_t len = 1; \ - mib[0] = CTL_HW; \ - mib[1] = HW_NCPU; \ - n = 1; \ - if( sysctl( mib, 2, &ncpu, &len, NULL, 0 ) != -1 ) \ - { \ - if( len > 0 ) \ - { \ - n = ncpu; \ - } \ - } \ -} - -// Thread list management -#define ENTER_THREAD_CRITICAL_SECTION \ -pthread_mutex_lock( &_glfwThrd.CriticalSection ); -#define LEAVE_THREAD_CRITICAL_SECTION \ -pthread_mutex_unlock( &_glfwThrd.CriticalSection ); - - -//======================================================================== -// Prototypes for platform specific internal functions -//======================================================================== - -void _glfwChangeToResourcesDirectory( void ); -void _glfwSaveDesktopMode( void ); - -#endif // _platform_h_ diff --git a/ogl_editor/src/External/glfw/lib/cocoa/Makefile.cocoa b/ogl_editor/src/External/glfw/lib/cocoa/Makefile.cocoa deleted file mode 100644 index 49d83d4..0000000 --- a/ogl_editor/src/External/glfw/lib/cocoa/Makefile.cocoa +++ /dev/null @@ -1,179 +0,0 @@ -########################################################################## -# Makefile for GLFW on Cocoa on Mac OS X using Apple GCC -#------------------------------------------------------------------------- -# To compile GLFW using this makefile, run: -# make -f Makefile.cocoa -########################################################################## - -########################################################################## -# Installation prefix (default to /usr/local) -########################################################################## -PREFIX ?= /usr/local - - -########################################################################## -# Default: Build GLFW static and shared library -########################################################################## -all: libglfw.a libglfw.dylib - - -########################################################################## -# Compiler settings -########################################################################## -CC ?= cc -CFLAGS ?= -O2 -g -CFLAGS += -c -I. -I.. -Wall -fno-common - - -########################################################################## -# Library builder settings -########################################################################## -AR = ar -SED = sed -INSTALL = install -ARFLAGS = -rcs -RANLIB = ranlib -DYLIBFLAGS = -framework Cocoa -framework OpenGL -framework IOKit \ - -dynamiclib -Wl,-single_module -compatibility_version 1 \ - -current_version 1 -install_name @executable_path/libglfw.dylib -HEADERS = ../../include/GL/glfw.h ../internal.h platform.h - - -########################################################################## -# Install GLFW header and static library -########################################################################## -install: libglfw.a libglfw.pc - $(INSTALL) -d $(PREFIX)/lib - $(INSTALL) -c -m 644 libglfw.a $(PREFIX)/lib/libglfw.a - $(RANLIB) $(PREFIX)/lib/libglfw.a - $(INSTALL) -d $(PREFIX)/include/GL - $(INSTALL) -c -m 644 ../../include/GL/glfw.h $(PREFIX)/include/GL/glfw.h - $(INSTALL) -d $(PREFIX)/lib/pkgconfig - $(INSTALL) -c -m 644 libglfw.pc $(PREFIX)/lib/pkgconfig/libglfw.pc - - -########################################################################## -# Install GLFW header and static and dynamic libraries -########################################################################## -dist-install: libglfw.dylib install - $(INSTALL) -c -m 644 libglfw.dylib $(PREFIX)/lib/libglfw.dylib - - -########################################################################## -# Object files for the GLFW library -########################################################################## -OBJS = \ - enable.o \ - fullscreen.o \ - glext.o \ - image.o \ - init.o \ - input.o \ - joystick.o \ - stream.o \ - tga.o \ - thread.o \ - time.o \ - window.o \ - cocoa_enable.o \ - cocoa_fullscreen.o \ - cocoa_glext.o \ - cocoa_init.o \ - cocoa_joystick.o \ - cocoa_thread.o \ - cocoa_time.o \ - cocoa_window.o - - -########################################################################## -# Rule for building libglfw.pc -########################################################################## -libglfw.pc: libglfw.pc.in - $(SED) -e 's,\@PREFIX\@,$(PREFIX),' libglfw.pc.in > libglfw.pc - - -########################################################################## -# Rule for building static library -########################################################################## -libglfw.a: $(OBJS) - $(AR) $(ARFLAGS) $@ $(OBJS) - $(RANLIB) $@ - - -########################################################################## -# Rule for building shared library -########################################################################## -libglfw.dylib: $(OBJS) - $(CC) -o $@ $(DYLIBFLAGS) $(OBJS) - - -########################################################################## -# Rule for cleaning up generated files -########################################################################## -clean: - rm -f $(OBJS) libglfw.a libglfw.dylib libglfw.pc - - -########################################################################## -# Rules for building library object files -########################################################################## -enable.o: ../enable.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../enable.c - -fullscreen.o: ../fullscreen.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../fullscreen.c - -glext.o: ../glext.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../glext.c - -image.o: ../image.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../image.c - -init.o: ../init.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../init.c - -input.o: ../input.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../input.c - -joystick.o: ../joystick.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../joystick.c - -stream.o: ../stream.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../stream.c - -tga.o: ../tga.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../tga.c - -thread.o: ../thread.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../thread.c - -time.o: ../time.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../time.c - -window.o: ../window.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../window.c - -cocoa_enable.o: cocoa_enable.m $(HEADERS) - $(CC) $(CFLAGS) -o $@ cocoa_enable.m - -cocoa_fullscreen.o: cocoa_fullscreen.m $(HEADERS) - $(CC) $(CFLAGS) -o $@ cocoa_fullscreen.m - -cocoa_glext.o: cocoa_glext.m $(HEADERS) - $(CC) $(CFLAGS) -o $@ cocoa_glext.m - -cocoa_init.o: cocoa_init.m $(HEADERS) - $(CC) $(CFLAGS) -o $@ cocoa_init.m - -cocoa_joystick.o: cocoa_joystick.m $(HEADERS) - $(CC) $(CFLAGS) -o $@ cocoa_joystick.m - -cocoa_thread.o: cocoa_thread.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ cocoa_thread.c - -cocoa_time.o: cocoa_time.m $(HEADERS) - $(CC) $(CFLAGS) -o $@ cocoa_time.m - -cocoa_window.o: cocoa_window.m $(HEADERS) - $(CC) $(CFLAGS) -o $@ cocoa_window.m - diff --git a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_enable.m b/ogl_editor/src/External/glfw/lib/cocoa/cocoa_enable.m deleted file mode 100644 index 7e19476..0000000 --- a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_enable.m +++ /dev/null @@ -1,51 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Cocoa/NSOpenGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2009-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Enable and disable system keys -//======================================================================== - -void _glfwPlatformEnableSystemKeys( void ) -{ - // This is checked in macosx_window.m; we take no action here -} - -void _glfwPlatformDisableSystemKeys( void ) -{ - // This is checked in macosx_window.m; we take no action here - // I don't think it's really possible to disable stuff like Exposé - // except in full-screen mode. -} - diff --git a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_fullscreen.m b/ogl_editor/src/External/glfw/lib/cocoa/cocoa_fullscreen.m deleted file mode 100644 index 9a7e3f5..0000000 --- a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_fullscreen.m +++ /dev/null @@ -1,104 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Cocoa/NSOpenGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2009-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -//======================================================================== -// Check whether the display mode should be included in enumeration -//======================================================================== - -static BOOL modeIsGood( NSDictionary *mode ) -{ - // This is a bit controversial, if you've got something other than an - // LCD computer monitor as an output device you might not want these - // checks. You might also want to reject modes which are interlaced, - // or TV out. There is no one-size-fits-all policy that can work here. - // This seems like a decent compromise, but certain applications may - // wish to patch this... - return [[mode objectForKey:(id)kCGDisplayBitsPerPixel] intValue] >= 15 && - [mode objectForKey:(id)kCGDisplayModeIsSafeForHardware] != nil && - [mode objectForKey:(id)kCGDisplayModeIsStretched] == nil; -} - - -//======================================================================== -// Convert Core Graphics display mode to GLFW video mode -//======================================================================== - -static GLFWvidmode vidmodeFromCGDisplayMode( NSDictionary *mode ) -{ - unsigned int width = [[mode objectForKey:(id)kCGDisplayWidth] unsignedIntValue]; - unsigned int height = [[mode objectForKey:(id)kCGDisplayHeight] unsignedIntValue]; - unsigned int bps = [[mode objectForKey:(id)kCGDisplayBitsPerSample] unsignedIntValue]; - - GLFWvidmode result; - result.Width = width; - result.Height = height; - result.RedBits = bps; - result.GreenBits = bps; - result.BlueBits = bps; - return result; -} - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Get a list of available video modes -//======================================================================== - -int _glfwPlatformGetVideoModes( GLFWvidmode *list, int maxcount ) -{ - NSArray *modes = (NSArray *)CGDisplayAvailableModes( CGMainDisplayID() ); - - unsigned int i, j = 0, n = [modes count]; - for( i = 0; i < n && j < (unsigned)maxcount; i++ ) - { - NSDictionary *mode = [modes objectAtIndex:i]; - if( modeIsGood( mode ) ) - { - list[j++] = vidmodeFromCGDisplayMode( mode ); - } - } - - return j; -} - - -//======================================================================== -// Get the desktop video mode -//======================================================================== - -void _glfwPlatformGetDesktopMode( GLFWvidmode *mode ) -{ - *mode = vidmodeFromCGDisplayMode( CGDisplayCurrentMode( CGMainDisplayID() ) ); -} - diff --git a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_glext.m b/ogl_editor/src/External/glfw/lib/cocoa/cocoa_glext.m deleted file mode 100644 index b1288be..0000000 --- a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_glext.m +++ /dev/null @@ -1,64 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Cocoa/NSOpenGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2009-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Check if an OpenGL extension is available at runtime -//======================================================================== - -int _glfwPlatformExtensionSupported( const char *extension ) -{ - // There are no AGL, CGL or NSGL extensions. - return GL_FALSE; -} - - -//======================================================================== -// Get the function pointer to an OpenGL function -//======================================================================== - -void * _glfwPlatformGetProcAddress( const char *procname ) -{ - CFStringRef symbolName = CFStringCreateWithCString( kCFAllocatorDefault, - procname, - kCFStringEncodingASCII ); - - void *symbol = CFBundleGetFunctionPointerForName( _glfwLibrary.OpenGLFramework, - symbolName ); - - CFRelease( symbolName ); - - return symbol; -} - diff --git a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_init.m b/ogl_editor/src/External/glfw/lib/cocoa/cocoa_init.m deleted file mode 100644 index bd9be57..0000000 --- a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_init.m +++ /dev/null @@ -1,195 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Cocoa/NSOpenGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2009-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include - -#include "internal.h" - -@interface GLFWThread : NSThread -@end - -@implementation GLFWThread - -- (void)main -{ -} - -@end - -//======================================================================== -// Change to our application bundle's resources directory, if present -//======================================================================== - -static void changeToResourcesDirectory( void ) -{ - char resourcesPath[MAXPATHLEN]; - - CFBundleRef bundle = CFBundleGetMainBundle(); - if( !bundle ) - return; - - CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL( bundle ); - - CFStringRef last = CFURLCopyLastPathComponent( resourcesURL ); - if( CFStringCompare( CFSTR( "Resources" ), last, 0 ) != kCFCompareEqualTo ) - { - CFRelease( last ); - CFRelease( resourcesURL ); - return; - } - - CFRelease( last ); - - if( !CFURLGetFileSystemRepresentation( resourcesURL, - true, - (UInt8*) resourcesPath, - MAXPATHLEN) ) - { - CFRelease( resourcesURL ); - return; - } - - CFRelease( resourcesURL ); - - chdir( resourcesPath ); -} - - -//======================================================================== -// Terminate GLFW when exiting application -//======================================================================== - -static void glfw_atexit( void ) -{ - glfwTerminate(); -} - - -//======================================================================== -// Initialize GLFW thread package -//======================================================================== - -static void initThreads( void ) -{ - // Initialize critical section handle - (void) pthread_mutex_init( &_glfwThrd.CriticalSection, NULL ); - - // The first thread (the main thread) has ID 0 - _glfwThrd.NextID = 0; - - // Fill out information about the main thread (this thread) - _glfwThrd.First.ID = _glfwThrd.NextID ++; - _glfwThrd.First.Function = NULL; - _glfwThrd.First.PosixID = pthread_self(); - _glfwThrd.First.Previous = NULL; - _glfwThrd.First.Next = NULL; -} - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Initialize the GLFW library -//======================================================================== - -int _glfwPlatformInit( void ) -{ - _glfwLibrary.autoreleasePool = [[NSAutoreleasePool alloc] init]; - - _glfwLibrary.OpenGLFramework = - CFBundleGetBundleWithIdentifier( CFSTR( "com.apple.opengl" ) ); - if( _glfwLibrary.OpenGLFramework == NULL ) - { - return GL_FALSE; - } - - GLFWThread* thread = [[GLFWThread alloc] init]; - [thread start]; - [thread release]; - - changeToResourcesDirectory(); - - _glfwPlatformGetDesktopMode( &_glfwLibrary.desktopMode ); - - // Install atexit routine - atexit( glfw_atexit ); - - initThreads(); - - _glfwInitTimer(); - - _glfwInitJoysticks(); - - _glfwLibrary.eventSource = CGEventSourceCreate( kCGEventSourceStateHIDSystemState ); - if( !_glfwLibrary.eventSource ) - { - return GL_FALSE; - } - - CGEventSourceSetLocalEventsSuppressionInterval( _glfwLibrary.eventSource, - 0.0 ); - - _glfwPlatformSetTime( 0.0 ); - - return GL_TRUE; -} - - -//======================================================================== -// Close window, if open, and shut down GLFW -//======================================================================== - -int _glfwPlatformTerminate( void ) -{ - if( pthread_self() != _glfwThrd.First.PosixID ) - { - return GL_FALSE; - } - - glfwCloseWindow(); - - // TODO: Kill all non-main threads? - // TODO: Probably other cleanup - - if( _glfwLibrary.eventSource ) - { - CFRelease( _glfwLibrary.eventSource ); - _glfwLibrary.eventSource = NULL; - } - - _glfwTerminateJoysticks(); - - [_glfwLibrary.autoreleasePool release]; - _glfwLibrary.autoreleasePool = nil; - - return GL_TRUE; -} - diff --git a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_joystick.m b/ogl_editor/src/External/glfw/lib/cocoa/cocoa_joystick.m deleted file mode 100644 index fa1976a..0000000 --- a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_joystick.m +++ /dev/null @@ -1,648 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Cocoa/NSOpenGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2009-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - - -//------------------------------------------------------------------------ -// Joystick state -//------------------------------------------------------------------------ - -typedef struct -{ - int present; - char product[256]; - - IOHIDDeviceInterface** interface; - - int numAxes; - int numButtons; - int numHats; - - CFMutableArrayRef axes; - CFMutableArrayRef buttons; - CFMutableArrayRef hats; - -} _glfwJoystick; - -static _glfwJoystick _glfwJoysticks[GLFW_JOYSTICK_LAST + 1]; - - -typedef struct -{ - IOHIDElementCookie cookie; - - long value; - - long min; - long max; - - long minReport; - long maxReport; - -} _glfwJoystickElement; - - -void GetElementsCFArrayHandler( const void* value, void* parameter ); - - -//======================================================================== -// Adds an element to the specified joystick -//======================================================================== - -static void addJoystickElement( _glfwJoystick* joystick, CFTypeRef refElement ) -{ - long elementType, usagePage, usage; - CFTypeRef refElementType, refUsagePage, refUsage; - - refElementType = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementTypeKey ) ); - refUsagePage = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementUsagePageKey ) ); - refUsage = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementUsageKey ) ); - - CFMutableArrayRef elementsArray = NULL; - - CFNumberGetValue( refElementType, kCFNumberLongType, &elementType ); - CFNumberGetValue( refUsagePage, kCFNumberLongType, &usagePage ); - CFNumberGetValue( refUsage, kCFNumberLongType, &usage ); - - if( elementType == kIOHIDElementTypeInput_Axis || - elementType == kIOHIDElementTypeInput_Button || - elementType == kIOHIDElementTypeInput_Misc ) - { - switch( usagePage ) /* only interested in kHIDPage_GenericDesktop and kHIDPage_Button */ - { - case kHIDPage_GenericDesktop: - { - switch( usage ) - { - case kHIDUsage_GD_X: - case kHIDUsage_GD_Y: - case kHIDUsage_GD_Z: - case kHIDUsage_GD_Rx: - case kHIDUsage_GD_Ry: - case kHIDUsage_GD_Rz: - case kHIDUsage_GD_Slider: - case kHIDUsage_GD_Dial: - case kHIDUsage_GD_Wheel: - joystick->numAxes++; - elementsArray = joystick->axes; - break; - case kHIDUsage_GD_Hatswitch: - joystick->numHats++; - elementsArray = joystick->hats; - break; - } - - break; - } - - case kHIDPage_Button: - joystick->numButtons++; - elementsArray = joystick->buttons; - break; - default: - break; - } - - if( elementsArray ) - { - long number; - CFTypeRef refType; - - _glfwJoystickElement* element = (_glfwJoystickElement*) malloc( sizeof( _glfwJoystickElement ) ); - - CFArrayAppendValue( elementsArray, element ); - - refType = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementCookieKey ) ); - if( refType && CFNumberGetValue( refType, kCFNumberLongType, &number ) ) - { - element->cookie = (IOHIDElementCookie) number; - } - - refType = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementMinKey ) ); - if( refType && CFNumberGetValue( refType, kCFNumberLongType, &number ) ) - { - element->minReport = element->min = number; - } - - refType = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementMaxKey ) ); - if( refType && CFNumberGetValue( refType, kCFNumberLongType, &number ) ) - { - element->maxReport = element->max = number; - } - } - } - else - { - CFTypeRef refElementTop = CFDictionaryGetValue( refElement, CFSTR( kIOHIDElementKey ) ); - if( refElementTop ) - { - CFTypeID type = CFGetTypeID( refElementTop ); - if( type == CFArrayGetTypeID() ) /* if element is an array */ - { - CFRange range = { 0, CFArrayGetCount( refElementTop ) }; - CFArrayApplyFunction( refElementTop, range, GetElementsCFArrayHandler, joystick ); - } - } - } -} - - -//======================================================================== -// Adds an element to the specified joystick -//======================================================================== - -void GetElementsCFArrayHandler( const void* value, void* parameter ) -{ - if( CFGetTypeID( value ) == CFDictionaryGetTypeID() ) - { - addJoystickElement( (_glfwJoystick*) parameter, (CFTypeRef) value ); - } -} - - -//======================================================================== -// Returns the value of the specified element of the specified joystick -//======================================================================== - -static long getElementValue( _glfwJoystick* joystick, _glfwJoystickElement* element ) -{ - IOReturn result = kIOReturnSuccess; - IOHIDEventStruct hidEvent; - hidEvent.value = 0; - - if( joystick && element && joystick->interface ) - { - result = (*(joystick->interface))->getElementValue( joystick->interface, - element->cookie, - &hidEvent ); - if( kIOReturnSuccess == result ) - { - /* record min and max for auto calibration */ - if( hidEvent.value < element->minReport ) - { - element->minReport = hidEvent.value; - } - if( hidEvent.value > element->maxReport ) - { - element->maxReport = hidEvent.value; - } - } - } - - /* auto user scale */ - return (long) hidEvent.value; -} - - -//======================================================================== -// Removes the specified joystick -//======================================================================== - -static void removeJoystick( _glfwJoystick* joystick ) -{ - int i; - - if( joystick->present ) - { - joystick->present = GL_FALSE; - - for( i = 0; i < joystick->numAxes; i++ ) - { - _glfwJoystickElement* axes = - (_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick->axes, i ); - free( axes ); - } - CFArrayRemoveAllValues( joystick->axes ); - joystick->numAxes = 0; - - for( i = 0; i < joystick->numButtons; i++ ) - { - _glfwJoystickElement* button = - (_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick->buttons, i ); - free( button ); - } - CFArrayRemoveAllValues( joystick->buttons ); - joystick->numButtons = 0; - - for( i = 0; i < joystick->numHats; i++ ) - { - _glfwJoystickElement* hat = - (_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick->hats, i ); - free( hat ); - } - CFArrayRemoveAllValues( joystick->hats ); - joystick->hats = 0; - - (*(joystick->interface))->close( joystick->interface ); - (*(joystick->interface))->Release( joystick->interface ); - - joystick->interface = NULL; - } -} - - -//======================================================================== -// Callback for user-initiated joystick removal -//======================================================================== - -static void removalCallback( void* target, IOReturn result, void* refcon, void* sender ) -{ - removeJoystick( (_glfwJoystick*) refcon ); -} - - -//======================================================================== -// Polls for joystick events and updates GFLW state -//======================================================================== - -static void pollJoystickEvents( void ) -{ - int i; - CFIndex j; - - for( i = 0; i < GLFW_JOYSTICK_LAST + 1; i++ ) - { - _glfwJoystick* joystick = &_glfwJoysticks[i]; - - if( joystick->present ) - { - for( j = 0; j < joystick->numButtons; j++ ) - { - _glfwJoystickElement* button = - (_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick->buttons, j ); - button->value = getElementValue( joystick, button ); - } - - for( j = 0; j < joystick->numAxes; j++ ) - { - _glfwJoystickElement* axes = - (_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick->axes, j ); - axes->value = getElementValue( joystick, axes ); - } - - for( j = 0; j < joystick->numHats; j++ ) - { - _glfwJoystickElement* hat = - (_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick->hats, j ); - hat->value = getElementValue( joystick, hat ); - } - } - } -} - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Initialize joystick interface -//======================================================================== - -void _glfwInitJoysticks( void ) -{ - int deviceCounter = 0; - IOReturn result = kIOReturnSuccess; - mach_port_t masterPort = 0; - io_iterator_t objectIterator = 0; - CFMutableDictionaryRef hidMatchDictionary = NULL; - io_object_t ioHIDDeviceObject = 0; - - result = IOMasterPort( bootstrap_port, &masterPort ); - hidMatchDictionary = IOServiceMatching( kIOHIDDeviceKey ); - if( kIOReturnSuccess != result || !hidMatchDictionary ) - { - if( hidMatchDictionary ) - { - CFRelease( hidMatchDictionary ); - } - - return; - } - - result = IOServiceGetMatchingServices( masterPort, - hidMatchDictionary, - &objectIterator ); - if( result != kIOReturnSuccess ) - { - return; - } - - if( !objectIterator ) /* there are no joysticks */ - { - return; - } - - while( ( ioHIDDeviceObject = IOIteratorNext( objectIterator ) ) ) - { - CFMutableDictionaryRef hidProperties = 0; - kern_return_t result; - CFTypeRef refCF = 0; - - IOCFPlugInInterface** ppPlugInInterface = NULL; - HRESULT plugInResult = S_OK; - SInt32 score = 0; - - long usagePage, usage; - - result = IORegistryEntryCreateCFProperties( ioHIDDeviceObject, - &hidProperties, - kCFAllocatorDefault, - kNilOptions ); - - if( result != kIOReturnSuccess ) - { - continue; - } - - /* Check device type */ - refCF = CFDictionaryGetValue( hidProperties, CFSTR( kIOHIDPrimaryUsagePageKey ) ); - if( refCF ) - { - CFNumberGetValue( refCF, kCFNumberLongType, &usagePage ); - if( usagePage != kHIDPage_GenericDesktop ) - { - /* We are not interested in this device */ - continue; - } - } - - refCF = CFDictionaryGetValue( hidProperties, CFSTR( kIOHIDPrimaryUsageKey ) ); - if( refCF ) - { - CFNumberGetValue( refCF, kCFNumberLongType, &usage ); - - if( usage != kHIDUsage_GD_Joystick && - usage != kHIDUsage_GD_GamePad && - usage != kHIDUsage_GD_MultiAxisController ) - { - /* We are not interested in this device */ - continue; - } - } - - _glfwJoystick* joystick = &_glfwJoysticks[deviceCounter]; - - joystick->present = GL_TRUE; - - result = IOCreatePlugInInterfaceForService( ioHIDDeviceObject, - kIOHIDDeviceUserClientTypeID, - kIOCFPlugInInterfaceID, - &ppPlugInInterface, - &score ); - - if( kIOReturnSuccess != result ) - { - return; - } - - plugInResult = (*ppPlugInInterface)->QueryInterface( ppPlugInInterface, - CFUUIDGetUUIDBytes( kIOHIDDeviceInterfaceID ), - (void *) &(joystick->interface) ); - - if( plugInResult != S_OK ) - { - return; - } - - (*ppPlugInInterface)->Release( ppPlugInInterface ); - - (*(joystick->interface))->open( joystick->interface, 0 ); - (*(joystick->interface))->setRemovalCallback( joystick->interface, - removalCallback, - joystick, - joystick ); - - /* Get product string */ - refCF = CFDictionaryGetValue( hidProperties, CFSTR( kIOHIDProductKey ) ); - if( refCF ) - { - CFStringGetCString( refCF, - (char*) &(joystick->product), - 256, - CFStringGetSystemEncoding() ); - } - - joystick->numAxes = 0; - joystick->numButtons = 0; - joystick->numHats = 0; - joystick->axes = CFArrayCreateMutable( NULL, 0, NULL ); - joystick->buttons = CFArrayCreateMutable( NULL, 0, NULL ); - joystick->hats = CFArrayCreateMutable( NULL, 0, NULL ); - - CFTypeRef refTopElement = CFDictionaryGetValue( hidProperties, - CFSTR( kIOHIDElementKey ) ); - CFTypeID type = CFGetTypeID( refTopElement ); - if( type == CFArrayGetTypeID() ) - { - CFRange range = { 0, CFArrayGetCount( refTopElement ) }; - CFArrayApplyFunction( refTopElement, - range, - GetElementsCFArrayHandler, - (void*) joystick); - } - - deviceCounter++; - } -} - - -//======================================================================== -// Close all opened joystick handles -//======================================================================== - -void _glfwTerminateJoysticks( void ) -{ - int i; - - for( i = 0; i < GLFW_JOYSTICK_LAST + 1; i++ ) - { - _glfwJoystick* joystick = &_glfwJoysticks[i]; - removeJoystick( joystick ); - } -} - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Determine joystick capabilities -//======================================================================== - -int _glfwPlatformGetJoystickParam( int joy, int param ) -{ - if( !_glfwJoysticks[joy].present ) - { - // TODO: Figure out if this is an error - return GL_FALSE; - } - - switch( param ) - { - case GLFW_PRESENT: - return GL_TRUE; - - case GLFW_AXES: - return (int) CFArrayGetCount( _glfwJoysticks[joy].axes ); - - case GLFW_BUTTONS: - return (int) CFArrayGetCount( _glfwJoysticks[joy].buttons ) + - ((int) CFArrayGetCount( _glfwJoysticks[joy].hats )) * 4; - - default: - break; - } - - return GL_FALSE; -} - - -//======================================================================== -// Get joystick axis positions -//======================================================================== - -int _glfwPlatformGetJoystickPos( int joy, float *pos, int numaxes ) -{ - int i; - - if( joy < GLFW_JOYSTICK_1 || joy > GLFW_JOYSTICK_LAST ) - { - return 0; - } - - _glfwJoystick joystick = _glfwJoysticks[joy]; - - if( !joystick.present ) - { - // TODO: Figure out if this is an error - return 0; - } - - numaxes = numaxes < joystick.numAxes ? numaxes : joystick.numAxes; - - // Update joystick state - pollJoystickEvents(); - - for( i = 0; i < numaxes; i++ ) - { - _glfwJoystickElement* axes = - (_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick.axes, i ); - - long readScale = axes->maxReport - axes->minReport; - - if( readScale == 0 ) - { - pos[i] = axes->value; - } - else - { - pos[i] = (2.0f * (axes->value - axes->minReport) / readScale) - 1.0f; - } - - //printf("%ld, %ld, %ld\n", axes->value, axes->minReport, axes->maxReport); - - if( i & 1 ) - { - pos[i] = -pos[i]; - } - } - - return numaxes; -} - - -//======================================================================== -// Get joystick button states -//======================================================================== - -int _glfwPlatformGetJoystickButtons( int joy, unsigned char *buttons, int numbuttons ) -{ - int i, j, button; - - if( joy < GLFW_JOYSTICK_1 || joy > GLFW_JOYSTICK_LAST ) - { - return 0; - } - - _glfwJoystick joystick = _glfwJoysticks[joy]; - - if( !joystick.present ) - { - // TODO: Figure out if this is an error - return 0; - } - - // Update joystick state - pollJoystickEvents(); - - for( button = 0; button < numbuttons && button < joystick.numButtons; button++ ) - { - _glfwJoystickElement* element = (_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick.buttons, button ); - buttons[button] = element->value ? GLFW_PRESS : GLFW_RELEASE; - } - - // Virtual buttons - Inject data from hats - // Each hat is exposed as 4 buttons which exposes 8 directions with concurrent button presses - - const int directions[9] = { 1, 3, 2, 6, 4, 12, 8, 9, 0 }; // Bit fields of button presses for each direction, including nil - - for( i = 0; i < joystick.numHats; i++ ) - { - _glfwJoystickElement* hat = (_glfwJoystickElement*) CFArrayGetValueAtIndex( joystick.hats, i ); - int value = hat->value; - if( value < 0 || value > 8 ) - { - value = 8; - } - - for( j = 0; j < 4 && button < numbuttons; j++ ) - { - buttons[button++] = directions[value] & (1 << j) ? GLFW_PRESS : GLFW_RELEASE; - } - } - - return button; -} - diff --git a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_thread.c b/ogl_editor/src/External/glfw/lib/cocoa/cocoa_thread.c deleted file mode 100644 index baaf989..0000000 --- a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_thread.c +++ /dev/null @@ -1,414 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Cocoa/NSOpenGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2009-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -#include -#include - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// _glfwNewThread() - This is simply a "wrapper" for calling the user -// thread function. -//======================================================================== - -void * _glfwNewThread( void * arg ) -{ - GLFWthreadfun threadfun; - _GLFWthread *t; - - // Get pointer to thread information for current thread - t = _glfwGetThreadPointer( glfwGetThreadID() ); - if( t == NULL ) - { - return 0; - } - - // Get user thread function pointer - threadfun = t->Function; - - // Call the user thread function - threadfun( arg ); - - // Remove thread from thread list - ENTER_THREAD_CRITICAL_SECTION - _glfwRemoveThread( t ); - LEAVE_THREAD_CRITICAL_SECTION - - // When the thread function returns, the thread will die... - return NULL; -} - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// _glfwPlatformCreateThread() - Create a new thread -//======================================================================== - -GLFWthread _glfwPlatformCreateThread( GLFWthreadfun fun, void *arg ) -{ - GLFWthread ID; - _GLFWthread *t; - int result; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Create a new thread information memory area - t = (_GLFWthread *) malloc( sizeof(_GLFWthread) ); - if( t == NULL ) - { - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - return -1; - } - - // Get a new unique thread id - ID = _glfwThrd.NextID ++; - - // Store thread information in the thread list - t->Function = fun; - t->ID = ID; - - // Create thread - result = pthread_create( - &t->PosixID, // Thread handle - NULL, // Default thread attributes - _glfwNewThread, // Thread function (a wrapper function) - (void *)arg // Argument to thread is user argument - ); - - // Did the thread creation fail? - if( result != 0 ) - { - free( (void *) t ); - LEAVE_THREAD_CRITICAL_SECTION - return -1; - } - - // Append thread to thread list - _glfwAppendThread( t ); - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Return the GLFW thread ID - return ID; -} - - -//======================================================================== -// _glfwPlatformDestroyThread() - Kill a thread. NOTE: THIS IS A VERY -// DANGEROUS OPERATION, AND SHOULD NOT BE USED EXCEPT IN EXTREME -// SITUATIONS! -//======================================================================== - -void _glfwPlatformDestroyThread( GLFWthread ID ) -{ - _GLFWthread *t; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Get thread information pointer - t = _glfwGetThreadPointer( ID ); - if( t == NULL ) - { - LEAVE_THREAD_CRITICAL_SECTION - return; - } - - // Simply murder the process, no mercy! - pthread_kill( t->PosixID, SIGKILL ); - - // Remove thread from thread list - _glfwRemoveThread( t ); - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION -} - - -//======================================================================== -// _glfwPlatformWaitThread() - Wait for a thread to die -//======================================================================== - -int _glfwPlatformWaitThread( GLFWthread ID, int waitmode ) -{ - pthread_t thread; - _GLFWthread *t; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Get thread information pointer - t = _glfwGetThreadPointer( ID ); - - // Is the thread already dead? - if( t == NULL ) - { - LEAVE_THREAD_CRITICAL_SECTION - return GL_TRUE; - } - - // If got this far, the thread is alive => polling returns FALSE - if( waitmode == GLFW_NOWAIT ) - { - LEAVE_THREAD_CRITICAL_SECTION - return GL_FALSE; - } - - // Get thread handle - thread = t->PosixID; - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Wait for thread to die - (void) pthread_join( thread, NULL ); - - return GL_TRUE; -} - - -//======================================================================== -// _glfwPlatformGetThreadID() - Return the thread ID for the current -// thread -//======================================================================== - -GLFWthread _glfwPlatformGetThreadID( void ) -{ - _GLFWthread *t; - GLFWthread ID = -1; - pthread_t posixID; - - // Get current thread ID - posixID = pthread_self(); - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Loop through entire list of threads to find the matching POSIX - // thread ID - for( t = &_glfwThrd.First; t != NULL; t = t->Next ) - { - if( t->PosixID == posixID ) - { - ID = t->ID; - break; - } - } - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Return the found GLFW thread identifier - return ID; -} - - -//======================================================================== -// _glfwPlatformCreateMutex() - Create a mutual exclusion object -//======================================================================== - -GLFWmutex _glfwPlatformCreateMutex( void ) -{ - pthread_mutex_t *mutex; - - // Allocate memory for mutex - mutex = (pthread_mutex_t *) malloc( sizeof( pthread_mutex_t ) ); - if( !mutex ) - { - return NULL; - } - - // Initialise a mutex object - (void) pthread_mutex_init( mutex, NULL ); - - // Cast to GLFWmutex and return - return (GLFWmutex) mutex; -} - - -//======================================================================== -// _glfwPlatformDestroyMutex() - Destroy a mutual exclusion object -//======================================================================== - -void _glfwPlatformDestroyMutex( GLFWmutex mutex ) -{ - // Destroy the mutex object - pthread_mutex_destroy( (pthread_mutex_t *) mutex ); - - // Free memory for mutex object - free( (void *) mutex ); -} - - -//======================================================================== -// _glfwPlatformLockMutex() - Request access to a mutex -//======================================================================== - -void _glfwPlatformLockMutex( GLFWmutex mutex ) -{ - // Wait for mutex to be released - (void) pthread_mutex_lock( (pthread_mutex_t *) mutex ); -} - - -//======================================================================== -// _glfwPlatformUnlockMutex() - Release a mutex -//======================================================================== - -void _glfwPlatformUnlockMutex( GLFWmutex mutex ) -{ - // Release mutex - pthread_mutex_unlock( (pthread_mutex_t *) mutex ); -} - - -//======================================================================== -// _glfwPlatformCreateCond() - Create a new condition variable object -//======================================================================== - -GLFWcond _glfwPlatformCreateCond( void ) -{ - pthread_cond_t *cond; - - // Allocate memory for condition variable - cond = (pthread_cond_t *) malloc( sizeof(pthread_cond_t) ); - if( !cond ) - { - return NULL; - } - - // Initialise condition variable - (void) pthread_cond_init( cond, NULL ); - - // Cast to GLFWcond and return - return (GLFWcond) cond; -} - - -//======================================================================== -// _glfwPlatformDestroyCond() - Destroy a condition variable object -//======================================================================== - -void _glfwPlatformDestroyCond( GLFWcond cond ) -{ - // Destroy the condition variable object - (void) pthread_cond_destroy( (pthread_cond_t *) cond ); - - // Free memory for condition variable object - free( (void *) cond ); -} - - -//======================================================================== -// _glfwPlatformWaitCond() - Wait for a condition to be raised -//======================================================================== - -void _glfwPlatformWaitCond( GLFWcond cond, GLFWmutex mutex, - double timeout ) -{ - struct timeval currenttime; - struct timespec wait; - long dt_sec, dt_usec; - - // Select infinite or timed wait - if( timeout >= GLFW_INFINITY ) - { - // Wait for condition (infinite wait) - (void) pthread_cond_wait( (pthread_cond_t *) cond, - (pthread_mutex_t *) mutex ); - } - else - { - // Set timeout time, relatvie to current time - gettimeofday( ¤ttime, NULL ); - dt_sec = (long) timeout; - dt_usec = (long) ((timeout - (double)dt_sec) * 1000000.0); - wait.tv_nsec = (currenttime.tv_usec + dt_usec) * 1000L; - if( wait.tv_nsec > 1000000000L ) - { - wait.tv_nsec -= 1000000000L; - dt_sec ++; - } - wait.tv_sec = currenttime.tv_sec + dt_sec; - - // Wait for condition (timed wait) - (void) pthread_cond_timedwait( (pthread_cond_t *) cond, - (pthread_mutex_t *) mutex, &wait ); - } -} - - -//======================================================================== -// _glfwPlatformSignalCond() - Signal a condition to one waiting thread -//======================================================================== - -void _glfwPlatformSignalCond( GLFWcond cond ) -{ - // Signal condition - (void) pthread_cond_signal( (pthread_cond_t *) cond ); -} - - -//======================================================================== -// _glfwPlatformBroadcastCond() - Broadcast a condition to all waiting -// threads -//======================================================================== - -void _glfwPlatformBroadcastCond( GLFWcond cond ) -{ - // Broadcast condition - (void) pthread_cond_broadcast( (pthread_cond_t *) cond ); -} - - -//======================================================================== -// _glfwPlatformGetNumberOfProcessors() - Return the number of processors -// in the system. -//======================================================================== - -int _glfwPlatformGetNumberOfProcessors( void ) -{ - int n; - - // Get number of processors online - _glfw_numprocessors( n ); - return n; -} - diff --git a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_time.m b/ogl_editor/src/External/glfw/lib/cocoa/cocoa_time.m deleted file mode 100644 index 5765b1b..0000000 --- a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_time.m +++ /dev/null @@ -1,135 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Cocoa/NSOpenGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2009-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -#include -#include - - -//======================================================================== -// Return raw time -//======================================================================== - -static uint64_t getRawTime( void ) -{ - return mach_absolute_time(); -} - - -//======================================================================== -// Initialise timer -//======================================================================== - -void _glfwInitTimer( void ) -{ - mach_timebase_info_data_t info; - mach_timebase_info( &info ); - - _glfwLibrary.timer.resolution = (double) info.numer / ( info.denom * 1.0e9 ); - _glfwLibrary.timer.base = getRawTime(); -} - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Return timer value in seconds -//======================================================================== - -double _glfwPlatformGetTime( void ) -{ - return (double) ( getRawTime() - _glfwLibrary.timer.base ) * - _glfwLibrary.timer.resolution; -} - - -//======================================================================== -// Set timer value in seconds -//======================================================================== - -void _glfwPlatformSetTime( double time ) -{ - _glfwLibrary.timer.base = getRawTime() - - (uint64_t) ( time / _glfwLibrary.timer.resolution ); -} - - -//======================================================================== -// Put a thread to sleep for a specified amount of time -//======================================================================== - -void _glfwPlatformSleep( double time ) -{ - if( time == 0.0 ) - { - sched_yield(); - return; - } - - struct timeval currenttime; - struct timespec wait; - pthread_mutex_t mutex; - pthread_cond_t cond; - long dt_sec, dt_usec; - - // Not all pthread implementations have a pthread_sleep() function. We - // do it the portable way, using a timed wait for a condition that we - // will never signal. NOTE: The unistd functions sleep/usleep suspends - // the entire PROCESS, not a signle thread, which is why we can not - // use them to implement glfwSleep. - - // Set timeout time, relatvie to current time - gettimeofday( ¤ttime, NULL ); - dt_sec = (long) time; - dt_usec = (long) ((time - (double)dt_sec) * 1000000.0); - wait.tv_nsec = (currenttime.tv_usec + dt_usec) * 1000L; - if( wait.tv_nsec > 1000000000L ) - { - wait.tv_nsec -= 1000000000L; - dt_sec ++; - } - wait.tv_sec = currenttime.tv_sec + dt_sec; - - // Initialize condition and mutex objects - pthread_mutex_init( &mutex, NULL ); - pthread_cond_init( &cond, NULL ); - - // Do a timed wait - pthread_mutex_lock( &mutex ); - pthread_cond_timedwait( &cond, &mutex, &wait ); - pthread_mutex_unlock( &mutex ); - - // Destroy condition and mutex objects - pthread_mutex_destroy( &mutex ); - pthread_cond_destroy( &cond ); -} - diff --git a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_window.m b/ogl_editor/src/External/glfw/lib/cocoa/cocoa_window.m deleted file mode 100644 index 3916737..0000000 --- a/ogl_editor/src/External/glfw/lib/cocoa/cocoa_window.m +++ /dev/null @@ -1,1139 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Cocoa/NSOpenGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2009-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -#include - -// Needed for _NSGetProgname -#include - -//======================================================================== -// GLFW application class -//======================================================================== - -@interface GLFWApplication : NSApplication -@end - -@implementation GLFWApplication - -// From http://cocoadev.com/index.pl?GameKeyboardHandlingAlmost -// This works around an AppKit bug, where key up events while holding -// down the command key don't get sent to the key window. -- (void)sendEvent:(NSEvent *)event -{ - if( [event type] == NSKeyUp && ( [event modifierFlags] & NSCommandKeyMask ) ) - { - [[self keyWindow] sendEvent:event]; - } - else - { - [super sendEvent:event]; - } -} - -@end - -// Prior to Snow Leopard, we need to use this oddly-named semi-private API -// to get the application menu working properly. Need to be careful in -// case it goes away in a future OS update. -@interface NSApplication (NSAppleMenu) -- (void)setAppleMenu:(NSMenu *)m; -@end - -//======================================================================== -// Try to figure out what the calling application is called -//======================================================================== - -static NSString *findAppName( void ) -{ - // Keys to search for as potential application names - NSString *keys[] = - { - @"CFBundleDisplayName", - @"CFBundleName", - @"CFBundleExecutable", - }; - - NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; - - unsigned int i; - for( i = 0; i < sizeof(keys) / sizeof(keys[0]); i++ ) - { - id name = [infoDictionary objectForKey:keys[i]]; - if( name && - [name isKindOfClass:[NSString class]] && - ![@"" isEqualToString:name] ) - { - return name; - } - } - - // Could do this only if we discover we're unbundled, but it should - // do no harm... - ProcessSerialNumber psn = { 0, kCurrentProcess }; - TransformProcessType( &psn, kProcessTransformToForegroundApplication ); - - // Having the app in front of the terminal window is also generally - // handy. There is an NSApplication API to do this, but... - SetFrontProcess( &psn ); - - char **progname = _NSGetProgname(); - if( progname && *progname ) - { - // TODO: UTF8? - return [NSString stringWithUTF8String:*progname]; - } - - // Really shouldn't get here - return @"GLFW Application"; -} - - -//======================================================================== -// Set up the menu bar (manually) -// This is nasty, nasty stuff -- calls to undocumented semi-private APIs that -// could go away at any moment, lots of stuff that really should be -// localize(d|able), etc. Loading a nib would save us this horror, but that -// doesn't seem like a good thing to require of GLFW's clients. -//======================================================================== - -static void setUpMenuBar( void ) -{ - NSString *appName = findAppName(); - - NSMenu *bar = [[NSMenu alloc] init]; - [NSApp setMainMenu:bar]; - - NSMenuItem *appMenuItem = - [bar addItemWithTitle:@"" action:NULL keyEquivalent:@""]; - NSMenu *appMenu = [[NSMenu alloc] init]; - [appMenuItem setSubmenu:appMenu]; - - [appMenu addItemWithTitle:[NSString stringWithFormat:@"About %@", appName] - action:@selector(orderFrontStandardAboutPanel:) - keyEquivalent:@""]; - [appMenu addItem:[NSMenuItem separatorItem]]; - NSMenu *servicesMenu = [[NSMenu alloc] init]; - [NSApp setServicesMenu:servicesMenu]; - [[appMenu addItemWithTitle:@"Services" - action:NULL - keyEquivalent:@""] setSubmenu:servicesMenu]; - [appMenu addItem:[NSMenuItem separatorItem]]; - [appMenu addItemWithTitle:[NSString stringWithFormat:@"Hide %@", appName] - action:@selector(hide:) - keyEquivalent:@"h"]; - [[appMenu addItemWithTitle:@"Hide Others" - action:@selector(hideOtherApplications:) - keyEquivalent:@"h"] - setKeyEquivalentModifierMask:NSAlternateKeyMask | NSCommandKeyMask]; - [appMenu addItemWithTitle:@"Show All" - action:@selector(unhideAllApplications:) - keyEquivalent:@""]; - [appMenu addItem:[NSMenuItem separatorItem]]; - [appMenu addItemWithTitle:[NSString stringWithFormat:@"Quit %@", appName] - action:@selector(terminate:) - keyEquivalent:@"q"]; - - NSMenuItem *windowMenuItem = - [bar addItemWithTitle:@"" action:NULL keyEquivalent:@""]; - NSMenu *windowMenu = [[NSMenu alloc] initWithTitle:@"Window"]; - [NSApp setWindowsMenu:windowMenu]; - [windowMenuItem setSubmenu:windowMenu]; - - [windowMenu addItemWithTitle:@"Miniaturize" - action:@selector(performMiniaturize:) - keyEquivalent:@"m"]; - [windowMenu addItemWithTitle:@"Zoom" - action:@selector(performZoom:) - keyEquivalent:@""]; - [windowMenu addItem:[NSMenuItem separatorItem]]; - [windowMenu addItemWithTitle:@"Bring All to Front" - action:@selector(arrangeInFront:) - keyEquivalent:@""]; - - // At least guard the call to private API to avoid an exception if it - // goes away. Hopefully that means the worst we'll break in future is to - // look ugly... - if( [NSApp respondsToSelector:@selector(setAppleMenu:)] ) - { - [NSApp setAppleMenu:appMenu]; - } -} - - -//======================================================================== -// Initialize the Cocoa Application Kit -//======================================================================== - -static GLboolean initializeAppKit( void ) -{ - if( NSApp ) - { - return GL_TRUE; - } - - // Implicitly create shared NSApplication instance - [GLFWApplication sharedApplication]; - - // Setting up the menu bar must go between sharedApplication - // above and finishLaunching below, in order to properly emulate the - // behavior of NSApplicationMain - setUpMenuBar(); - - [NSApp finishLaunching]; - - return GL_TRUE; -} - - -//======================================================================== -// Delegate for window related notifications -// (but also used as an application delegate) -//======================================================================== - -@interface GLFWWindowDelegate : NSObject -@end - -@implementation GLFWWindowDelegate - -- (BOOL)windowShouldClose:(id)window -{ - if( _glfwWin.windowCloseCallback ) - { - if( !_glfwWin.windowCloseCallback() ) - { - return NO; - } - } - - // This is horribly ugly, but it works - glfwCloseWindow(); - return NO; -} - -- (void)windowDidResize:(NSNotification *)notification -{ - [_glfwWin.context update]; - - NSRect contentRect = - [_glfwWin.window contentRectForFrameRect:[_glfwWin.window frame]]; - _glfwWin.width = contentRect.size.width; - _glfwWin.height = contentRect.size.height; - - if( _glfwWin.windowSizeCallback ) - { - _glfwWin.windowSizeCallback( _glfwWin.width, _glfwWin.height ); - } -} - -- (void)windowDidMove:(NSNotification *)notification -{ - NSPoint point = [_glfwWin.window mouseLocationOutsideOfEventStream]; - _glfwInput.MousePosX = lround(floor(point.x)); - _glfwInput.MousePosY = _glfwWin.height - lround(ceil(point.y)); - - if( _glfwWin.mousePosCallback ) - { - _glfwWin.mousePosCallback( _glfwInput.MousePosX, _glfwInput.MousePosY ); - } -} - -- (void)windowDidMiniaturize:(NSNotification *)notification -{ - _glfwWin.iconified = GL_TRUE; -} - -- (void)windowDidDeminiaturize:(NSNotification *)notification -{ - _glfwWin.iconified = GL_FALSE; -} - -- (void)windowDidBecomeKey:(NSNotification *)notification -{ - _glfwWin.active = GL_TRUE; -} - -- (void)windowDidResignKey:(NSNotification *)notification -{ - _glfwWin.active = GL_FALSE; - _glfwInputDeactivation(); -} - -- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender -{ - if( _glfwWin.windowCloseCallback ) - { - if( !_glfwWin.windowCloseCallback() ) - { - return NSTerminateCancel; - } - } - - // This is horribly ugly, but it works - glfwCloseWindow(); - return NSTerminateCancel; -} - -@end - -//======================================================================== -// Converts a Mac OS X keycode to a GLFW keycode -//======================================================================== - -static int convertMacKeyCode( unsigned int macKeyCode ) -{ - // TODO: Need to find mappings for F13-F15, volume down/up/mute, and eject. - static const unsigned int table[128] = - { - /* 00 */ 'A', - /* 01 */ 'S', - /* 02 */ 'D', - /* 03 */ 'F', - /* 04 */ 'H', - /* 05 */ 'G', - /* 06 */ 'Z', - /* 07 */ 'X', - /* 08 */ 'C', - /* 09 */ 'V', - /* 0a */ -1, - /* 0b */ 'B', - /* 0c */ 'Q', - /* 0d */ 'W', - /* 0e */ 'E', - /* 0f */ 'R', - /* 10 */ 'Y', - /* 11 */ 'T', - /* 12 */ '1', - /* 13 */ '2', - /* 14 */ '3', - /* 15 */ '4', - /* 16 */ '6', - /* 17 */ '5', - /* 18 */ '=', - /* 19 */ '9', - /* 1a */ '7', - /* 1b */ '-', - /* 1c */ '8', - /* 1d */ '0', - /* 1e */ ']', - /* 1f */ 'O', - /* 20 */ 'U', - /* 21 */ '[', - /* 22 */ 'I', - /* 23 */ 'P', - /* 24 */ GLFW_KEY_ENTER, - /* 25 */ 'L', - /* 26 */ 'J', - /* 27 */ '\'', - /* 28 */ 'K', - /* 29 */ ';', - /* 2a */ '\\', - /* 2b */ ',', - /* 2c */ '/', - /* 2d */ 'N', - /* 2e */ 'M', - /* 2f */ '.', - /* 30 */ GLFW_KEY_TAB, - /* 31 */ GLFW_KEY_SPACE, - /* 32 */ '`', - /* 33 */ GLFW_KEY_BACKSPACE, - /* 34 */ -1, - /* 35 */ GLFW_KEY_ESC, - /* 36 */ GLFW_KEY_RSUPER, - /* 37 */ GLFW_KEY_LSUPER, - /* 38 */ GLFW_KEY_LSHIFT, - /* 39 */ GLFW_KEY_CAPS_LOCK, - /* 3a */ GLFW_KEY_LALT, - /* 3b */ GLFW_KEY_LCTRL, - /* 3c */ GLFW_KEY_RSHIFT, - /* 3d */ GLFW_KEY_RALT, - /* 3e */ GLFW_KEY_RCTRL, - /* 3f */ -1, /*Function*/ - /* 40 */ GLFW_KEY_F17, - /* 41 */ GLFW_KEY_KP_DECIMAL, - /* 42 */ -1, - /* 43 */ GLFW_KEY_KP_MULTIPLY, - /* 44 */ -1, - /* 45 */ GLFW_KEY_KP_ADD, - /* 46 */ -1, - /* 47 */ -1, /*KeypadClear*/ - /* 48 */ -1, /*VolumeUp*/ - /* 49 */ -1, /*VolumeDown*/ - /* 4a */ -1, /*Mute*/ - /* 4b */ GLFW_KEY_KP_DIVIDE, - /* 4c */ GLFW_KEY_KP_ENTER, - /* 4d */ -1, - /* 4e */ GLFW_KEY_KP_SUBTRACT, - /* 4f */ GLFW_KEY_F18, - /* 50 */ GLFW_KEY_F19, - /* 51 */ GLFW_KEY_KP_EQUAL, - /* 52 */ GLFW_KEY_KP_0, - /* 53 */ GLFW_KEY_KP_1, - /* 54 */ GLFW_KEY_KP_2, - /* 55 */ GLFW_KEY_KP_3, - /* 56 */ GLFW_KEY_KP_4, - /* 57 */ GLFW_KEY_KP_5, - /* 58 */ GLFW_KEY_KP_6, - /* 59 */ GLFW_KEY_KP_7, - /* 5a */ GLFW_KEY_F20, - /* 5b */ GLFW_KEY_KP_8, - /* 5c */ GLFW_KEY_KP_9, - /* 5d */ -1, - /* 5e */ -1, - /* 5f */ -1, - /* 60 */ GLFW_KEY_F5, - /* 61 */ GLFW_KEY_F6, - /* 62 */ GLFW_KEY_F7, - /* 63 */ GLFW_KEY_F3, - /* 64 */ GLFW_KEY_F8, - /* 65 */ GLFW_KEY_F9, - /* 66 */ -1, - /* 67 */ GLFW_KEY_F11, - /* 68 */ -1, - /* 69 */ GLFW_KEY_F13, - /* 6a */ GLFW_KEY_F16, - /* 6b */ GLFW_KEY_F14, - /* 6c */ -1, - /* 6d */ GLFW_KEY_F10, - /* 6e */ -1, - /* 6f */ GLFW_KEY_F12, - /* 70 */ -1, - /* 71 */ GLFW_KEY_F15, - /* 72 */ GLFW_KEY_INSERT, /*Help*/ - /* 73 */ GLFW_KEY_HOME, - /* 74 */ GLFW_KEY_PAGEUP, - /* 75 */ GLFW_KEY_DEL, - /* 76 */ GLFW_KEY_F4, - /* 77 */ GLFW_KEY_END, - /* 78 */ GLFW_KEY_F2, - /* 79 */ GLFW_KEY_PAGEDOWN, - /* 7a */ GLFW_KEY_F1, - /* 7b */ GLFW_KEY_LEFT, - /* 7c */ GLFW_KEY_RIGHT, - /* 7d */ GLFW_KEY_DOWN, - /* 7e */ GLFW_KEY_UP, - /* 7f */ -1, - }; - - if( macKeyCode >= 128 ) - { - return -1; - } - - // This treats keycodes as *positional*; that is, we'll return 'a' - // for the key left of 's', even on an AZERTY keyboard. The charInput - // function should still get 'q' though. - return table[macKeyCode]; -} - - -//======================================================================== -// Content view class for the GLFW window -//======================================================================== - -@interface GLFWContentView : NSView -@end - -@implementation GLFWContentView - -- (BOOL)isOpaque -{ - return YES; -} - -- (BOOL)canBecomeKeyView -{ - return YES; -} - -- (BOOL)acceptsFirstResponder -{ - return YES; -} - -- (void)mouseDown:(NSEvent *)event -{ - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_LEFT, GLFW_PRESS ); -} - -- (void)mouseDragged:(NSEvent *)event -{ - [self mouseMoved:event]; -} - -- (void)mouseUp:(NSEvent *)event -{ - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_LEFT, GLFW_RELEASE ); -} - -- (void)mouseMoved:(NSEvent *)event -{ - if( _glfwWin.mouseLock ) - { - _glfwInput.MousePosX += [event deltaX]; - _glfwInput.MousePosY += [event deltaY]; - } - else - { - NSPoint p = [event locationInWindow]; - - // Cocoa coordinate system has origin at lower left - _glfwInput.MousePosX = p.x; - _glfwInput.MousePosY = _glfwWin.height - p.y; - } - - if( _glfwWin.mousePosCallback ) - { - _glfwWin.mousePosCallback( _glfwInput.MousePosX, _glfwInput.MousePosY ); - } -} - -- (void)rightMouseDown:(NSEvent *)event -{ - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_RIGHT, GLFW_PRESS ); -} - -- (void)rightMouseDragged:(NSEvent *)event -{ - [self mouseMoved:event]; -} - -- (void)rightMouseUp:(NSEvent *)event -{ - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_RIGHT, GLFW_RELEASE ); -} - -- (void)otherMouseDown:(NSEvent *)event -{ - _glfwInputMouseClick( [event buttonNumber], GLFW_PRESS ); -} - -- (void)otherMouseDragged:(NSEvent *)event -{ - [self mouseMoved:event]; -} - -- (void)otherMouseUp:(NSEvent *)event -{ - _glfwInputMouseClick( [event buttonNumber], GLFW_RELEASE ); -} - -- (void)keyDown:(NSEvent *)event -{ - NSUInteger length; - NSString* characters; - int i, code = convertMacKeyCode( [event keyCode] ); - - if( code != -1 ) - { - _glfwInputKey( code, GLFW_PRESS ); - - if( [event modifierFlags] & NSCommandKeyMask ) - { - if( !_glfwWin.sysKeysDisabled ) - { - [super keyDown:event]; - } - } - else - { - characters = [event characters]; - length = [characters length]; - - for( i = 0; i < length; i++ ) - { - _glfwInputChar( [characters characterAtIndex:i], GLFW_PRESS ); - } - } - } -} - -- (void)flagsChanged:(NSEvent *)event -{ - unsigned int newModifierFlags = [event modifierFlags] | NSDeviceIndependentModifierFlagsMask; - int mode; - - if( newModifierFlags > _glfwWin.modifierFlags ) - { - mode = GLFW_PRESS; - } - else - { - mode = GLFW_RELEASE; - } - - _glfwWin.modifierFlags = newModifierFlags; - _glfwInputKey( convertMacKeyCode( [event keyCode] ), mode ); -} - -- (void)keyUp:(NSEvent *)event -{ - NSUInteger length; - NSString* characters; - int i, code = convertMacKeyCode( [event keyCode] ); - - if( code != -1 ) - { - _glfwInputKey( code, GLFW_RELEASE ); - - characters = [event characters]; - length = [characters length]; - - for( i = 0; i < length; i++ ) - { - _glfwInputChar( [characters characterAtIndex:i], GLFW_RELEASE ); - } - } -} - -- (void)scrollWheel:(NSEvent *)event -{ - _glfwInput.WheelPosFloating += [event deltaY]; - _glfwInput.WheelPos = lrint( _glfwInput.WheelPosFloating ); - - if( _glfwWin.mouseWheelCallback ) - { - _glfwWin.mouseWheelCallback( _glfwInput.WheelPos ); - } -} - -@end - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Here is where the window is created, and the OpenGL rendering context is -// created -//======================================================================== - -int _glfwPlatformOpenWindow( int width, int height, - const _GLFWwndconfig *wndconfig, - const _GLFWfbconfig *fbconfig ) -{ - int colorBits; - - _glfwWin.windowNoResize = wndconfig->windowNoResize; - - if( !initializeAppKit() ) - { - return GL_FALSE; - } - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 - // Fail if any OpenGL version above 2.1 other than 3.2 was requested - if( wndconfig->glMajor > 3 || - ( wndconfig->glMajor == 3 && wndconfig->glMinor != 2 ) ) - { - return GL_FALSE; - } - - if( wndconfig->glProfile ) - { - // Fail if a profile other than core was explicitly selected - if( wndconfig->glProfile != GLFW_OPENGL_CORE_PROFILE ) - { - return GL_FALSE; - } - } -#else - // Fail if OpenGL 3.0 or above was requested - if( wndconfig->glMajor > 2 ) - { - return GL_FALSE; - } -#endif /*MAC_OS_X_VERSION_MAX_ALLOWED*/ - - _glfwWin.delegate = [[GLFWWindowDelegate alloc] init]; - if( _glfwWin.delegate == nil ) - { - return GL_FALSE; - } - - [NSApp setDelegate:_glfwWin.delegate]; - - // Mac OS X needs non-zero color size, so set resonable values - colorBits = fbconfig->redBits + fbconfig->greenBits + fbconfig->blueBits; - if( colorBits == 0 ) - { - colorBits = 24; - } - else if( colorBits < 15 ) - { - colorBits = 15; - } - - // Ignored hints: - // OpenGLDebug - // pending it meaning anything on Mac OS X - - // Don't use accumulation buffer support; it's not accelerated - // Aux buffers probably aren't accelerated either - - CFDictionaryRef fullscreenMode = NULL; - if( wndconfig->mode == GLFW_FULLSCREEN ) - { - fullscreenMode = - // I think it's safe to pass 0 to the refresh rate for this function - // rather than conditionalizing the code to call the version which - // doesn't specify refresh... - CGDisplayBestModeForParametersAndRefreshRateWithProperty( - CGMainDisplayID(), - colorBits + fbconfig->alphaBits, - width, - height, - wndconfig->refreshRate, - // Controversial, see macosx_fullscreen.m for discussion - kCGDisplayModeIsSafeForHardware, - NULL); - - width = [[(id)fullscreenMode objectForKey:(id)kCGDisplayWidth] intValue]; - height = [[(id)fullscreenMode objectForKey:(id)kCGDisplayHeight] intValue]; - } - - unsigned int styleMask = 0; - if( wndconfig->mode == GLFW_WINDOW ) - { - styleMask = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask; - - if( !wndconfig->windowNoResize ) - { - styleMask |= NSResizableWindowMask; - } - } - else - { - styleMask = NSBorderlessWindowMask; - } - - _glfwWin.window = [[NSWindow alloc] - initWithContentRect:NSMakeRect( 0, 0, width, height ) - styleMask:styleMask - backing:NSBackingStoreBuffered - defer:NO]; - [_glfwWin.window setContentView:[[GLFWContentView alloc] init]]; - [_glfwWin.window setDelegate:_glfwWin.delegate]; - [_glfwWin.window setAcceptsMouseMovedEvents:YES]; - [_glfwWin.window center]; - - if( [_glfwWin.window respondsToSelector:@selector(setRestorable:)] ) - { - [_glfwWin.window setRestorable:NO]; - } - - if( wndconfig->mode == GLFW_FULLSCREEN ) - { - _glfwLibrary.originalMode = (NSDictionary*) - CGDisplayCurrentMode( CGMainDisplayID() ); - - CGCaptureAllDisplays(); - CGDisplaySwitchToMode( CGMainDisplayID(), fullscreenMode ); - } - - unsigned int attribute_count = 0; -#define ADD_ATTR(x) attributes[attribute_count++] = x -#define ADD_ATTR2(x, y) (void)({ ADD_ATTR(x); ADD_ATTR(y); }) -#define MAX_ATTRS 64 // urrgh - NSOpenGLPixelFormatAttribute attributes[MAX_ATTRS]; - - ADD_ATTR( NSOpenGLPFADoubleBuffer ); - - if( wndconfig->mode == GLFW_FULLSCREEN ) - { -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1070 - ADD_ATTR( NSOpenGLPFAFullScreen ); -#endif /*MAC_OS_X_VERSION_MAX_ALLOWED*/ - - ADD_ATTR( NSOpenGLPFANoRecovery ); - ADD_ATTR2( NSOpenGLPFAScreenMask, - CGDisplayIDToOpenGLDisplayMask( CGMainDisplayID() ) ); - } - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 - if( wndconfig->glMajor > 2 ) - { - ADD_ATTR2( NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core ); - } -#endif /*MAC_OS_X_VERSION_MAX_ALLOWED*/ - - ADD_ATTR2( NSOpenGLPFAColorSize, colorBits ); - - if( fbconfig->alphaBits > 0) - { - ADD_ATTR2( NSOpenGLPFAAlphaSize, fbconfig->alphaBits ); - } - - if( fbconfig->depthBits > 0) - { - ADD_ATTR2( NSOpenGLPFADepthSize, fbconfig->depthBits ); - } - - if( fbconfig->stencilBits > 0) - { - ADD_ATTR2( NSOpenGLPFAStencilSize, fbconfig->stencilBits ); - } - - int accumBits = fbconfig->accumRedBits + fbconfig->accumGreenBits + - fbconfig->accumBlueBits + fbconfig->accumAlphaBits; - - if( accumBits > 0) - { - ADD_ATTR2( NSOpenGLPFAAccumSize, accumBits ); - } - - if( fbconfig->auxBuffers > 0) - { - ADD_ATTR2( NSOpenGLPFAAuxBuffers, fbconfig->auxBuffers ); - } - - if( fbconfig->stereo) - { - ADD_ATTR( NSOpenGLPFAStereo ); - } - - if( fbconfig->samples > 0) - { - ADD_ATTR2( NSOpenGLPFASampleBuffers, 1 ); - ADD_ATTR2( NSOpenGLPFASamples, fbconfig->samples ); - } - - ADD_ATTR( 0 ); - - _glfwWin.pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes]; - if( _glfwWin.pixelFormat == nil ) - { - return GL_FALSE; - } - - _glfwWin.context = [[NSOpenGLContext alloc] initWithFormat:_glfwWin.pixelFormat - shareContext:nil]; - if( _glfwWin.context == nil ) - { - return GL_FALSE; - } - - [_glfwWin.window makeKeyAndOrderFront:nil]; - [_glfwWin.context setView:[_glfwWin.window contentView]]; - - if( wndconfig->mode == GLFW_FULLSCREEN ) - { - // TODO: Make this work on pre-Leopard systems - [[_glfwWin.window contentView] enterFullScreenMode:[NSScreen mainScreen] - withOptions:nil]; - } - - [_glfwWin.context makeCurrentContext]; - - NSPoint point = [_glfwWin.window mouseLocationOutsideOfEventStream]; - _glfwInput.MousePosX = point.x; - _glfwInput.MousePosY = _glfwWin.height - point.y; - - return GL_TRUE; -} - - -//======================================================================== -// Properly kill the window / video display -//======================================================================== - -void _glfwPlatformCloseWindow( void ) -{ - [_glfwWin.window orderOut:nil]; - - if( _glfwWin.fullscreen ) - { - [[_glfwWin.window contentView] exitFullScreenModeWithOptions:nil]; - CGDisplaySwitchToMode( CGMainDisplayID(), - (CFDictionaryRef)_glfwLibrary.originalMode ); - CGReleaseAllDisplays(); - } - - [_glfwWin.pixelFormat release]; - _glfwWin.pixelFormat = nil; - - [NSOpenGLContext clearCurrentContext]; - [_glfwWin.context release]; - _glfwWin.context = nil; - - [_glfwWin.window setDelegate:nil]; - [NSApp setDelegate:nil]; - [_glfwWin.delegate release]; - _glfwWin.delegate = nil; - - [_glfwWin.window close]; - _glfwWin.window = nil; - - // TODO: Probably more cleanup -} - - -//======================================================================== -// Set the window title -//======================================================================== - -void _glfwPlatformSetWindowTitle( const char *title ) -{ - [_glfwWin.window setTitle:[NSString stringWithCString:title - encoding:NSISOLatin1StringEncoding]]; -} - - -//======================================================================== -// Set the window size -//======================================================================== - -void _glfwPlatformSetWindowSize( int width, int height ) -{ - [_glfwWin.window setContentSize:NSMakeSize( width, height )]; -} - - -//======================================================================== -// Set the window position -//======================================================================== - -void _glfwPlatformSetWindowPos( int x, int y ) -{ - NSRect contentRect = [_glfwWin.window contentRectForFrameRect:[_glfwWin.window frame]]; - - // We assume here that the client code wants to position the window within the - // screen the window currently occupies - NSRect screenRect = [[_glfwWin.window screen] visibleFrame]; - contentRect.origin = NSMakePoint(screenRect.origin.x + x, - screenRect.origin.y + screenRect.size.height - - y - contentRect.size.height); - - [_glfwWin.window setFrame:[_glfwWin.window frameRectForContentRect:contentRect] - display:YES]; -} - - -//======================================================================== -// Iconify the window -//======================================================================== - -void _glfwPlatformIconifyWindow( void ) -{ - [_glfwWin.window miniaturize:nil]; -} - - -//======================================================================== -// Restore (un-iconify) the window -//======================================================================== - -void _glfwPlatformRestoreWindow( void ) -{ - [_glfwWin.window deminiaturize:nil]; -} - - -//======================================================================== -// Swap buffers -//======================================================================== - -void _glfwPlatformSwapBuffers( void ) -{ - // ARP appears to be unnecessary, but this is future-proof - [_glfwWin.context flushBuffer]; -} - - -//======================================================================== -// Set double buffering swap interval -//======================================================================== - -void _glfwPlatformSwapInterval( int interval ) -{ - GLint sync = interval; - [_glfwWin.context setValues:&sync forParameter:NSOpenGLCPSwapInterval]; -} - - -//======================================================================== -// Write back window parameters into GLFW window structure -//======================================================================== - -void _glfwPlatformRefreshWindowParams( void ) -{ - GLint value; - - // Since GLFW 2.x doesn't understand screens, we use virtual screen zero - - [_glfwWin.pixelFormat getValues:&value - forAttribute:NSOpenGLPFAAccelerated - forVirtualScreen:0]; - _glfwWin.accelerated = value; - - [_glfwWin.pixelFormat getValues:&value - forAttribute:NSOpenGLPFAAlphaSize - forVirtualScreen:0]; - _glfwWin.alphaBits = value; - - // It seems that the color size includes the size of the alpha channel - [_glfwWin.pixelFormat getValues:&value - forAttribute:NSOpenGLPFAColorSize - forVirtualScreen:0]; - value -= _glfwWin.alphaBits; - _glfwWin.redBits = value / 3; - _glfwWin.greenBits = value / 3; - _glfwWin.blueBits = value / 3; - - [_glfwWin.pixelFormat getValues:&value - forAttribute:NSOpenGLPFADepthSize - forVirtualScreen:0]; - _glfwWin.depthBits = value; - - [_glfwWin.pixelFormat getValues:&value - forAttribute:NSOpenGLPFAStencilSize - forVirtualScreen:0]; - _glfwWin.stencilBits = value; - - [_glfwWin.pixelFormat getValues:&value - forAttribute:NSOpenGLPFAAccumSize - forVirtualScreen:0]; - _glfwWin.accumRedBits = value / 3; - _glfwWin.accumGreenBits = value / 3; - _glfwWin.accumBlueBits = value / 3; - - // TODO: Figure out what to set this value to - _glfwWin.accumAlphaBits = 0; - - [_glfwWin.pixelFormat getValues:&value - forAttribute:NSOpenGLPFAAuxBuffers - forVirtualScreen:0]; - _glfwWin.auxBuffers = value; - - [_glfwWin.pixelFormat getValues:&value - forAttribute:NSOpenGLPFAStereo - forVirtualScreen:0]; - _glfwWin.stereo = value; - - [_glfwWin.pixelFormat getValues:&value - forAttribute:NSOpenGLPFASamples - forVirtualScreen:0]; - _glfwWin.samples = value; -} - - -//======================================================================== -// Poll for new window and input events -//======================================================================== - -void _glfwPlatformPollEvents( void ) -{ - NSEvent *event; - - do - { - event = [NSApp nextEventMatchingMask:NSAnyEventMask - untilDate:[NSDate distantPast] - inMode:NSDefaultRunLoopMode - dequeue:YES]; - - if( event ) - { - [NSApp sendEvent:event]; - } - } - while( event ); - - [_glfwLibrary.autoreleasePool drain]; - _glfwLibrary.autoreleasePool = [[NSAutoreleasePool alloc] init]; -} - - -//======================================================================== -// Wait for new window and input events -//======================================================================== - -void _glfwPlatformWaitEvents( void ) -{ - // I wanted to pass NO to dequeue:, and rely on PollEvents to - // dequeue and send. For reasons not at all clear to me, passing - // NO to dequeue: causes this method never to return. - NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask - untilDate:[NSDate distantFuture] - inMode:NSDefaultRunLoopMode - dequeue:YES]; - [NSApp sendEvent:event]; - - _glfwPlatformPollEvents(); -} - - -//======================================================================== -// Hide mouse cursor (lock it) -//======================================================================== - -void _glfwPlatformHideMouseCursor( void ) -{ - [NSCursor hide]; - CGAssociateMouseAndMouseCursorPosition( false ); -} - - -//======================================================================== -// Show mouse cursor (unlock it) -//======================================================================== - -void _glfwPlatformShowMouseCursor( void ) -{ - [NSCursor unhide]; - CGAssociateMouseAndMouseCursorPosition( true ); -} - - -//======================================================================== -// Set physical mouse cursor position -//======================================================================== - -void _glfwPlatformSetMouseCursorPos( int x, int y ) -{ - if( _glfwWin.fullscreen ) - { - CGPoint globalPoint = CGPointMake( x, y ); - CGDisplayMoveCursorToPoint( CGMainDisplayID(), globalPoint ); - } - else - { - NSPoint localPoint = NSMakePoint( x, _glfwWin.height - y - 1 ); - NSPoint globalPoint = [_glfwWin.window convertBaseToScreen:localPoint]; - CGPoint mainScreenOrigin = CGDisplayBounds( CGMainDisplayID() ).origin; - double mainScreenHeight = CGDisplayBounds( CGMainDisplayID() ).size.height; - CGPoint targetPoint = CGPointMake( globalPoint.x - mainScreenOrigin.x, - mainScreenHeight - globalPoint.y - - mainScreenOrigin.y ); - CGDisplayMoveCursorToPoint( CGMainDisplayID(), targetPoint ); - } -} - diff --git a/ogl_editor/src/External/glfw/lib/cocoa/libglfw.pc.in b/ogl_editor/src/External/glfw/lib/cocoa/libglfw.pc.in deleted file mode 100644 index bec3b20..0000000 --- a/ogl_editor/src/External/glfw/lib/cocoa/libglfw.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@PREFIX@ -exec_prefix=@PREFIX@ -libdir=@PREFIX@/lib -includedir=@PREFIX@/include - -Name: GLFW -Description: A portable framework for OpenGL development -Version: 2.7 -URL: http://www.glfw.org/ -Libs: -L${libdir} -lglfw -framework Cocoa -framework OpenGL -framework IOKit -Cflags: -I${includedir} diff --git a/ogl_editor/src/External/glfw/lib/cocoa/platform.h b/ogl_editor/src/External/glfw/lib/cocoa/platform.h deleted file mode 100644 index dadb0f2..0000000 --- a/ogl_editor/src/External/glfw/lib/cocoa/platform.h +++ /dev/null @@ -1,268 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Cocoa/NSOpenGL -// API Version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2009-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#ifndef _platform_h_ -#define _platform_h_ - - -// This is the Mac OS X version of GLFW -#define _GLFW_MAC_OS_X - -#if defined(__OBJC__) -#import -#else -#include -typedef void *id; -#endif - -#include - -#include "../../include/GL/glfw.h" - - -#ifndef GL_VERSION_3_0 - -typedef const GLubyte * (APIENTRY *PFNGLGETSTRINGIPROC) (GLenum, GLuint); - -#endif /*GL_VERSION_3_0*/ - - -//======================================================================== -// GLFW platform specific types -//======================================================================== - -//------------------------------------------------------------------------ -// Pointer length integer -//------------------------------------------------------------------------ -typedef intptr_t GLFWintptr; - -//------------------------------------------------------------------------ -// Window structure -//------------------------------------------------------------------------ -typedef struct _GLFWwin_struct _GLFWwin; - -struct _GLFWwin_struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // User callback functions - GLFWwindowsizefun windowSizeCallback; - GLFWwindowclosefun windowCloseCallback; - GLFWwindowrefreshfun windowRefreshCallback; - GLFWmousebuttonfun mouseButtonCallback; - GLFWmouseposfun mousePosCallback; - GLFWmousewheelfun mouseWheelCallback; - GLFWkeyfun keyCallback; - GLFWcharfun charCallback; - - // User selected window settings - int fullscreen; // Fullscreen flag - int mouseLock; // Mouse-lock flag - int autoPollEvents; // Auto polling flag - int sysKeysDisabled; // System keys disabled flag - int windowNoResize; // Resize- and maximize gadgets disabled flag - int refreshRate; // Vertical monitor refresh rate - - // Window status & parameters - int opened; // Flag telling if window is opened or not - int active; // Application active flag - int iconified; // Window iconified flag - int width, height; // Window width and heigth - int accelerated; // GL_TRUE if window is HW accelerated - - // Framebuffer attributes - int redBits; - int greenBits; - int blueBits; - int alphaBits; - int depthBits; - int stencilBits; - int accumRedBits; - int accumGreenBits; - int accumBlueBits; - int accumAlphaBits; - int auxBuffers; - int stereo; - int samples; - - // OpenGL extensions and context attributes - int has_GL_SGIS_generate_mipmap; - int has_GL_ARB_texture_non_power_of_two; - int glMajor, glMinor, glRevision; - int glForward, glDebug, glProfile; - - PFNGLGETSTRINGIPROC GetStringi; - -// ========= PLATFORM SPECIFIC PART ====================================== - - id window; - id pixelFormat; - id context; - id delegate; - unsigned int modifierFlags; -}; - -GLFWGLOBAL _GLFWwin _glfwWin; - - -//------------------------------------------------------------------------ -// Library global data -//------------------------------------------------------------------------ -GLFWGLOBAL struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // Window opening hints - _GLFWhints hints; - - // Initial desktop mode - GLFWvidmode desktopMode; - -// ========= PLATFORM SPECIFIC PART ====================================== - - // Timer data - struct { - double base; - double resolution; - } timer; - - // dlopen handle for dynamically-loading extension function pointers - void *OpenGLFramework; - - id originalMode; - - id autoreleasePool; - - CGEventSourceRef eventSource; - -} _glfwLibrary; - - -//------------------------------------------------------------------------ -// User input status (some of this should go in _GLFWwin) -//------------------------------------------------------------------------ -GLFWGLOBAL struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // Mouse status - int MousePosX, MousePosY; - int WheelPos; - char MouseButton[ GLFW_MOUSE_BUTTON_LAST+1 ]; - - // Keyboard status - char Key[ GLFW_KEY_LAST+1 ]; - int LastChar; - - // User selected settings - int StickyKeys; - int StickyMouseButtons; - int KeyRepeat; - - -// ========= PLATFORM SPECIFIC PART ====================================== - - double WheelPosFloating; - -} _glfwInput; - -//------------------------------------------------------------------------ -// Thread information -//------------------------------------------------------------------------ -typedef struct _GLFWthread_struct _GLFWthread; - -// Thread record (one for each thread) -struct _GLFWthread_struct { - - // Pointer to previous and next threads in linked list - _GLFWthread *Previous, *Next; - - // GLFW user side thread information - GLFWthread ID; - GLFWthreadfun Function; - - // System side thread information - pthread_t PosixID; -}; - -// General thread information -GLFWGLOBAL struct { - - // Critical section lock - pthread_mutex_t CriticalSection; - - // Next thread ID to use (increments for every created thread) - GLFWthread NextID; - - // First thread in linked list (always the main thread) - _GLFWthread First; - -} _glfwThrd; - - -//======================================================================== -// Macros for encapsulating critical code sections (i.e. making parts -// of GLFW thread safe) -//======================================================================== - -// Define so we can use the same thread code as X11 -#define _glfw_numprocessors(n) { \ - int mib[2], ncpu; \ - size_t len = 1; \ - mib[0] = CTL_HW; \ - mib[1] = HW_NCPU; \ - n = 1; \ - if( sysctl( mib, 2, &ncpu, &len, NULL, 0 ) != -1 ) \ - { \ - if( len > 0 ) \ - { \ - n = ncpu; \ - } \ - } \ -} - -// Thread list management -#define ENTER_THREAD_CRITICAL_SECTION \ -pthread_mutex_lock( &_glfwThrd.CriticalSection ); -#define LEAVE_THREAD_CRITICAL_SECTION \ -pthread_mutex_unlock( &_glfwThrd.CriticalSection ); - - -//======================================================================== -// Prototypes for platform specific internal functions -//======================================================================== - -// Time -void _glfwInitTimer( void ); - -// Joystick -void _glfwInitJoysticks( void ); -void _glfwTerminateJoysticks( void ); - -#endif // _platform_h_ diff --git a/ogl_editor/src/External/glfw/lib/enable.c b/ogl_editor/src/External/glfw/lib/enable.c deleted file mode 100644 index 704ff88..0000000 --- a/ogl_editor/src/External/glfw/lib/enable.c +++ /dev/null @@ -1,306 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Any -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Enable (show) mouse cursor -//======================================================================== - -static void enableMouseCursor( void ) -{ - int centerPosX, centerPosY; - - if( !_glfwWin.opened || !_glfwWin.mouseLock ) - { - return; - } - - // Show mouse cursor - _glfwPlatformShowMouseCursor(); - - centerPosX = _glfwWin.width / 2; - centerPosY = _glfwWin.height / 2; - - if( centerPosX != _glfwInput.MousePosX || centerPosY != _glfwInput.MousePosY ) - { - _glfwPlatformSetMouseCursorPos( centerPosX, centerPosY ); - - _glfwInput.MousePosX = centerPosX; - _glfwInput.MousePosY = centerPosY; - - if( _glfwWin.mousePosCallback ) - { - _glfwWin.mousePosCallback( _glfwInput.MousePosX, - _glfwInput.MousePosY ); - } - } - - // From now on the mouse is unlocked - _glfwWin.mouseLock = GL_FALSE; -} - -//======================================================================== -// Disable (hide) mouse cursor -//======================================================================== - -static void disableMouseCursor( void ) -{ - if( !_glfwWin.opened || _glfwWin.mouseLock ) - { - return; - } - - // Hide mouse cursor - _glfwPlatformHideMouseCursor(); - - // From now on the mouse is locked - _glfwWin.mouseLock = GL_TRUE; -} - - -//======================================================================== -// Enable sticky keys -//======================================================================== - -static void enableStickyKeys( void ) -{ - _glfwInput.StickyKeys = 1; -} - -//======================================================================== -// Disable sticky keys -//======================================================================== - -static void disableStickyKeys( void ) -{ - int i; - - _glfwInput.StickyKeys = 0; - - // Release all sticky keys - for( i = 0; i <= GLFW_KEY_LAST; i++ ) - { - if( _glfwInput.Key[ i ] == 2 ) - { - _glfwInput.Key[ i ] = 0; - } - } -} - - -//======================================================================== -// Enable sticky mouse buttons -//======================================================================== - -static void enableStickyMouseButtons( void ) -{ - _glfwInput.StickyMouseButtons = 1; -} - -//======================================================================== -// Disable sticky mouse buttons -//======================================================================== - -static void disableStickyMouseButtons( void ) -{ - int i; - - _glfwInput.StickyMouseButtons = 0; - - // Release all sticky mouse buttons - for( i = 0; i <= GLFW_MOUSE_BUTTON_LAST; i++ ) - { - if( _glfwInput.MouseButton[ i ] == 2 ) - { - _glfwInput.MouseButton[ i ] = 0; - } - } -} - - -//======================================================================== -// Enable system keys -//======================================================================== - -static void enableSystemKeys( void ) -{ - if( !_glfwWin.sysKeysDisabled ) - { - return; - } - - _glfwPlatformEnableSystemKeys(); - - // Indicate that system keys are no longer disabled - _glfwWin.sysKeysDisabled = GL_FALSE; -} - -//======================================================================== -// Disable system keys -//======================================================================== - -static void disableSystemKeys( void ) -{ - if( _glfwWin.sysKeysDisabled ) - { - return; - } - - _glfwPlatformDisableSystemKeys(); - - // Indicate that system keys are now disabled - _glfwWin.sysKeysDisabled = GL_TRUE; -} - - -//======================================================================== -// Enable key repeat -//======================================================================== - -static void enableKeyRepeat( void ) -{ - _glfwInput.KeyRepeat = 1; -} - -//======================================================================== -// Disable key repeat -//======================================================================== - -static void disableKeyRepeat( void ) -{ - _glfwInput.KeyRepeat = 0; -} - - -//======================================================================== -// Enable automatic event polling -//======================================================================== - -static void enableAutoPollEvents( void ) -{ - _glfwWin.autoPollEvents = 1; -} - -//======================================================================== -// Disable automatic event polling -//======================================================================== - -static void disableAutoPollEvents( void ) -{ - _glfwWin.autoPollEvents = 0; -} - - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// Enable certain GLFW/window/system functions. -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwEnable( int token ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return; - } - - switch( token ) - { - case GLFW_MOUSE_CURSOR: - enableMouseCursor(); - break; - case GLFW_STICKY_KEYS: - enableStickyKeys(); - break; - case GLFW_STICKY_MOUSE_BUTTONS: - enableStickyMouseButtons(); - break; - case GLFW_SYSTEM_KEYS: - enableSystemKeys(); - break; - case GLFW_KEY_REPEAT: - enableKeyRepeat(); - break; - case GLFW_AUTO_POLL_EVENTS: - enableAutoPollEvents(); - break; - default: - break; - } -} - - -//======================================================================== -// Disable certain GLFW/window/system functions. -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwDisable( int token ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return; - } - - switch( token ) - { - case GLFW_MOUSE_CURSOR: - disableMouseCursor(); - break; - case GLFW_STICKY_KEYS: - disableStickyKeys(); - break; - case GLFW_STICKY_MOUSE_BUTTONS: - disableStickyMouseButtons(); - break; - case GLFW_SYSTEM_KEYS: - disableSystemKeys(); - break; - case GLFW_KEY_REPEAT: - disableKeyRepeat(); - break; - case GLFW_AUTO_POLL_EVENTS: - disableAutoPollEvents(); - break; - default: - break; - } -} - diff --git a/ogl_editor/src/External/glfw/lib/fullscreen.c b/ogl_editor/src/External/glfw/lib/fullscreen.c deleted file mode 100644 index 970e713..0000000 --- a/ogl_editor/src/External/glfw/lib/fullscreen.c +++ /dev/null @@ -1,94 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Any -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// Get a list of available video modes -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwGetVideoModes( GLFWvidmode *list, int maxcount ) -{ - int count, i, swap, res1, res2, depth1, depth2; - GLFWvidmode vm; - - if( !_glfwInitialized || maxcount <= 0 || list == (GLFWvidmode*) 0 ) - { - return 0; - } - - // Get list of video modes - count = _glfwPlatformGetVideoModes( list, maxcount ); - - // Sort list (bubble sort) - do - { - swap = 0; - for( i = 0; i < count-1; ++ i ) - { - res1 = list[i].Width*list[i].Height; - depth1 = list[i].RedBits+list[i].GreenBits+list[i].BlueBits; - res2 = list[i+1].Width*list[i+1].Height; - depth2 = list[i+1].RedBits+list[i+1].GreenBits+ - list[i+1].BlueBits; - if( (depth2 -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -#ifndef GL_VERSION_3_0 -#define GL_NUM_EXTENSIONS 0x821D -#define GL_CONTEXT_FLAGS 0x821E -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 -#endif - -#ifndef GL_VERSION_3_2 -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_CONTEXT_PROFILE_MASK 0x9126 -#endif - -//======================================================================== -// Parses the OpenGL version string and extracts the version number -//======================================================================== - -void _glfwParseGLVersion( int *major, int *minor, int *rev ) -{ - GLuint _major, _minor = 0, _rev = 0; - const GLubyte *version; - const GLubyte *ptr; - - // Get OpenGL version string - version = glGetString( GL_VERSION ); - if( !version ) - { - return; - } - - // Parse string - ptr = version; - for( _major = 0; *ptr >= '0' && *ptr <= '9'; ptr ++ ) - { - _major = 10*_major + (*ptr - '0'); - } - if( *ptr == '.' ) - { - ptr ++; - for( _minor = 0; *ptr >= '0' && *ptr <= '9'; ptr ++ ) - { - _minor = 10*_minor + (*ptr - '0'); - } - if( *ptr == '.' ) - { - ptr ++; - for( _rev = 0; *ptr >= '0' && *ptr <= '9'; ptr ++ ) - { - _rev = 10*_rev + (*ptr - '0'); - } - } - } - - // Return parsed values - *major = _major; - *minor = _minor; - *rev = _rev; -} - -//======================================================================== -// Check if a string can be found in an OpenGL extension string -//======================================================================== - -int _glfwStringInExtensionString( const char *string, - const GLubyte *extensions ) -{ - const GLubyte *start; - GLubyte *where, *terminator; - - // It takes a bit of care to be fool-proof about parsing the - // OpenGL extensions string. Don't be fooled by sub-strings, - // etc. - start = extensions; - while( 1 ) - { - where = (GLubyte *) strstr( (const char *) start, string ); - if( !where ) - { - return GL_FALSE; - } - terminator = where + strlen( string ); - if( where == start || *(where - 1) == ' ' ) - { - if( *terminator == ' ' || *terminator == '\0' ) - { - break; - } - } - start = terminator; - } - - return GL_TRUE; -} - - -//======================================================================== -// Reads back OpenGL context properties from the current context -//======================================================================== - -void _glfwRefreshContextParams( void ) -{ - _glfwParseGLVersion( &_glfwWin.glMajor, &_glfwWin.glMinor, - &_glfwWin.glRevision ); - - _glfwWin.glProfile = 0; - _glfwWin.glForward = GL_FALSE; - - // Read back the context profile, if applicable - if( _glfwWin.glMajor >= 3 ) - { - GLint flags; - glGetIntegerv( GL_CONTEXT_FLAGS, &flags ); - - if( flags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT ) - { - _glfwWin.glForward = GL_TRUE; - } - } - - if( _glfwWin.glMajor > 3 || - ( _glfwWin.glMajor == 3 && _glfwWin.glMinor >= 2 ) ) - { - GLint mask; - glGetIntegerv( GL_CONTEXT_PROFILE_MASK, &mask ); - - if( mask & GL_CONTEXT_COMPATIBILITY_PROFILE_BIT ) - { - _glfwWin.glProfile = GLFW_OPENGL_COMPAT_PROFILE; - } - else if( mask & GL_CONTEXT_CORE_PROFILE_BIT ) - { - _glfwWin.glProfile = GLFW_OPENGL_CORE_PROFILE; - } - } -} - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// Check if an OpenGL extension is available at runtime -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwExtensionSupported( const char *extension ) -{ - const GLubyte *extensions; - GLubyte *where; - - // Is GLFW initialized? - if( !_glfwInitialized || !_glfwWin.opened ) - { - return GL_FALSE; - } - - // Extension names should not have spaces - where = (GLubyte *) strchr( extension, ' ' ); - if( where || *extension == '\0' ) - { - return GL_FALSE; - } - - if( _glfwWin.glMajor < 3 ) - { - // Check if extension is in the old style OpenGL extensions string - - extensions = glGetString( GL_EXTENSIONS ); - if( extensions != NULL ) - { - if( _glfwStringInExtensionString( extension, extensions ) ) - { - return GL_TRUE; - } - } - } - else - { - // Check if extension is in the modern OpenGL extensions string list - - GLint count; - int i; - - glGetIntegerv( GL_NUM_EXTENSIONS, &count ); - - for( i = 0; i < count; i++ ) - { - if( strcmp( (const char*) _glfwWin.GetStringi( GL_EXTENSIONS, i ), - extension ) == 0 ) - { - return GL_TRUE; - } - } - } - - // Additional platform specific extension checking (e.g. WGL) - if( _glfwPlatformExtensionSupported( extension ) ) - { - return GL_TRUE; - } - - return GL_FALSE; -} - - -//======================================================================== -// Get the function pointer to an OpenGL function. This function can be -// used to get access to extended OpenGL functions. -//======================================================================== - -GLFWAPI void * GLFWAPIENTRY glfwGetProcAddress( const char *procname ) -{ - // Is GLFW initialized? - if( !_glfwInitialized || !_glfwWin.opened ) - { - return NULL; - } - - return _glfwPlatformGetProcAddress( procname ); -} - - -//======================================================================== -// Returns the OpenGL version -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwGetGLVersion( int *major, int *minor, int *rev ) -{ - // Is GLFW initialized? - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - if( major != NULL ) - { - *major = _glfwWin.glMajor; - } - if( minor != NULL ) - { - *minor = _glfwWin.glMinor; - } - if( rev != NULL ) - { - *rev = _glfwWin.glRevision; - } -} - diff --git a/ogl_editor/src/External/glfw/lib/image.c b/ogl_editor/src/External/glfw/lib/image.c deleted file mode 100644 index 1e70cbb..0000000 --- a/ogl_editor/src/External/glfw/lib/image.c +++ /dev/null @@ -1,629 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Any -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -//======================================================================== -// Description: -// -// This module acts as an interface for different image file formats (the -// image file format is detected automatically). -// -// By default the loaded image is rescaled (using bilinear interpolation) -// to the next higher 2^N x 2^M resolution, unless it has a valid -// 2^N x 2^M resolution. The interpolation is quite slow, even if the -// routine has been optimized for speed (a 200x200 RGB image is scaled to -// 256x256 in ~30 ms on a P3-500). -// -// Paletted images are converted to RGB/RGBA images. -// -// A convenience function is also included (glfwLoadTexture2D), which -// loads a texture image from a file directly to OpenGL texture memory, -// with an option to generate all mipmap levels. GL_SGIS_generate_mipmap -// is used whenever available, which should give an optimal mipmap -// generation speed (possibly performed in hardware). A software fallback -// method is included when GL_SGIS_generate_mipmap is not supported (it -// generates all mipmaps of a 256x256 RGB texture in ~3 ms on a P3-500). -// -//======================================================================== - - -#include "internal.h" - - -// We want to support automatic mipmap generation -#ifndef GL_SGIS_generate_mipmap - #define GL_GENERATE_MIPMAP_SGIS 0x8191 - #define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 - #define GL_SGIS_generate_mipmap 1 -#endif // GL_SGIS_generate_mipmap - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Upsample image, from size w1 x h1 to w2 x h2 -//======================================================================== - -static void UpsampleImage( unsigned char *src, unsigned char *dst, - int w1, int h1, int w2, int h2, int bpp ) -{ - int m, n, k, x, y, col8; - float dx, dy, xstep, ystep, col, col1, col2; - unsigned char *src1, *src2, *src3, *src4; - - // Calculate scaling factor - xstep = (float)(w1-1) / (float)(w2-1); - ystep = (float)(h1-1) / (float)(h2-1); - - // Copy source data to destination data with bilinear interpolation - // Note: The rather strange look of this routine is a direct result of - // my attempts at optimizing it. Improvements are welcome! - dy = 0.0f; - y = 0; - for( n = 0; n < h2; n ++ ) - { - dx = 0.0f; - src1 = &src[ y*w1*bpp ]; - src3 = y < (h1-1) ? src1 + w1*bpp : src1; - src2 = src1 + bpp; - src4 = src3 + bpp; - x = 0; - for( m = 0; m < w2; m ++ ) - { - for( k = 0; k < bpp; k ++ ) - { - col1 = *src1 ++; - col2 = *src2 ++; - col = col1 + (col2 - col1) * dx; - col1 = *src3 ++; - col2 = *src4 ++; - col2 = col1 + (col2 - col1) * dx; - col += (col2 - col) * dy; - col8 = (int) (col + 0.5); - if( col8 >= 256 ) col8 = 255; - *dst++ = (unsigned char) col8; - } - dx += xstep; - if( dx >= 1.0f ) - { - x ++; - dx -= 1.0f; - if( x >= (w1-1) ) - { - src2 = src1; - src4 = src3; - } - } - else - { - src1 -= bpp; - src2 -= bpp; - src3 -= bpp; - src4 -= bpp; - } - } - dy += ystep; - if( dy >= 1.0f ) - { - y ++; - dy -= 1.0f; - } - } -} - - -//======================================================================== -// Build the next mip-map level -//======================================================================== - -static int HalveImage( GLubyte *src, int *width, int *height, - int components ) -{ - int halfwidth, halfheight, m, n, k, idx1, idx2; - GLubyte *dst; - - // Last level? - if( *width <= 1 && *height <= 1 ) - { - return GL_FALSE; - } - - // Calculate new width and height (handle 1D case) - halfwidth = *width > 1 ? *width / 2 : 1; - halfheight = *height > 1 ? *height / 2 : 1; - - // Downsample image with a simple box-filter - dst = src; - if( *width == 1 || *height == 1 ) - { - // 1D case - for( m = 0; m < halfwidth+halfheight-1; m ++ ) - { - for( k = 0; k < components; k ++ ) - { - *dst ++ = (GLubyte) (((int)*src + - (int)src[components] + 1) >> 1); - src ++; - } - src += components; - } - } - else - { - // 2D case - idx1 = *width*components; - idx2 = (*width+1)*components; - for( m = 0; m < halfheight; m ++ ) - { - for( n = 0; n < halfwidth; n ++ ) - { - for( k = 0; k < components; k ++ ) - { - *dst ++ = (GLubyte) (((int)*src + - (int)src[components] + - (int)src[idx1] + - (int)src[idx2] + 2) >> 2); - src ++; - } - src += components; - } - src += components * (*width); - } - } - - // Return new width and height - *width = halfwidth; - *height = halfheight; - - return GL_TRUE; -} - - -//======================================================================== -// Rescales an image into power-of-two dimensions -//======================================================================== - -static int RescaleImage( GLFWimage* image ) -{ - int width, height, log2, newsize; - unsigned char *data; - - // Calculate next larger 2^N width - for( log2 = 0, width = image->Width; width > 1; width >>= 1, log2 ++ ) - ; - - width = (int) 1 << log2; - if( width < image->Width ) - { - width <<= 1; - } - - // Calculate next larger 2^M height - for( log2 = 0, height = image->Height; height > 1; height >>= 1, log2 ++ ) - ; - - height = (int) 1 << log2; - if( height < image->Height ) - { - height <<= 1; - } - - // Do we really need to rescale? - if( width != image->Width || height != image->Height ) - { - // Allocate memory for new (upsampled) image data - newsize = width * height * image->BytesPerPixel; - data = (unsigned char *) malloc( newsize ); - if( data == NULL ) - { - free( image->Data ); - return GL_FALSE; - } - - // Copy old image data to new image data with interpolation - UpsampleImage( image->Data, data, image->Width, image->Height, - width, height, image->BytesPerPixel ); - - // Free memory for old image data (not needed anymore) - free( image->Data ); - - // Set pointer to new image data, and set new image dimensions - image->Data = data; - image->Width = width; - image->Height = height; - } - - return GL_TRUE; -} - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// Read an image from a named file -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwReadImage( const char *name, GLFWimage *img, - int flags ) -{ - _GLFWstream stream; - - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return GL_FALSE; - } - - // Start with an empty image descriptor - img->Width = 0; - img->Height = 0; - img->BytesPerPixel = 0; - img->Data = NULL; - - // Open file - if( !_glfwOpenFileStream( &stream, name, "rb" ) ) - { - return GL_FALSE; - } - - // We only support TGA files at the moment - if( !_glfwReadTGA( &stream, img, flags ) ) - { - _glfwCloseStream( &stream ); - return GL_FALSE; - } - - // Close stream - _glfwCloseStream( &stream ); - - // Should we rescale the image to closest 2^N x 2^M resolution? - if( !(flags & GLFW_NO_RESCALE_BIT) ) - { - if( !RescaleImage( img ) ) - { - return GL_FALSE; - } - } - - // Interpret BytesPerPixel as an OpenGL format - switch( img->BytesPerPixel ) - { - default: - case 1: - if( flags & GLFW_ALPHA_MAP_BIT ) - { - img->Format = GL_ALPHA; - } - else - { - img->Format = GL_LUMINANCE; - } - break; - case 3: - img->Format = GL_RGB; - break; - case 4: - img->Format = GL_RGBA; - break; - } - - return GL_TRUE; -} - - -//======================================================================== -// Read an image file from a memory buffer -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwReadMemoryImage( const void *data, long size, GLFWimage *img, int flags ) -{ - _GLFWstream stream; - - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return GL_FALSE; - } - - // Start with an empty image descriptor - img->Width = 0; - img->Height = 0; - img->BytesPerPixel = 0; - img->Data = NULL; - - // Open buffer - if( !_glfwOpenBufferStream( &stream, (void*) data, size ) ) - { - return GL_FALSE; - } - - // We only support TGA files at the moment - if( !_glfwReadTGA( &stream, img, flags ) ) - { - _glfwCloseStream( &stream ); - return GL_FALSE; - } - - // Close stream - _glfwCloseStream( &stream ); - - // Should we rescale the image to closest 2^N x 2^M resolution? - if( !(flags & GLFW_NO_RESCALE_BIT) ) - { - if( !RescaleImage( img ) ) - { - return GL_FALSE; - } - } - - // Interpret BytesPerPixel as an OpenGL format - switch( img->BytesPerPixel ) - { - default: - case 1: - if( flags & GLFW_ALPHA_MAP_BIT ) - { - img->Format = GL_ALPHA; - } - else - { - img->Format = GL_LUMINANCE; - } - break; - case 3: - img->Format = GL_RGB; - break; - case 4: - img->Format = GL_RGBA; - break; - } - - return GL_TRUE; -} - - -//======================================================================== -// Free allocated memory for an image -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwFreeImage( GLFWimage *img ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return; - } - - // Free memory - if( img->Data != NULL ) - { - free( img->Data ); - img->Data = NULL; - } - - // Clear all fields - img->Width = 0; - img->Height = 0; - img->Format = 0; - img->BytesPerPixel = 0; -} - - -//======================================================================== -// Read an image from a file, and upload it to texture memory -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwLoadTexture2D( const char *name, int flags ) -{ - GLFWimage img; - - // Is GLFW initialized? - if( !_glfwInitialized || !_glfwWin.opened ) - { - return GL_FALSE; - } - - // Force rescaling if necessary - if( !_glfwWin.has_GL_ARB_texture_non_power_of_two ) - { - flags &= (~GLFW_NO_RESCALE_BIT); - } - - // Read image from file - if( !glfwReadImage( name, &img, flags ) ) - { - return GL_FALSE; - } - - if( !glfwLoadTextureImage2D( &img, flags ) ) - { - return GL_FALSE; - } - - // Data buffer is not needed anymore - glfwFreeImage( &img ); - - return GL_TRUE; -} - - -//======================================================================== -// Read an image from a buffer, and upload it to texture memory -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwLoadMemoryTexture2D( const void *data, long size, int flags ) -{ - GLFWimage img; - - // Is GLFW initialized? - if( !_glfwInitialized || !_glfwWin.opened ) - { - return GL_FALSE; - } - - // Force rescaling if necessary - if( !_glfwWin.has_GL_ARB_texture_non_power_of_two ) - { - flags &= (~GLFW_NO_RESCALE_BIT); - } - - // Read image from file - if( !glfwReadMemoryImage( data, size, &img, flags ) ) - { - return GL_FALSE; - } - - if( !glfwLoadTextureImage2D( &img, flags ) ) - { - return GL_FALSE; - } - - // Data buffer is not needed anymore - glfwFreeImage( &img ); - - return GL_TRUE; -} - - -//======================================================================== -// Upload an image object to texture memory -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwLoadTextureImage2D( GLFWimage *img, int flags ) -{ - GLint UnpackAlignment, GenMipMap; - int level, format, AutoGen, newsize, n; - unsigned char *data, *dataptr; - - // Is GLFW initialized? - if( !_glfwInitialized || !_glfwWin.opened ) - { - return GL_FALSE; - } - - // TODO: Use GL_MAX_TEXTURE_SIZE or GL_PROXY_TEXTURE_2D to determine - // whether the image size is valid. - // NOTE: May require box filter downsampling routine. - - // Do we need to convert the alpha map to RGBA format (OpenGL 1.0)? - if( (_glfwWin.glMajor == 1) && (_glfwWin.glMinor == 0) && - (img->Format == GL_ALPHA) ) - { - // We go to RGBA representation instead - img->BytesPerPixel = 4; - - // Allocate memory for new RGBA image data - newsize = img->Width * img->Height * img->BytesPerPixel; - data = (unsigned char *) malloc( newsize ); - if( data == NULL ) - { - free( img->Data ); - return GL_FALSE; - } - - // Convert Alpha map to RGBA - dataptr = data; - for( n = 0; n < (img->Width*img->Height); ++ n ) - { - *dataptr ++ = 255; - *dataptr ++ = 255; - *dataptr ++ = 255; - *dataptr ++ = img->Data[n]; - } - - // Free memory for old image data (not needed anymore) - free( img->Data ); - - // Set pointer to new image data - img->Data = data; - } - - // Set unpack alignment to one byte - glGetIntegerv( GL_UNPACK_ALIGNMENT, &UnpackAlignment ); - glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); - - // Should we use automatic mipmap generation? - AutoGen = ( flags & GLFW_BUILD_MIPMAPS_BIT ) && - _glfwWin.has_GL_SGIS_generate_mipmap; - - // Enable automatic mipmap generation - if( AutoGen ) - { - glGetTexParameteriv( GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, - &GenMipMap ); - glTexParameteri( GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, - GL_TRUE ); - } - - // Format specification is different for OpenGL 1.0 - if( _glfwWin.glMajor == 1 && _glfwWin.glMinor == 0 ) - { - format = img->BytesPerPixel; - } - else - { - format = img->Format; - } - - // Upload to texture memeory - level = 0; - do - { - // Upload this mipmap level - glTexImage2D( GL_TEXTURE_2D, level, format, - img->Width, img->Height, 0, format, - GL_UNSIGNED_BYTE, (void*) img->Data ); - - // Build next mipmap level manually, if required - if( ( flags & GLFW_BUILD_MIPMAPS_BIT ) && !AutoGen ) - { - level = HalveImage( img->Data, &img->Width, - &img->Height, img->BytesPerPixel ) ? - level + 1 : 0; - } - } - while( level != 0 ); - - // Restore old automatic mipmap generation state - if( AutoGen ) - { - glTexParameteri( GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, - GenMipMap ); - } - - // Restore old unpack alignment - glPixelStorei( GL_UNPACK_ALIGNMENT, UnpackAlignment ); - - return GL_TRUE; -} - diff --git a/ogl_editor/src/External/glfw/lib/init.c b/ogl_editor/src/External/glfw/lib/init.c deleted file mode 100644 index a0472ab..0000000 --- a/ogl_editor/src/External/glfw/lib/init.c +++ /dev/null @@ -1,110 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Any -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#define _init_c_ -#include "internal.h" - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// Initialize various GLFW state -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwInit( void ) -{ - // Is GLFW already initialized? - if( _glfwInitialized ) - { - return GL_TRUE; - } - - memset( &_glfwLibrary, 0, sizeof( _glfwLibrary ) ); - memset( &_glfwWin, 0, sizeof( _glfwWin ) ); - - // Window is not yet opened - _glfwWin.opened = GL_FALSE; - - // Default enable/disable settings - _glfwWin.sysKeysDisabled = GL_FALSE; - - // Clear window hints - _glfwClearWindowHints(); - - // Platform specific initialization - if( !_glfwPlatformInit() ) - { - return GL_FALSE; - } - - // Form now on, GLFW state is valid - _glfwInitialized = GL_TRUE; - - return GL_TRUE; -} - - - -//======================================================================== -// Close window and kill all threads. -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwTerminate( void ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return; - } - - // Platform specific termination - if( !_glfwPlatformTerminate() ) - { - return; - } - - // GLFW is no longer initialized - _glfwInitialized = GL_FALSE; -} - - -//======================================================================== -// Get GLFW version -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwGetVersion( int *major, int *minor, int *rev ) -{ - if( major != NULL ) *major = GLFW_VERSION_MAJOR; - if( minor != NULL ) *minor = GLFW_VERSION_MINOR; - if( rev != NULL ) *rev = GLFW_VERSION_REVISION; -} - diff --git a/ogl_editor/src/External/glfw/lib/input.c b/ogl_editor/src/External/glfw/lib/input.c deleted file mode 100644 index 0c5d190..0000000 --- a/ogl_editor/src/External/glfw/lib/input.c +++ /dev/null @@ -1,269 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Any -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//======================================================================== -// Return key state -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwGetKey( int key ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return GLFW_RELEASE; - } - - // Is it a valid key? - if( key < 0 || key > GLFW_KEY_LAST ) - { - return GLFW_RELEASE; - } - - if( _glfwInput.Key[ key ] == GLFW_STICK ) - { - // Sticky mode: release key now - _glfwInput.Key[ key ] = GLFW_RELEASE; - return GLFW_PRESS; - } - - return (int) _glfwInput.Key[ key ]; -} - - -//======================================================================== -// Return mouse button state -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwGetMouseButton( int button ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return GLFW_RELEASE; - } - - // Is it a valid mouse button? - if( button < 0 || button > GLFW_MOUSE_BUTTON_LAST ) - { - return GLFW_RELEASE; - } - - if( _glfwInput.MouseButton[ button ] == GLFW_STICK ) - { - // Sticky mode: release mouse button now - _glfwInput.MouseButton[ button ] = GLFW_RELEASE; - return GLFW_PRESS; - } - - return (int) _glfwInput.MouseButton[ button ]; -} - - -//======================================================================== -// Return mouse cursor position -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwGetMousePos( int *xpos, int *ypos ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Return mouse position - if( xpos != NULL ) - { - *xpos = _glfwInput.MousePosX; - } - if( ypos != NULL ) - { - *ypos = _glfwInput.MousePosY; - } -} - - -//======================================================================== -// Sets the mouse cursor position -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetMousePos( int xpos, int ypos ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Don't do anything if the mouse position did not change - if( xpos == _glfwInput.MousePosX && ypos == _glfwInput.MousePosY ) - { - return; - } - - // Set GLFW mouse position - _glfwInput.MousePosX = xpos; - _glfwInput.MousePosY = ypos; - - // If we have a locked mouse, do not change cursor position - if( _glfwWin.mouseLock ) - { - return; - } - - // Update physical cursor position - _glfwPlatformSetMouseCursorPos( xpos, ypos ); -} - - -//======================================================================== -// Return mouse wheel position -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwGetMouseWheel( void ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return 0; - } - - // Return mouse wheel position - return _glfwInput.WheelPos; -} - - -//======================================================================== -// Set mouse wheel position -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetMouseWheel( int pos ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Set mouse wheel position - _glfwInput.WheelPos = pos; -} - - -//======================================================================== -// Set callback function for keyboard input -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetKeyCallback( GLFWkeyfun cbfun ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Set callback function - _glfwWin.keyCallback = cbfun; -} - - -//======================================================================== -// Set callback function for character input -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetCharCallback( GLFWcharfun cbfun ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Set callback function - _glfwWin.charCallback = cbfun; -} - - -//======================================================================== -// Set callback function for mouse clicks -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetMouseButtonCallback( GLFWmousebuttonfun cbfun ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Set callback function - _glfwWin.mouseButtonCallback = cbfun; -} - - -//======================================================================== -// Set callback function for mouse moves -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetMousePosCallback( GLFWmouseposfun cbfun ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Set callback function - _glfwWin.mousePosCallback = cbfun; - - // Call the callback function to let the application know the current - // mouse position - if( cbfun ) - { - cbfun( _glfwInput.MousePosX, _glfwInput.MousePosY ); - } -} - - -//======================================================================== -// Set callback function for mouse wheel -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetMouseWheelCallback( GLFWmousewheelfun cbfun ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Set callback function - _glfwWin.mouseWheelCallback = cbfun; - - // Call the callback function to let the application know the current - // mouse wheel position - if( cbfun ) - { - cbfun( _glfwInput.WheelPos ); - } -} - diff --git a/ogl_editor/src/External/glfw/lib/internal.h b/ogl_editor/src/External/glfw/lib/internal.h deleted file mode 100644 index 0563728..0000000 --- a/ogl_editor/src/External/glfw/lib/internal.h +++ /dev/null @@ -1,266 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Any -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#ifndef _internal_h_ -#define _internal_h_ - -//======================================================================== -// GLFWGLOBAL is a macro that places all global variables in the init.c -// module (all other modules reference global variables as 'extern') -//======================================================================== - -#if defined( _init_c_ ) -#define GLFWGLOBAL -#else -#define GLFWGLOBAL extern -#endif - - -//======================================================================== -// Input handling definitions -//======================================================================== - -// Internal key and button state/action definitions -#define GLFW_STICK 2 - - -//======================================================================== -// System independent include files -//======================================================================== - -#include -#include -#include - - -//------------------------------------------------------------------------ -// Window opening hints (set by glfwOpenWindowHint) -// A bucket of semi-random stuff bunched together for historical reasons -// This is used only by the platform independent code and only to store -// parameters passed to us by glfwOpenWindowHint -//------------------------------------------------------------------------ -typedef struct { - int refreshRate; - int accumRedBits; - int accumGreenBits; - int accumBlueBits; - int accumAlphaBits; - int auxBuffers; - int stereo; - int windowNoResize; - int samples; - int glMajor; - int glMinor; - int glForward; - int glDebug; - int glProfile; -} _GLFWhints; - - -//------------------------------------------------------------------------ -// Platform specific definitions goes in platform.h (which also includes -// glfw.h) -//------------------------------------------------------------------------ - -#include "platform.h" - - -//------------------------------------------------------------------------ -// Parameters relating to the creation of the context and window but not -// directly related to the properties of the framebuffer -// This is used to pass window and context creation parameters from the -// platform independent code to the platform specific code -//------------------------------------------------------------------------ -typedef struct { - int mode; - int refreshRate; - int windowNoResize; - int glMajor; - int glMinor; - int glForward; - int glDebug; - int glProfile; -} _GLFWwndconfig; - - -//------------------------------------------------------------------------ -// Framebuffer configuration descriptor, i.e. buffers and their sizes -// Also a platform specific ID used to map back to the actual backend APIs -// This is used to pass framebuffer parameters from the platform independent -// code to the platform specific code, and also to enumerate and select -// available framebuffer configurations -//------------------------------------------------------------------------ -typedef struct { - int redBits; - int greenBits; - int blueBits; - int alphaBits; - int depthBits; - int stencilBits; - int accumRedBits; - int accumGreenBits; - int accumBlueBits; - int accumAlphaBits; - int auxBuffers; - int stereo; - int samples; - GLFWintptr platformID; -} _GLFWfbconfig; - - -//======================================================================== -// System independent global variables (GLFW internals) -//======================================================================== - -// Flag indicating if GLFW has been initialized -#if defined( _init_c_ ) -int _glfwInitialized = 0; -#else -GLFWGLOBAL int _glfwInitialized; -#endif - - -//------------------------------------------------------------------------ -// Abstract data stream (for image I/O) -//------------------------------------------------------------------------ -typedef struct { - FILE* file; - void* data; - long position; - long size; -} _GLFWstream; - - -//======================================================================== -// Prototypes for platform specific implementation functions -//======================================================================== - -// Init/terminate -int _glfwPlatformInit( void ); -int _glfwPlatformTerminate( void ); - -// Enable/Disable -void _glfwPlatformEnableSystemKeys( void ); -void _glfwPlatformDisableSystemKeys( void ); - -// Fullscreen -int _glfwPlatformGetVideoModes( GLFWvidmode *list, int maxcount ); -void _glfwPlatformGetDesktopMode( GLFWvidmode *mode ); - -// OpenGL extensions -int _glfwPlatformExtensionSupported( const char *extension ); -void * _glfwPlatformGetProcAddress( const char *procname ); - -// Joystick -int _glfwPlatformGetJoystickParam( int joy, int param ); -int _glfwPlatformGetJoystickPos( int joy, float *pos, int numaxes ); -int _glfwPlatformGetJoystickButtons( int joy, unsigned char *buttons, int numbuttons ); - -// Threads -GLFWthread _glfwPlatformCreateThread( GLFWthreadfun fun, void *arg ); -void _glfwPlatformDestroyThread( GLFWthread ID ); -int _glfwPlatformWaitThread( GLFWthread ID, int waitmode ); -GLFWthread _glfwPlatformGetThreadID( void ); -GLFWmutex _glfwPlatformCreateMutex( void ); -void _glfwPlatformDestroyMutex( GLFWmutex mutex ); -void _glfwPlatformLockMutex( GLFWmutex mutex ); -void _glfwPlatformUnlockMutex( GLFWmutex mutex ); -GLFWcond _glfwPlatformCreateCond( void ); -void _glfwPlatformDestroyCond( GLFWcond cond ); -void _glfwPlatformWaitCond( GLFWcond cond, GLFWmutex mutex, double timeout ); -void _glfwPlatformSignalCond( GLFWcond cond ); -void _glfwPlatformBroadcastCond( GLFWcond cond ); -int _glfwPlatformGetNumberOfProcessors( void ); - -// Time -double _glfwPlatformGetTime( void ); -void _glfwPlatformSetTime( double time ); -void _glfwPlatformSleep( double time ); - -// Window management -int _glfwPlatformOpenWindow( int width, int height, const _GLFWwndconfig *wndconfig, const _GLFWfbconfig *fbconfig ); -void _glfwPlatformCloseWindow( void ); -void _glfwPlatformSetWindowTitle( const char *title ); -void _glfwPlatformSetWindowSize( int width, int height ); -void _glfwPlatformSetWindowPos( int x, int y ); -void _glfwPlatformIconifyWindow( void ); -void _glfwPlatformRestoreWindow( void ); -void _glfwPlatformSwapBuffers( void ); -void _glfwPlatformSwapInterval( int interval ); -void _glfwPlatformRefreshWindowParams( void ); -void _glfwPlatformPollEvents( void ); -void _glfwPlatformWaitEvents( void ); -void _glfwPlatformHideMouseCursor( void ); -void _glfwPlatformShowMouseCursor( void ); -void _glfwPlatformSetMouseCursorPos( int x, int y ); - - -//======================================================================== -// Prototypes for platform independent internal functions -//======================================================================== - -// Window management (window.c) -void _glfwClearWindowHints( void ); - -// Input handling (window.c) -void _glfwClearInput( void ); -void _glfwInputDeactivation( void ); -void _glfwInputKey( int key, int action ); -void _glfwInputChar( int character, int action ); -void _glfwInputMouseClick( int button, int action ); - -// Threads (thread.c) -_GLFWthread * _glfwGetThreadPointer( int ID ); -void _glfwAppendThread( _GLFWthread * t ); -void _glfwRemoveThread( _GLFWthread * t ); - -// OpenGL extensions (glext.c) -void _glfwParseGLVersion( int *major, int *minor, int *rev ); -int _glfwStringInExtensionString( const char *string, const GLubyte *extensions ); -void _glfwRefreshContextParams( void ); - -// Abstracted data streams (stream.c) -int _glfwOpenFileStream( _GLFWstream *stream, const char *name, const char *mode ); -int _glfwOpenBufferStream( _GLFWstream *stream, void *data, long size ); -long _glfwReadStream( _GLFWstream *stream, void *data, long size ); -long _glfwTellStream( _GLFWstream *stream ); -int _glfwSeekStream( _GLFWstream *stream, long offset, int whence ); -void _glfwCloseStream( _GLFWstream *stream ); - -// Targa image I/O (tga.c) -int _glfwReadTGA( _GLFWstream *s, GLFWimage *img, int flags ); - -// Framebuffer configs -const _GLFWfbconfig *_glfwChooseFBConfig( const _GLFWfbconfig *desired, - const _GLFWfbconfig *alternatives, - unsigned int count ); - - -#endif // _internal_h_ diff --git a/ogl_editor/src/External/glfw/lib/joystick.c b/ogl_editor/src/External/glfw/lib/joystick.c deleted file mode 100644 index 007d18e..0000000 --- a/ogl_editor/src/External/glfw/lib/joystick.c +++ /dev/null @@ -1,99 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Any -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// Determine joystick capabilities -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwGetJoystickParam( int joy, int param ) -{ - if( !_glfwInitialized ) - { - return 0; - } - - return _glfwPlatformGetJoystickParam( joy, param ); -} - - -//======================================================================== -// Get joystick axis positions -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwGetJoystickPos( int joy, float *pos, int numaxes ) -{ - int i; - - if( !_glfwInitialized ) - { - return 0; - } - - // Clear positions - for( i = 0; i < numaxes; i++ ) - { - pos[ i ] = 0.0f; - } - - return _glfwPlatformGetJoystickPos( joy, pos, numaxes ); -} - - -//======================================================================== -// Get joystick button states -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwGetJoystickButtons( int joy, - unsigned char *buttons, - int numbuttons ) -{ - int i; - - if( !_glfwInitialized ) - { - return 0; - } - - // Clear button states - for( i = 0; i < numbuttons; i++ ) - { - buttons[ i ] = GLFW_RELEASE; - } - - return _glfwPlatformGetJoystickButtons( joy, buttons, numbuttons ); -} - diff --git a/ogl_editor/src/External/glfw/lib/stream.c b/ogl_editor/src/External/glfw/lib/stream.c deleted file mode 100644 index de75937..0000000 --- a/ogl_editor/src/External/glfw/lib/stream.c +++ /dev/null @@ -1,195 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Any -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#define _CRT_SECURE_NO_WARNINGS - -#include "internal.h" - - -//======================================================================== -// Opens a GLFW stream with a file -//======================================================================== - -int _glfwOpenFileStream( _GLFWstream *stream, const char* name, const char* mode ) -{ - memset( stream, 0, sizeof(_GLFWstream) ); - - stream->file = fopen( name, mode ); - if( stream->file == NULL ) - { - return GL_FALSE; - } - - return GL_TRUE; -} - - -//======================================================================== -// Opens a GLFW stream with a memory block -//======================================================================== - -int _glfwOpenBufferStream( _GLFWstream *stream, void *data, long size ) -{ - memset( stream, 0, sizeof(_GLFWstream) ); - - stream->data = data; - stream->size = size; - return GL_TRUE; -} - - -//======================================================================== -// Reads data from a GLFW stream -//======================================================================== - -long _glfwReadStream( _GLFWstream *stream, void *data, long size ) -{ - if( stream->file != NULL ) - { - return (long) fread( data, 1, size, stream->file ); - } - - if( stream->data != NULL ) - { - // Check for EOF - if( stream->position == stream->size ) - { - return 0; - } - - // Clamp read size to available data - if( stream->position + size > stream->size ) - { - size = stream->size - stream->position; - } - - // Perform data read - memcpy( data, (unsigned char*) stream->data + stream->position, size ); - stream->position += size; - return size; - } - - return 0; -} - - -//======================================================================== -// Returns the current position of a GLFW stream -//======================================================================== - -long _glfwTellStream( _GLFWstream *stream ) -{ - if( stream->file != NULL ) - { - return ftell( stream->file ); - } - - if( stream->data != NULL ) - { - return stream->position; - } - - return 0; -} - - -//======================================================================== -// Sets the current position of a GLFW stream -//======================================================================== - -int _glfwSeekStream( _GLFWstream *stream, long offset, int whence ) -{ - long position; - - if( stream->file != NULL ) - { - if( fseek( stream->file, offset, whence ) != 0 ) - { - return GL_FALSE; - } - - return GL_TRUE; - } - - if( stream->data != NULL ) - { - position = offset; - - // Handle whence parameter - if( whence == SEEK_CUR ) - { - position += stream->position; - } - else if( whence == SEEK_END ) - { - position += stream->size; - } - else if( whence != SEEK_SET ) - { - return GL_FALSE; - } - - // Clamp offset to buffer bounds and apply it - if( position > stream->size ) - { - stream->position = stream->size; - } - else if( position < 0 ) - { - stream->position = 0; - } - else - { - stream->position = position; - } - - return GL_TRUE; - } - - return GL_FALSE; -} - - -//======================================================================== -// Closes a GLFW stream -//======================================================================== - -void _glfwCloseStream( _GLFWstream *stream ) -{ - if( stream->file != NULL ) - { - fclose( stream->file ); - } - - // Nothing to be done about (user allocated) memory blocks - - memset( stream, 0, sizeof(_GLFWstream) ); -} - diff --git a/ogl_editor/src/External/glfw/lib/tga.c b/ogl_editor/src/External/glfw/lib/tga.c deleted file mode 100644 index 7e0697f..0000000 --- a/ogl_editor/src/External/glfw/lib/tga.c +++ /dev/null @@ -1,404 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Any -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -//======================================================================== -// Description: -// -// TGA format image file loader. This module supports version 1 Targa -// images, with these restrictions: -// - Pixel format may only be 8, 24 or 32 bits -// - Colormaps must be no longer than 256 entries -// -//======================================================================== - - -#include "internal.h" - - -//************************************************************************ -//**** GLFW internal functions & declarations **** -//************************************************************************ - -//======================================================================== -// TGA file header information -//======================================================================== - -typedef struct { - int idlen; // 1 byte - int cmaptype; // 1 byte - int imagetype; // 1 byte - int cmapfirstidx; // 2 bytes - int cmaplen; // 2 bytes - int cmapentrysize; // 1 byte - int xorigin; // 2 bytes - int yorigin; // 2 bytes - int width; // 2 bytes - int height; // 2 bytes - int bitsperpixel; // 1 byte - int imageinfo; // 1 byte - int _alphabits; // (derived from imageinfo) - int _origin; // (derived from imageinfo) -} _tga_header_t; - -#define _TGA_CMAPTYPE_NONE 0 -#define _TGA_CMAPTYPE_PRESENT 1 - -#define _TGA_IMAGETYPE_NONE 0 -#define _TGA_IMAGETYPE_CMAP 1 -#define _TGA_IMAGETYPE_TC 2 -#define _TGA_IMAGETYPE_GRAY 3 -#define _TGA_IMAGETYPE_CMAP_RLE 9 -#define _TGA_IMAGETYPE_TC_RLE 10 -#define _TGA_IMAGETYPE_GRAY_RLE 11 - -#define _TGA_IMAGEINFO_ALPHA_MASK 0x0f -#define _TGA_IMAGEINFO_ALPHA_SHIFT 0 -#define _TGA_IMAGEINFO_ORIGIN_MASK 0x30 -#define _TGA_IMAGEINFO_ORIGIN_SHIFT 4 - -#define _TGA_ORIGIN_BL 0 -#define _TGA_ORIGIN_BR 1 -#define _TGA_ORIGIN_UL 2 -#define _TGA_ORIGIN_UR 3 - - -//======================================================================== -// Read TGA file header (and check that it is valid) -//======================================================================== - -static int ReadTGAHeader( _GLFWstream *s, _tga_header_t *h ) -{ - unsigned char buf[ 18 ]; - int pos; - - // Read TGA file header from file - pos = _glfwTellStream( s ); - _glfwReadStream( s, buf, 18 ); - - // Interpret header (endian independent parsing) - h->idlen = (int) buf[0]; - h->cmaptype = (int) buf[1]; - h->imagetype = (int) buf[2]; - h->cmapfirstidx = (int) buf[3] | (((int) buf[4]) << 8); - h->cmaplen = (int) buf[5] | (((int) buf[6]) << 8); - h->cmapentrysize = (int) buf[7]; - h->xorigin = (int) buf[8] | (((int) buf[9]) << 8); - h->yorigin = (int) buf[10] | (((int) buf[11]) << 8); - h->width = (int) buf[12] | (((int) buf[13]) << 8); - h->height = (int) buf[14] | (((int) buf[15]) << 8); - h->bitsperpixel = (int) buf[16]; - h->imageinfo = (int) buf[17]; - - // Extract alphabits and origin information - h->_alphabits = (int) (h->imageinfo & _TGA_IMAGEINFO_ALPHA_MASK) >> - _TGA_IMAGEINFO_ALPHA_SHIFT; - h->_origin = (int) (h->imageinfo & _TGA_IMAGEINFO_ORIGIN_MASK) >> - _TGA_IMAGEINFO_ORIGIN_SHIFT; - - // Validate TGA header (is this a TGA file?) - if( (h->cmaptype == 0 || h->cmaptype == 1) && - ((h->imagetype >= 1 && h->imagetype <= 3) || - (h->imagetype >= 9 && h->imagetype <= 11)) && - (h->bitsperpixel == 8 || h->bitsperpixel == 24 || - h->bitsperpixel == 32) ) - { - // Skip the ID field - _glfwSeekStream( s, h->idlen, SEEK_CUR ); - - // Indicate that the TGA header was valid - return GL_TRUE; - } - else - { - // Restore file position - _glfwSeekStream( s, pos, SEEK_SET ); - - // Indicate that the TGA header was invalid - return GL_FALSE; - } -} - -//======================================================================== -// Read Run-Length Encoded data -//======================================================================== - -static void ReadTGA_RLE( unsigned char *buf, int size, int bpp, - _GLFWstream *s ) -{ - int repcount, bytes, k, n; - unsigned char pixel[ 4 ]; - char c; - - // Dummy check - if( bpp > 4 ) - { - return; - } - - while( size > 0 ) - { - // Get repetition count - _glfwReadStream( s, &c, 1 ); - repcount = (unsigned int) c; - bytes = ((repcount & 127) + 1) * bpp; - if( size < bytes ) - { - bytes = size; - } - - // Run-Length packet? - if( repcount & 128 ) - { - _glfwReadStream( s, pixel, bpp ); - for( n = 0; n < (repcount & 127) + 1; n ++ ) - { - for( k = 0; k < bpp; k ++ ) - { - *buf ++ = pixel[ k ]; - } - } - } - else - { - // It's a Raw packet - _glfwReadStream( s, buf, bytes ); - buf += bytes; - } - - size -= bytes; - } -} - - -//======================================================================== -// Read a TGA image from a file -//======================================================================== - -int _glfwReadTGA( _GLFWstream *s, GLFWimage *img, int flags ) -{ - _tga_header_t h; - unsigned char *cmap, *pix, tmp, *src, *dst; - int cmapsize, pixsize, pixsize2; - int bpp, bpp2, k, m, n, swapx, swapy; - - // Read TGA header - if( !ReadTGAHeader( s, &h ) ) - { - return 0; - } - - // Is there a colormap? - cmapsize = (h.cmaptype == _TGA_CMAPTYPE_PRESENT ? 1 : 0) * h.cmaplen * - ((h.cmapentrysize+7) / 8); - if( cmapsize > 0 ) - { - // Is it a colormap that we can handle? - if( (h.cmapentrysize != 24 && h.cmapentrysize != 32) || - h.cmaplen == 0 || h.cmaplen > 256 ) - { - return 0; - } - - // Allocate memory for colormap - cmap = (unsigned char *) malloc( cmapsize ); - if( cmap == NULL ) - { - return 0; - } - - // Read colormap from file - _glfwReadStream( s, cmap, cmapsize ); - } - else - { - cmap = NULL; - } - - // Size of pixel data - pixsize = h.width * h.height * ((h.bitsperpixel + 7) / 8); - - // Bytes per pixel (pixel data - unexpanded) - bpp = (h.bitsperpixel + 7) / 8; - - // Bytes per pixel (expanded pixels - not colormap indeces) - if( cmap ) - { - bpp2 = (h.cmapentrysize + 7) / 8; - } - else - { - bpp2 = bpp; - } - - // For colormaped images, the RGB/RGBA image data may use more memory - // than the stored pixel data - pixsize2 = h.width * h.height * bpp2; - - // Allocate memory for pixel data - pix = (unsigned char *) malloc( pixsize2 ); - if( pix == NULL ) - { - if( cmap ) - { - free( cmap ); - } - return 0; - } - - // Read pixel data from file - if( h.imagetype >= _TGA_IMAGETYPE_CMAP_RLE ) - { - ReadTGA_RLE( pix, pixsize, bpp, s ); - } - else - { - _glfwReadStream( s, pix, pixsize ); - } - - // If the image origin is not what we want, re-arrange the pixels - switch( h._origin ) - { - default: - case _TGA_ORIGIN_UL: - swapx = 0; - swapy = 1; - break; - - case _TGA_ORIGIN_BL: - swapx = 0; - swapy = 0; - break; - - case _TGA_ORIGIN_UR: - swapx = 1; - swapy = 1; - break; - - case _TGA_ORIGIN_BR: - swapx = 1; - swapy = 0; - break; - } - if( (swapy && !(flags & GLFW_ORIGIN_UL_BIT)) || - (!swapy && (flags & GLFW_ORIGIN_UL_BIT)) ) - { - src = pix; - dst = &pix[ (h.height-1)*h.width*bpp ]; - for( n = 0; n < h.height/2; n ++ ) - { - for( m = 0; m < h.width ; m ++ ) - { - for( k = 0; k < bpp; k ++ ) - { - tmp = *src; - *src ++ = *dst; - *dst ++ = tmp; - } - } - dst -= 2*h.width*bpp; - } - } - if( swapx ) - { - src = pix; - dst = &pix[ (h.width-1)*bpp ]; - for( n = 0; n < h.height; n ++ ) - { - for( m = 0; m < h.width/2 ; m ++ ) - { - for( k = 0; k < bpp; k ++ ) - { - tmp = *src; - *src ++ = *dst; - *dst ++ = tmp; - } - dst -= 2*bpp; - } - src += ((h.width+1)/2)*bpp; - dst += ((3*h.width+1)/2)*bpp; - } - } - - // Convert BGR/BGRA to RGB/RGBA, and optionally colormap indeces to - // RGB/RGBA values - if( cmap ) - { - // Convert colormap pixel format (BGR -> RGB or BGRA -> RGBA) - if( bpp2 == 3 || bpp2 == 4 ) - { - for( n = 0; n < h.cmaplen; n ++ ) - { - tmp = cmap[ n*bpp2 ]; - cmap[ n*bpp2 ] = cmap[ n*bpp2 + 2 ]; - cmap[ n*bpp2 + 2 ] = tmp; - } - } - - // Convert pixel data to RGB/RGBA data - for( m = h.width * h.height - 1; m >= 0; m -- ) - { - n = pix[ m ]; - for( k = 0; k < bpp2; k ++ ) - { - pix[ m*bpp2 + k ] = cmap[ n*bpp2 + k ]; - } - } - - // Free memory for colormap (it's not needed anymore) - free( cmap ); - } - else - { - // Convert image pixel format (BGR -> RGB or BGRA -> RGBA) - if( bpp2 == 3 || bpp2 == 4 ) - { - src = pix; - dst = &pix[ 2 ]; - for( n = 0; n < h.height * h.width; n ++ ) - { - tmp = *src; - *src = *dst; - *dst = tmp; - src += bpp2; - dst += bpp2; - } - } - } - - // Fill out GLFWimage struct (the Format field will be set by - // glfwReadImage) - img->Width = h.width; - img->Height = h.height; - img->BytesPerPixel = bpp2; - img->Data = pix; - - return 1; -} - diff --git a/ogl_editor/src/External/glfw/lib/thread.c b/ogl_editor/src/External/glfw/lib/thread.c deleted file mode 100644 index 42a5679..0000000 --- a/ogl_editor/src/External/glfw/lib/thread.c +++ /dev/null @@ -1,341 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Any -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Find pointer to thread with a matching ID -//======================================================================== - -_GLFWthread * _glfwGetThreadPointer( int ID ) -{ - _GLFWthread *t; - - for( t = &_glfwThrd.First; t != NULL; t = t->Next ) - { - if( t->ID == ID ) - { - break; - } - } - - return t; -} - - -//======================================================================== -// Append thread to thread list -//======================================================================== - -void _glfwAppendThread( _GLFWthread * t ) -{ - _GLFWthread *t_tmp; - - t_tmp = &_glfwThrd.First; - while( t_tmp->Next != NULL ) - { - t_tmp = t_tmp->Next; - } - t_tmp->Next = t; - t->Previous = t_tmp; - t->Next = NULL; -} - - -//======================================================================== -// Remove thread from thread list -//======================================================================== - -void _glfwRemoveThread( _GLFWthread * t ) -{ - if( t->Previous != NULL ) - { - t->Previous->Next = t->Next; - } - if( t->Next != NULL ) - { - t->Next->Previous = t->Previous; - } - free( (void *) t ); -} - - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// Create a new thread -//======================================================================== - -GLFWAPI GLFWthread GLFWAPIENTRY glfwCreateThread( GLFWthreadfun fun, - void *arg ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return -1; - } - - // Return the GLFW thread ID - return _glfwPlatformCreateThread( fun, arg ); -} - - -//======================================================================== -// Kill a thread. NOTE: THIS IS A VERY DANGEROUS OPERATION, AND SHOULD NOT -// BE USED EXCEPT IN EXTREME SITUATIONS! -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwDestroyThread( GLFWthread ID ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return; - } - - // Is it a valid thread? (killing the main thread is not allowed) - if( ID < 1 ) - { - return; - } - - _glfwPlatformDestroyThread( ID ); -} - - -//======================================================================== -// Wait for a thread to die -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwWaitThread( GLFWthread ID, int waitmode ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return GL_TRUE; - } - - // Is it a valid thread? (waiting for the main thread is not allowed) - if( ID < 1 ) - { - return GL_TRUE; - } - - return _glfwPlatformWaitThread( ID, waitmode ); -} - - -//======================================================================== -// Return the thread ID for the current thread -//======================================================================== - -GLFWAPI GLFWthread GLFWAPIENTRY glfwGetThreadID( void ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return 0; - } - - return _glfwPlatformGetThreadID(); -} - - -//======================================================================== -// Create a mutual exclusion object -//======================================================================== - -GLFWAPI GLFWmutex GLFWAPIENTRY glfwCreateMutex( void ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return (GLFWmutex) 0; - } - - return _glfwPlatformCreateMutex(); -} - - -//======================================================================== -// Destroy a mutual exclusion object -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwDestroyMutex( GLFWmutex mutex ) -{ - // Initialized & valid mutex (no real way of assuring this)? - if( !_glfwInitialized || !mutex ) - { - return; - } - - _glfwPlatformDestroyMutex( mutex ); -} - - -//======================================================================== -// Request access to a mutex -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwLockMutex( GLFWmutex mutex ) -{ - // Initialized & valid mutex (no real way of assuring this)? - if( !_glfwInitialized && !mutex ) - { - return; - } - - _glfwPlatformLockMutex( mutex ); -} - - -//======================================================================== -// Release a mutex -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwUnlockMutex( GLFWmutex mutex ) -{ - // Initialized & valid mutex (no real way of assuring this)? - if( !_glfwInitialized && !mutex ) - { - return; - } - - _glfwPlatformUnlockMutex( mutex ); -} - - -//======================================================================== -// Create a new condition variable object -//======================================================================== - -GLFWAPI GLFWcond GLFWAPIENTRY glfwCreateCond( void ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return (GLFWcond) 0; - } - - return _glfwPlatformCreateCond(); -} - - -//======================================================================== -// Destroy a condition variable object -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwDestroyCond( GLFWcond cond ) -{ - // Initialized & valid condition variable? - if( !_glfwInitialized || !cond ) - { - return; - } - - _glfwPlatformDestroyCond( cond ); -} - - -//======================================================================== -// Wait for a condition to be raised -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwWaitCond( GLFWcond cond, GLFWmutex mutex, - double timeout ) -{ - // Initialized & valid condition variable and mutex? - if( !_glfwInitialized || !cond || !mutex ) - { - return; - } - - _glfwPlatformWaitCond( cond, mutex, timeout ); -} - - -//======================================================================== -// Signal a condition to one waiting thread -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSignalCond( GLFWcond cond ) -{ - // Initialized & valid condition variable? - if( !_glfwInitialized || !cond ) - { - return; - } - - _glfwPlatformSignalCond( cond ); -} - - -//======================================================================== -// Broadcast a condition to all waiting threads -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwBroadcastCond( GLFWcond cond ) -{ - // Initialized & valid condition variable? - if( !_glfwInitialized || !cond ) - { - return; - } - - _glfwPlatformBroadcastCond( cond ); -} - - -//======================================================================== -// Return the number of processors in the system. This information can be -// useful for determining the optimal number of threads to use for -// performing a certain task. -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwGetNumberOfProcessors( void ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return 0; - } - - return _glfwPlatformGetNumberOfProcessors(); -} - diff --git a/ogl_editor/src/External/glfw/lib/time.c b/ogl_editor/src/External/glfw/lib/time.c deleted file mode 100644 index fc95f44..0000000 --- a/ogl_editor/src/External/glfw/lib/time.c +++ /dev/null @@ -1,84 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Any -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// Return timer value in seconds -//======================================================================== - -GLFWAPI double GLFWAPIENTRY glfwGetTime( void ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return 0.0; - } - - return _glfwPlatformGetTime(); -} - - -//======================================================================== -// Set timer value in seconds -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetTime( double time ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return; - } - - _glfwPlatformSetTime( time ); -} - - -//======================================================================== -// Put a thread to sleep for a specified amount of time -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSleep( double time ) -{ - // Is GLFW initialized? - if( !_glfwInitialized ) - { - return; - } - - _glfwPlatformSleep( time ); -} - diff --git a/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.cross-mgw b/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.cross-mgw deleted file mode 100644 index 80df1fd..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.cross-mgw +++ /dev/null @@ -1,265 +0,0 @@ -########################################################################## -# Makefile for GLFW on Windows using MinGW32. -#------------------------------------------------------------------------- -# To compile GLFW using this makefile, run: -# make -f Makefile.win32.mgw -########################################################################## -PREFIX ?= /usr/i586-mingw32msvc -TARGET ?= i586-mingw32msvc- - -########################################################################## -# GLFW version -########################################################################## -VERMAJOR = 2 -VERMINOR = 7 - -########################################################################## -# Compiler settings -########################################################################## -CC = gcc -CFLAGS = -c -I. -I.. -Wall -O2 -CFLAGS_DLL = $(CFLAGS) -mdll -DGLFW_BUILD_DLL -D_GLFW_NO_DLOAD_GDI32 -D_GLFW_NO_DLOAD_WINMM - -HEADERS = ../../include/GL/glfw.h ../internal.h platform.h - -########################################################################## -# Library builder settings -########################################################################## -# Static library -MKLIB = ar -LIBFLAGS = -rcs - -# DLL -LINKFLAGS = -s -Wl,--major-image-version,$(VERMAJOR),--minor-image-version,$(VERMINOR) -LINKLIBS = -lopengl32 -lwinmm -lgdi32 - -DLLTOOL = dlltool - -SED = sed -INSTALL = install - -########################################################################## -# Object files for static library -########################################################################## -OBJS = \ - enable.o \ - fullscreen.o \ - glext.o \ - image.o \ - init.o \ - input.o \ - joystick.o \ - stream.o \ - tga.o \ - thread.o \ - time.o \ - window.o \ - win32_enable.o \ - win32_fullscreen.o \ - win32_glext.o \ - win32_init.o \ - win32_joystick.o \ - win32_thread.o \ - win32_time.o \ - win32_window.o - - -########################################################################## -# Object files for dynamic library -########################################################################## -DLLOBJS = \ - enable_dll.o \ - fullscreen_dll.o \ - glext_dll.o \ - image_dll.o \ - init_dll.o \ - input_dll.o \ - joystick_dll.o \ - stream_dll.o \ - tga_dll.o \ - thread_dll.o \ - time_dll.o \ - window_dll.o \ - win32_dllmain_dll.o \ - win32_enable_dll.o \ - win32_fullscreen_dll.o \ - win32_glext_dll.o \ - win32_init_dll.o \ - win32_joystick_dll.o \ - win32_thread_dll.o \ - win32_time_dll.o \ - win32_window_dll.o - - -########################################################################## -# Default: Build static and dynamic versions of GLFW -########################################################################## -all: libglfw.a glfw.dll - -########################################################################## -# Install GLFW header and static library -########################################################################## -install: glfw.dll libglfw.a libglfw.pc - $(INSTALL) -d $(PREFIX)/bin - $(INSTALL) -c glfw.dll $(PREFIX)/bin/glfw.dll - $(INSTALL) -d $(PREFIX)/lib - $(INSTALL) -c -m 644 libglfw.a $(PREFIX)/lib/libglfw.a - $(INSTALL) -d $(PREFIX)/include/GL - $(INSTALL) -c -m 644 ../../include/GL/glfw.h $(PREFIX)/include/GL/glfw.h - $(INSTALL) -d $(PREFIX)/lib/pkgconfig - $(INSTALL) -c -m 644 libglfw.pc $(PREFIX)/lib/pkgconfig/libglfw.pc - -########################################################################## -# Clean up generated files -########################################################################## -clean: - rm -f $(OBJS) $(DLLOBJS) - rm -f libglfw.a libglfwdll.a glfw.dll libglfw.pc - -########################################################################## -# Rule for building static library -########################################################################## -libglfw.a: $(OBJS) - $(TARGET)$(MKLIB) $(LIBFLAGS) $@ $(OBJS) $(SYSOBJS) - -########################################################################## -# Rules for building dynamic library -########################################################################## -glfw.dll: $(DLLOBJS) - $(TARGET)$(CC) -shared -o $@ -Wl,--output-def,libglfwdll.def $(DLLOBJS) $(LINKLIBS) - $(TARGET)$(CC) -shared -o $@ -Wl,--kill-at $(DLLOBJS) $(LINKFLAGS) $(LINKLIBS) - $(TARGET)$(DLLTOOL) --kill-at --output-lib libglfwdll.a --dllname $@ --def libglfwdll.def - -libglfw.pc: libglfw.pc.in - $(SED) -e 's,\@PREFIX\@,$(PREFIX),' libglfw.pc.in > libglfw.pc - -########################################################################## -# Rules for building static library object files -########################################################################## -enable.o: ../enable.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ ../enable.c - -fullscreen.o: ../fullscreen.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ ../fullscreen.c - -glext.o: ../glext.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ ../glext.c - -image.o: ../image.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ ../image.c - -init.o: ../init.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ ../init.c - -input.o: ../input.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ ../input.c - -joystick.o: ../joystick.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ ../joystick.c - -stream.o: ../stream.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ ../stream.c - -tga.o: ../tga.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ ../tga.c - -thread.o: ../thread.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ ../thread.c - -time.o: ../time.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ ../time.c - -window.o: ../window.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ ../window.c - -win32_enable.o: win32_enable.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ win32_enable.c - -win32_fullscreen.o: win32_fullscreen.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ win32_fullscreen.c - -win32_glext.o: win32_glext.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ win32_glext.c - -win32_init.o: win32_init.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ win32_init.c - -win32_joystick.o: win32_joystick.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ win32_joystick.c - -win32_thread.o: win32_thread.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ win32_thread.c - -win32_time.o: win32_time.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ win32_time.c - -win32_window.o: win32_window.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS) -o $@ win32_window.c - - -########################################################################## -# Rules for building dynamic library object files -########################################################################## -enable_dll.o: ../enable.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../enable.c - -fullscreen_dll.o: ../fullscreen.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../fullscreen.c - -glext_dll.o: ../glext.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../glext.c - -image_dll.o: ../image.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../image.c - -init_dll.o: ../init.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../init.c - -input_dll.o: ../input.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../input.c - -joystick_dll.o: ../joystick.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../joystick.c - -stream_dll.o: ../stream.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../stream.c - -tga_dll.o: ../tga.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../tga.c - -thread_dll.o: ../thread.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../thread.c - -time_dll.o: ../time.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../time.c - -window_dll.o: ../window.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ ../window.c - -win32_dllmain_dll.o: win32_dllmain.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_dllmain.c - -win32_enable_dll.o: win32_enable.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_enable.c - -win32_fullscreen_dll.o: win32_fullscreen.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_fullscreen.c - -win32_glext_dll.o: win32_glext.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_glext.c - -win32_init_dll.o: win32_init.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_init.c - -win32_joystick_dll.o: win32_joystick.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_joystick.c - -win32_thread_dll.o: win32_thread.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_thread.c - -win32_time_dll.o: win32_time.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_time.c - -win32_window_dll.o: win32_window.c $(HEADERS) - $(TARGET)$(CC) $(CFLAGS_DLL) -o $@ win32_window.c - diff --git a/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.lcc b/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.lcc deleted file mode 100644 index e36ad60..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.lcc +++ /dev/null @@ -1,242 +0,0 @@ -########################################################################## -# Makefile for GLFW on Windows using LCC-Win32. -#------------------------------------------------------------------------- -# To compile GLFW using this makefile, run: -# make -f Makefile.win32.lcc -########################################################################## - -########################################################################## -# Default: Build static and dynamic versions of GLFW -########################################################################## -all: glfw.lib glfw.dll - - -########################################################################## -# GLFW version -########################################################################## -VERMAJOR = 2 -VERMINOR = 7 - - -########################################################################## -# Compiler settings -########################################################################## -CC = lc -CFLAGS = -c -O -A -I. -I.. -CFLAGS_DLL = $(CFLAGS) -DGLFW_BUILD_DLL - - -########################################################################## -# Library builder settings -########################################################################## -# Static library -MKLIB = lcclib -LIBFLAGS = - -# DLL -LINK = lcclnk -LINKFLAGS = -dll -nounderscores -version $(VERMAJOR).$(VERMINOR) -s -LINKLIBS = opengl32.lib - - -########################################################################## -# Object files for static library -########################################################################## -OBJS = \ - enable.obj \ - fullscreen.obj \ - glext.obj \ - image.obj \ - init.obj \ - input.obj \ - joystick.obj \ - stream.obj \ - tga.obj \ - thread.obj \ - time.obj \ - window.obj \ - win32_enable.obj \ - win32_fullscreen.obj \ - win32_glext.obj \ - win32_init.obj \ - win32_joystick.obj \ - win32_thread.obj \ - win32_time.obj \ - win32_window.obj - - -########################################################################## -# Object files for dynamic library -########################################################################## -DLLOBJS = \ - enable_dll.obj \ - fullscreen_dll.obj \ - glext_dll.obj \ - image_dll.obj \ - init_dll.obj \ - input_dll.obj \ - joystick_dll.obj \ - stream_dll.obj \ - tga_dll.obj \ - thread_dll.obj \ - time_dll.obj \ - window_dll.obj \ - win32_dllmain_dll.obj \ - win32_enable_dll.obj \ - win32_fullscreen_dll.obj \ - win32_glext_dll.obj \ - win32_init_dll.obj \ - win32_joystick_dll.obj \ - win32_thread_dll.obj \ - win32_time_dll.obj \ - win32_window_dll.obj - - - -########################################################################## -# Rule for building static library -########################################################################## -glfw.lib: $(OBJS) - $(MKLIB) $(LIBFLAGS) /out:glfw.lib $(OBJS) - - -########################################################################## -# Rule for building dynamic library -########################################################################## -glfw.dll: $(DLLOBJS) - if exist glfw.lib rename glfw.lib glfw_lib.bak - $(LINK) $(LINKFLAGS) -o $@ $(DLLOBJS) $(LINKLIBS) - if exist glfwdll.lib del glfwdll.lib - rename glfw.lib glfwdll.lib - if exist glfw_lib.bak rename glfw_lib.bak glfw.lib - - -########################################################################## -# Rules for building static library object files -########################################################################## -enable.obj: ..\\enable.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ ..\\enable.c - -fullscreen.obj: ..\\fullscreen.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ ..\\fullscreen.c - -glext.obj: ..\\glext.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ ..\\glext.c - -image.obj: ..\\image.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ ..\\image.c - -init.obj: ..\\init.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ ..\\init.c - -input.obj: ..\\input.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ ..\\input.c - -joystick.obj: ..\\joystick.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ ..\\joystick.c - -stream.obj: ..\\stream.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ ..\\stream.c - -tga.obj: ..\\tga.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ ..\\tga.c - -thread.obj: ..\\thread.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ ..\\thread.c - -time.obj: ..\\time.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ ..\\time.c - -window.obj: ..\\window.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ ..\\window.c - -win32_enable.obj: win32_enable.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ win32_enable.c - -win32_fullscreen.obj: win32_fullscreen.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ win32_fullscreen.c - -win32_glext.obj: win32_glext.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ win32_glext.c - -win32_init.obj: win32_init.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ win32_init.c - -win32_joystick.obj: win32_joystick.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ win32_joystick.c - -win32_thread.obj: win32_thread.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ win32_thread.c - -win32_time.obj: win32_time.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ win32_time.c - -win32_window.obj: win32_window.c ..\\internal.h platform.h - $(CC) $(CFLAGS) -Fo$@ win32_window.c - - -########################################################################## -# Rules for building dynamic library object files -########################################################################## -enable_dll.obj: ..\\enable.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ ..\\enable.c - -fullscreen_dll.obj: ..\\fullscreen.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ ..\\fullscreen.c - -glext_dll.obj: ..\\glext.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ ..\\glext.c - -image_dll.obj: ..\\image.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ ..\\image.c - -init_dll.obj: ..\\init.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ ..\\init.c - -input_dll.obj: ..\\input.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ ..\\input.c - -joystick_dll.obj: ..\\joystick.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ ..\\joystick.c - -stream_dll.obj: ..\\stream.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ ..\\stream.c - -tga_dll.obj: ..\\tga.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ ..\\tga.c - -thread_dll.obj: ..\\thread.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ ..\\thread.c - -time_dll.obj: ..\\time.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ ..\\time.c - -window_dll.obj: ..\\window.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ ..\\window.c - -win32_dllmain_dll.obj: win32_dllmain.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ win32_dllmain.c - -win32_enable_dll.obj: win32_enable.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ win32_enable.c - -win32_fullscreen_dll.obj: win32_fullscreen.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ win32_fullscreen.c - -win32_glext_dll.obj: win32_glext.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ win32_glext.c - -win32_init_dll.obj: win32_init.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ win32_init.c - -win32_joystick_dll.obj: win32_joystick.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ win32_joystick.c - -win32_thread_dll.obj: win32_thread.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ win32_thread.c - -win32_time_dll.obj: win32_time.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ win32_time.c - -win32_window_dll.obj: win32_window.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) -Fo$@ win32_window.c diff --git a/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.mingw b/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.mingw deleted file mode 100644 index 4d6ebc6..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.mingw +++ /dev/null @@ -1,242 +0,0 @@ -########################################################################## -# Makefile for GLFW on Windows using MinGW32. -#------------------------------------------------------------------------- -# To compile GLFW using this makefile, run: -# make -f Makefile.win32.mgw -########################################################################## - -########################################################################## -# Default: Build static and dynamic versions of GLFW -########################################################################## -all: libglfw.a glfw.dll - - -########################################################################## -# GLFW version -########################################################################## -VERMAJOR = 2 -VERMINOR = 7 - - -########################################################################## -# Compiler settings -########################################################################## -CC = gcc -CFLAGS = -c -I. -I.. -Wall -O2 -CFLAGS_DLL = $(CFLAGS) -mdll -DGLFW_BUILD_DLL -D_GLFW_NO_DLOAD_GDI32 -D_GLFW_NO_DLOAD_WINMM - - -########################################################################## -# Library builder settings -########################################################################## -# Static library -MKLIB = ar -LIBFLAGS = -rcs - -# DLL -LINKFLAGS = -s -Wl,--major-image-version,$(VERMAJOR),--minor-image-version,$(VERMINOR) -LINKLIBS = -lopengl32 -lwinmm -lgdi32 - -DLLTOOL = dlltool - - -########################################################################## -# Object files for static library -########################################################################## -OBJS = \ - enable.o \ - fullscreen.o \ - glext.o \ - image.o \ - init.o \ - input.o \ - joystick.o \ - stream.o \ - tga.o \ - thread.o \ - time.o \ - window.o \ - win32_enable.o \ - win32_fullscreen.o \ - win32_glext.o \ - win32_init.o \ - win32_joystick.o \ - win32_thread.o \ - win32_time.o \ - win32_window.o - - -########################################################################## -# Object files for dynamic library -########################################################################## -DLLOBJS = \ - enable_dll.o \ - fullscreen_dll.o \ - glext_dll.o \ - image_dll.o \ - init_dll.o \ - input_dll.o \ - joystick_dll.o \ - stream_dll.o \ - tga_dll.o \ - thread_dll.o \ - time_dll.o \ - window_dll.o \ - win32_dllmain_dll.o \ - win32_enable_dll.o \ - win32_fullscreen_dll.o \ - win32_glext_dll.o \ - win32_init_dll.o \ - win32_joystick_dll.o \ - win32_thread_dll.o \ - win32_time_dll.o \ - win32_window_dll.o - - - -########################################################################## -# Rule for building static library -########################################################################## -libglfw.a: $(OBJS) - $(MKLIB) $(LIBFLAGS) $@ $(OBJS) $(SYSOBJS) - - -########################################################################## -# Rule for building dynamic library -########################################################################## -glfw.dll: $(DLLOBJS) - $(CC) -shared -o $@ -Wl,--output-def,libglfwdll.def $(DLLOBJS) $(LINKLIBS) - $(CC) -shared -o $@ -Wl,--kill-at $(DLLOBJS) $(LINKFLAGS) $(LINKLIBS) - $(DLLTOOL) --kill-at --output-lib libglfwdll.a --dllname $@ --def libglfwdll.def - - -########################################################################## -# Rules for building static library object files -########################################################################## -enable.o: ../enable.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../enable.c - -fullscreen.o: ../fullscreen.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../fullscreen.c - -glext.o: ../glext.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../glext.c - -image.o: ../image.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../image.c - -init.o: ../init.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../init.c - -input.o: ../input.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../input.c - -joystick.o: ../joystick.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../joystick.c - -stream.o: ../stream.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../stream.c - -tga.o: ../tga.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../tga.c - -thread.o: ../thread.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../thread.c - -time.o: ../time.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../time.c - -window.o: ../window.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ ../window.c - -win32_enable.o: win32_enable.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ win32_enable.c - -win32_fullscreen.o: win32_fullscreen.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ win32_fullscreen.c - -win32_glext.o: win32_glext.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ win32_glext.c - -win32_init.o: win32_init.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ win32_init.c - -win32_joystick.o: win32_joystick.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ win32_joystick.c - -win32_thread.o: win32_thread.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ win32_thread.c - -win32_time.o: win32_time.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ win32_time.c - -win32_window.o: win32_window.c ../internal.h platform.h - $(CC) $(CFLAGS) -o $@ win32_window.c - - -########################################################################## -# Rules for building dynamic library object files -########################################################################## -enable_dll.o: ../enable.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ ../enable.c - -fullscreen_dll.o: ../fullscreen.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ ../fullscreen.c - -glext_dll.o: ../glext.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ ../glext.c - -image_dll.o: ../image.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ ../image.c - -init_dll.o: ../init.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ ../init.c - -input_dll.o: ../input.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ ../input.c - -joystick_dll.o: ../joystick.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ ../joystick.c - -stream_dll.o: ../stream.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ ../stream.c - -tga_dll.o: ../tga.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ ../tga.c - -thread_dll.o: ../thread.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ ../thread.c - -time_dll.o: ../time.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ ../time.c - -window_dll.o: ../window.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ ../window.c - -win32_dllmain_dll.o: win32_dllmain.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ win32_dllmain.c - -win32_enable_dll.o: win32_enable.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ win32_enable.c - -win32_fullscreen_dll.o: win32_fullscreen.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ win32_fullscreen.c - -win32_glext_dll.o: win32_glext.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ win32_glext.c - -win32_init_dll.o: win32_init.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ win32_init.c - -win32_joystick_dll.o: win32_joystick.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ win32_joystick.c - -win32_thread_dll.o: win32_thread.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ win32_thread.c - -win32_time_dll.o: win32_time.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ win32_time.c - -win32_window_dll.o: win32_window.c ../internal.h platform.h - $(CC) $(CFLAGS_DLL) -o $@ win32_window.c - diff --git a/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.msys b/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.msys deleted file mode 100644 index 6ab918e..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.msys +++ /dev/null @@ -1,273 +0,0 @@ -########################################################################## -# Makefile for GLFW on Windows using MSYS -#------------------------------------------------------------------------- -# To compile GLFW using this makefile, run: -# make -f Makefile.win32.msys -########################################################################## - -PREFIX ?= /usr/local - -########################################################################## -# GLFW version -########################################################################## -VERMAJOR = 2 -VERMINOR = 7 - - -########################################################################## -# Compiler settings -########################################################################## -CC = gcc -CFLAGS = -c -I. -I.. -Wall -mwin32 -O2 -CFLAGS_DLL = $(CFLAGS) -mdll -DGLFW_BUILD_DLL -D_GLFW_NO_DLOAD_GDI32 -D_GLFW_NO_DLOAD_WINMM - -HEADERS = ../../include/GL/glfw.h ../internal.h platform.h - -########################################################################## -# Library builder settings -########################################################################## -# Static library -MKLIB = ar -LIBFLAGS = -rcs - -# DLL -LINKFLAGS = -shared -s -Wl,--kill-at,--major-image-version,$(VERMAJOR),--minor-image-version,$(VERMINOR) -LINKLIBS = -lopengl32 -lwinmm -lgdi32 - -DLLTOOL = dlltool - -SED = sed -INSTALL = install - - -########################################################################## -# Object files for static library -########################################################################## -OBJS = \ - enable.o \ - fullscreen.o \ - glext.o \ - image.o \ - init.o \ - input.o \ - joystick.o \ - stream.o \ - tga.o \ - thread.o \ - time.o \ - window.o \ - win32_enable.o \ - win32_fullscreen.o \ - win32_glext.o \ - win32_init.o \ - win32_joystick.o \ - win32_thread.o \ - win32_time.o \ - win32_window.o - - -########################################################################## -# Object files for dynamic library -########################################################################## -DLLOBJS = \ - enable_dll.o \ - fullscreen_dll.o \ - glext_dll.o \ - image_dll.o \ - init_dll.o \ - input_dll.o \ - joystick_dll.o \ - stream_dll.o \ - tga_dll.o \ - thread_dll.o \ - time_dll.o \ - window_dll.o \ - win32_dllmain_dll.o \ - win32_enable_dll.o \ - win32_fullscreen_dll.o \ - win32_glext_dll.o \ - win32_init_dll.o \ - win32_joystick_dll.o \ - win32_thread_dll.o \ - win32_time_dll.o \ - win32_window_dll.o - - -########################################################################## -# Default: Build static and dynamic versions of GLFW -########################################################################## -all: libglfw.a glfw.dll - -########################################################################## -# Install GLFW header and static library -########################################################################## -install: libglfw.a libglfw.pc - $(INSTALL) -d $(PREFIX)/lib - $(INSTALL) -c -m 644 libglfw.a $(PREFIX)/lib/libglfw.a - $(INSTALL) -d $(PREFIX)/include/GL - $(INSTALL) -c -m 644 ../../include/GL/glfw.h $(PREFIX)/include/GL/glfw.h - $(INSTALL) -d $(PREFIX)/lib/pkgconfig - $(INSTALL) -c -m 644 libglfw.pc $(PREFIX)/lib/pkgconfig/libglfw.pc - - -########################################################################## -# Clean up generated files -########################################################################## -clean: - rm -f $(OBJS) $(DLLOBJS) - rm -f libglfw.a glfw.dll libglfw.pc - - -########################################################################## -# Rule for building libglfw.pc -########################################################################## -libglfw.pc: libglfw.pc.in - $(SED) -e 's,\@PREFIX\@,$(PREFIX),' libglfw.pc.in > libglfw.pc - - -########################################################################## -# Rule for building static library -########################################################################## -libglfw.a: $(OBJS) - $(MKLIB) $(LIBFLAGS) libglfw.a $(OBJS) - - -########################################################################## -# Rule for building dynamic library -########################################################################## -glfw.dll: $(DLLOBJS) - $(CC) -shared -o $@ -Wl,--output-def,libglfwdll.def $(DLLOBJS) $(LINKLIBS) - $(CC) -shared -o $@ -Wl,--kill-at $(DLLOBJS) $(LINKFLAGS) $(LINKLIBS) - $(DLLTOOL) --kill-at --output-lib libglfwdll.a --dllname $@ --def libglfwdll.def - - -########################################################################## -# Rules for building static library object files -########################################################################## -enable.o: ../enable.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../enable.c - -fullscreen.o: ../fullscreen.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../fullscreen.c - -glext.o: ../glext.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../glext.c - -image.o: ../image.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../image.c - -init.o: ../init.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../init.c - -input.o: ../input.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../input.c - -joystick.o: ../joystick.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../joystick.c - -stream.o: ../stream.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../stream.c - -tga.o: ../tga.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../tga.c - -thread.o: ../thread.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../thread.c - -time.o: ../time.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../time.c - -window.o: ../window.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../window.c - -win32_enable.o: win32_enable.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ win32_enable.c - -win32_fullscreen.o: win32_fullscreen.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ win32_fullscreen.c - -win32_glext.o: win32_glext.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ win32_glext.c - -win32_init.o: win32_init.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ win32_init.c - -win32_joystick.o: win32_joystick.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ win32_joystick.c - -win32_thread.o: win32_thread.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ win32_thread.c - -win32_time.o: win32_time.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ win32_time.c - -win32_window.o: win32_window.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ win32_window.c - - -########################################################################## -# Rules for building dynamic library object files -########################################################################## -enable_dll.o: ../enable.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ ../enable.c - -fullscreen_dll.o: ../fullscreen.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ ../fullscreen.c - -glext_dll.o: ../glext.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ ../glext.c - -image_dll.o: ../image.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ ../image.c - -init_dll.o: ../init.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ ../init.c - -input_dll.o: ../input.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ ../input.c - -joystick_dll.o: ../joystick.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ ../joystick.c - -stream_dll.o: ../stream.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ ../stream.c - -tga_dll.o: ../tga.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ ../tga.c - -thread_dll.o: ../thread.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ ../thread.c - -time_dll.o: ../time.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ ../time.c - -window_dll.o: ../window.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ ../window.c - -win32_dllmain_dll.o: win32_dllmain.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ win32_dllmain.c - -win32_enable_dll.o: win32_enable.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ win32_enable.c - -win32_fullscreen_dll.o: win32_fullscreen.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ win32_fullscreen.c - -win32_glext_dll.o: win32_glext.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ win32_glext.c - -win32_init_dll.o: win32_init.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ win32_init.c - -win32_joystick_dll.o: win32_joystick.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ win32_joystick.c - -win32_thread_dll.o: win32_thread.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ win32_thread.c - -win32_time_dll.o: win32_time.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ win32_time.c - -win32_window_dll.o: win32_window.c $(HEADERS) - $(CC) $(CFLAGS_DLL) -o $@ win32_window.c - diff --git a/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.ow b/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.ow deleted file mode 100644 index 6063f42..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/Makefile.win32.ow +++ /dev/null @@ -1,238 +0,0 @@ -########################################################################## -# Makefile for GLFW on Windows using Open Watcom 1.0. -#------------------------------------------------------------------------- -# To compile GLFW using this makefile, run: -# "wmake -ms -f Makefile.win32.ow" or "nmake -f Makefile.win32.ow" -########################################################################## - -########################################################################## -# Default: Build static and dynamic versions of GLFW -########################################################################## -all: glfw.lib glfw.dll - - -########################################################################## -# GLFW version -########################################################################## -VERMAJOR = 2 -VERMINOR = 7 - - -########################################################################## -# Compiler settings -########################################################################## -CC = cl386 -CFLAGS = /nologo /c /O1sgiy /Gs /W3 /I. /I.. -CFLAGS_DLL = $(CFLAGS) /DGLFW_BUILD_DLL - - -########################################################################## -# Library builder settings -########################################################################## -# Static library -MKLIB = lib386 -LIBFLAGS = /nologo - -# DLL -LINK = wlink -LINKFLAGS = OPTION { quiet version=$(VERMAJOR).$(VERMINOR) } SYSTEM nt_dll initinstance terminstance -LINKLIBS = opengl32.lib user32.lib - - -########################################################################## -# Object files for static library -########################################################################## -OBJS = \ - enable.obj \ - fullscreen.obj \ - glext.obj \ - image.obj \ - init.obj \ - input.obj \ - joystick.obj \ - stream.obj \ - tga.obj \ - thread.obj \ - time.obj \ - window.obj \ - win32_enable.obj \ - win32_fullscreen.obj \ - win32_glext.obj \ - win32_init.obj \ - win32_joystick.obj \ - win32_thread.obj \ - win32_time.obj \ - win32_window.obj - - -########################################################################## -# Object files for dynamic library -########################################################################## -DLLOBJS = \ - enable_dll.obj \ - fullscreen_dll.obj \ - glext_dll.obj \ - image_dll.obj \ - init_dll.obj \ - input_dll.obj \ - joystick_dll.obj \ - stream_dll.obj \ - tga_dll.obj \ - thread_dll.obj \ - time_dll.obj \ - window_dll.obj \ - win32_dllmain_dll.obj \ - win32_enable_dll.obj \ - win32_fullscreen_dll.obj \ - win32_glext_dll.obj \ - win32_init_dll.obj \ - win32_joystick_dll.obj \ - win32_thread_dll.obj \ - win32_time_dll.obj \ - win32_window_dll.obj - - - -########################################################################## -# Rule for building static library -########################################################################## -glfw.lib: $(OBJS) - $(MKLIB) $(LIBFLAGS) /OUT:glfw.lib $(OBJS) - - -########################################################################## -# Rule for building dynamic library -########################################################################## -glfw.dll: $(DLLOBJS) - $(LINK) $(LINKFLAGS) NAME glfw.dll OPTION { modname='GLFW.DLL' implib=glfwdll.lib stack=1M START=__DLLstartw_ } REFERENCE __DLLstartw_ FILE { $(DLLOBJS) } LIBRARY { $(LINKLIBS) } - - -########################################################################## -# Rules for building static library object files -########################################################################## -enable.obj: ..\\enable.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ ..\\enable.c - -fullscreen.obj: ..\\fullscreen.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ ..\\fullscreen.c - -glext.obj: ..\\glext.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ ..\\glext.c - -image.obj: ..\\image.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ ..\\image.c - -init.obj: ..\\init.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ ..\\init.c - -input.obj: ..\\input.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ ..\\input.c - -joystick.obj: ..\\joystick.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ ..\\joystick.c - -stream.obj: ..\\stream.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ ..\\stream.c - -tga.obj: ..\\tga.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ ..\\tga.c - -thread.obj: ..\\thread.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ ..\\thread.c - -time.obj: ..\\time.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ ..\\time.c - -window.obj: ..\\window.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ ..\\window.c - -win32_enable.obj: win32_enable.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ win32_enable.c - -win32_fullscreen.obj: win32_fullscreen.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ win32_fullscreen.c - -win32_glext.obj: win32_glext.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ win32_glext.c - -win32_init.obj: win32_init.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ win32_init.c - -win32_joystick.obj: win32_joystick.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ win32_joystick.c - -win32_thread.obj: win32_thread.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ win32_thread.c - -win32_time.obj: win32_time.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ win32_time.c - -win32_window.obj: win32_window.c ..\\internal.h platform.h - $(CC) $(CFLAGS) /Fo$@ win32_window.c - - -########################################################################## -# Rules for building dynamic library object files -########################################################################## -enable_dll.obj: ..\\enable.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ ..\\enable.c - -fullscreen_dll.obj: ..\\fullscreen.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ ..\\fullscreen.c - -glext_dll.obj: ..\\glext.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ ..\\glext.c - -image_dll.obj: ..\\image.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ ..\\image.c - -init_dll.obj: ..\\init.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ ..\\init.c - -input_dll.obj: ..\\input.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ ..\\input.c - -joystick_dll.obj: ..\\joystick.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ ..\\joystick.c - -stream_dll.obj: ..\\stream.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ ..\\stream.c - -tga_dll.obj: ..\\tga.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ ..\\tga.c - -thread_dll.obj: ..\\thread.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ ..\\thread.c - -time_dll.obj: ..\\time.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ ..\\time.c - -window_dll.obj: ..\\window.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ ..\\window.c - -win32_dllmain_dll.obj: win32_dllmain.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ win32_dllmain.c - -win32_enable_dll.obj: win32_enable.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ win32_enable.c - -win32_fullscreen_dll.obj: win32_fullscreen.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ win32_fullscreen.c - -win32_glext_dll.obj: win32_glext.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ win32_glext.c - -win32_init_dll.obj: win32_init.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ win32_init.c - -win32_joystick_dll.obj: win32_joystick.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ win32_joystick.c - -win32_thread_dll.obj: win32_thread.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ win32_thread.c - -win32_time_dll.obj: win32_time.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ win32_time.c - -win32_window_dll.obj: win32_window.c ..\\internal.h platform.h - $(CC) $(CFLAGS_DLL) /Fo$@ win32_window.c diff --git a/ogl_editor/src/External/glfw/lib/win32/glfwdll.def b/ogl_editor/src/External/glfw/lib/win32/glfwdll.def deleted file mode 100644 index 1b40765..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/glfwdll.def +++ /dev/null @@ -1,67 +0,0 @@ -LIBRARY GLFW.DLL - -EXPORTS -glfwBroadcastCond -glfwCloseWindow -glfwCreateCond -glfwCreateMutex -glfwCreateThread -glfwDestroyCond -glfwDestroyMutex -glfwDestroyThread -glfwDisable -glfwEnable -glfwExtensionSupported -glfwFreeImage -glfwGetDesktopMode -glfwGetGLVersion -glfwGetJoystickButtons -glfwGetJoystickParam -glfwGetJoystickPos -glfwGetKey -glfwGetMouseButton -glfwGetMousePos -glfwGetMouseWheel -glfwGetNumberOfProcessors -glfwGetProcAddress -glfwGetThreadID -glfwGetTime -glfwGetVersion -glfwGetVideoModes -glfwGetWindowParam -glfwGetWindowSize -glfwIconifyWindow -glfwInit -glfwLoadMemoryTexture2D -glfwLoadTexture2D -glfwLoadTextureImage2D -glfwLockMutex -glfwOpenWindow -glfwOpenWindowHint -glfwPollEvents -glfwReadImage -glfwReadMemoryImage -glfwRestoreWindow -glfwSetCharCallback -glfwSetKeyCallback -glfwSetMouseButtonCallback -glfwSetMousePos -glfwSetMousePosCallback -glfwSetMouseWheel -glfwSetMouseWheelCallback -glfwSetTime -glfwSetWindowCloseCallback -glfwSetWindowRefreshCallback -glfwSetWindowPos -glfwSetWindowSize -glfwSetWindowSizeCallback -glfwSetWindowTitle -glfwSignalCond -glfwSleep -glfwSwapBuffers -glfwSwapInterval -glfwTerminate -glfwUnlockMutex -glfwWaitCond -glfwWaitEvents -glfwWaitThread diff --git a/ogl_editor/src/External/glfw/lib/win32/libglfw.pc.in b/ogl_editor/src/External/glfw/lib/win32/libglfw.pc.in deleted file mode 100644 index 192723b..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/libglfw.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@PREFIX@ -exec_prefix=@PREFIX@ -libdir=@PREFIX@/lib -includedir=@PREFIX@/include - -Name: GLFW -Description: A portable framework for OpenGL development -Version: 2.7 -URL: http://www.glfw.org/ -Libs: -L${libdir} -lglfw -lglu32 -lopengl32 -lm -s -mwindows -e _mainCRTStartup -Cflags: -I${includedir} -mwin32 diff --git a/ogl_editor/src/External/glfw/lib/win32/platform.h b/ogl_editor/src/External/glfw/lib/win32/platform.h deleted file mode 100644 index 4dc6340..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/platform.h +++ /dev/null @@ -1,558 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Win32/WGL -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#ifndef _platform_h_ -#define _platform_h_ - - -// This is the Windows version of GLFW -#define _GLFW_WIN32 - -// We don't need all the fancy stuff -#define NOMINMAX -#define WIN32_LEAN_AND_MEAN -#define VC_EXTRALEAN - -// Include files -#include -#include -#include "../../include/GL/glfw.h" - - -//======================================================================== -// Hack: Define things that some 's do not define -//======================================================================== - -// Some old versions of w32api (used by MinGW and Cygwin) define -// WH_KEYBOARD_LL without typedef:ing KBDLLHOOKSTRUCT (!) -#if defined(__MINGW32__) || defined(__CYGWIN__) -#include -#if defined(WH_KEYBOARD_LL) && (__W32API_MAJOR_VERSION == 1) && (__W32API_MINOR_VERSION <= 2) -#undef WH_KEYBOARD_LL -#endif -#endif - -//------------------------------------------------------------------------ -// ** NOTE ** If this gives you compiler errors and you are using MinGW -// (or Dev-C++), update to w32api version 1.3 or later: -// http://sourceforge.net/project/showfiles.php?group_id=2435 -//------------------------------------------------------------------------ -#ifndef WH_KEYBOARD_LL -#define WH_KEYBOARD_LL 13 -typedef struct tagKBDLLHOOKSTRUCT { - DWORD vkCode; - DWORD scanCode; - DWORD flags; - DWORD time; - DWORD dwExtraInfo; -} KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT; -#endif // WH_KEYBOARD_LL - -#ifndef LLKHF_ALTDOWN -#define LLKHF_ALTDOWN 0x00000020 -#endif - -#ifndef SPI_SETSCREENSAVERRUNNING -#define SPI_SETSCREENSAVERRUNNING 97 -#endif -#ifndef SPI_GETANIMATION -#define SPI_GETANIMATION 72 -#endif -#ifndef SPI_SETANIMATION -#define SPI_SETANIMATION 73 -#endif -#ifndef SPI_GETFOREGROUNDLOCKTIMEOUT -#define SPI_GETFOREGROUNDLOCKTIMEOUT 0x2000 -#endif -#ifndef SPI_SETFOREGROUNDLOCKTIMEOUT -#define SPI_SETFOREGROUNDLOCKTIMEOUT 0x2001 -#endif - -#ifndef CDS_FULLSCREEN -#define CDS_FULLSCREEN 4 -#endif - -#ifndef PFD_GENERIC_ACCELERATED -#define PFD_GENERIC_ACCELERATED 0x00001000 -#endif -#ifndef PFD_DEPTH_DONTCARE -#define PFD_DEPTH_DONTCARE 0x20000000 -#endif - -#ifndef ENUM_CURRENT_SETTINGS -#define ENUM_CURRENT_SETTINGS -1 -#endif -#ifndef ENUM_REGISTRY_SETTINGS -#define ENUM_REGISTRY_SETTINGS -2 -#endif - -#ifndef WM_MOUSEWHEEL -#define WM_MOUSEWHEEL 0x020A -#endif -#ifndef WHEEL_DELTA -#define WHEEL_DELTA 120 -#endif - -#ifndef WM_XBUTTONDOWN -#define WM_XBUTTONDOWN 0x020B -#endif -#ifndef WM_XBUTTONUP -#define WM_XBUTTONUP 0x020C -#endif -#ifndef XBUTTON1 -#define XBUTTON1 1 -#endif -#ifndef XBUTTON2 -#define XBUTTON2 2 -#endif - -#ifndef WGL_EXT_swap_control - -/* Entry points */ -typedef int (APIENTRY * PFNWGLSWAPINTERVALEXTPROC) (int); - -#endif /*WGL_EXT_swap_control*/ - -#ifndef WGL_ARB_extensions_string - -/* Entry points */ -typedef const char *(APIENTRY * PFNWGLGETEXTENSIONSSTRINGARBPROC)( HDC ); - -#endif /*WGL_ARB_extensions_string*/ - -#ifndef WGL_EXT_extension_string - -/* Entry points */ -typedef const char *(APIENTRY * PFNWGLGETEXTENSIONSSTRINGEXTPROC)( void ); - -#endif /*WGL_EXT_extension_string*/ - -#ifndef WGL_ARB_pixel_format - -/* Entry points */ -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC, int, int, UINT, const int *, int *); - -/* Constants for wglGetPixelFormatAttribivARB */ -#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 -#define WGL_DRAW_TO_WINDOW_ARB 0x2001 -#define WGL_SUPPORT_OPENGL_ARB 0x2010 -#define WGL_ACCELERATION_ARB 0x2003 -#define WGL_DOUBLE_BUFFER_ARB 0x2011 -#define WGL_STEREO_ARB 0x2012 -#define WGL_PIXEL_TYPE_ARB 0x2013 -#define WGL_COLOR_BITS_ARB 0x2014 -#define WGL_RED_BITS_ARB 0x2015 -#define WGL_GREEN_BITS_ARB 0x2017 -#define WGL_BLUE_BITS_ARB 0x2019 -#define WGL_ALPHA_BITS_ARB 0x201B -#define WGL_ACCUM_BITS_ARB 0x201D -#define WGL_ACCUM_RED_BITS_ARB 0x201E -#define WGL_ACCUM_GREEN_BITS_ARB 0x201F -#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 -#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 -#define WGL_DEPTH_BITS_ARB 0x2022 -#define WGL_STENCIL_BITS_ARB 0x2023 -#define WGL_AUX_BUFFERS_ARB 0x2024 -#define WGL_SAMPLE_BUFFERS_ARB 0x2041 -#define WGL_SAMPLES_ARB 0x2042 - -/* Constants for WGL_ACCELERATION_ARB */ -#define WGL_NO_ACCELERATION_ARB 0x2025 -#define WGL_GENERIC_ACCELERATION_ARB 0x2026 -#define WGL_FULL_ACCELERATION_ARB 0x2027 - -/* Constants for WGL_PIXEL_TYPE_ARB */ -#define WGL_TYPE_RGBA_ARB 0x202B -#define WGL_TYPE_COLORINDEX_ARB 0x202C - -#endif /*WGL_ARB_pixel_format*/ - - -#ifndef WGL_ARB_create_context - -/* Entry points */ -typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC, HGLRC, const int *); - -/* Tokens for wglCreateContextAttribsARB attributes */ -#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 -#define WGL_CONTEXT_FLAGS_ARB 0x2094 -#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 - -/* Bits for WGL_CONTEXT_FLAGS_ARB */ -#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 -#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 - -/* Bits for WGL_CONTEXT_PROFILE_MASK_ARB */ -#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 -#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 - -#endif /*WGL_ARB_create_context*/ - - -#ifndef GL_VERSION_3_0 - -typedef const GLubyte * (APIENTRY *PFNGLGETSTRINGIPROC) (GLenum, GLuint); - -#endif /*GL_VERSION_3_0*/ - - -//======================================================================== -// DLLs that are loaded at glfwInit() -//======================================================================== - -// gdi32.dll function pointer typedefs -#ifndef _GLFW_NO_DLOAD_GDI32 -typedef int (WINAPI * CHOOSEPIXELFORMAT_T) (HDC,CONST PIXELFORMATDESCRIPTOR*); -typedef int (WINAPI * DESCRIBEPIXELFORMAT_T) (HDC,int,UINT,LPPIXELFORMATDESCRIPTOR); -typedef int (WINAPI * GETPIXELFORMAT_T) (HDC); -typedef BOOL (WINAPI * SETPIXELFORMAT_T) (HDC,int,const PIXELFORMATDESCRIPTOR*); -typedef BOOL (WINAPI * SWAPBUFFERS_T) (HDC); -#endif // _GLFW_NO_DLOAD_GDI32 - -// winmm.dll function pointer typedefs -#ifndef _GLFW_NO_DLOAD_WINMM -typedef MMRESULT (WINAPI * JOYGETDEVCAPSA_T) (UINT,LPJOYCAPSA,UINT); -typedef MMRESULT (WINAPI * JOYGETPOS_T) (UINT,LPJOYINFO); -typedef MMRESULT (WINAPI * JOYGETPOSEX_T) (UINT,LPJOYINFOEX); -typedef DWORD (WINAPI * TIMEGETTIME_T) (void); -#endif // _GLFW_NO_DLOAD_WINMM - - -// gdi32.dll shortcuts -#ifndef _GLFW_NO_DLOAD_GDI32 -#define _glfw_ChoosePixelFormat _glfwLibrary.Libs.ChoosePixelFormat -#define _glfw_DescribePixelFormat _glfwLibrary.Libs.DescribePixelFormat -#define _glfw_GetPixelFormat _glfwLibrary.Libs.GetPixelFormat -#define _glfw_SetPixelFormat _glfwLibrary.Libs.SetPixelFormat -#define _glfw_SwapBuffers _glfwLibrary.Libs.SwapBuffers -#else -#define _glfw_ChoosePixelFormat ChoosePixelFormat -#define _glfw_DescribePixelFormat DescribePixelFormat -#define _glfw_GetPixelFormat GetPixelFormat -#define _glfw_SetPixelFormat SetPixelFormat -#define _glfw_SwapBuffers SwapBuffers -#endif // _GLFW_NO_DLOAD_GDI32 - -// winmm.dll shortcuts -#ifndef _GLFW_NO_DLOAD_WINMM -#define _glfw_joyGetDevCaps _glfwLibrary.Libs.joyGetDevCapsA -#define _glfw_joyGetPos _glfwLibrary.Libs.joyGetPos -#define _glfw_joyGetPosEx _glfwLibrary.Libs.joyGetPosEx -#define _glfw_timeGetTime _glfwLibrary.Libs.timeGetTime -#else -#define _glfw_joyGetDevCaps joyGetDevCapsA -#define _glfw_joyGetPos joyGetPos -#define _glfw_joyGetPosEx joyGetPosEx -#define _glfw_timeGetTime timeGetTime -#endif // _GLFW_NO_DLOAD_WINMM - - -//======================================================================== -// GLFW platform specific types -//======================================================================== - -//------------------------------------------------------------------------ -// Pointer length integer -//------------------------------------------------------------------------ -typedef INT_PTR GLFWintptr; - - -//------------------------------------------------------------------------ -// Window structure -//------------------------------------------------------------------------ -typedef struct _GLFWwin_struct _GLFWwin; - -struct _GLFWwin_struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // User callback functions - GLFWwindowsizefun windowSizeCallback; - GLFWwindowclosefun windowCloseCallback; - GLFWwindowrefreshfun windowRefreshCallback; - GLFWmousebuttonfun mouseButtonCallback; - GLFWmouseposfun mousePosCallback; - GLFWmousewheelfun mouseWheelCallback; - GLFWkeyfun keyCallback; - GLFWcharfun charCallback; - - // User selected window settings - int fullscreen; // Fullscreen flag - int mouseLock; // Mouse-lock flag - int autoPollEvents; // Auto polling flag - int sysKeysDisabled; // System keys disabled flag - int windowNoResize; // Resize- and maximize gadgets disabled flag - int refreshRate; // Vertical monitor refresh rate - - // Window status & parameters - int opened; // Flag telling if window is opened or not - int active; // Application active flag - int iconified; // Window iconified flag - int width, height; // Window width and heigth - int accelerated; // GL_TRUE if window is HW accelerated - - // Framebuffer attributes - int redBits; - int greenBits; - int blueBits; - int alphaBits; - int depthBits; - int stencilBits; - int accumRedBits; - int accumGreenBits; - int accumBlueBits; - int accumAlphaBits; - int auxBuffers; - int stereo; - int samples; - - // OpenGL extensions and context attributes - int has_GL_SGIS_generate_mipmap; - int has_GL_ARB_texture_non_power_of_two; - int glMajor, glMinor, glRevision; - int glForward, glDebug, glProfile; - - PFNGLGETSTRINGIPROC GetStringi; - - -// ========= PLATFORM SPECIFIC PART ====================================== - - // Platform specific window resources - HDC DC; // Private GDI device context - HGLRC context; // Permanent rendering context - HWND window; // Window handle - ATOM classAtom; // Window class atom - int modeID; // Mode ID for fullscreen mode - HHOOK keyboardHook; // Keyboard hook handle - DWORD dwStyle; // Window styles used for window creation - DWORD dwExStyle; // --"-- - - // Platform specific extensions (context specific) - PFNWGLSWAPINTERVALEXTPROC SwapIntervalEXT; - PFNWGLGETPIXELFORMATATTRIBIVARBPROC GetPixelFormatAttribivARB; - PFNWGLGETEXTENSIONSSTRINGEXTPROC GetExtensionsStringEXT; - PFNWGLGETEXTENSIONSSTRINGARBPROC GetExtensionsStringARB; - PFNWGLCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB; - GLboolean has_WGL_EXT_swap_control; - GLboolean has_WGL_ARB_multisample; - GLboolean has_WGL_ARB_pixel_format; - GLboolean has_WGL_ARB_create_context; - GLboolean has_WGL_ARB_create_context_profile; - - // Various platform specific internal variables - int oldMouseLock; // Old mouse-lock flag (used for remembering - // mouse-lock state when iconifying) - int oldMouseLockValid; - int desiredRefreshRate; // Desired vertical monitor refresh rate - -}; - -GLFWGLOBAL _GLFWwin _glfwWin; - - -//------------------------------------------------------------------------ -// User input status (most of this should go in _GLFWwin) -//------------------------------------------------------------------------ -GLFWGLOBAL struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // Mouse status - int MousePosX, MousePosY; - int WheelPos; - char MouseButton[ GLFW_MOUSE_BUTTON_LAST+1 ]; - - // Keyboard status - char Key[ GLFW_KEY_LAST+1 ]; - int LastChar; - - // User selected settings - int StickyKeys; - int StickyMouseButtons; - int KeyRepeat; - - -// ========= PLATFORM SPECIFIC PART ====================================== - - // Platform specific internal variables - int MouseMoved, OldMouseX, OldMouseY; - -} _glfwInput; - - -//------------------------------------------------------------------------ -// Library global data -//------------------------------------------------------------------------ -GLFWGLOBAL struct { - - // Window opening hints - _GLFWhints hints; - - // Initial desktop mode - GLFWvidmode desktopMode; - -// ========= PLATFORM SPECIFIC PART ====================================== - - HINSTANCE instance; // Instance of the application - - // Timer data - struct { - int HasPerformanceCounter; - double Resolution; - unsigned int t0_32; - __int64 t0_64; - } Timer; - - // System information - struct { - int winVer; - int hasUnicode; - DWORD foregroundLockTimeout; - } Sys; - -#if !defined(_GLFW_NO_DLOAD_WINMM) || !defined(_GLFW_NO_DLOAD_GDI32) - // Library handles and function pointers - struct { -#ifndef _GLFW_NO_DLOAD_GDI32 - // gdi32.dll - HINSTANCE gdi32; - CHOOSEPIXELFORMAT_T ChoosePixelFormat; - DESCRIBEPIXELFORMAT_T DescribePixelFormat; - GETPIXELFORMAT_T GetPixelFormat; - SETPIXELFORMAT_T SetPixelFormat; - SWAPBUFFERS_T SwapBuffers; -#endif // _GLFW_NO_DLOAD_GDI32 - - // winmm.dll -#ifndef _GLFW_NO_DLOAD_WINMM - HINSTANCE winmm; - JOYGETDEVCAPSA_T joyGetDevCapsA; - JOYGETPOS_T joyGetPos; - JOYGETPOSEX_T joyGetPosEx; - TIMEGETTIME_T timeGetTime; -#endif // _GLFW_NO_DLOAD_WINMM - } Libs; -#endif - -} _glfwLibrary; - - -//------------------------------------------------------------------------ -// Thread record (one for each thread) -//------------------------------------------------------------------------ -typedef struct _GLFWthread_struct _GLFWthread; - -struct _GLFWthread_struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // Pointer to previous and next threads in linked list - _GLFWthread *Previous, *Next; - - // GLFW user side thread information - GLFWthread ID; - GLFWthreadfun Function; - -// ========= PLATFORM SPECIFIC PART ====================================== - - // System side thread information - HANDLE Handle; - DWORD WinID; - -}; - - -//------------------------------------------------------------------------ -// General thread information -//------------------------------------------------------------------------ -GLFWGLOBAL struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // Next thread ID to use (increments for every created thread) - GLFWthread NextID; - - // First thread in linked list (always the main thread) - _GLFWthread First; - -// ========= PLATFORM SPECIFIC PART ====================================== - - // Critical section lock - CRITICAL_SECTION CriticalSection; - -} _glfwThrd; - - - -//======================================================================== -// Macros for encapsulating critical code sections (i.e. making parts -// of GLFW thread safe) -//======================================================================== - -// Thread list management -#define ENTER_THREAD_CRITICAL_SECTION \ - EnterCriticalSection( &_glfwThrd.CriticalSection ); -#define LEAVE_THREAD_CRITICAL_SECTION \ - LeaveCriticalSection( &_glfwThrd.CriticalSection ); - - -//======================================================================== -// Various Windows version constants -//======================================================================== - -#define _GLFW_WIN_UNKNOWN 0x0000 // Earlier than 95 or NT4 -#define _GLFW_WIN_95 0x0001 -#define _GLFW_WIN_98 0x0002 -#define _GLFW_WIN_ME 0x0003 -#define _GLFW_WIN_UNKNOWN_9x 0x0004 // Later than ME -#define _GLFW_WIN_NT4 0x0101 -#define _GLFW_WIN_2K 0x0102 -#define _GLFW_WIN_XP 0x0103 -#define _GLFW_WIN_NET_SERVER 0x0104 -#define _GLFW_WIN_UNKNOWN_NT 0x0105 // Later than .NET Server - - -//======================================================================== -// Prototypes for platform specific internal functions -//======================================================================== - -// Time -void _glfwInitTimer( void ); - -// Fullscreen support -int _glfwGetClosestVideoModeBPP( int *w, int *h, int *bpp, int *refresh ); -int _glfwGetClosestVideoMode( int *w, int *h, int *r, int *g, int *b, int *refresh ); -void _glfwSetVideoModeMODE( int mode ); -void _glfwSetVideoMode( int *w, int *h, int r, int g, int b, int refresh ); - - -#endif // _platform_h_ diff --git a/ogl_editor/src/External/glfw/lib/win32/win32_dllmain.c b/ogl_editor/src/External/glfw/lib/win32/win32_dllmain.c deleted file mode 100644 index d7a9c1a..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/win32_dllmain.c +++ /dev/null @@ -1,49 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Win32/WGL -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -#if defined(GLFW_BUILD_DLL) - -//======================================================================== -// GLFW DLL entry point -//======================================================================== - -BOOL WINAPI DllMain( HINSTANCE instance, DWORD reason, LPVOID reserved ) -{ - // NOTE: Some compilers complains about instance and x never being used - - // never mind that (we don't want to use them)! - - return TRUE; -} - -#endif // GLFW_BUILD_DLL - diff --git a/ogl_editor/src/External/glfw/lib/win32/win32_enable.c b/ogl_editor/src/External/glfw/lib/win32/win32_enable.c deleted file mode 100644 index 3e72b78..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/win32_enable.c +++ /dev/null @@ -1,155 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Win32/WGL -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Low level keyboard hook (system callback) function -// Used to disable system keys under Windows NT -//======================================================================== - -static LRESULT CALLBACK keyboardHook( int nCode, WPARAM wParam, LPARAM lParam ) -{ - BOOL syskeys = FALSE; - PKBDLLHOOKSTRUCT p; - - // We are only looking for keyboard events - interpret lParam as a - // pointer to a KBDLLHOOKSTRUCT - p = (PKBDLLHOOKSTRUCT) lParam; - - if( nCode == HC_ACTION ) - { - // We have a keyboard event - - switch( wParam ) - { - case WM_KEYDOWN: - case WM_SYSKEYDOWN: - case WM_KEYUP: - case WM_SYSKEYUP: - // Detect: ALT+TAB, ALT+ESC, ALT+F4, CTRL+ESC, - // LWIN, RWIN, APPS (mysterious menu key) - syskeys = ( p->vkCode == VK_TAB && - p->flags & LLKHF_ALTDOWN ) || - ( p->vkCode == VK_ESCAPE && - p->flags & LLKHF_ALTDOWN ) || - ( p->vkCode == VK_F4 && - p->flags & LLKHF_ALTDOWN ) || - ( p->vkCode == VK_ESCAPE && - (GetKeyState(VK_CONTROL) & 0x8000)) || - p->vkCode == VK_LWIN || - p->vkCode == VK_RWIN || - p->vkCode == VK_APPS; - break; - - default: - break; - } - } - - // Was it a system key combination (e.g. ALT+TAB)? - if( syskeys ) - { - // Pass the key event to our window message loop - if( _glfwWin.opened ) - { - PostMessage( _glfwWin.window, (UINT) wParam, p->vkCode, 0 ); - } - - // We've taken care of it - don't let the system know about this - // key event - return 1; - } - else - { - // It's a harmless key press, let the system deal with it - return CallNextHookEx( _glfwWin.keyboardHook, nCode, wParam, lParam ); - } -} - - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Enable system keys -//======================================================================== - -void _glfwPlatformEnableSystemKeys( void ) -{ - BOOL dummy; - - // Use different methods depending on operating system version - if( _glfwLibrary.Sys.winVer >= _GLFW_WIN_NT4 ) - { - if( _glfwWin.keyboardHook != NULL ) - { - UnhookWindowsHookEx( _glfwWin.keyboardHook ); - _glfwWin.keyboardHook = NULL; - } - } - else - { - (void) SystemParametersInfo( SPI_SETSCREENSAVERRUNNING, FALSE, &dummy, 0 ); - } -} - -//======================================================================== -// Disable system keys -//======================================================================== - -void _glfwPlatformDisableSystemKeys( void ) -{ - BOOL dummy; - - // Use different methods depending on operating system version - if( _glfwLibrary.Sys.winVer >= _GLFW_WIN_NT4 ) - { - // Under Windows NT, install a low level keyboard hook - _glfwWin.keyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL, - keyboardHook, - _glfwLibrary.instance, - 0 ); - } - else - { - // Under Windows 95/98/ME, fool Windows that a screensaver - // is running => prevents ALT+TAB, CTRL+ESC and CTRL+ALT+DEL - (void) SystemParametersInfo( SPI_SETSCREENSAVERRUNNING, TRUE, &dummy, 0 ); - } -} - diff --git a/ogl_editor/src/External/glfw/lib/win32/win32_fullscreen.c b/ogl_editor/src/External/glfw/lib/win32/win32_fullscreen.c deleted file mode 100644 index d36710d..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/win32_fullscreen.c +++ /dev/null @@ -1,320 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Win32/WGL -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Convert BPP to RGB bits based on "best guess" -//======================================================================== - -static void bpp2rgb( int bpp, int *r, int *g, int *b ) -{ - int delta; - - // We assume that by 32 they really meant 24 - if( bpp == 32 ) - { - bpp = 24; - } - - // Convert "bits per pixel" to red, green & blue sizes - - *r = *g = *b = bpp / 3; - delta = bpp - (*r * 3); - if( delta >= 1 ) - { - *g = *g + 1; - } - if( delta == 2 ) - { - *r = *r + 1; - } -} - - -//======================================================================== -// Return closest video mode by dimensions, refresh rate and bits per pixel -//======================================================================== - -int _glfwGetClosestVideoModeBPP( int *w, int *h, int *bpp, int *refresh ) -{ - int mode, bestmode, match, bestmatch, rr, bestrr, success; - DEVMODE dm; - - // Find best match - bestmatch = 0x7fffffff; - bestrr = 0x7fffffff; - mode = bestmode = 0; - do - { - dm.dmSize = sizeof( DEVMODE ); - success = EnumDisplaySettings( NULL, mode, &dm ); - if( success ) - { - match = dm.dmBitsPerPel - *bpp; - if( match < 0 ) match = -match; - match = ( match << 25 ) | - ( (dm.dmPelsWidth - *w) * - (dm.dmPelsWidth - *w) + - (dm.dmPelsHeight - *h) * - (dm.dmPelsHeight - *h) ); - if( match < bestmatch ) - { - bestmatch = match; - bestmode = mode; - bestrr = (dm.dmDisplayFrequency - *refresh) * - (dm.dmDisplayFrequency - *refresh); - } - else if( match == bestmatch && *refresh > 0 ) - { - rr = (dm.dmDisplayFrequency - *refresh) * - (dm.dmDisplayFrequency - *refresh); - if( rr < bestrr ) - { - bestmatch = match; - bestmode = mode; - bestrr = rr; - } - } - } - mode ++; - } - while( success ); - - // Get the parameters for the best matching display mode - dm.dmSize = sizeof( DEVMODE ); - (void) EnumDisplaySettings( NULL, bestmode, &dm ); - - // Fill out actual width and height - *w = dm.dmPelsWidth; - *h = dm.dmPelsHeight; - - // Return bits per pixel - *bpp = dm.dmBitsPerPel; - - // Return vertical refresh rate - *refresh = dm.dmDisplayFrequency; - - return bestmode; -} - - -//======================================================================== -// Return closest video mode by dimensions, refresh rate and channel sizes -//======================================================================== - -static int getClosestVideoMode( int *w, int *h, - int *r, int *g, int *b, - int *refresh ) -{ - int bpp, bestmode; - - // Colorbits = sum of red/green/blue bits - bpp = *r + *g + *b; - - // If colorbits < 15 (e.g. 0) or >= 24, default to 32 bpp - if( bpp < 15 || bpp >= 24 ) - { - bpp = 32; - } - - // Find best match - bestmode = _glfwGetClosestVideoModeBPP( w, h, &bpp, refresh ); - - // Convert "bits per pixel" to red, green & blue sizes - bpp2rgb( bpp, r, g, b ); - - return bestmode; -} - - -//======================================================================== -// Change the current video mode -//======================================================================== - -void _glfwSetVideoModeMODE( int mode ) -{ - DEVMODE dm; - int success; - - // Get the parameters for the best matching display mode - dm.dmSize = sizeof( DEVMODE ); - (void) EnumDisplaySettings( NULL, mode, &dm ); - - // Set which fields we want to specify - dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL; - - // Do we have a prefered refresh rate? - if( _glfwWin.desiredRefreshRate > 0 ) - { - dm.dmFields = dm.dmFields | DM_DISPLAYFREQUENCY; - dm.dmDisplayFrequency = _glfwWin.desiredRefreshRate; - } - - // Change display setting - dm.dmSize = sizeof( DEVMODE ); - success = ChangeDisplaySettings( &dm, CDS_FULLSCREEN ); - - // If the mode change was not possible, query the current display - // settings (we'll use the desktop resolution for fullscreen mode) - if( success == DISP_CHANGE_SUCCESSFUL ) - { - _glfwWin.modeID = mode; - } - else - { - _glfwWin.modeID = ENUM_REGISTRY_SETTINGS; - EnumDisplaySettings( NULL, ENUM_REGISTRY_SETTINGS, &dm ); - } - - // Set the window size to that of the display mode - _glfwWin.width = dm.dmPelsWidth; - _glfwWin.height = dm.dmPelsHeight; -} - - -//======================================================================== -// Change the current video mode -//======================================================================== - -void _glfwSetVideoMode( int *w, int *h, int r, int g, int b, int refresh ) -{ - int bestmode; - - // Find a best match mode - bestmode = getClosestVideoMode( w, h, &r, &g, &b, &refresh ); - - // Change mode - _glfwSetVideoModeMODE( bestmode ); -} - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// Get a list of available video modes -//======================================================================== - -int _glfwPlatformGetVideoModes( GLFWvidmode *list, int maxcount ) -{ - int count, success, mode, i, j; - int m1, m2, bpp, r, g, b; - DEVMODE dm; - - // Loop through all video modes and extract all the UNIQUE modes - count = 0; - mode = 0; - do - { - // Get video mode properties - dm.dmSize = sizeof( DEVMODE ); - success = EnumDisplaySettings( NULL, mode, &dm ); - - // Is it a valid mode? (only list depths >= 15 bpp) - if( success && dm.dmBitsPerPel >= 15 ) - { - // Convert to RGB, and back to bpp ("mask out" alpha bits etc) - bpp2rgb( dm.dmBitsPerPel, &r, &g, &b ); - bpp = r + g + b; - - // Mode "code" for this mode - m1 = (bpp << 25) | (dm.dmPelsWidth * dm.dmPelsHeight); - - // Insert mode in list (sorted), and avoid duplicates - for( i = 0; i < count; i ++ ) - { - // Mode "code" for already listed mode - bpp = list[i].RedBits + list[i].GreenBits + - list[i].BlueBits; - m2 = (bpp << 25) | (list[i].Width * list[i].Height); - if( m1 <= m2 ) - { - break; - } - } - - // New entry at the end of the list? - if( i >= count ) - { - list[count].Width = dm.dmPelsWidth; - list[count].Height = dm.dmPelsHeight; - list[count].RedBits = r; - list[count].GreenBits = g; - list[count].BlueBits = b; - count ++; - } - // Insert new entry in the list? - else if( m1 < m2 ) - { - for( j = count; j > i; j -- ) - { - list[j] = list[j-1]; - } - list[i].Width = dm.dmPelsWidth; - list[i].Height = dm.dmPelsHeight; - list[i].RedBits = r; - list[i].GreenBits = g; - list[i].BlueBits = b; - count ++; - } - } - mode ++; - } - while( success && (count < maxcount) ); - - return count; -} - - -//======================================================================== -// Get the desktop video mode -//======================================================================== - -void _glfwPlatformGetDesktopMode( GLFWvidmode *mode ) -{ - DEVMODE dm; - - // Get desktop display mode - dm.dmSize = sizeof( DEVMODE ); - (void) EnumDisplaySettings( NULL, ENUM_REGISTRY_SETTINGS, &dm ); - - // Return desktop mode parameters - mode->Width = dm.dmPelsWidth; - mode->Height = dm.dmPelsHeight; - bpp2rgb( dm.dmBitsPerPel, &mode->RedBits, &mode->GreenBits, &mode->BlueBits ); -} - diff --git a/ogl_editor/src/External/glfw/lib/win32/win32_glext.c b/ogl_editor/src/External/glfw/lib/win32/win32_glext.c deleted file mode 100644 index 820adc5..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/win32_glext.c +++ /dev/null @@ -1,82 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Win32/WGL -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Check if the current context supports the specified WGL extension -//======================================================================== - -int _glfwPlatformExtensionSupported( const char *extension ) -{ - const GLubyte *extensions; - - if( _glfwWin.GetExtensionsStringEXT != NULL ) - { - extensions = (GLubyte *) _glfwWin.GetExtensionsStringEXT(); - if( extensions != NULL ) - { - if( _glfwStringInExtensionString( extension, extensions ) ) - { - return GL_TRUE; - } - } - } - - if( _glfwWin.GetExtensionsStringARB != NULL ) - { - extensions = (GLubyte *) _glfwWin.GetExtensionsStringARB( _glfwWin.DC ); - if( extensions != NULL ) - { - if( _glfwStringInExtensionString( extension, extensions ) ) - { - return GL_TRUE; - } - } - } - - return GL_FALSE; -} - - -//======================================================================== -// Get the function pointer to an OpenGL function -//======================================================================== - -void *_glfwPlatformGetProcAddress( const char *procname ) -{ - return (void *) wglGetProcAddress( procname ); -} - diff --git a/ogl_editor/src/External/glfw/lib/win32/win32_init.c b/ogl_editor/src/External/glfw/lib/win32/win32_init.c deleted file mode 100644 index e7e9b39..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/win32_init.c +++ /dev/null @@ -1,358 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Win32/WGL -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -// With the Borland C++ compiler, we want to disable FPU exceptions -#ifdef __BORLANDC__ -#include -#endif // __BORLANDC__ - - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Load necessary libraries (DLLs) -//======================================================================== - -static int _glfwInitLibraries( void ) -{ - // gdi32.dll (OpenGL pixel format functions & SwapBuffers) -#ifndef _GLFW_NO_DLOAD_GDI32 - _glfwLibrary.Libs.gdi32 = LoadLibrary( "gdi32.dll" ); - if( _glfwLibrary.Libs.gdi32 != NULL ) - { - _glfwLibrary.Libs.ChoosePixelFormat = (CHOOSEPIXELFORMAT_T) - GetProcAddress( _glfwLibrary.Libs.gdi32, "ChoosePixelFormat" ); - _glfwLibrary.Libs.DescribePixelFormat = (DESCRIBEPIXELFORMAT_T) - GetProcAddress( _glfwLibrary.Libs.gdi32, "DescribePixelFormat" ); - _glfwLibrary.Libs.GetPixelFormat = (GETPIXELFORMAT_T) - GetProcAddress( _glfwLibrary.Libs.gdi32, "GetPixelFormat" ); - _glfwLibrary.Libs.SetPixelFormat = (SETPIXELFORMAT_T) - GetProcAddress( _glfwLibrary.Libs.gdi32, "SetPixelFormat" ); - _glfwLibrary.Libs.SwapBuffers = (SWAPBUFFERS_T) - GetProcAddress( _glfwLibrary.Libs.gdi32, "SwapBuffers" ); - if( _glfwLibrary.Libs.ChoosePixelFormat == NULL || - _glfwLibrary.Libs.DescribePixelFormat == NULL || - _glfwLibrary.Libs.GetPixelFormat == NULL || - _glfwLibrary.Libs.SetPixelFormat == NULL || - _glfwLibrary.Libs.SwapBuffers == NULL ) - { - FreeLibrary( _glfwLibrary.Libs.gdi32 ); - _glfwLibrary.Libs.gdi32 = NULL; - return GL_FALSE; - } - } - else - { - return GL_FALSE; - } -#endif // _GLFW_NO_DLOAD_GDI32 - - // winmm.dll (for joystick and timer support) -#ifndef _GLFW_NO_DLOAD_WINMM - _glfwLibrary.Libs.winmm = LoadLibrary( "winmm.dll" ); - if( _glfwLibrary.Libs.winmm != NULL ) - { - _glfwLibrary.Libs.joyGetDevCapsA = (JOYGETDEVCAPSA_T) - GetProcAddress( _glfwLibrary.Libs.winmm, "joyGetDevCapsA" ); - _glfwLibrary.Libs.joyGetPos = (JOYGETPOS_T) - GetProcAddress( _glfwLibrary.Libs.winmm, "joyGetPos" ); - _glfwLibrary.Libs.joyGetPosEx = (JOYGETPOSEX_T) - GetProcAddress( _glfwLibrary.Libs.winmm, "joyGetPosEx" ); - _glfwLibrary.Libs.timeGetTime = (TIMEGETTIME_T) - GetProcAddress( _glfwLibrary.Libs.winmm, "timeGetTime" ); - if( _glfwLibrary.Libs.joyGetDevCapsA == NULL || - _glfwLibrary.Libs.joyGetPos == NULL || - _glfwLibrary.Libs.joyGetPosEx == NULL || - _glfwLibrary.Libs.timeGetTime == NULL ) - { - FreeLibrary( _glfwLibrary.Libs.winmm ); - _glfwLibrary.Libs.winmm = NULL; - return GL_FALSE; - } - } - else - { - return GL_FALSE; - } -#endif // _GLFW_NO_DLOAD_WINMM - - return GL_TRUE; -} - - -//======================================================================== -// Unload used libraries (DLLs) -//======================================================================== - -static void _glfwFreeLibraries( void ) -{ - // gdi32.dll -#ifndef _GLFW_NO_DLOAD_GDI32 - if( _glfwLibrary.Libs.gdi32 != NULL ) - { - FreeLibrary( _glfwLibrary.Libs.gdi32 ); - _glfwLibrary.Libs.gdi32 = NULL; - } -#endif // _GLFW_NO_DLOAD_GDI32 - - // winmm.dll -#ifndef _GLFW_NO_DLOAD_WINMM - if( _glfwLibrary.Libs.winmm != NULL ) - { - FreeLibrary( _glfwLibrary.Libs.winmm ); - _glfwLibrary.Libs.winmm = NULL; - } -#endif // _GLFW_NO_DLOAD_WINMM -} - - -//======================================================================== -// Initialize GLFW thread package -//======================================================================== - -static void _glfwInitThreads( void ) -{ - // Initialize critical section handle - InitializeCriticalSection( &_glfwThrd.CriticalSection ); - - // The first thread (the main thread) has ID 0 - _glfwThrd.NextID = 0; - - // Fill out information about the main thread (this thread) - _glfwThrd.First.ID = _glfwThrd.NextID ++; - _glfwThrd.First.Function = NULL; - _glfwThrd.First.Handle = GetCurrentThread(); - _glfwThrd.First.WinID = GetCurrentThreadId(); - _glfwThrd.First.Previous = NULL; - _glfwThrd.First.Next = NULL; -} - - -//======================================================================== -// Terminate GLFW thread package -//======================================================================== - -static void _glfwTerminateThreads( void ) -{ - _GLFWthread *t, *t_next; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Kill all threads (NOTE: THE USER SHOULD WAIT FOR ALL THREADS TO - // DIE, _BEFORE_ CALLING glfwTerminate()!!!) - t = _glfwThrd.First.Next; - while( t != NULL ) - { - // Get pointer to next thread - t_next = t->Next; - - // Simply murder the process, no mercy! - if( TerminateThread( t->Handle, 0 ) ) - { - // Close thread handle - CloseHandle( t->Handle ); - - // Free memory allocated for this thread - free( (void *) t ); - } - - // Select next thread in list - t = t_next; - } - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Delete critical section handle - DeleteCriticalSection( &_glfwThrd.CriticalSection ); -} - - -//======================================================================== -// Terminate GLFW when exiting application -//======================================================================== - -void _glfwTerminate_atexit( void ) -{ - glfwTerminate(); -} - - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Initialize various GLFW state -//======================================================================== - -int _glfwPlatformInit( void ) -{ - OSVERSIONINFO osi; - - // To make SetForegroundWindow() work as we want, we need to fiddle - // with the FOREGROUNDLOCKTIMEOUT system setting (we do this as early - // as possible in the hope of still being the foreground process) - SystemParametersInfo( SPI_GETFOREGROUNDLOCKTIMEOUT, 0, - &_glfwLibrary.Sys.foregroundLockTimeout, 0 ); - SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, - SPIF_SENDCHANGE ); - - // Check which OS version we are running - osi.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); - GetVersionEx( &osi ); - _glfwLibrary.Sys.winVer = _GLFW_WIN_UNKNOWN; - if( osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) - { - if( osi.dwMajorVersion == 4 && osi.dwMinorVersion < 10 ) - { - _glfwLibrary.Sys.winVer = _GLFW_WIN_95; - } - else if( osi.dwMajorVersion == 4 && osi.dwMinorVersion < 90 ) - { - _glfwLibrary.Sys.winVer = _GLFW_WIN_98; - } - else if( osi.dwMajorVersion == 4 && osi.dwMinorVersion == 90 ) - { - _glfwLibrary.Sys.winVer = _GLFW_WIN_ME; - } - else if( osi.dwMajorVersion >= 4 ) - { - _glfwLibrary.Sys.winVer = _GLFW_WIN_UNKNOWN_9x; - } - } - else if( osi.dwPlatformId == VER_PLATFORM_WIN32_NT ) - { - if( osi.dwMajorVersion == 4 && osi.dwMinorVersion == 0 ) - { - _glfwLibrary.Sys.winVer = _GLFW_WIN_NT4; - } - else if( osi.dwMajorVersion == 5 && osi.dwMinorVersion == 0 ) - { - _glfwLibrary.Sys.winVer = _GLFW_WIN_2K; - } - else if( osi.dwMajorVersion == 5 && osi.dwMinorVersion == 1 ) - { - _glfwLibrary.Sys.winVer = _GLFW_WIN_XP; - } - else if( osi.dwMajorVersion == 5 && osi.dwMinorVersion == 2 ) - { - _glfwLibrary.Sys.winVer = _GLFW_WIN_NET_SERVER; - } - else if( osi.dwMajorVersion >= 5 ) - { - _glfwLibrary.Sys.winVer = _GLFW_WIN_UNKNOWN_NT; - } - } - - // Do we have Unicode support? - if( _glfwLibrary.Sys.winVer >= _GLFW_WIN_NT4 ) - { - // Windows NT/2000/XP/.NET has Unicode support - _glfwLibrary.Sys.hasUnicode = GL_TRUE; - } - else - { - // Windows 9x/ME does not have Unicode support - _glfwLibrary.Sys.hasUnicode = GL_FALSE; - } - - // Load libraries (DLLs) - if( !_glfwInitLibraries() ) - { - return GL_FALSE; - } - - // With the Borland C++ compiler, we want to disable FPU exceptions - // (this is recommended for OpenGL applications under Windows) -#ifdef __BORLANDC__ - _control87( MCW_EM, MCW_EM ); -#endif - - // Retrieve GLFW instance handle - _glfwLibrary.instance = GetModuleHandle( NULL ); - - // System keys are not disabled - _glfwWin.keyboardHook = NULL; - - // Initialise thread package - _glfwInitThreads(); - - _glfwPlatformGetDesktopMode( &_glfwLibrary.desktopMode ); - - // Install atexit() routine - atexit( _glfwTerminate_atexit ); - - // Start the timer - _glfwInitTimer(); - - return GL_TRUE; -} - - -//======================================================================== -// Close window and kill all threads -//======================================================================== - -int _glfwPlatformTerminate( void ) -{ - // Only the main thread is allowed to do this... - if( GetCurrentThreadId() != _glfwThrd.First.WinID ) - { - return GL_FALSE; - } - - // Close OpenGL window - glfwCloseWindow(); - - // Kill thread package - _glfwTerminateThreads(); - - // Enable system keys again (if they were disabled) - glfwEnable( GLFW_SYSTEM_KEYS ); - - // Unload libraries (DLLs) - _glfwFreeLibraries(); - - // Restore FOREGROUNDLOCKTIMEOUT system setting - SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT, 0, - (LPVOID) (INT_PTR) _glfwLibrary.Sys.foregroundLockTimeout, - SPIF_SENDCHANGE ); - - return GL_TRUE; -} - diff --git a/ogl_editor/src/External/glfw/lib/win32/win32_joystick.c b/ogl_editor/src/External/glfw/lib/win32/win32_joystick.c deleted file mode 100644 index eecd1c5..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/win32_joystick.c +++ /dev/null @@ -1,233 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Win32/WGL -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Return GL_TRUE if joystick is present, else return GL_FALSE. -//======================================================================== - -static int _glfwJoystickPresent( int joy ) -{ - JOYINFO ji; - - // Windows NT 4.0 MMSYSTEM only supports 2 sticks (other Windows - // versions support 16 sticks) - if( _glfwLibrary.Sys.winVer == _GLFW_WIN_NT4 && joy > GLFW_JOYSTICK_2 ) - { - return GL_FALSE; - } - - // Is it a valid stick ID (Windows don't support more than 16 sticks)? - if( joy < GLFW_JOYSTICK_1 || joy > GLFW_JOYSTICK_16 ) - { - return GL_FALSE; - } - - // Is the joystick present? - if( _glfw_joyGetPos( joy - GLFW_JOYSTICK_1, &ji ) != JOYERR_NOERROR ) - { - return GL_FALSE; - } - - return GL_TRUE; -} - - -//======================================================================== -// Calculate joystick position -//======================================================================== - -static float _glfwCalcJoystickPos( DWORD pos, DWORD min, DWORD max ) -{ - float fpos = (float) pos; - float fmin = (float) min; - float fmax = (float) max; - return (2.0f*(fpos - fmin) / (fmax - fmin)) - 1.0f; -} - - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Determine joystick capabilities -//======================================================================== - -int _glfwPlatformGetJoystickParam( int joy, int param ) -{ - JOYCAPS jc; - -// return 0; - - // Is joystick present? - if( !_glfwJoystickPresent( joy ) ) - { - return 0; - } - - // We got this far, the joystick is present - if( param == GLFW_PRESENT ) - { - return GL_TRUE; - } - - // Get joystick capabilities - _glfw_joyGetDevCaps( joy - GLFW_JOYSTICK_1, &jc, sizeof(JOYCAPS) ); - - switch( param ) - { - case GLFW_AXES: - // Return number of joystick axes - return jc.wNumAxes; - - case GLFW_BUTTONS: - // Return number of joystick axes - return jc.wNumButtons; - - default: - break; - } - - return 0; -} - - -//======================================================================== -// Get joystick axis positions -//======================================================================== - -int _glfwPlatformGetJoystickPos( int joy, float *pos, int numaxes ) -{ - JOYCAPS jc; - JOYINFOEX ji; - int axis; - -// return 0; - - // Is joystick present? - if( !_glfwJoystickPresent( joy ) ) - { - return 0; - } - - // Get joystick capabilities - _glfw_joyGetDevCaps( joy - GLFW_JOYSTICK_1, &jc, sizeof(JOYCAPS) ); - - // Get joystick state - ji.dwSize = sizeof( JOYINFOEX ); - ji.dwFlags = JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | - JOY_RETURNR | JOY_RETURNU | JOY_RETURNV; - _glfw_joyGetPosEx( joy - GLFW_JOYSTICK_1, &ji ); - - // Get position values for all axes - axis = 0; - if( axis < numaxes ) - { - pos[ axis++ ] = _glfwCalcJoystickPos( ji.dwXpos, jc.wXmin, - jc.wXmax ); - } - if( axis < numaxes ) - { - pos[ axis++ ] = -_glfwCalcJoystickPos( ji.dwYpos, jc.wYmin, - jc.wYmax ); - } - if( axis < numaxes && jc.wCaps & JOYCAPS_HASZ ) - { - pos[ axis++ ] = _glfwCalcJoystickPos( ji.dwZpos, jc.wZmin, - jc.wZmax ); - } - if( axis < numaxes && jc.wCaps & JOYCAPS_HASR ) - { - pos[ axis++ ] = _glfwCalcJoystickPos( ji.dwRpos, jc.wRmin, - jc.wRmax ); - } - if( axis < numaxes && jc.wCaps & JOYCAPS_HASU ) - { - pos[ axis++ ] = _glfwCalcJoystickPos( ji.dwUpos, jc.wUmin, - jc.wUmax ); - } - if( axis < numaxes && jc.wCaps & JOYCAPS_HASV ) - { - pos[ axis++ ] = -_glfwCalcJoystickPos( ji.dwVpos, jc.wVmin, - jc.wVmax ); - } - - // Return number of returned axes - return axis; -} - - -//======================================================================== -// Get joystick button states -//======================================================================== - -int _glfwPlatformGetJoystickButtons( int joy, unsigned char *buttons, - int numbuttons ) -{ - JOYCAPS jc; - JOYINFOEX ji; - int button; - -// return 0; - - // Is joystick present? - if( !_glfwJoystickPresent( joy ) ) - { - return 0; - } - - // Get joystick capabilities - _glfw_joyGetDevCaps( joy - GLFW_JOYSTICK_1, &jc, sizeof(JOYCAPS) ); - - // Get joystick state - ji.dwSize = sizeof( JOYINFOEX ); - ji.dwFlags = JOY_RETURNBUTTONS; - _glfw_joyGetPosEx( joy - GLFW_JOYSTICK_1, &ji ); - - // Get states of all requested buttons - button = 0; - while( button < numbuttons && button < (int) jc.wNumButtons ) - { - buttons[ button ] = (unsigned char) - (ji.dwButtons & (1UL << button) ? GLFW_PRESS : GLFW_RELEASE); - button ++; - } - - return button; -} - diff --git a/ogl_editor/src/External/glfw/lib/win32/win32_thread.c b/ogl_editor/src/External/glfw/lib/win32/win32_thread.c deleted file mode 100644 index 57e2fdc..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/win32_thread.c +++ /dev/null @@ -1,506 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Win32/WGL -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -// This is an implementation of POSIX "compatible" condition variables for -// Win32, as described by Douglas C. Schmidt and Irfan Pyarali: -// http://www.cs.wustl.edu/~schmidt/win32-cv-1.html -//************************************************************************ - -enum { - _GLFW_COND_SIGNAL = 0, - _GLFW_COND_BROADCAST = 1 -}; - -typedef struct { - // Signal and broadcast event HANDLEs - HANDLE events[ 2 ]; - - // Count of the number of waiters - unsigned int waiters_count; - - // Serialize access to - CRITICAL_SECTION waiters_count_lock; -} _GLFWcond; - - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// This is simply a "wrapper" for calling the user thread function. -//======================================================================== - -DWORD WINAPI _glfwNewThread( LPVOID lpParam ) -{ - GLFWthreadfun threadfun; - _GLFWthread *t; - - // Get pointer to thread information for current thread - t = _glfwGetThreadPointer( _glfwPlatformGetThreadID() ); - if( t == NULL ) - { - return 0; - } - - // Get user thread function pointer - threadfun = t->Function; - - // Call the user thread function - threadfun( (void *) lpParam ); - - // Remove thread from thread list - ENTER_THREAD_CRITICAL_SECTION - _glfwRemoveThread( t ); - LEAVE_THREAD_CRITICAL_SECTION - - // When the thread function returns, the thread will die... - return 0; -} - - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// Create a new thread -//======================================================================== - -GLFWthread _glfwPlatformCreateThread( GLFWthreadfun fun, void *arg ) -{ - GLFWthread ID; - _GLFWthread *t, *t_tmp; - HANDLE hThread; - DWORD dwThreadId; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Create a new thread information memory area - t = (_GLFWthread *) malloc( sizeof(_GLFWthread) ); - if( t == NULL ) - { - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - return -1; - } - - // Get a new unique thread id - ID = _glfwThrd.NextID ++; - - // Store thread information in the thread list - t->Function = fun; - t->ID = ID; - - // Create thread - hThread = CreateThread( - NULL, // Default security attributes - 0, // Default stack size (1 MB) - _glfwNewThread, // Thread function (a wrapper function) - (LPVOID)arg, // Argument to thread is the user argument - 0, // Default creation flags - &dwThreadId // Returned thread identifier - ); - - // Did the thread creation fail? - if( hThread == NULL ) - { - free( (void *) t ); - LEAVE_THREAD_CRITICAL_SECTION - return -1; - } - - // Store more thread information in the thread list - t->Handle = hThread; - t->WinID = dwThreadId; - - // Append thread to thread list - t_tmp = &_glfwThrd.First; - while( t_tmp->Next != NULL ) - { - t_tmp = t_tmp->Next; - } - t_tmp->Next = t; - t->Previous = t_tmp; - t->Next = NULL; - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Return the GLFW thread ID - return ID; -} - - -//======================================================================== -// Kill a thread. NOTE: THIS IS A VERY DANGEROUS OPERATION, AND SHOULD NOT -// BE USED EXCEPT IN EXTREME SITUATIONS! -//======================================================================== - -void _glfwPlatformDestroyThread( GLFWthread ID ) -{ - _GLFWthread *t; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Get thread information pointer - t = _glfwGetThreadPointer( ID ); - if( t == NULL ) - { - LEAVE_THREAD_CRITICAL_SECTION - return; - } - - // Simply murder the process, no mercy! - if( TerminateThread( t->Handle, 0 ) ) - { - // Close thread handle - CloseHandle( t->Handle ); - - // Remove thread from thread list - _glfwRemoveThread( t ); - } - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION -} - - -//======================================================================== -// Wait for a thread to die -//======================================================================== - -int _glfwPlatformWaitThread( GLFWthread ID, int waitmode ) -{ - DWORD result; - HANDLE hThread; - _GLFWthread *t; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Get thread information pointer - t = _glfwGetThreadPointer( ID ); - - // Is the thread already dead? - if( t == NULL ) - { - LEAVE_THREAD_CRITICAL_SECTION - return GL_TRUE; - } - - // Get thread handle - hThread = t->Handle; - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Wait for thread to die - if( waitmode == GLFW_WAIT ) - { - result = WaitForSingleObject( hThread, INFINITE ); - } - else if( waitmode == GLFW_NOWAIT ) - { - result = WaitForSingleObject( hThread, 0 ); - } - else - { - return GL_FALSE; - } - - // Did we have a time-out? - if( result == WAIT_TIMEOUT ) - { - return GL_FALSE; - } - return GL_TRUE; -} - - -//======================================================================== -// Return the thread ID for the current thread -//======================================================================== - -GLFWthread _glfwPlatformGetThreadID( void ) -{ - _GLFWthread *t; - GLFWthread ID = -1; - DWORD WinID; - - // Get Windows thread ID - WinID = GetCurrentThreadId(); - - // Enter critical section (to avoid an inconsistent thread list) - ENTER_THREAD_CRITICAL_SECTION - - // Loop through entire list of threads to find the matching Windows - // thread ID - for( t = &_glfwThrd.First; t != NULL; t = t->Next ) - { - if( t->WinID == WinID ) - { - ID = t->ID; - break; - } - } - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Return the found GLFW thread identifier - return ID; -} - - -//======================================================================== -// Create a mutual exclusion object -//======================================================================== - -GLFWmutex _glfwPlatformCreateMutex( void ) -{ - CRITICAL_SECTION *mutex; - - // Allocate memory for mutex - mutex = (CRITICAL_SECTION *) malloc( sizeof(CRITICAL_SECTION) ); - if( !mutex ) - { - return NULL; - } - - // Initialize mutex - InitializeCriticalSection( mutex ); - - // Cast to GLFWmutex and return - return (GLFWmutex) mutex; -} - - -//======================================================================== -// Destroy a mutual exclusion object -//======================================================================== - -void _glfwPlatformDestroyMutex( GLFWmutex mutex ) -{ - // Destroy mutex - DeleteCriticalSection( (CRITICAL_SECTION *) mutex ); - free( mutex ); -} - - -//======================================================================== -// Request access to a mutex -//======================================================================== - -void _glfwPlatformLockMutex( GLFWmutex mutex ) -{ - // Wait for mutex to be released - EnterCriticalSection( (CRITICAL_SECTION *) mutex ); -} - - -//======================================================================== -// Release a mutex -//======================================================================== - -void _glfwPlatformUnlockMutex( GLFWmutex mutex ) -{ - // Release mutex - LeaveCriticalSection( (CRITICAL_SECTION *) mutex ); -} - - -//======================================================================== -// Create a new condition variable object -//======================================================================== - -GLFWcond _glfwPlatformCreateCond( void ) -{ - _GLFWcond *cond; - - // Allocate memory for condition variable - cond = (_GLFWcond *) malloc( sizeof(_GLFWcond) ); - if( !cond ) - { - return NULL; - } - - // Initialize condition variable - cond->waiters_count = 0; - cond->events[ _GLFW_COND_SIGNAL ] = CreateEvent( NULL, FALSE, - FALSE, NULL ); - cond->events[ _GLFW_COND_BROADCAST ] = CreateEvent( NULL, TRUE, - FALSE, NULL ); - InitializeCriticalSection( &cond->waiters_count_lock ); - - // Cast to GLFWcond and return - return (GLFWcond) cond; -} - - -//======================================================================== -// Destroy a condition variable object -//======================================================================== - -void _glfwPlatformDestroyCond( GLFWcond cond ) -{ - // Close the condition variable handles - CloseHandle( ((_GLFWcond *)cond)->events[ _GLFW_COND_SIGNAL ] ); - CloseHandle( ((_GLFWcond *)cond)->events[ _GLFW_COND_BROADCAST ] ); - - // Delete critical section - DeleteCriticalSection( &((_GLFWcond *)cond)->waiters_count_lock ); - - // Free memory for condition variable - free( (void *) cond ); -} - - -//======================================================================== -// Wait for a condition to be raised -//======================================================================== - -void _glfwPlatformWaitCond( GLFWcond cond, GLFWmutex mutex, double timeout ) -{ - _GLFWcond *cv = (_GLFWcond *) cond; - int result, last_waiter; - DWORD timeout_ms; - - // Avoid race conditions - EnterCriticalSection( &cv->waiters_count_lock ); - cv->waiters_count ++; - LeaveCriticalSection( &cv->waiters_count_lock ); - - // It's ok to release the mutex here since Win32 manual-reset events - // maintain state when used with SetEvent() - LeaveCriticalSection( (CRITICAL_SECTION *) mutex ); - - // Translate timeout into milliseconds - if( timeout >= GLFW_INFINITY ) - { - timeout_ms = INFINITE; - } - else - { - timeout_ms = (DWORD) (1000.0 * timeout + 0.5); - if( timeout_ms <= 0 ) - { - timeout_ms = 1; - } - } - - // Wait for either event to become signaled due to glfwSignalCond or - // glfwBroadcastCond being called - result = WaitForMultipleObjects( 2, cv->events, FALSE, timeout_ms ); - - // Check if we are the last waiter - EnterCriticalSection( &cv->waiters_count_lock ); - cv->waiters_count --; - last_waiter = (result == WAIT_OBJECT_0 + _GLFW_COND_BROADCAST) && - (cv->waiters_count == 0); - LeaveCriticalSection( &cv->waiters_count_lock ); - - // Some thread called glfwBroadcastCond - if( last_waiter ) - { - // We're the last waiter to be notified or to stop waiting, so - // reset the manual event - ResetEvent( cv->events[ _GLFW_COND_BROADCAST ] ); - } - - // Reacquire the mutex - EnterCriticalSection( (CRITICAL_SECTION *) mutex ); -} - - -//======================================================================== -// Signal a condition to one waiting thread -//======================================================================== - -void _glfwPlatformSignalCond( GLFWcond cond ) -{ - _GLFWcond *cv = (_GLFWcond *) cond; - int have_waiters; - - // Avoid race conditions - EnterCriticalSection( &cv->waiters_count_lock ); - have_waiters = cv->waiters_count > 0; - LeaveCriticalSection( &cv->waiters_count_lock ); - - if( have_waiters ) - { - SetEvent( cv->events[ _GLFW_COND_SIGNAL ] ); - } -} - - -//======================================================================== -// Broadcast a condition to all waiting threads -//======================================================================== - -void _glfwPlatformBroadcastCond( GLFWcond cond ) -{ - _GLFWcond *cv = (_GLFWcond *) cond; - int have_waiters; - - // Avoid race conditions - EnterCriticalSection( &cv->waiters_count_lock ); - have_waiters = cv->waiters_count > 0; - LeaveCriticalSection( &cv->waiters_count_lock ); - - if( have_waiters ) - { - SetEvent( cv->events[ _GLFW_COND_BROADCAST ] ); - } -} - - -//======================================================================== -// Return the number of processors in the system. -//======================================================================== - -int _glfwPlatformGetNumberOfProcessors( void ) -{ - SYSTEM_INFO si; - - // Get hardware system information - GetSystemInfo( &si ); - - return (int) si.dwNumberOfProcessors; -} - diff --git a/ogl_editor/src/External/glfw/lib/win32/win32_time.c b/ogl_editor/src/External/glfw/lib/win32/win32_time.c deleted file mode 100644 index b1751eb..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/win32_time.c +++ /dev/null @@ -1,146 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Win32/WGL -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Initialise timer -//======================================================================== - -void _glfwInitTimer( void ) -{ - __int64 freq; - - // Check if we have a performance counter - if( QueryPerformanceFrequency( (LARGE_INTEGER *)&freq ) ) - { - // Performance counter is available => use it! - _glfwLibrary.Timer.HasPerformanceCounter = GL_TRUE; - - // Counter resolution is 1 / counter frequency - _glfwLibrary.Timer.Resolution = 1.0 / (double)freq; - - // Set start time for timer - QueryPerformanceCounter( (LARGE_INTEGER *)&_glfwLibrary.Timer.t0_64 ); - } - else - { - // No performace counter available => use the tick counter - _glfwLibrary.Timer.HasPerformanceCounter = GL_FALSE; - - // Counter resolution is 1 ms - _glfwLibrary.Timer.Resolution = 0.001; - - // Set start time for timer - _glfwLibrary.Timer.t0_32 = _glfw_timeGetTime(); - } -} - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Return timer value in seconds -//======================================================================== - -double _glfwPlatformGetTime( void ) -{ - double t; - __int64 t_64; - - if( _glfwLibrary.Timer.HasPerformanceCounter ) - { - QueryPerformanceCounter( (LARGE_INTEGER *)&t_64 ); - t = (double)(t_64 - _glfwLibrary.Timer.t0_64); - } - else - { - t = (double)(_glfw_timeGetTime() - _glfwLibrary.Timer.t0_32); - } - - // Calculate the current time in seconds - return t * _glfwLibrary.Timer.Resolution; -} - - -//======================================================================== -// Set timer value in seconds -//======================================================================== - -void _glfwPlatformSetTime( double t ) -{ - __int64 t_64; - - if( _glfwLibrary.Timer.HasPerformanceCounter ) - { - QueryPerformanceCounter( (LARGE_INTEGER *)&t_64 ); - _glfwLibrary.Timer.t0_64 = t_64 - (__int64)(t/_glfwLibrary.Timer.Resolution); - } - else - { - _glfwLibrary.Timer.t0_32 = _glfw_timeGetTime() - (int)(t*1000.0); - } -} - - -//======================================================================== -// Put a thread to sleep for a specified amount of time -//======================================================================== - -void _glfwPlatformSleep( double time ) -{ - DWORD t; - - if( time == 0.0 ) - { - t = 0; - } - else if( time < 0.001 ) - { - t = 1; - } - else if( time > 2147483647.0 ) - { - t = 2147483647; - } - else - { - t = (DWORD)(time*1000.0 + 0.5); - } - Sleep( t ); -} - diff --git a/ogl_editor/src/External/glfw/lib/win32/win32_window.c b/ogl_editor/src/External/glfw/lib/win32/win32_window.c deleted file mode 100644 index 0d1c573..0000000 --- a/ogl_editor/src/External/glfw/lib/win32/win32_window.c +++ /dev/null @@ -1,1886 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Win32/WGL -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -// We use versioned window class names in order not to cause conflicts -// between applications using different versions of GLFW -#define _GLFW_WNDCLASSNAME "GLFW27" - - -//======================================================================== -// Enable/disable minimize/restore animations -//======================================================================== - -static int setMinMaxAnimations( int enable ) -{ - ANIMATIONINFO AI; - int old_enable; - - // Get old animation setting - AI.cbSize = sizeof( ANIMATIONINFO ); - SystemParametersInfo( SPI_GETANIMATION, AI.cbSize, &AI, 0 ); - old_enable = AI.iMinAnimate; - - // If requested, change setting - if( old_enable != enable ) - { - AI.iMinAnimate = enable; - SystemParametersInfo( SPI_SETANIMATION, AI.cbSize, &AI, - SPIF_SENDCHANGE ); - } - - return old_enable; -} - - -//======================================================================== -// Focus the window and bring it to the top of the stack -// Due to some nastiness with how Win98/ME/2k/XP handles SetForegroundWindow, -// we have to go through some really bizarre measures to achieve this -//======================================================================== - -static void setForegroundWindow( HWND hWnd ) -{ - int try_count = 0; - int old_animate; - - // Try the standard approach first... - BringWindowToTop( hWnd ); - SetForegroundWindow( hWnd ); - - // If it worked, return now - if( hWnd == GetForegroundWindow() ) - { - // Try to modify the system settings (since this is the foreground - // process, we are allowed to do this) - SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, - SPIF_SENDCHANGE ); - return; - } - - // For other Windows versions than 95 & NT4.0, the standard approach - // may not work, so if we failed we have to "trick" Windows into - // making our window the foureground window: Iconify and restore - // again. It is ugly, but it seems to work (we turn off those annoying - // zoom animations to make it look a bit better at least). - - // Turn off minimize/restore animations - old_animate = setMinMaxAnimations( 0 ); - - // We try this a few times, just to be on the safe side of things... - do - { - // Iconify & restore - ShowWindow( hWnd, SW_HIDE ); - ShowWindow( hWnd, SW_SHOWMINIMIZED ); - ShowWindow( hWnd, SW_SHOWNORMAL ); - - // Try to get focus - BringWindowToTop( hWnd ); - SetForegroundWindow( hWnd ); - - // We do not want to keep going on forever, so we keep track of - // how many times we tried - try_count ++; - } - while( hWnd != GetForegroundWindow() && try_count <= 3 ); - - // Restore the system minimize/restore animation setting - (void) setMinMaxAnimations( old_animate ); - - // Try to modify the system settings (since this is now hopefully the - // foreground process, we are probably allowed to do this) - SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, - SPIF_SENDCHANGE ); -} - - -//======================================================================== -// Returns the specified attribute of the specified pixel format -// NOTE: Do not call this unless we have found WGL_ARB_pixel_format -//======================================================================== - -static int getPixelFormatAttrib(int pixelFormat, int attrib) -{ - int value = 0; - - if( !_glfwWin.GetPixelFormatAttribivARB( _glfwWin.DC, pixelFormat, 0, 1, &attrib, &value) ) - { - // NOTE: We should probably handle this error somehow - return 0; - } - - return value; -} - - -//======================================================================== -// Return a list of available and usable framebuffer configs -//======================================================================== - -static _GLFWfbconfig *getFBConfigs( unsigned int *found ) -{ - _GLFWfbconfig *fbconfigs; - PIXELFORMATDESCRIPTOR pfd; - int i, count; - - *found = 0; - - if( _glfwWin.has_WGL_ARB_pixel_format ) - { - count = getPixelFormatAttrib( 1, WGL_NUMBER_PIXEL_FORMATS_ARB ); - } - else - { - count = _glfw_DescribePixelFormat( _glfwWin.DC, 1, sizeof( PIXELFORMATDESCRIPTOR ), NULL ); - } - - if( !count ) - { - fprintf( stderr, "No Win32 pixel formats available\n" ); - return NULL; - } - - fbconfigs = (_GLFWfbconfig*) malloc( sizeof( _GLFWfbconfig ) * count ); - if( !fbconfigs ) - { - fprintf(stderr, "Out of memory"); - return NULL; - } - - for( i = 1; i <= count; i++ ) - { - _GLFWfbconfig *fbconfig = fbconfigs + *found; - - if( _glfwWin.has_WGL_ARB_pixel_format ) - { - // Get pixel format attributes through WGL_ARB_pixel_format - - if( !getPixelFormatAttrib( i, WGL_SUPPORT_OPENGL_ARB ) || - !getPixelFormatAttrib( i, WGL_DRAW_TO_WINDOW_ARB ) || - !getPixelFormatAttrib( i, WGL_DOUBLE_BUFFER_ARB ) ) - { - // Only consider doublebuffered OpenGL pixel formats for windows - continue; - } - - if( getPixelFormatAttrib( i, WGL_PIXEL_TYPE_ARB ) != WGL_TYPE_RGBA_ARB ) - { - // Only consider RGBA pixel formats - continue; - } - - // Only consider "hardware-accelerated" pixel formats - if( getPixelFormatAttrib( i, WGL_ACCELERATION_ARB ) == - WGL_NO_ACCELERATION_ARB ) - { - continue; - } - - fbconfig->redBits = getPixelFormatAttrib( i, WGL_RED_BITS_ARB ); - fbconfig->greenBits = getPixelFormatAttrib( i, WGL_GREEN_BITS_ARB ); - fbconfig->blueBits = getPixelFormatAttrib( i, WGL_BLUE_BITS_ARB ); - fbconfig->alphaBits = getPixelFormatAttrib( i, WGL_ALPHA_BITS_ARB ); - - fbconfig->depthBits = getPixelFormatAttrib( i, WGL_DEPTH_BITS_ARB ); - fbconfig->stencilBits = getPixelFormatAttrib( i, WGL_STENCIL_BITS_ARB ); - - fbconfig->accumRedBits = getPixelFormatAttrib( i, WGL_ACCUM_RED_BITS_ARB ); - fbconfig->accumGreenBits = getPixelFormatAttrib( i, WGL_ACCUM_GREEN_BITS_ARB ); - fbconfig->accumBlueBits = getPixelFormatAttrib( i, WGL_ACCUM_BLUE_BITS_ARB ); - fbconfig->accumAlphaBits = getPixelFormatAttrib( i, WGL_ACCUM_ALPHA_BITS_ARB ); - - fbconfig->auxBuffers = getPixelFormatAttrib( i, WGL_AUX_BUFFERS_ARB ); - fbconfig->stereo = getPixelFormatAttrib( i, WGL_STEREO_ARB ); - - if( _glfwWin.has_WGL_ARB_multisample ) - { - fbconfig->samples = getPixelFormatAttrib( i, WGL_SAMPLES_ARB ); - } - else - { - fbconfig->samples = 0; - } - } - else - { - // Get pixel format attributes through old-fashioned PFDs - - if( !_glfw_DescribePixelFormat( _glfwWin.DC, i, sizeof( PIXELFORMATDESCRIPTOR ), &pfd ) ) - { - continue; - } - - if( !( pfd.dwFlags & PFD_DRAW_TO_WINDOW ) || - !( pfd.dwFlags & PFD_SUPPORT_OPENGL ) || - !( pfd.dwFlags & PFD_DOUBLEBUFFER ) ) - { - // Only consider doublebuffered OpenGL pixel formats for windows - continue; - } - - if( !( pfd.dwFlags & PFD_GENERIC_ACCELERATED ) && - ( pfd.dwFlags & PFD_GENERIC_FORMAT ) ) - { - // If this is true, this pixel format is only supported by the - // generic software implementation - continue; - } - - if( pfd.iPixelType != PFD_TYPE_RGBA ) - { - // Only RGBA pixel formats considered - continue; - } - - fbconfig->redBits = pfd.cRedBits; - fbconfig->greenBits = pfd.cGreenBits; - fbconfig->blueBits = pfd.cBlueBits; - fbconfig->alphaBits = pfd.cAlphaBits; - - fbconfig->depthBits = pfd.cDepthBits; - fbconfig->stencilBits = pfd.cStencilBits; - - fbconfig->accumRedBits = pfd.cAccumRedBits; - fbconfig->accumGreenBits = pfd.cAccumGreenBits; - fbconfig->accumBlueBits = pfd.cAccumBlueBits; - fbconfig->accumAlphaBits = pfd.cAccumAlphaBits; - - fbconfig->auxBuffers = pfd.cAuxBuffers; - fbconfig->stereo = ( pfd.dwFlags & PFD_STEREO ) ? GL_TRUE : GL_FALSE; - - // PFD pixel formats do not support FSAA - fbconfig->samples = 0; - } - - fbconfig->platformID = i; - - (*found)++; - } - - if( *found == 0 ) - { - free( fbconfigs ); - return NULL; - } - - return fbconfigs; -} - - -//======================================================================== -// Creates an OpenGL context on the specified device context -//======================================================================== - -static GLboolean createContext( HDC dc, const _GLFWwndconfig* wndconfig, int pixelFormat ) -{ - PIXELFORMATDESCRIPTOR pfd; - int flags, i = 0, attribs[40]; - - if( !_glfw_DescribePixelFormat( dc, pixelFormat, sizeof(pfd), &pfd ) ) - { - return GL_FALSE; - } - - if( !_glfw_SetPixelFormat( dc, pixelFormat, &pfd ) ) - { - return GL_FALSE; - } - - if( _glfwWin.has_WGL_ARB_create_context ) - { - // Use the newer wglCreateContextAttribsARB - - if( wndconfig->glMajor != 1 || wndconfig->glMinor != 0 ) - { - // Request an explicitly versioned context - - attribs[i++] = WGL_CONTEXT_MAJOR_VERSION_ARB; - attribs[i++] = wndconfig->glMajor; - attribs[i++] = WGL_CONTEXT_MINOR_VERSION_ARB; - attribs[i++] = wndconfig->glMinor; - } - - if( wndconfig->glForward || wndconfig->glDebug ) - { - flags = 0; - - if( wndconfig->glForward ) - { - flags |= WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB; - } - - if( wndconfig->glDebug ) - { - flags |= WGL_CONTEXT_DEBUG_BIT_ARB; - } - - attribs[i++] = WGL_CONTEXT_FLAGS_ARB; - attribs[i++] = flags; - } - - if( wndconfig->glProfile ) - { - if( !_glfwWin.has_WGL_ARB_create_context_profile ) - { - return GL_FALSE; - } - - if( wndconfig->glProfile == GLFW_OPENGL_CORE_PROFILE ) - { - flags = WGL_CONTEXT_CORE_PROFILE_BIT_ARB; - } - else - { - flags = WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; - } - - attribs[i++] = WGL_CONTEXT_PROFILE_MASK_ARB; - attribs[i++] = flags; - } - - attribs[i++] = 0; - - _glfwWin.context = _glfwWin.CreateContextAttribsARB( dc, NULL, attribs ); - if( !_glfwWin.context ) - { - return GL_FALSE; - } - - // Copy the debug context hint as there's no way of verifying it - // This is the only code path capable of creating a debug context, - // so leave it as false (from the earlier memset) otherwise - _glfwWin.glDebug = wndconfig->glDebug; - } - else - { - _glfwWin.context = wglCreateContext( dc ); - if( !_glfwWin.context ) - { - return GL_FALSE; - } - } - - return GL_TRUE; -} - - -//======================================================================== -// Translates a Windows key to the corresponding GLFW key -//======================================================================== - -static int translateKey( WPARAM wParam, LPARAM lParam ) -{ - MSG next_msg; - DWORD msg_time; - DWORD scan_code; - - // Check for numeric keypad keys - // Note: This way we always force "NumLock = ON", which at least - // enables GLFW users to detect numeric keypad keys - int hiFlags = HIWORD( lParam ); - - if ( !( hiFlags & 0x100 ) ) - { - switch( MapVirtualKey( hiFlags & 0xFF, 1 ) ) - { - case VK_INSERT: return GLFW_KEY_KP_0; - case VK_END: return GLFW_KEY_KP_1; - case VK_DOWN: return GLFW_KEY_KP_2; - case VK_NEXT: return GLFW_KEY_KP_3; - case VK_LEFT: return GLFW_KEY_KP_4; - case VK_CLEAR: return GLFW_KEY_KP_5; - case VK_RIGHT: return GLFW_KEY_KP_6; - case VK_HOME: return GLFW_KEY_KP_7; - case VK_UP: return GLFW_KEY_KP_8; - case VK_PRIOR: return GLFW_KEY_KP_9; - case VK_DIVIDE: return GLFW_KEY_KP_DIVIDE; - case VK_MULTIPLY: return GLFW_KEY_KP_MULTIPLY; - case VK_SUBTRACT: return GLFW_KEY_KP_SUBTRACT; - case VK_ADD: return GLFW_KEY_KP_ADD; - case VK_DELETE: return GLFW_KEY_KP_DECIMAL; - } - } - - // Check which key was pressed or released - switch( wParam ) - { - // The SHIFT keys require special handling - case VK_SHIFT: - { - // Compare scan code for this key with that of VK_RSHIFT in - // order to determine which shift key was pressed (left or - // right) - scan_code = MapVirtualKey( VK_RSHIFT, 0 ); - if( ((lParam & 0x01ff0000) >> 16) == scan_code ) - { - return GLFW_KEY_RSHIFT; - } - - return GLFW_KEY_LSHIFT; - } - - // The CTRL keys require special handling - case VK_CONTROL: - { - // Is this an extended key (i.e. right key)? - if( lParam & 0x01000000 ) - { - return GLFW_KEY_RCTRL; - } - - // Here is a trick: "Alt Gr" sends LCTRL, then RALT. We only - // want the RALT message, so we try to see if the next message - // is a RALT message. In that case, this is a false LCTRL! - msg_time = GetMessageTime(); - if( PeekMessage( &next_msg, NULL, 0, 0, PM_NOREMOVE ) ) - { - if( next_msg.message == WM_KEYDOWN || - next_msg.message == WM_SYSKEYDOWN ) - { - if( next_msg.wParam == VK_MENU && - (next_msg.lParam & 0x01000000) && - next_msg.time == msg_time ) - { - // Next message is a RALT down message, which - // means that this is NOT a proper LCTRL message! - return GLFW_KEY_UNKNOWN; - } - } - } - - return GLFW_KEY_LCTRL; - } - - // The ALT keys require special handling - case VK_MENU: - { - // Is this an extended key (i.e. right key)? - if( lParam & 0x01000000 ) - { - return GLFW_KEY_RALT; - } - - return GLFW_KEY_LALT; - } - - // The ENTER keys require special handling - case VK_RETURN: - { - // Is this an extended key (i.e. right key)? - if( lParam & 0x01000000 ) - { - return GLFW_KEY_KP_ENTER; - } - - return GLFW_KEY_ENTER; - } - - // Special keys (non character keys) - case VK_ESCAPE: return GLFW_KEY_ESC; - case VK_TAB: return GLFW_KEY_TAB; - case VK_BACK: return GLFW_KEY_BACKSPACE; - case VK_HOME: return GLFW_KEY_HOME; - case VK_END: return GLFW_KEY_END; - case VK_PRIOR: return GLFW_KEY_PAGEUP; - case VK_NEXT: return GLFW_KEY_PAGEDOWN; - case VK_INSERT: return GLFW_KEY_INSERT; - case VK_DELETE: return GLFW_KEY_DEL; - case VK_LEFT: return GLFW_KEY_LEFT; - case VK_UP: return GLFW_KEY_UP; - case VK_RIGHT: return GLFW_KEY_RIGHT; - case VK_DOWN: return GLFW_KEY_DOWN; - case VK_F1: return GLFW_KEY_F1; - case VK_F2: return GLFW_KEY_F2; - case VK_F3: return GLFW_KEY_F3; - case VK_F4: return GLFW_KEY_F4; - case VK_F5: return GLFW_KEY_F5; - case VK_F6: return GLFW_KEY_F6; - case VK_F7: return GLFW_KEY_F7; - case VK_F8: return GLFW_KEY_F8; - case VK_F9: return GLFW_KEY_F9; - case VK_F10: return GLFW_KEY_F10; - case VK_F11: return GLFW_KEY_F11; - case VK_F12: return GLFW_KEY_F12; - case VK_F13: return GLFW_KEY_F13; - case VK_F14: return GLFW_KEY_F14; - case VK_F15: return GLFW_KEY_F15; - case VK_F16: return GLFW_KEY_F16; - case VK_F17: return GLFW_KEY_F17; - case VK_F18: return GLFW_KEY_F18; - case VK_F19: return GLFW_KEY_F19; - case VK_F20: return GLFW_KEY_F20; - case VK_F21: return GLFW_KEY_F21; - case VK_F22: return GLFW_KEY_F22; - case VK_F23: return GLFW_KEY_F23; - case VK_F24: return GLFW_KEY_F24; - case VK_SPACE: return GLFW_KEY_SPACE; - - // Numeric keypad - case VK_NUMPAD0: return GLFW_KEY_KP_0; - case VK_NUMPAD1: return GLFW_KEY_KP_1; - case VK_NUMPAD2: return GLFW_KEY_KP_2; - case VK_NUMPAD3: return GLFW_KEY_KP_3; - case VK_NUMPAD4: return GLFW_KEY_KP_4; - case VK_NUMPAD5: return GLFW_KEY_KP_5; - case VK_NUMPAD6: return GLFW_KEY_KP_6; - case VK_NUMPAD7: return GLFW_KEY_KP_7; - case VK_NUMPAD8: return GLFW_KEY_KP_8; - case VK_NUMPAD9: return GLFW_KEY_KP_9; - case VK_DIVIDE: return GLFW_KEY_KP_DIVIDE; - case VK_MULTIPLY: return GLFW_KEY_KP_MULTIPLY; - case VK_SUBTRACT: return GLFW_KEY_KP_SUBTRACT; - case VK_ADD: return GLFW_KEY_KP_ADD; - case VK_DECIMAL: return GLFW_KEY_KP_DECIMAL; - case VK_NUMLOCK: return GLFW_KEY_KP_NUM_LOCK; - - case VK_CAPITAL: return GLFW_KEY_CAPS_LOCK; - case VK_SCROLL: return GLFW_KEY_SCROLL_LOCK; - case VK_PAUSE: return GLFW_KEY_PAUSE; - - case VK_LWIN: return GLFW_KEY_LSUPER; - case VK_RWIN: return GLFW_KEY_RSUPER; - case VK_APPS: return GLFW_KEY_MENU; - - // The rest (should be printable keys) - default: - { - // Convert to printable character (ISO-8859-1 or Unicode) - wParam = MapVirtualKey( (UINT) wParam, 2 ) & 0x0000FFFF; - - // Make sure that the character is uppercase - if( _glfwLibrary.Sys.hasUnicode ) - { - wParam = (WPARAM) CharUpperW( (LPWSTR) wParam ); - } - else - { - wParam = (WPARAM) CharUpperA( (LPSTR) wParam ); - } - - // Valid ISO-8859-1 character? - if( (wParam >= 32 && wParam <= 126) || - (wParam >= 160 && wParam <= 255) ) - { - return (int) wParam; - } - - return GLFW_KEY_UNKNOWN; - } - } -} - - -//======================================================================== -// Translates a Windows key to Unicode -//======================================================================== - -static void translateChar( DWORD wParam, DWORD lParam, int action ) -{ - BYTE keyboard_state[ 256 ]; - UCHAR char_buf[ 10 ]; - WCHAR unicode_buf[ 10 ]; - UINT scan_code; - int i, num_chars, unicode; - - GetKeyboardState( keyboard_state ); - - // Derive scan code from lParam and action - scan_code = (lParam & 0x01ff0000) >> 16; - if( action == GLFW_RELEASE ) - { - scan_code |= 0x8000000; - } - - if( _glfwLibrary.Sys.hasUnicode ) - { - num_chars = ToUnicode( - wParam, // virtual-key code - scan_code, // scan code - keyboard_state, // key-state array - unicode_buf, // buffer for translated key - 10, // size of translated key buffer - 0 // active-menu flag - ); - unicode = 1; - } - else - { - // Convert to ISO-8859-1 - num_chars = ToAscii( - wParam, // virtual-key code - scan_code, // scan code - keyboard_state, // key-state array - (LPWORD) char_buf, // buffer for translated key - 0 // active-menu flag - ); - unicode = 0; - } - - // Report characters - for( i = 0; i < num_chars; i++ ) - { - // Get next character from buffer - if( unicode ) - { - _glfwInputChar( (int) unicode_buf[ i ], action ); - } - else - { - _glfwInputChar( (int) char_buf[ i ], action ); - } - } -} - - -//======================================================================== -// Window callback function (handles window events) -//======================================================================== - -static LRESULT CALLBACK windowProc( HWND hWnd, UINT uMsg, - WPARAM wParam, LPARAM lParam ) -{ - int wheelDelta, iconified; - - switch( uMsg ) - { - // Window activate message? (iconification?) - case WM_ACTIVATE: - { - _glfwWin.active = LOWORD(wParam) != WA_INACTIVE ? GL_TRUE : GL_FALSE; - - iconified = HIWORD(wParam) ? GL_TRUE : GL_FALSE; - - // Were we deactivated/iconified? - if( (!_glfwWin.active || iconified) && !_glfwWin.iconified ) - { - _glfwInputDeactivation(); - - // If we are in fullscreen mode we need to iconify - if( _glfwWin.opened && _glfwWin.fullscreen ) - { - // Do we need to manually iconify? - if( !iconified ) - { - // Minimize window - ShowWindow( _glfwWin.window, SW_MINIMIZE ); - iconified = GL_TRUE; - } - - // Restore the original desktop resolution - ChangeDisplaySettings( NULL, CDS_FULLSCREEN ); - } - - // Unlock mouse if locked - if( !_glfwWin.oldMouseLockValid ) - { - _glfwWin.oldMouseLock = _glfwWin.mouseLock; - _glfwWin.oldMouseLockValid = GL_TRUE; - glfwEnable( GLFW_MOUSE_CURSOR ); - } - } - else if( _glfwWin.active || !iconified ) - { - // If we are in fullscreen mode we need to maximize - if( _glfwWin.opened && _glfwWin.fullscreen && _glfwWin.iconified ) - { - // Change display settings to the user selected mode - _glfwSetVideoModeMODE( _glfwWin.modeID ); - - // Do we need to manually restore window? - if( iconified ) - { - // Restore window - ShowWindow( _glfwWin.window, SW_RESTORE ); - iconified = GL_FALSE; - - // Activate window - ShowWindow( hWnd, SW_SHOW ); - setForegroundWindow( _glfwWin.window ); - SetFocus( _glfwWin.window ); - } - } - - // Lock mouse, if necessary - if( _glfwWin.oldMouseLockValid && _glfwWin.oldMouseLock ) - { - glfwDisable( GLFW_MOUSE_CURSOR ); - } - _glfwWin.oldMouseLockValid = GL_FALSE; - } - - _glfwWin.iconified = iconified; - return 0; - } - - case WM_SYSCOMMAND: - { - switch( wParam & 0xfff0 ) - { - case SC_SCREENSAVE: - case SC_MONITORPOWER: - { - if( _glfwWin.fullscreen ) - { - // Disallow screen saver and screen blanking if we are - // running in fullscreen mode - return 0; - } - else - { - break; - } - } - - // User trying to access application menu using ALT? - case SC_KEYMENU: - return 0; - } - break; - } - - case WM_CLOSE: - { - // Translate this to WM_QUIT so that we can handle all cases in the - // same place - PostQuitMessage( 0 ); - return 0; - } - - case WM_KEYDOWN: - case WM_SYSKEYDOWN: - { - _glfwInputKey( translateKey( wParam, lParam ), GLFW_PRESS ); - - if( _glfwWin.charCallback ) - { - translateChar( (DWORD) wParam, (DWORD) lParam, GLFW_PRESS ); - } - break; - } - - case WM_KEYUP: - case WM_SYSKEYUP: - { - // Special trick: release both shift keys on SHIFT up event - if( wParam == VK_SHIFT ) - { - _glfwInputKey( GLFW_KEY_LSHIFT, GLFW_RELEASE ); - _glfwInputKey( GLFW_KEY_RSHIFT, GLFW_RELEASE ); - } - else - { - _glfwInputKey( translateKey( wParam, lParam ), GLFW_RELEASE ); - } - - if( _glfwWin.charCallback ) - { - translateChar( (DWORD) wParam, (DWORD) lParam, GLFW_RELEASE ); - } - - break; - } - - case WM_LBUTTONDOWN: - SetCapture(hWnd); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_LEFT, GLFW_PRESS ); - return 0; - case WM_RBUTTONDOWN: - SetCapture(hWnd); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_RIGHT, GLFW_PRESS ); - return 0; - case WM_MBUTTONDOWN: - SetCapture(hWnd); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_MIDDLE, GLFW_PRESS ); - return 0; - case WM_XBUTTONDOWN: - { - if( HIWORD(wParam) == XBUTTON1 ) - { - SetCapture(hWnd); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_4, GLFW_PRESS ); - } - else if( HIWORD(wParam) == XBUTTON2 ) - { - SetCapture(hWnd); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_5, GLFW_PRESS ); - } - return 1; - } - - case WM_LBUTTONUP: - ReleaseCapture(); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_LEFT, GLFW_RELEASE ); - return 0; - case WM_RBUTTONUP: - ReleaseCapture(); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_RIGHT, GLFW_RELEASE ); - return 0; - case WM_MBUTTONUP: - ReleaseCapture(); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_MIDDLE, GLFW_RELEASE ); - return 0; - case WM_XBUTTONUP: - { - if( HIWORD(wParam) == XBUTTON1 ) - { - ReleaseCapture(); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_4, GLFW_RELEASE ); - } - else if( HIWORD(wParam) == XBUTTON2 ) - { - ReleaseCapture(); - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_5, GLFW_RELEASE ); - } - return 1; - } - - case WM_MOUSEMOVE: - { - int NewMouseX, NewMouseY; - - // Get signed (!) mouse position - NewMouseX = (int)((short)LOWORD(lParam)); - NewMouseY = (int)((short)HIWORD(lParam)); - - if( NewMouseX != _glfwInput.OldMouseX || - NewMouseY != _glfwInput.OldMouseY ) - { - if( _glfwWin.mouseLock ) - { - _glfwInput.MousePosX += NewMouseX - - _glfwInput.OldMouseX; - _glfwInput.MousePosY += NewMouseY - - _glfwInput.OldMouseY; - } - else - { - _glfwInput.MousePosX = NewMouseX; - _glfwInput.MousePosY = NewMouseY; - } - _glfwInput.OldMouseX = NewMouseX; - _glfwInput.OldMouseY = NewMouseY; - _glfwInput.MouseMoved = GL_TRUE; - - if( _glfwWin.mousePosCallback ) - { - _glfwWin.mousePosCallback( _glfwInput.MousePosX, - _glfwInput.MousePosY ); - } - } - return 0; - } - - case WM_MOUSEWHEEL: - { - // WM_MOUSEWHEEL is not supported under Windows 95 - if( _glfwLibrary.Sys.winVer != _GLFW_WIN_95 ) - { - wheelDelta = (((int)wParam) >> 16) / WHEEL_DELTA; - _glfwInput.WheelPos += wheelDelta; - if( _glfwWin.mouseWheelCallback ) - { - _glfwWin.mouseWheelCallback( _glfwInput.WheelPos ); - } - return 0; - } - break; - } - - case WM_SIZE: - { - _glfwWin.width = LOWORD(lParam); - _glfwWin.height = HIWORD(lParam); - - // If the mouse is locked, update the clipping rect - if( _glfwWin.mouseLock ) - { - RECT ClipWindowRect; - if( GetWindowRect( _glfwWin.window, &ClipWindowRect ) ) - { - ClipCursor( &ClipWindowRect ); - } - } - - if( _glfwWin.windowSizeCallback ) - { - _glfwWin.windowSizeCallback( LOWORD(lParam), HIWORD(lParam) ); - } - return 0; - } - - case WM_MOVE: - { - // If the mouse is locked, update the clipping rect - if( _glfwWin.mouseLock ) - { - RECT ClipWindowRect; - if( GetWindowRect( _glfwWin.window, &ClipWindowRect ) ) - { - ClipCursor( &ClipWindowRect ); - } - } - return 0; - } - - // Was the window contents damaged? - case WM_PAINT: - { - if( _glfwWin.windowRefreshCallback ) - { - _glfwWin.windowRefreshCallback(); - } - break; - } - - case WM_DISPLAYCHANGE: - { - // TODO: Do stuff here. - - break; - } - } - - // Pass all unhandled messages to DefWindowProc - return DefWindowProc( hWnd, uMsg, wParam, lParam ); -} - - -//======================================================================== -// Translate client window size to full window size (including window borders) -//======================================================================== - -static void getFullWindowSize( int clientWidth, int clientHeight, - int *fullWidth, int *fullHeight ) -{ - RECT rect; - - // Create a window rectangle - rect.left = (long)0; - rect.right = (long)clientWidth - 1; - rect.top = (long)0; - rect.bottom = (long)clientHeight - 1; - - // Adjust according to window styles - AdjustWindowRectEx( &rect, _glfwWin.dwStyle, FALSE, _glfwWin.dwExStyle ); - - // Calculate width and height of full window - *fullWidth = rect.right - rect.left + 1; - *fullHeight = rect.bottom - rect.top + 1; -} - - -//======================================================================== -// Initialize WGL-specific extensions -//======================================================================== - -static void initWGLExtensions( void ) -{ - // This needs to include every function pointer loaded below, because - // context re-creation means we cannot assume the struct has been cleared - _glfwWin.SwapIntervalEXT = NULL; - _glfwWin.GetPixelFormatAttribivARB = NULL; - _glfwWin.GetExtensionsStringARB = NULL; - _glfwWin.GetExtensionsStringEXT = NULL; - _glfwWin.CreateContextAttribsARB = NULL; - - // This needs to include every extension boolean used below, because context - // re-creation means we cannot assume the struct has been cleared - _glfwWin.has_WGL_EXT_swap_control = GL_FALSE; - _glfwWin.has_WGL_ARB_pixel_format = GL_FALSE; - _glfwWin.has_WGL_ARB_multisample = GL_FALSE; - _glfwWin.has_WGL_ARB_create_context = GL_FALSE; - _glfwWin.has_WGL_ARB_create_context_profile = GL_FALSE; - - _glfwWin.GetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC) - wglGetProcAddress( "wglGetExtensionsStringEXT" ); - if( !_glfwWin.GetExtensionsStringEXT ) - { - _glfwWin.GetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) - wglGetProcAddress( "wglGetExtensionsStringARB" ); - if( !_glfwWin.GetExtensionsStringARB ) - { - return; - } - } - - if( _glfwPlatformExtensionSupported( "WGL_ARB_multisample" ) ) - { - _glfwWin.has_WGL_ARB_multisample = GL_TRUE; - } - - if( _glfwPlatformExtensionSupported( "WGL_ARB_create_context" ) ) - { - _glfwWin.has_WGL_ARB_create_context = GL_TRUE; - _glfwWin.CreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC) - wglGetProcAddress( "wglCreateContextAttribsARB" ); - } - - if( _glfwWin.has_WGL_ARB_create_context ) - { - if( _glfwPlatformExtensionSupported( "WGL_ARB_create_context_profile" ) ) - { - _glfwWin.has_WGL_ARB_create_context_profile = GL_TRUE; - } - } - - if( _glfwPlatformExtensionSupported( "WGL_EXT_swap_control" ) ) - { - _glfwWin.has_WGL_EXT_swap_control = GL_TRUE; - _glfwWin.SwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC) - wglGetProcAddress( "wglSwapIntervalEXT" ); - } - - if( _glfwPlatformExtensionSupported( "WGL_ARB_pixel_format" ) ) - { - _glfwWin.has_WGL_ARB_pixel_format = GL_TRUE; - _glfwWin.GetPixelFormatAttribivARB = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC) - wglGetProcAddress( "wglGetPixelFormatAttribivARB" ); - } -} - - -//======================================================================== -// Registers the GLFW window class -//======================================================================== - -static ATOM registerWindowClass( void ) -{ - WNDCLASS wc; - ZeroMemory( &wc, sizeof( wc ) ); - - // Set window class parameters - wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; // Redraw on... - wc.lpfnWndProc = (WNDPROC) windowProc; // Message handler - wc.hInstance = _glfwLibrary.instance; // Set instance - wc.hCursor = LoadCursor( NULL, IDC_ARROW ); // Load arrow pointer - wc.lpszClassName = _GLFW_WNDCLASSNAME; // Set class name - - // Load user-provided icon if available - wc.hIcon = LoadIcon( _glfwLibrary.instance, "GLFW_ICON" ); - if( !wc.hIcon ) - { - // Load default icon - wc.hIcon = LoadIcon( NULL, IDI_WINLOGO ); - } - - return RegisterClass( &wc ); -} - - -//======================================================================== -// Returns the closest matching pixel format, or zero on error -//======================================================================== - -static int choosePixelFormat( const _GLFWfbconfig *fbconfig ) -{ - unsigned int fbcount; - int pixelFormat; - _GLFWfbconfig *fbconfigs; - const _GLFWfbconfig *closest; - - fbconfigs = getFBConfigs( &fbcount ); - if( !fbconfigs ) - { - fprintf( stderr, "Failed to find any usable GLFWFBConfigs\n" ); - return 0; - } - - closest = _glfwChooseFBConfig( fbconfig, fbconfigs, fbcount ); - if( !closest ) - { - fprintf( stderr, "Failed to select a GLFWFBConfig from the alternatives\n" ); - free( fbconfigs ); - return 0; - } - - pixelFormat = (int) closest->platformID; - - free( fbconfigs ); - fbconfigs = NULL; - closest = NULL; - - return pixelFormat; -} - - -//======================================================================== -// Creates the GLFW window and rendering context -//======================================================================== - -static int createWindow( const _GLFWwndconfig *wndconfig, - const _GLFWfbconfig *fbconfig ) -{ - DWORD dwStyle, dwExStyle; - int pixelFormat, fullWidth, fullHeight; - RECT wa; - POINT pos; - - _glfwWin.DC = NULL; - _glfwWin.context = NULL; - _glfwWin.window = NULL; - - // Set common window styles - dwStyle = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE; - dwExStyle = WS_EX_APPWINDOW; - - // Set window style, depending on fullscreen mode - if( _glfwWin.fullscreen ) - { - dwStyle |= WS_POPUP; - - // Here's a trick for helping us getting window focus - // (SetForegroundWindow doesn't work properly under - // Win98/ME/2K/.NET/+) - /* - if( _glfwLibrary.Sys.WinVer != _GLFW_WIN_95 && - _glfwLibrary.Sys.WinVer != _GLFW_WIN_NT4 && - _glfwLibrary.Sys.WinVer != _GLFW_WIN_XP ) - { - dwStyle |= WS_MINIMIZE; - } - */ - } - else - { - dwStyle |= WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX; - - if( !wndconfig->windowNoResize ) - { - dwStyle |= ( WS_MAXIMIZEBOX | WS_SIZEBOX ); - dwExStyle |= WS_EX_WINDOWEDGE; - } - } - - // Remember window styles (used by getFullWindowSize) - _glfwWin.dwStyle = dwStyle; - _glfwWin.dwExStyle = dwExStyle; - - // Adjust window size for frame and title bar - getFullWindowSize( _glfwWin.width, _glfwWin.height, &fullWidth, &fullHeight ); - - // Adjust window position to working area (e.g. if the task bar is at - // the top of the display). Fullscreen windows are always opened in - // the upper left corner regardless of the desktop working area. - if( _glfwWin.fullscreen ) - { - wa.left = wa.top = 0; - } - else - { - SystemParametersInfo( SPI_GETWORKAREA, 0, &wa, 0 ); - } - - _glfwWin.window = CreateWindowEx( _glfwWin.dwExStyle, // Extended style - _GLFW_WNDCLASSNAME, // Class name - "GLFW Window", // Window title - _glfwWin.dwStyle, // Defined window style - wa.left, wa.top, // Window position - fullWidth, // Decorated window width - fullHeight, // Decorated window height - NULL, // No parent window - NULL, // No menu - _glfwLibrary.instance, // Instance - NULL ); // Nothing to WM_CREATE - - if( !_glfwWin.window ) - { - fprintf( stderr, "Unable to create Win32 window\n" ); - return GL_FALSE; - } - - _glfwWin.DC = GetDC( _glfwWin.window ); - if( !_glfwWin.DC ) - { - fprintf( stderr, "Unable to retrieve GLFW window DC\n" ); - return GL_FALSE; - } - - pixelFormat = choosePixelFormat( fbconfig ); - if( !pixelFormat ) - { - fprintf( stderr, "Unable to find a usable pixel format\n" ); - return GL_FALSE; - } - - if( !createContext( _glfwWin.DC, wndconfig, pixelFormat ) ) - { - fprintf( stderr, "Unable to create OpenGL context\n" ); - return GL_FALSE; - } - - if( !wglMakeCurrent( _glfwWin.DC, _glfwWin.context ) ) - { - fprintf( stderr, "Unable to make OpenGL context current\n" ); - return GL_FALSE; - } - - initWGLExtensions(); - - // Initialize mouse position data - GetCursorPos( &pos ); - ScreenToClient( _glfwWin.window, &pos ); - _glfwInput.OldMouseX = _glfwInput.MousePosX = pos.x; - _glfwInput.OldMouseY = _glfwInput.MousePosY = pos.y; - - return GL_TRUE; -} - - -//======================================================================== -// Destroys the GLFW window and rendering context -//======================================================================== - -static void destroyWindow( void ) -{ - if( _glfwWin.context ) - { - wglMakeCurrent( NULL, NULL ); - wglDeleteContext( _glfwWin.context ); - _glfwWin.context = NULL; - } - - if( _glfwWin.DC ) - { - ReleaseDC( _glfwWin.window, _glfwWin.DC ); - _glfwWin.DC = NULL; - } - - if( _glfwWin.window ) - { - if( _glfwLibrary.Sys.winVer <= _GLFW_WIN_NT4 ) - { - // Note: Hiding the window first fixes an annoying W98/NT4 - // remaining icon bug for fullscreen displays - ShowWindow( _glfwWin.window, SW_HIDE ); - } - - DestroyWindow( _glfwWin.window ); - _glfwWin.window = NULL; - } -} - - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Here is where the window is created, and the OpenGL rendering context is -// created -//======================================================================== - -int _glfwPlatformOpenWindow( int width, int height, - const _GLFWwndconfig *wndconfig, - const _GLFWfbconfig *fbconfig ) -{ - GLboolean recreateContext = GL_FALSE; - - _glfwWin.desiredRefreshRate = wndconfig->refreshRate; - _glfwWin.windowNoResize = wndconfig->windowNoResize; - - _glfwWin.classAtom = registerWindowClass(); - if( !_glfwWin.classAtom ) - { - fprintf( stderr, "Failed to register GLFW window class\n" ); - return GL_FALSE; - } - - if( _glfwWin.fullscreen ) - { - _glfwSetVideoMode( &_glfwWin.width, &_glfwWin.height, - fbconfig->redBits, fbconfig->greenBits, fbconfig->blueBits, - wndconfig->refreshRate ); - } - - if( !createWindow( wndconfig, fbconfig ) ) - { - fprintf( stderr, "Failed to create GLFW window\n" ); - return GL_FALSE; - } - - _glfwRefreshContextParams(); - - if( fbconfig->samples > 0 ) - { - // We want FSAA, but can we get it? - // FSAA is not a hard constraint, so otherwise we just don't care - - if( _glfwWin.has_WGL_ARB_multisample && _glfwWin.has_WGL_ARB_pixel_format ) - { - // We appear to have both the FSAA extension and the means to ask for it - recreateContext = GL_TRUE; - } - } - - if( wndconfig->glDebug ) - { - // Debug contexts are not a hard constraint, so we don't fail here if - // the extension isn't available - - if( _glfwWin.has_WGL_ARB_create_context ) - { - recreateContext = GL_TRUE; - } - } - - if( wndconfig->glMajor > 2 ) - { - if ( wndconfig->glMajor != _glfwWin.glMajor || - wndconfig->glMinor != _glfwWin.glMinor ) - { - // We want a different OpenGL version, but can we get it? - // Otherwise, if we got a version greater than required, that's fine, - // whereas if we got a version lesser than required, it will be dealt - // with in glfwOpenWindow - - if( _glfwWin.has_WGL_ARB_create_context ) - { - recreateContext = GL_TRUE; - } - } - - if( wndconfig->glForward ) - { - if( !_glfwWin.has_WGL_ARB_create_context ) - { - // Forward-compatibility is a hard constraint - return GL_FALSE; - } - - recreateContext = GL_TRUE; - } - - if( wndconfig->glProfile ) - { - if( !_glfwWin.has_WGL_ARB_create_context_profile ) - { - // Context profile is a hard constraint - return GL_FALSE; - } - - recreateContext = GL_TRUE; - } - } - - if( recreateContext ) - { - // Some window hints require us to re-create the context using WGL - // extensions retrieved through the current context, as we cannot check - // for WGL extensions or retrieve WGL entry points before we have a - // current context (actually until we have implicitly loaded the ICD) - - // Yes, this is strange, and yes, this is the proper way on Win32 - - // As Windows only allows you to set the pixel format once for a - // window, we need to destroy the current window and create a new one - // to be able to use the new pixel format - - // Technically, it may be possible to keep the old window around if - // we're just creating an OpenGL 3.0+ context with the same pixel - // format, but it's not worth the potential compatibility problems - - destroyWindow(); - - if( !createWindow( wndconfig, fbconfig ) ) - { - fprintf( stderr, "Unable to re-create GLFW window\n" ); - return GL_FALSE; - } - } - - if( _glfwWin.fullscreen ) - { - // Place the window above all topmost windows - SetWindowPos( _glfwWin.window, HWND_TOPMOST, 0,0,0,0, - SWP_NOMOVE | SWP_NOSIZE ); - } - - setForegroundWindow( _glfwWin.window ); - SetFocus( _glfwWin.window ); - - return GL_TRUE; -} - - -//======================================================================== -// Properly kill the window / video display -//======================================================================== - -void _glfwPlatformCloseWindow( void ) -{ - destroyWindow(); - - if( _glfwWin.classAtom ) - { - UnregisterClass( _GLFW_WNDCLASSNAME, _glfwLibrary.instance ); - _glfwWin.classAtom = 0; - } - - if( _glfwWin.fullscreen ) - { - // Restore original desktop resolution - ChangeDisplaySettings( NULL, CDS_FULLSCREEN ); - } -} - - -//======================================================================== -// Set the window title -//======================================================================== - -void _glfwPlatformSetWindowTitle( const char *title ) -{ - (void) SetWindowText( _glfwWin.window, title ); -} - - -//======================================================================== -// Set the window size. -//======================================================================== - -void _glfwPlatformSetWindowSize( int width, int height ) -{ - int bpp, mode = 0, refresh; - int sizechanged = GL_FALSE; - GLint drawbuffer; - GLfloat clearcolor[4]; - - if( _glfwWin.fullscreen ) - { - // Get some info about the current mode - - DEVMODE dm; - - // Get current BPP settings - dm.dmSize = sizeof( DEVMODE ); - if( EnumDisplaySettings( NULL, _glfwWin.modeID, &dm ) ) - { - // Get bpp - bpp = dm.dmBitsPerPel; - - // Get closest match for target video mode - refresh = _glfwWin.desiredRefreshRate; - mode = _glfwGetClosestVideoModeBPP( &width, &height, &bpp, - &refresh ); - } - else - { - mode = _glfwWin.modeID; - } - } - else - { - // If we are in windowed mode, adjust the window size to - // compensate for window decorations - getFullWindowSize( width, height, &width, &height ); - } - - // Change window size before changing fullscreen mode? - if( _glfwWin.fullscreen && (width > _glfwWin.width) ) - { - SetWindowPos( _glfwWin.window, HWND_TOP, 0, 0, width, height, - SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOZORDER ); - sizechanged = GL_TRUE; - } - - // Change fullscreen video mode? - if( _glfwWin.fullscreen && mode != _glfwWin.modeID ) - { - _glfwSetVideoModeMODE( mode ); - - // Clear the front buffer to black (avoid ugly desktop remains in - // our OpenGL window) - glGetIntegerv( GL_DRAW_BUFFER, &drawbuffer ); - glGetFloatv( GL_COLOR_CLEAR_VALUE, clearcolor ); - glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); - glClear( GL_COLOR_BUFFER_BIT ); - if( drawbuffer == GL_BACK ) - { - _glfw_SwapBuffers( _glfwWin.DC ); - } - glClearColor( clearcolor[0], clearcolor[1], clearcolor[2], - clearcolor[3] ); - } - - // Set window size (if not already changed) - if( !sizechanged ) - { - SetWindowPos( _glfwWin.window, HWND_TOP, 0, 0, width, height, - SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOZORDER ); - } -} - - -//======================================================================== -// Set the window position -//======================================================================== - -void _glfwPlatformSetWindowPos( int x, int y ) -{ - (void) SetWindowPos( _glfwWin.window, HWND_TOP, x, y, 0, 0, - SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER ); -} - - -//======================================================================== -// Window iconification -//======================================================================== - -void _glfwPlatformIconifyWindow( void ) -{ - // Iconify window - ShowWindow( _glfwWin.window, SW_MINIMIZE ); - _glfwWin.iconified = GL_TRUE; - - // If we are in fullscreen mode we need to change video modes - if( _glfwWin.fullscreen ) - { - // Change display settings to the desktop resolution - ChangeDisplaySettings( NULL, CDS_FULLSCREEN ); - } - - // Unlock mouse - if( !_glfwWin.oldMouseLockValid ) - { - _glfwWin.oldMouseLock = _glfwWin.mouseLock; - _glfwWin.oldMouseLockValid = GL_TRUE; - glfwEnable( GLFW_MOUSE_CURSOR ); - } -} - - -//======================================================================== -// Window un-iconification -//======================================================================== - -void _glfwPlatformRestoreWindow( void ) -{ - // If we are in fullscreen mode we need to change video modes - if( _glfwWin.fullscreen ) - { - // Change display settings to the user selected mode - _glfwSetVideoModeMODE( _glfwWin.modeID ); - } - - // Un-iconify window - ShowWindow( _glfwWin.window, SW_RESTORE ); - - // Make sure that our window ends up on top of things - ShowWindow( _glfwWin.window, SW_SHOW ); - setForegroundWindow( _glfwWin.window ); - SetFocus( _glfwWin.window ); - - // Window is no longer iconified - _glfwWin.iconified = GL_FALSE; - - // Lock mouse, if necessary - if( _glfwWin.oldMouseLockValid && _glfwWin.oldMouseLock ) - { - glfwDisable( GLFW_MOUSE_CURSOR ); - } - _glfwWin.oldMouseLockValid = GL_FALSE; -} - - -//======================================================================== -// Swap buffers (double-buffering) -//======================================================================== - -void _glfwPlatformSwapBuffers( void ) -{ - _glfw_SwapBuffers( _glfwWin.DC ); -} - - -//======================================================================== -// Set double buffering swap interval -//======================================================================== - -void _glfwPlatformSwapInterval( int interval ) -{ - if( _glfwWin.has_WGL_EXT_swap_control ) - { - _glfwWin.SwapIntervalEXT( interval ); - } -} - - -//======================================================================== -// Write back window parameters into GLFW window structure -//======================================================================== - -void _glfwPlatformRefreshWindowParams( void ) -{ - PIXELFORMATDESCRIPTOR pfd; - DEVMODE dm; - int pixelFormat, mode; - - // Obtain a detailed description of current pixel format - pixelFormat = _glfw_GetPixelFormat( _glfwWin.DC ); - - if( _glfwWin.has_WGL_ARB_pixel_format ) - { - if( getPixelFormatAttrib( pixelFormat, WGL_ACCELERATION_ARB ) != - WGL_NO_ACCELERATION_ARB ) - { - _glfwWin.accelerated = GL_TRUE; - } - else - { - _glfwWin.accelerated = GL_FALSE; - } - - _glfwWin.redBits = getPixelFormatAttrib( pixelFormat, WGL_RED_BITS_ARB ); - _glfwWin.greenBits = getPixelFormatAttrib( pixelFormat, WGL_GREEN_BITS_ARB ); - _glfwWin.blueBits = getPixelFormatAttrib( pixelFormat, WGL_BLUE_BITS_ARB ); - - _glfwWin.alphaBits = getPixelFormatAttrib( pixelFormat, WGL_ALPHA_BITS_ARB ); - _glfwWin.depthBits = getPixelFormatAttrib( pixelFormat, WGL_DEPTH_BITS_ARB ); - _glfwWin.stencilBits = getPixelFormatAttrib( pixelFormat, WGL_STENCIL_BITS_ARB ); - - _glfwWin.accumRedBits = getPixelFormatAttrib( pixelFormat, WGL_ACCUM_RED_BITS_ARB ); - _glfwWin.accumGreenBits = getPixelFormatAttrib( pixelFormat, WGL_ACCUM_GREEN_BITS_ARB ); - _glfwWin.accumBlueBits = getPixelFormatAttrib( pixelFormat, WGL_ACCUM_BLUE_BITS_ARB ); - _glfwWin.accumAlphaBits = getPixelFormatAttrib( pixelFormat, WGL_ACCUM_ALPHA_BITS_ARB ); - - _glfwWin.auxBuffers = getPixelFormatAttrib( pixelFormat, WGL_AUX_BUFFERS_ARB ); - _glfwWin.stereo = getPixelFormatAttrib( pixelFormat, WGL_STEREO_ARB ) ? GL_TRUE : GL_FALSE; - - if( _glfwWin.has_WGL_ARB_multisample ) - { - _glfwWin.samples = getPixelFormatAttrib( pixelFormat, WGL_SAMPLES_ARB ); - // Should we force 1 to 0 here for consistency, or keep 1 for transparency? - } - else - { - _glfwWin.samples = 0; - } - } - else - { - _glfw_DescribePixelFormat( _glfwWin.DC, pixelFormat, - sizeof(PIXELFORMATDESCRIPTOR), &pfd ); - - // Is current OpenGL context accelerated? - _glfwWin.accelerated = (pfd.dwFlags & PFD_GENERIC_ACCELERATED) || - !(pfd.dwFlags & PFD_GENERIC_FORMAT) ? 1 : 0; - - // "Standard" window parameters - _glfwWin.redBits = pfd.cRedBits; - _glfwWin.greenBits = pfd.cGreenBits; - _glfwWin.blueBits = pfd.cBlueBits; - _glfwWin.alphaBits = pfd.cAlphaBits; - _glfwWin.depthBits = pfd.cDepthBits; - _glfwWin.stencilBits = pfd.cStencilBits; - _glfwWin.accumRedBits = pfd.cAccumRedBits; - _glfwWin.accumGreenBits = pfd.cAccumGreenBits; - _glfwWin.accumBlueBits = pfd.cAccumBlueBits; - _glfwWin.accumAlphaBits = pfd.cAccumAlphaBits; - _glfwWin.auxBuffers = pfd.cAuxBuffers; - _glfwWin.stereo = (pfd.dwFlags & PFD_STEREO) ? GL_TRUE : GL_FALSE; - - // If we don't have WGL_ARB_pixel_format then we can't have created a - // multisampling context, so it's safe to hardcode zero here - _glfwWin.samples = 0; - } - - // Get refresh rate - mode = _glfwWin.fullscreen ? _glfwWin.modeID : ENUM_CURRENT_SETTINGS; - dm.dmSize = sizeof( DEVMODE ); - - if( EnumDisplaySettings( NULL, mode, &dm ) ) - { - _glfwWin.refreshRate = dm.dmDisplayFrequency; - if( _glfwWin.refreshRate <= 1 ) - { - _glfwWin.refreshRate = 0; - } - } - else - { - _glfwWin.refreshRate = 0; - } -} - - -//======================================================================== -// Poll for new window and input events -//======================================================================== - -void _glfwPlatformPollEvents( void ) -{ - MSG msg; - int winclosed = GL_FALSE; - - // Flag: mouse was not moved (will be changed by _glfwGetNextEvent if - // there was a mouse move event) - _glfwInput.MouseMoved = GL_FALSE; - - // Check for new window messages - while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) - { - switch( msg.message ) - { - // QUIT-message (from close window)? - case WM_QUIT: - winclosed = GL_TRUE; - break; - - // Ok, send it to the window message handler - default: - DispatchMessage( &msg ); - break; - } - } - - // LSHIFT/RSHIFT fixup (keys tend to "stick" without this fix) - // This is the only async event handling in GLFW, but it solves some - // nasty problems. - // Caveat: Does not work under Win 9x/ME. - if( _glfwLibrary.Sys.winVer >= _GLFW_WIN_NT4 ) - { - int lshift_down, rshift_down; - - // Get current state of left and right shift keys - lshift_down = (GetAsyncKeyState( VK_LSHIFT ) >> 15) & 1; - rshift_down = (GetAsyncKeyState( VK_RSHIFT ) >> 15) & 1; - - // See if this differs from our belief of what has happened - // (we only have to check for lost key up events) - if( !lshift_down && _glfwInput.Key[ GLFW_KEY_LSHIFT ] == 1 ) - { - _glfwInputKey( GLFW_KEY_LSHIFT, GLFW_RELEASE ); - } - if( !rshift_down && _glfwInput.Key[ GLFW_KEY_RSHIFT ] == 1 ) - { - _glfwInputKey( GLFW_KEY_RSHIFT, GLFW_RELEASE ); - } - } - - // Did we have mouse movement in locked cursor mode? - if( _glfwInput.MouseMoved && _glfwWin.mouseLock ) - { - _glfwPlatformSetMouseCursorPos( _glfwWin.width / 2, - _glfwWin.height / 2 ); - } - - // Was there a window close request? - if( winclosed && _glfwWin.windowCloseCallback ) - { - // Check if the program wants us to close the window - winclosed = _glfwWin.windowCloseCallback(); - } - if( winclosed ) - { - glfwCloseWindow(); - } -} - - -//======================================================================== -// Wait for new window and input events -//======================================================================== - -void _glfwPlatformWaitEvents( void ) -{ - WaitMessage(); - - _glfwPlatformPollEvents(); -} - - -//======================================================================== -// Hide mouse cursor (lock it) -//======================================================================== - -void _glfwPlatformHideMouseCursor( void ) -{ - RECT ClipWindowRect; - - ShowCursor( FALSE ); - - // Clip cursor to the window - if( GetWindowRect( _glfwWin.window, &ClipWindowRect ) ) - { - ClipCursor( &ClipWindowRect ); - } - - // Capture cursor to user window - SetCapture( _glfwWin.window ); - - // Move cursor to the middle of the window - _glfwPlatformSetMouseCursorPos( _glfwWin.width / 2, _glfwWin.height / 2 ); -} - - -//======================================================================== -// Show mouse cursor (unlock it) -//======================================================================== - -void _glfwPlatformShowMouseCursor( void ) -{ - // Un-capture cursor - ReleaseCapture(); - - // Release the cursor from the window - ClipCursor( NULL ); - - ShowCursor( TRUE ); -} - - -//======================================================================== -// Set physical mouse cursor position -//======================================================================== - -void _glfwPlatformSetMouseCursorPos( int x, int y ) -{ - POINT pos; - - // Convert client coordinates to screen coordinates - pos.x = x; - pos.y = y; - ClientToScreen( _glfwWin.window, &pos ); - - _glfwInput.OldMouseX = x; - _glfwInput.OldMouseY = y; - - SetCursorPos( pos.x, pos.y ); -} - diff --git a/ogl_editor/src/External/glfw/lib/window.c b/ogl_editor/src/External/glfw/lib/window.c deleted file mode 100644 index 6044743..0000000 --- a/ogl_editor/src/External/glfw/lib/window.c +++ /dev/null @@ -1,1005 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: Any -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -#include - - -#ifndef GL_VERSION_3_2 - -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_CONTEXT_PROFILE_MASK 0x9126 - -#endif /*GL_VERSION_3_2*/ - - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -static int Max(int a, int b) -{ - return (a > b) ? a : b; -} - -//======================================================================== -// Clear all open window hints -//======================================================================== - -void _glfwClearWindowHints( void ) -{ - memset( &_glfwLibrary.hints, 0, sizeof( _glfwLibrary.hints ) ); - _glfwLibrary.hints.glMajor = 1; -} - - -//======================================================================== -// Handle the input tracking part of window deactivation -//======================================================================== - -void _glfwInputDeactivation( void ) -{ - int i; - - // Release all keyboard keys - for( i = 0; i <= GLFW_KEY_LAST; i ++ ) - { - if( _glfwInput.Key[ i ] == GLFW_PRESS ) - { - _glfwInputKey( i, GLFW_RELEASE ); - } - } - - // Release all mouse buttons - for( i = 0; i <= GLFW_MOUSE_BUTTON_LAST; i ++ ) - { - if( _glfwInput.MouseButton[ i ] == GLFW_PRESS ) - { - _glfwInputMouseClick( i, GLFW_RELEASE ); - } - } -} - - -//======================================================================== -// Clear all input state -//======================================================================== - -void _glfwClearInput( void ) -{ - int i; - - // Release all keyboard keys - for( i = 0; i <= GLFW_KEY_LAST; i ++ ) - { - _glfwInput.Key[ i ] = GLFW_RELEASE; - } - - // Clear last character - _glfwInput.LastChar = 0; - - // Release all mouse buttons - for( i = 0; i <= GLFW_MOUSE_BUTTON_LAST; i ++ ) - { - _glfwInput.MouseButton[ i ] = GLFW_RELEASE; - } - - // Set mouse position to (0,0) - _glfwInput.MousePosX = 0; - _glfwInput.MousePosY = 0; - - // Set mouse wheel position to 0 - _glfwInput.WheelPos = 0; - - // The default is to use non sticky keys and mouse buttons - _glfwInput.StickyKeys = GL_FALSE; - _glfwInput.StickyMouseButtons = GL_FALSE; - - // The default is to disable key repeat - _glfwInput.KeyRepeat = GL_FALSE; -} - - -//======================================================================== -// Register keyboard activity -//======================================================================== - -void _glfwInputKey( int key, int action ) -{ - int keyrepeat = 0; - - if( key < 0 || key > GLFW_KEY_LAST ) - { - return; - } - - // Are we trying to release an already released key? - if( action == GLFW_RELEASE && _glfwInput.Key[ key ] != GLFW_PRESS ) - { - return; - } - - // Register key action - if( action == GLFW_RELEASE && _glfwInput.StickyKeys ) - { - _glfwInput.Key[ key ] = GLFW_STICK; - } - else - { - keyrepeat = (_glfwInput.Key[ key ] == GLFW_PRESS) && - (action == GLFW_PRESS); - _glfwInput.Key[ key ] = (char) action; - } - - // Call user callback function - if( _glfwWin.keyCallback && (_glfwInput.KeyRepeat || !keyrepeat) ) - { - _glfwWin.keyCallback( key, action ); - } -} - - -//======================================================================== -// Register (keyboard) character activity -//======================================================================== - -void _glfwInputChar( int character, int action ) -{ - int keyrepeat = 0; - - // Valid Unicode (ISO 10646) character? - if( !( (character >= 32 && character <= 126) || character >= 160 ) ) - { - return; - } - - // Is this a key repeat? - if( action == GLFW_PRESS && _glfwInput.LastChar == character ) - { - keyrepeat = 1; - } - - // Store this character as last character (or clear it, if released) - if( action == GLFW_PRESS ) - { - _glfwInput.LastChar = character; - } - else - { - _glfwInput.LastChar = 0; - } - - if( action != GLFW_PRESS ) - { - // This intentionally breaks release notifications for Unicode - // characters, partly to see if anyone cares but mostly because it's - // a nonsensical concept to begin with - // - // It will remain broken either until its removal in the 3.0 API or - // until someone explains, in a way that makes sense to people outside - // the US and Scandinavia, what "Unicode character up" actually means - // - // If what you want is "physical key up" then you should be using the - // key functions and/or the key callback, NOT the Unicode input - // - // However, if your particular application uses this misfeature for... - // something, you can re-enable it by removing this if-statement - return; - } - - if( _glfwWin.charCallback && (_glfwInput.KeyRepeat || !keyrepeat) ) - { - _glfwWin.charCallback( character, action ); - } -} - - -//======================================================================== -// Register mouse button clicks -//======================================================================== - -void _glfwInputMouseClick( int button, int action ) -{ - if( button >= 0 && button <= GLFW_MOUSE_BUTTON_LAST ) - { - // Register mouse button action - if( action == GLFW_RELEASE && _glfwInput.StickyMouseButtons ) - { - _glfwInput.MouseButton[ button ] = GLFW_STICK; - } - else - { - _glfwInput.MouseButton[ button ] = (char) action; - } - - // Call user callback function - if( _glfwWin.mouseButtonCallback ) - { - _glfwWin.mouseButtonCallback( button, action ); - } - } -} - - -//======================================================================== -// Return the available framebuffer config closest to the desired values -// This is based on the manual GLX Visual selection from 2.6 -//======================================================================== - -const _GLFWfbconfig *_glfwChooseFBConfig( const _GLFWfbconfig *desired, - const _GLFWfbconfig *alternatives, - unsigned int count ) -{ - unsigned int i; - unsigned int missing, leastMissing = UINT_MAX; - unsigned int colorDiff, leastColorDiff = UINT_MAX; - unsigned int extraDiff, leastExtraDiff = UINT_MAX; - const _GLFWfbconfig *current; - const _GLFWfbconfig *closest = NULL; - - for( i = 0; i < count; i++ ) - { - current = alternatives + i; - - if( desired->stereo > 0 && current->stereo == 0 ) - { - // Stereo is a hard constraint - continue; - } - - // Count number of missing buffers - { - missing = 0; - - if( desired->alphaBits > 0 && current->alphaBits == 0 ) - { - missing++; - } - - if( desired->depthBits > 0 && current->depthBits == 0 ) - { - missing++; - } - - if( desired->stencilBits > 0 && current->stencilBits == 0 ) - { - missing++; - } - - if( desired->auxBuffers > 0 && current->auxBuffers < desired->auxBuffers ) - { - missing += desired->auxBuffers - current->auxBuffers; - } - - if( desired->samples > 0 && current->samples == 0 ) - { - // Technically, several multisampling buffers could be - // involved, but that's a lower level implementation detail and - // not important to us here, so we count them as one - missing++; - } - } - - // These polynomials make many small channel size differences matter - // less than one large channel size difference - - // Calculate color channel size difference value - { - colorDiff = 0; - - if ( desired->redBits > 0 ) - { - colorDiff += ( desired->redBits - current->redBits ) * - ( desired->redBits - current->redBits ); - } - - if ( desired->greenBits > 0 ) - { - colorDiff += ( desired->greenBits - current->greenBits ) * - ( desired->greenBits - current->greenBits ); - } - - if ( desired->blueBits > 0 ) - { - colorDiff += ( desired->blueBits - current->blueBits ) * - ( desired->blueBits - current->blueBits ); - } - } - - // Calculate non-color channel size difference value - { - extraDiff = 0; - - if( desired->alphaBits > 0 ) - { - extraDiff += ( desired->alphaBits - current->alphaBits ) * - ( desired->alphaBits - current->alphaBits ); - } - - if( desired->depthBits > 0 ) - { - extraDiff += ( desired->depthBits - current->depthBits ) * - ( desired->depthBits - current->depthBits ); - } - - if( desired->stencilBits > 0 ) - { - extraDiff += ( desired->stencilBits - current->stencilBits ) * - ( desired->stencilBits - current->stencilBits ); - } - - if( desired->accumRedBits > 0 ) - { - extraDiff += ( desired->accumRedBits - current->accumRedBits ) * - ( desired->accumRedBits - current->accumRedBits ); - } - - if( desired->accumGreenBits > 0 ) - { - extraDiff += ( desired->accumGreenBits - current->accumGreenBits ) * - ( desired->accumGreenBits - current->accumGreenBits ); - } - - if( desired->accumBlueBits > 0 ) - { - extraDiff += ( desired->accumBlueBits - current->accumBlueBits ) * - ( desired->accumBlueBits - current->accumBlueBits ); - } - - if( desired->accumAlphaBits > 0 ) - { - extraDiff += ( desired->accumAlphaBits - current->accumAlphaBits ) * - ( desired->accumAlphaBits - current->accumAlphaBits ); - } - - if( desired->samples > 0 ) - { - extraDiff += ( desired->samples - current->samples ) * - ( desired->samples - current->samples ); - } - } - - // Figure out if the current one is better than the best one found so far - - if( missing < leastMissing ) - { - closest = current; - } - else if( missing == leastMissing ) - { - if( ( colorDiff < leastColorDiff ) || - ( colorDiff == leastColorDiff && extraDiff < leastExtraDiff ) ) - { - closest = current; - } - } - - if( current == closest ) - { - leastMissing = missing; - leastColorDiff = colorDiff; - leastExtraDiff = extraDiff; - } - } - - return closest; -} - - -//************************************************************************ -//**** GLFW user functions **** -//************************************************************************ - -//======================================================================== -// Create the GLFW window and its associated context -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwOpenWindow( int width, int height, - int redbits, int greenbits, int bluebits, int alphabits, - int depthbits, int stencilbits, int mode ) -{ - _GLFWfbconfig fbconfig; - _GLFWwndconfig wndconfig; - - if( !_glfwInitialized || _glfwWin.opened ) - { - return GL_FALSE; - } - - // Set up desired framebuffer config - fbconfig.redBits = Max( redbits, 0 ); - fbconfig.greenBits = Max( greenbits, 0 ); - fbconfig.blueBits = Max( bluebits, 0 ); - fbconfig.alphaBits = Max( alphabits, 0 ); - fbconfig.depthBits = Max( depthbits, 0 ); - fbconfig.stencilBits = Max( stencilbits, 0 ); - fbconfig.accumRedBits = Max( _glfwLibrary.hints.accumRedBits, 0 ); - fbconfig.accumGreenBits = Max( _glfwLibrary.hints.accumGreenBits, 0 ); - fbconfig.accumBlueBits = Max( _glfwLibrary.hints.accumBlueBits, 0 ); - fbconfig.accumAlphaBits = Max( _glfwLibrary.hints.accumAlphaBits, 0 ); - fbconfig.auxBuffers = Max( _glfwLibrary.hints.auxBuffers, 0 ); - fbconfig.stereo = _glfwLibrary.hints.stereo ? GL_TRUE : GL_FALSE; - fbconfig.samples = Max( _glfwLibrary.hints.samples, 0 ); - - // Set up desired window config - wndconfig.mode = mode; - wndconfig.refreshRate = Max( _glfwLibrary.hints.refreshRate, 0 ); - wndconfig.windowNoResize = _glfwLibrary.hints.windowNoResize ? GL_TRUE : GL_FALSE; - wndconfig.glMajor = Max( _glfwLibrary.hints.glMajor, 1 ); - wndconfig.glMinor = Max( _glfwLibrary.hints.glMinor, 0 ); - wndconfig.glForward = _glfwLibrary.hints.glForward ? GL_TRUE : GL_FALSE; - wndconfig.glDebug = _glfwLibrary.hints.glDebug ? GL_TRUE : GL_FALSE; - wndconfig.glProfile = _glfwLibrary.hints.glProfile; - - if( wndconfig.glMajor == 1 && wndconfig.glMinor > 5 ) - { - // OpenGL 1.x series ended with version 1.5 - return GL_FALSE; - } - else if( wndconfig.glMajor == 2 && wndconfig.glMinor > 1 ) - { - // OpenGL 2.x series ended with version 2.1 - return GL_FALSE; - } - else if( wndconfig.glMajor == 3 && wndconfig.glMinor > 3 ) - { - // OpenGL 3.x series ended with version 3.3 - return GL_FALSE; - } - else - { - // For now, let everything else through - } - - if( wndconfig.glProfile && - ( wndconfig.glMajor < 3 || ( wndconfig.glMajor == 3 && wndconfig.glMinor < 2 ) ) ) - { - // Context profiles are only defined for OpenGL version 3.2 and above - return GL_FALSE; - } - - if( wndconfig.glForward && wndconfig.glMajor < 3 ) - { - // Forward-compatible contexts are only defined for OpenGL version 3.0 and above - return GL_FALSE; - } - - // Clear for next open call - _glfwClearWindowHints(); - - // Check input arguments - if( mode != GLFW_WINDOW && mode != GLFW_FULLSCREEN ) - { - return GL_FALSE; - } - - // Clear GLFW window state - _glfwWin.active = GL_TRUE; - _glfwWin.iconified = GL_FALSE; - _glfwWin.mouseLock = GL_FALSE; - _glfwWin.autoPollEvents = GL_TRUE; - _glfwClearInput(); - - // Unregister all callback functions - _glfwWin.windowSizeCallback = NULL; - _glfwWin.windowCloseCallback = NULL; - _glfwWin.windowRefreshCallback = NULL; - _glfwWin.keyCallback = NULL; - _glfwWin.charCallback = NULL; - _glfwWin.mousePosCallback = NULL; - _glfwWin.mouseButtonCallback = NULL; - _glfwWin.mouseWheelCallback = NULL; - - // Check width & height - if( width > 0 && height <= 0 ) - { - // Set the window aspect ratio to 4:3 - height = (width * 3) / 4; - } - else if( width <= 0 && height > 0 ) - { - // Set the window aspect ratio to 4:3 - width = (height * 4) / 3; - } - else if( width <= 0 && height <= 0 ) - { - // Default window size - width = 640; - height = 480; - } - - // Remember window settings - _glfwWin.width = width; - _glfwWin.height = height; - _glfwWin.fullscreen = (mode == GLFW_FULLSCREEN ? GL_TRUE : GL_FALSE); - - // Platform specific window opening routine - if( !_glfwPlatformOpenWindow( width, height, &wndconfig, &fbconfig ) ) - { - glfwCloseWindow(); - return GL_FALSE; - } - - // Flag that window is now opened - _glfwWin.opened = GL_TRUE; - - // Read back window and context parameters - _glfwPlatformRefreshWindowParams(); - _glfwRefreshContextParams(); - - if( _glfwWin.glMajor < wndconfig.glMajor || - ( _glfwWin.glMajor == wndconfig.glMajor && - _glfwWin.glMinor < wndconfig.glMinor ) ) - { - glfwCloseWindow(); - return GL_FALSE; - } - - // Do we have non-power-of-two textures (added to core in version 2.0)? - _glfwWin.has_GL_ARB_texture_non_power_of_two = - ( _glfwWin.glMajor >= 2 ) || - glfwExtensionSupported( "GL_ARB_texture_non_power_of_two" ); - - // Do we have automatic mipmap generation (added to core in version 1.4)? - _glfwWin.has_GL_SGIS_generate_mipmap = - ( _glfwWin.glMajor >= 2 ) || ( _glfwWin.glMinor >= 4 ) || - glfwExtensionSupported( "GL_SGIS_generate_mipmap" ); - - if( _glfwWin.glMajor > 2 ) - { - _glfwWin.GetStringi = (PFNGLGETSTRINGIPROC) glfwGetProcAddress( "glGetStringi" ); - if( !_glfwWin.GetStringi ) - { - // This is a very common problem among people who compile GLFW - // on X11/GLX using custom build systems, as the glfwGetProcAddress - // code path selection needs explicit configuration - // - // See readme.html section 2.2 for details - - glfwCloseWindow(); - return GL_FALSE; - } - } - - // If full-screen mode was requested, disable mouse cursor - if( mode == GLFW_FULLSCREEN ) - { - glfwDisable( GLFW_MOUSE_CURSOR ); - } - - // Start by clearing the front buffer to black (avoid ugly desktop - // remains in our OpenGL window) - glClear( GL_COLOR_BUFFER_BIT ); - _glfwPlatformSwapBuffers(); - - return GL_TRUE; -} - - -//======================================================================== -// Set hints for opening the window -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwOpenWindowHint( int target, int hint ) -{ - if( !_glfwInitialized ) - { - return; - } - - switch( target ) - { - case GLFW_REFRESH_RATE: - _glfwLibrary.hints.refreshRate = hint; - break; - case GLFW_ACCUM_RED_BITS: - _glfwLibrary.hints.accumRedBits = hint; - break; - case GLFW_ACCUM_GREEN_BITS: - _glfwLibrary.hints.accumGreenBits = hint; - break; - case GLFW_ACCUM_BLUE_BITS: - _glfwLibrary.hints.accumBlueBits = hint; - break; - case GLFW_ACCUM_ALPHA_BITS: - _glfwLibrary.hints.accumAlphaBits = hint; - break; - case GLFW_AUX_BUFFERS: - _glfwLibrary.hints.auxBuffers = hint; - break; - case GLFW_STEREO: - _glfwLibrary.hints.stereo = hint; - break; - case GLFW_WINDOW_NO_RESIZE: - _glfwLibrary.hints.windowNoResize = hint; - break; - case GLFW_FSAA_SAMPLES: - _glfwLibrary.hints.samples = hint; - break; - case GLFW_OPENGL_VERSION_MAJOR: - _glfwLibrary.hints.glMajor = hint; - break; - case GLFW_OPENGL_VERSION_MINOR: - _glfwLibrary.hints.glMinor = hint; - break; - case GLFW_OPENGL_FORWARD_COMPAT: - _glfwLibrary.hints.glForward = hint; - break; - case GLFW_OPENGL_DEBUG_CONTEXT: - _glfwLibrary.hints.glDebug = hint; - break; - case GLFW_OPENGL_PROFILE: - _glfwLibrary.hints.glProfile = hint; - break; - default: - break; - } -} - - -//======================================================================== -// Properly kill the window / video display -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwCloseWindow( void ) -{ - if( !_glfwInitialized ) - { - return; - } - - // Show mouse pointer again (if hidden) - glfwEnable( GLFW_MOUSE_CURSOR ); - - _glfwPlatformCloseWindow(); - - memset( &_glfwWin, 0, sizeof(_glfwWin) ); -} - - -//======================================================================== -// Set the window title -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetWindowTitle( const char *title ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Set window title - _glfwPlatformSetWindowTitle( title ); -} - - -//======================================================================== -// Get the window size -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwGetWindowSize( int *width, int *height ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - if( width != NULL ) - { - *width = _glfwWin.width; - } - if( height != NULL ) - { - *height = _glfwWin.height; - } -} - - -//======================================================================== -// Set the window size -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetWindowSize( int width, int height ) -{ - if( !_glfwInitialized || !_glfwWin.opened || _glfwWin.iconified ) - { - return; - } - - // Don't do anything if the window size did not change - if( width == _glfwWin.width && height == _glfwWin.height ) - { - return; - } - - // Change window size - _glfwPlatformSetWindowSize( width, height ); - - // Refresh window parameters (may have changed due to changed video - // modes) - _glfwPlatformRefreshWindowParams(); -} - - -//======================================================================== -// Set the window position -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetWindowPos( int x, int y ) -{ - if( !_glfwInitialized || !_glfwWin.opened || _glfwWin.fullscreen || - _glfwWin.iconified ) - { - return; - } - - // Set window position - _glfwPlatformSetWindowPos( x, y ); -} - - -//======================================================================== -// Window iconification -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwIconifyWindow( void ) -{ - if( !_glfwInitialized || !_glfwWin.opened || _glfwWin.iconified ) - { - return; - } - - // Iconify window - _glfwPlatformIconifyWindow(); -} - - -//======================================================================== -// Window un-iconification -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwRestoreWindow( void ) -{ - if( !_glfwInitialized || !_glfwWin.opened || !_glfwWin.iconified ) - { - return; - } - - // Restore iconified window - _glfwPlatformRestoreWindow(); - - // Refresh window parameters - _glfwPlatformRefreshWindowParams(); -} - - -//======================================================================== -// Swap buffers (double-buffering) and poll any new events -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSwapBuffers( void ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - _glfwPlatformSwapBuffers(); - - // Check for window messages - if( _glfwWin.autoPollEvents ) - { - glfwPollEvents(); - } -} - - -//======================================================================== -// Set double buffering swap interval (0 = vsync off) -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSwapInterval( int interval ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Set double buffering swap interval - _glfwPlatformSwapInterval( interval ); -} - - -//======================================================================== -// Get window parameter -//======================================================================== - -GLFWAPI int GLFWAPIENTRY glfwGetWindowParam( int param ) -{ - if( !_glfwInitialized ) - { - return 0; - } - - // Is the window opened? - if( !_glfwWin.opened ) - { - if( param == GLFW_OPENED ) - { - return GL_FALSE; - } - return 0; - } - - // Window parameters - switch( param ) - { - case GLFW_OPENED: - return GL_TRUE; - case GLFW_ACTIVE: - return _glfwWin.active; - case GLFW_ICONIFIED: - return _glfwWin.iconified; - case GLFW_ACCELERATED: - return _glfwWin.accelerated; - case GLFW_RED_BITS: - return _glfwWin.redBits; - case GLFW_GREEN_BITS: - return _glfwWin.greenBits; - case GLFW_BLUE_BITS: - return _glfwWin.blueBits; - case GLFW_ALPHA_BITS: - return _glfwWin.alphaBits; - case GLFW_DEPTH_BITS: - return _glfwWin.depthBits; - case GLFW_STENCIL_BITS: - return _glfwWin.stencilBits; - case GLFW_ACCUM_RED_BITS: - return _glfwWin.accumRedBits; - case GLFW_ACCUM_GREEN_BITS: - return _glfwWin.accumGreenBits; - case GLFW_ACCUM_BLUE_BITS: - return _glfwWin.accumBlueBits; - case GLFW_ACCUM_ALPHA_BITS: - return _glfwWin.accumAlphaBits; - case GLFW_AUX_BUFFERS: - return _glfwWin.auxBuffers; - case GLFW_STEREO: - return _glfwWin.stereo; - case GLFW_REFRESH_RATE: - return _glfwWin.refreshRate; - case GLFW_WINDOW_NO_RESIZE: - return _glfwWin.windowNoResize; - case GLFW_FSAA_SAMPLES: - return _glfwWin.samples; - case GLFW_OPENGL_VERSION_MAJOR: - return _glfwWin.glMajor; - case GLFW_OPENGL_VERSION_MINOR: - return _glfwWin.glMinor; - case GLFW_OPENGL_FORWARD_COMPAT: - return _glfwWin.glForward; - case GLFW_OPENGL_DEBUG_CONTEXT: - return _glfwWin.glDebug; - case GLFW_OPENGL_PROFILE: - return _glfwWin.glProfile; - default: - return 0; - } -} - - -//======================================================================== -// Set callback function for window size changes -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetWindowSizeCallback( GLFWwindowsizefun cbfun ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Set callback function - _glfwWin.windowSizeCallback = cbfun; - - // Call the callback function to let the application know the current - // window size - if( cbfun ) - { - cbfun( _glfwWin.width, _glfwWin.height ); - } -} - -//======================================================================== -// Set callback function for window close events -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetWindowCloseCallback( GLFWwindowclosefun cbfun ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Set callback function - _glfwWin.windowCloseCallback = cbfun; -} - - -//======================================================================== -// Set callback function for window refresh events -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwSetWindowRefreshCallback( GLFWwindowrefreshfun cbfun ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Set callback function - _glfwWin.windowRefreshCallback = cbfun; -} - - -//======================================================================== -// Poll for new window and input events -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwPollEvents( void ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Poll for new events - _glfwPlatformPollEvents(); -} - - -//======================================================================== -// Wait for new window and input events -//======================================================================== - -GLFWAPI void GLFWAPIENTRY glfwWaitEvents( void ) -{ - if( !_glfwInitialized || !_glfwWin.opened ) - { - return; - } - - // Poll for new events - _glfwPlatformWaitEvents(); -} - diff --git a/ogl_editor/src/External/glfw/lib/x11/Makefile.x11.in b/ogl_editor/src/External/glfw/lib/x11/Makefile.x11.in deleted file mode 100644 index 6f85880..0000000 --- a/ogl_editor/src/External/glfw/lib/x11/Makefile.x11.in +++ /dev/null @@ -1,259 +0,0 @@ - -########################################################################## -# Installation prefix (default to /usr/local) -########################################################################## -PREFIX ?= /usr/local - - -########################################################################## -# Default: Build GLFW static library -########################################################################## -all: libglfw.a libglfw.so - - -########################################################################## -# Library builder settings -########################################################################## -AR = ar -LD = ld -SED = sed -INSTALL = install -ARFLAGS = -rcs -HEADERS = ../../include/GL/glfw.h ../internal.h platform.h - - -########################################################################## -# Install GLFW static library -########################################################################## -install: libglfw.a libglfw.pc - $(INSTALL) -d $(PREFIX)/lib - $(INSTALL) -c -m 644 libglfw.a $(PREFIX)/lib/libglfw.a - $(INSTALL) -d $(PREFIX)/include/GL - $(INSTALL) -c -m 644 ../../include/GL/glfw.h $(PREFIX)/include/GL/glfw.h - $(INSTALL) -d $(PREFIX)/lib/pkgconfig - $(INSTALL) -c -m 644 libglfw.pc $(PREFIX)/lib/pkgconfig/libglfw.pc - - -########################################################################## -# Install GLFW static and shared libraries -########################################################################## -dist-install: libglfw.so install - $(INSTALL) -c -m 644 libglfw.so $(PREFIX)/lib/libglfw.so - - -########################################################################## -# Object files which are part of the GLFW library -########################################################################## -STATIC_OBJS = \ - enable.o \ - fullscreen.o \ - glext.o \ - image.o \ - init.o \ - input.o \ - joystick.o \ - stream.o \ - tga.o \ - thread.o \ - time.o \ - window.o \ - x11_enable.o \ - x11_fullscreen.o \ - x11_glext.o \ - x11_init.o \ - x11_joystick.o \ - x11_keysym2unicode.o \ - x11_thread.o \ - x11_time.o \ - x11_window.o - - -########################################################################## -# Object files which are part of the GLFW library -########################################################################## -SHARED_OBJS = \ - so_enable.o \ - so_fullscreen.o \ - so_glext.o \ - so_image.o \ - so_init.o \ - so_input.o \ - so_joystick.o \ - so_stream.o \ - so_tga.o \ - so_thread.o \ - so_time.o \ - so_window.o \ - so_x11_enable.o \ - so_x11_fullscreen.o \ - so_x11_glext.o \ - so_x11_init.o \ - so_x11_joystick.o \ - so_x11_keysym2unicode.o \ - so_x11_thread.o \ - so_x11_time.o \ - so_x11_window.o - - -########################################################################## -# Rule for building libglfw.pc -########################################################################## -libglfw.pc: libglfw.pc.in - $(SED) -e 's,\@PREFIX\@,$(PREFIX),' libglfw.pc.in > libglfw.pc - - -########################################################################## -# Rule for building static library -########################################################################## -libglfw.a: $(STATIC_OBJS) - $(AR) $(ARFLAGS) $@ $(STATIC_OBJS) - - -########################################################################## -# Rule for building shared library -########################################################################## -libglfw.so: $(SHARED_OBJS) - $(CC) $(SOFLAGS) -o $@ $(SHARED_OBJS) $(LFLAGS) $(LIBS) - - -########################################################################## -# Rules for building static library object files -########################################################################## -enable.o: ../enable.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../enable.c - -fullscreen.o: ../fullscreen.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../fullscreen.c - -glext.o: ../glext.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../glext.c - -image.o: ../image.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../image.c - -init.o: ../init.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../init.c - -input.o: ../input.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../input.c - -joystick.o: ../joystick.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../joystick.c - -stream.o: ../stream.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../stream.c - -tga.o: ../tga.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../tga.c - -thread.o: ../thread.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../thread.c - -time.o: ../time.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../time.c - -window.o: ../window.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ ../window.c - -x11_enable.o: x11_enable.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ x11_enable.c - -x11_fullscreen.o: x11_fullscreen.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ x11_fullscreen.c - -x11_glext.o: x11_glext.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ x11_glext.c - -x11_init.o: x11_init.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ x11_init.c - -x11_joystick.o: x11_joystick.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ x11_joystick.c - -x11_thread.o: x11_thread.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ x11_thread.c - -x11_time.o: x11_time.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ x11_time.c - -x11_window.o: x11_window.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ x11_window.c - -x11_keysym2unicode.o: x11_keysym2unicode.c $(HEADERS) - $(CC) $(CFLAGS) -o $@ x11_keysym2unicode.c - - -########################################################################## -# Rules for building shared library object files -########################################################################## -so_enable.o: ../enable.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ ../enable.c - -so_fullscreen.o: ../fullscreen.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ ../fullscreen.c - -so_glext.o: ../glext.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ ../glext.c - -so_image.o: ../image.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ ../image.c - -so_init.o: ../init.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ ../init.c - -so_input.o: ../input.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ ../input.c - -so_joystick.o: ../joystick.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ ../joystick.c - -so_stream.o: ../stream.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ ../stream.c - -so_tga.o: ../tga.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ ../tga.c - -so_thread.o: ../thread.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ ../thread.c - -so_time.o: ../time.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ ../time.c - -so_window.o: ../window.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ ../window.c - -so_x11_enable.o: x11_enable.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ x11_enable.c - -so_x11_fullscreen.o: x11_fullscreen.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ x11_fullscreen.c - -so_x11_glext.o: x11_glext.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ x11_glext.c - -so_x11_init.o: x11_init.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ x11_init.c - -so_x11_joystick.o: x11_joystick.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ x11_joystick.c - -so_x11_thread.o: x11_thread.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ x11_thread.c - -so_x11_time.o: x11_time.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ x11_time.c - -so_x11_window.o: x11_window.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ x11_window.c - -so_x11_keysym2unicode.o: x11_keysym2unicode.c $(HEADERS) - $(CC) -fPIC $(CFLAGS) -o $@ x11_keysym2unicode.c - - -########################################################################## -# Clean -########################################################################## - -clean: - rm -f $(STATIC_OBJS) $(SHARED_OBJS) libglfw.a libglfw.so libglfw.pc - diff --git a/ogl_editor/src/External/glfw/lib/x11/platform.h b/ogl_editor/src/External/glfw/lib/x11/platform.h deleted file mode 100644 index 338d5eb..0000000 --- a/ogl_editor/src/External/glfw/lib/x11/platform.h +++ /dev/null @@ -1,526 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: X11/GLX -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#ifndef _platform_h_ -#define _platform_h_ - - -// This is the X11 version of GLFW -#define _GLFW_X11 - - -// Include files -#include -#include -#include -#include -#include -#include -#include -#include -#include "../../include/GL/glfw.h" - -// Do we have pthread support? -#ifdef _GLFW_HAS_PTHREAD - #include - #include -#endif - -// We need declarations for GLX version 1.3 or above even if the server doesn't -// support version 1.3 -#ifndef GLX_VERSION_1_3 - #error "GLX header version 1.3 or above is required" -#endif - -#if defined( _GLFW_HAS_XF86VIDMODE ) && defined( _GLFW_HAS_XRANDR ) - #error "Xf86VidMode and RandR extensions cannot both be enabled" -#endif - -// With XFree86, we can use the XF86VidMode extension -#if defined( _GLFW_HAS_XF86VIDMODE ) - #include -#endif - -#if defined( _GLFW_HAS_XRANDR ) - #include -#endif - -// Do we have support for dlopen/dlsym? -#if defined( _GLFW_HAS_DLOPEN ) - #include -#endif - -// We support two different ways for getting the number of processors in -// the system: sysconf (POSIX) and sysctl (BSD?) -#if defined( _GLFW_HAS_SYSCONF ) - - // Use a single constant for querying number of online processors using - // the sysconf function (e.g. SGI defines _SC_NPROC_ONLN instead of - // _SC_NPROCESSORS_ONLN) - #ifndef _SC_NPROCESSORS_ONLN - #ifdef _SC_NPROC_ONLN - #define _SC_NPROCESSORS_ONLN _SC_NPROC_ONLN - #else - #error POSIX constant _SC_NPROCESSORS_ONLN not defined! - #endif - #endif - - // Macro for querying the number of processors - #define _glfw_numprocessors(n) n=(int)sysconf(_SC_NPROCESSORS_ONLN) - -#elif defined( _GLFW_HAS_SYSCTL ) - - #include - #include - - // Macro for querying the number of processors - #define _glfw_numprocessors(n) { \ - int mib[2], ncpu; \ - size_t len = 1; \ - mib[0] = CTL_HW; \ - mib[1] = HW_NCPU; \ - n = 1; \ - if( sysctl( mib, 2, &ncpu, &len, NULL, 0 ) != -1 ) \ - { \ - if( len > 0 ) \ - { \ - n = ncpu; \ - } \ - } \ - } - -#else - - // If neither sysconf nor sysctl is supported, assume single processor - // system - #define _glfw_numprocessors(n) n=1 - -#endif - -// Pointer length integer -// One day, this will most likely move into glfw.h -typedef intptr_t GLFWintptr; - - -#ifndef GLX_EXT_swap_control - -typedef void (*PFNGLXSWAPINTERVALEXT)(Display*,GLXDrawable,int); - -#endif /*GLX_MESA_swap_control*/ - - -#ifndef GLX_MESA_swap_control - -typedef int (*PFNGLXSWAPINTERVALMESA)(int); - -#endif /*GLX_MESA_swap_control*/ - - -#ifndef GLX_SGI_swap_control - -// Function signature for GLX_SGI_swap_control -typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval); - -#endif /*GLX_SGI_swap_control*/ - - -#ifndef GLX_SGIX_fbconfig - -/* Type definitions for GLX_SGIX_fbconfig */ -typedef XID GLXFBConfigIDSGIX; -typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; - -/* Function signatures for GLX_SGIX_fbconfig */ -typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value); -typedef GLXFBConfigSGIX * ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements); -typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct); -typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config); - -/* Tokens for GLX_SGIX_fbconfig */ -#define GLX_WINDOW_BIT_SGIX 0x00000001 -#define GLX_PIXMAP_BIT_SGIX 0x00000002 -#define GLX_RGBA_BIT_SGIX 0x00000001 -#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 -#define GLX_DRAWABLE_TYPE_SGIX 0x8010 -#define GLX_RENDER_TYPE_SGIX 0x8011 -#define GLX_X_RENDERABLE_SGIX 0x8012 -#define GLX_FBCONFIG_ID_SGIX 0x8013 -#define GLX_RGBA_TYPE_SGIX 0x8014 -#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 -#define GLX_SCREEN_EXT 0x800C - -#endif /*GLX_SGIX_fbconfig*/ - - -#ifndef GLX_ARB_create_context - -/* Tokens for glXCreateContextAttribsARB attributes */ -#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define GLX_CONTEXT_FLAGS_ARB 0x2094 - -/* Bits for WGL_CONTEXT_FLAGS_ARB */ -#define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001 -#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 - -/* Prototype for glXCreateContextAttribs */ -typedef GLXContext (*PFNGLXCREATECONTEXTATTRIBSARBPROC)( Display *display, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list); - -#endif /*GLX_ARB_create_context*/ - - -#ifndef GLX_ARB_create_context_profile - -/* Tokens for glXCreateContextAttribsARB attributes */ -#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 - -/* BIts for GLX_CONTEXT_PROFILE_MASK_ARB */ -#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 -#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 - -#endif /*GLX_ARB_create_context_profile*/ - - -#ifndef GL_VERSION_3_0 - -typedef const GLubyte * (APIENTRY *PFNGLGETSTRINGIPROC) (GLenum, GLuint); - -#endif /*GL_VERSION_3_0*/ - - - -//======================================================================== -// Global variables (GLFW internals) -//======================================================================== - -//------------------------------------------------------------------------ -// Window structure -//------------------------------------------------------------------------ -typedef struct _GLFWwin_struct _GLFWwin; - -struct _GLFWwin_struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // User callback functions - GLFWwindowsizefun windowSizeCallback; - GLFWwindowclosefun windowCloseCallback; - GLFWwindowrefreshfun windowRefreshCallback; - GLFWmousebuttonfun mouseButtonCallback; - GLFWmouseposfun mousePosCallback; - GLFWmousewheelfun mouseWheelCallback; - GLFWkeyfun keyCallback; - GLFWcharfun charCallback; - - // User selected window settings - int fullscreen; // Fullscreen flag - int mouseLock; // Mouse-lock flag - int autoPollEvents; // Auto polling flag - int sysKeysDisabled; // System keys disabled flag - int windowNoResize; // Resize- and maximize gadgets disabled flag - int refreshRate; // Vertical monitor refresh rate - - // Window status & parameters - int opened; // Flag telling if window is opened or not - int active; // Application active flag - int iconified; // Window iconified flag - int width, height; // Window width and heigth - int accelerated; // GL_TRUE if window is HW accelerated - - // Framebuffer attributes - int redBits; - int greenBits; - int blueBits; - int alphaBits; - int depthBits; - int stencilBits; - int accumRedBits; - int accumGreenBits; - int accumBlueBits; - int accumAlphaBits; - int auxBuffers; - int stereo; - int samples; - - // OpenGL extensions and context attributes - int has_GL_SGIS_generate_mipmap; - int has_GL_ARB_texture_non_power_of_two; - int glMajor, glMinor, glRevision; - int glForward, glDebug, glProfile; - - PFNGLGETSTRINGIPROC GetStringi; - - -// ========= PLATFORM SPECIFIC PART ====================================== - - // Platform specific window resources - Colormap colormap; // Window colormap - Window window; // Window - Window root; // Root window for screen - int screen; // Screen ID - XVisualInfo *visual; // Visual for selected GLXFBConfig - GLXFBConfigID fbconfigID; // ID of selected GLXFBConfig - GLXContext context; // OpenGL rendering context - Atom wmDeleteWindow; // WM_DELETE_WINDOW atom - Atom wmPing; // _NET_WM_PING atom - Atom wmState; // _NET_WM_STATE atom - Atom wmStateFullscreen; // _NET_WM_STATE_FULLSCREEN atom - Atom wmActiveWindow; // _NET_ACTIVE_WINDOW atom - Cursor cursor; // Invisible cursor for hidden cursor - - // GLX extensions - PFNGLXSWAPINTERVALEXTPROC SwapIntervalEXT; - PFNGLXSWAPINTERVALMESAPROC SwapIntervalMESA; - PFNGLXSWAPINTERVALSGIPROC SwapIntervalSGI; - PFNGLXGETFBCONFIGATTRIBSGIXPROC GetFBConfigAttribSGIX; - PFNGLXCHOOSEFBCONFIGSGIXPROC ChooseFBConfigSGIX; - PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC CreateContextWithConfigSGIX; - PFNGLXGETVISUALFROMFBCONFIGSGIXPROC GetVisualFromFBConfigSGIX; - PFNGLXCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB; - GLboolean has_GLX_SGIX_fbconfig; - GLboolean has_GLX_EXT_swap_control; - GLboolean has_GLX_MESA_swap_control; - GLboolean has_GLX_SGI_swap_control; - GLboolean has_GLX_ARB_multisample; - GLboolean has_GLX_ARB_create_context; - GLboolean has_GLX_ARB_create_context_profile; - - // Various platform specific internal variables - GLboolean hasEWMH; // True if window manager supports EWMH - GLboolean overrideRedirect; // True if window is OverrideRedirect - GLboolean keyboardGrabbed; // True if keyboard is currently grabbed - GLboolean pointerGrabbed; // True if pointer is currently grabbed - GLboolean pointerHidden; // True if pointer is currently hidden - - // Screensaver data - struct { - int changed; - int timeout; - int interval; - int blanking; - int exposure; - } Saver; - - // Fullscreen data - struct { - int modeChanged; -#if defined( _GLFW_HAS_XF86VIDMODE ) - XF86VidModeModeInfo oldMode; -#endif -#if defined( _GLFW_HAS_XRANDR ) - SizeID oldSizeID; - int oldWidth; - int oldHeight; - Rotation oldRotation; -#endif - } FS; -}; - -GLFWGLOBAL _GLFWwin _glfwWin; - - -//------------------------------------------------------------------------ -// User input status (most of this should go in _GLFWwin) -//------------------------------------------------------------------------ -GLFWGLOBAL struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // Mouse status - int MousePosX, MousePosY; - int WheelPos; - char MouseButton[ GLFW_MOUSE_BUTTON_LAST+1 ]; - - // Keyboard status - char Key[ GLFW_KEY_LAST+1 ]; - int LastChar; - - // User selected settings - int StickyKeys; - int StickyMouseButtons; - int KeyRepeat; - - -// ========= PLATFORM SPECIFIC PART ====================================== - - // Platform specific internal variables - int MouseMoved, CursorPosX, CursorPosY; - -} _glfwInput; - - -//------------------------------------------------------------------------ -// Library global data -//------------------------------------------------------------------------ -GLFWGLOBAL struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // Window opening hints - _GLFWhints hints; - - // Initial desktop mode - GLFWvidmode desktopMode; - -// ========= PLATFORM SPECIFIC PART ====================================== - - Display *display; - - // Server-side GLX version - int glxMajor, glxMinor; - - struct { - int available; - int eventBase; - int errorBase; - } XF86VidMode; - - struct { - int available; - int eventBase; - int errorBase; - } XRandR; - - // Timer data - struct { - GLboolean monotonic; - double resolution; - long long base; - } Timer; - -#if defined(_GLFW_HAS_DLOPEN) - struct { - void *libGL; // dlopen handle for libGL.so - } Libs; -#endif -} _glfwLibrary; - - -//------------------------------------------------------------------------ -// Thread record (one for each thread) -//------------------------------------------------------------------------ -typedef struct _GLFWthread_struct _GLFWthread; - -struct _GLFWthread_struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // Pointer to previous and next threads in linked list - _GLFWthread *Previous, *Next; - - // GLFW user side thread information - GLFWthread ID; - GLFWthreadfun Function; - -// ========= PLATFORM SPECIFIC PART ====================================== - - // System side thread information -#ifdef _GLFW_HAS_PTHREAD - pthread_t PosixID; -#endif - -}; - - -//------------------------------------------------------------------------ -// General thread information -//------------------------------------------------------------------------ -GLFWGLOBAL struct { - -// ========= PLATFORM INDEPENDENT MANDATORY PART ========================= - - // Next thread ID to use (increments for every created thread) - GLFWthread NextID; - - // First thread in linked list (always the main thread) - _GLFWthread First; - -// ========= PLATFORM SPECIFIC PART ====================================== - - // Critical section lock -#ifdef _GLFW_HAS_PTHREAD - pthread_mutex_t CriticalSection; -#endif - -} _glfwThrd; - - -//------------------------------------------------------------------------ -// Joystick information & state -//------------------------------------------------------------------------ -GLFWGLOBAL struct { - int Present; - int fd; - int NumAxes; - int NumButtons; - float *Axis; - unsigned char *Button; -} _glfwJoy[ GLFW_JOYSTICK_LAST + 1 ]; - - -//======================================================================== -// Macros for encapsulating critical code sections (i.e. making parts -// of GLFW thread safe) -//======================================================================== - -// Thread list management -#ifdef _GLFW_HAS_PTHREAD - #define ENTER_THREAD_CRITICAL_SECTION \ - pthread_mutex_lock( &_glfwThrd.CriticalSection ); - #define LEAVE_THREAD_CRITICAL_SECTION \ - pthread_mutex_unlock( &_glfwThrd.CriticalSection ); -#else - #define ENTER_THREAD_CRITICAL_SECTION - #define LEAVE_THREAD_CRITICAL_SECTION -#endif - - -//======================================================================== -// Prototypes for platform specific internal functions -//======================================================================== - -// Time -void _glfwInitTimer( void ); - -// Fullscreen support -int _glfwGetClosestVideoMode( int screen, int *width, int *height, int *rate ); -void _glfwSetVideoModeMODE( int screen, int mode, int rate ); -void _glfwSetVideoMode( int screen, int *width, int *height, int *rate ); -void _glfwRestoreVideoMode( void ); - -// Joystick input -void _glfwInitJoysticks( void ); -void _glfwTerminateJoysticks( void ); - -// Unicode support -long _glfwKeySym2Unicode( KeySym keysym ); - - -#endif // _platform_h_ diff --git a/ogl_editor/src/External/glfw/lib/x11/x11_enable.c b/ogl_editor/src/External/glfw/lib/x11/x11_enable.c deleted file mode 100644 index 88308d5..0000000 --- a/ogl_editor/src/External/glfw/lib/x11/x11_enable.c +++ /dev/null @@ -1,64 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: X11 (Unix) -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Enable system keys -//======================================================================== - -void _glfwPlatformEnableSystemKeys( void ) -{ - if( _glfwWin.keyboardGrabbed ) - { - XUngrabKeyboard( _glfwLibrary.display, CurrentTime ); - _glfwWin.keyboardGrabbed = GL_FALSE; - } -} - -//======================================================================== -// Disable system keys -//======================================================================== - -void _glfwPlatformDisableSystemKeys( void ) -{ - if( XGrabKeyboard( _glfwLibrary.display, _glfwWin.window, True, - GrabModeAsync, GrabModeAsync, CurrentTime ) == - GrabSuccess ) - { - _glfwWin.keyboardGrabbed = GL_TRUE; - } -} - diff --git a/ogl_editor/src/External/glfw/lib/x11/x11_fullscreen.c b/ogl_editor/src/External/glfw/lib/x11/x11_fullscreen.c deleted file mode 100644 index ee2d6df..0000000 --- a/ogl_editor/src/External/glfw/lib/x11/x11_fullscreen.c +++ /dev/null @@ -1,567 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: X11/GLX -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -#include - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Convert BPP to RGB bits (based on "best guess") -//======================================================================== - -static void BPP2RGB( int bpp, int *r, int *g, int *b ) -{ - int delta; - - // Special case: BPP = 32 (I don't think this is necessary for X11??) - if( bpp == 32 ) - bpp = 24; - - // Convert "bits per pixel" to red, green & blue sizes - *r = *g = *b = bpp / 3; - delta = bpp - (*r * 3); - if( delta >= 1 ) - { - *g = *g + 1; - } - if( delta == 2 ) - { - *r = *r + 1; - } -} - - -//======================================================================== -// Finds the video mode closest in size to the specified desired size -//======================================================================== - -int _glfwGetClosestVideoMode( int screen, int *width, int *height, int *rate ) -{ -#if defined( _GLFW_HAS_XRANDR ) - int i, match, bestmatch; - int sizecount, bestsize; - int ratecount, bestrate; - short *ratelist; - XRRScreenConfiguration *sc; - XRRScreenSize *sizelist; - - if( _glfwLibrary.XRandR.available ) - { - sc = XRRGetScreenInfo( _glfwLibrary.display, - RootWindow( _glfwLibrary.display, screen ) ); - - sizelist = XRRConfigSizes( sc, &sizecount ); - - // Find the best matching mode - bestsize = -1; - bestmatch = INT_MAX; - for( i = 0; i < sizecount; i++ ) - { - match = (*width - sizelist[i].width) * - (*width - sizelist[i].width) + - (*height - sizelist[i].height) * - (*height - sizelist[i].height); - if( match < bestmatch ) - { - bestmatch = match; - bestsize = i; - } - } - - if( bestsize != -1 ) - { - // Report width & height of best matching mode - *width = sizelist[bestsize].width; - *height = sizelist[bestsize].height; - - if( *rate > 0 ) - { - ratelist = XRRConfigRates( sc, bestsize, &ratecount ); - - bestrate = -1; - bestmatch = INT_MAX; - for( i = 0; i < ratecount; i++ ) - { - match = abs( ratelist[i] - *rate ); - if( match < bestmatch ) - { - bestmatch = match; - bestrate = ratelist[i]; - } - } - - if( bestrate != -1 ) - { - *rate = bestrate; - } - } - } - - // Free modelist - XRRFreeScreenConfigInfo( sc ); - - if( bestsize != -1 ) - { - return bestsize; - } - } -#elif defined( _GLFW_HAS_XF86VIDMODE ) - XF86VidModeModeInfo **modelist; - int modecount, i, bestmode, bestmatch, match; - - // Use the XF86VidMode extension to control video resolution - if( _glfwLibrary.XF86VidMode.available ) - { - // Get a list of all available display modes - XF86VidModeGetAllModeLines( _glfwLibrary.display, screen, - &modecount, &modelist ); - - // Find the best matching mode - bestmode = -1; - bestmatch = INT_MAX; - for( i = 0; i < modecount; i++ ) - { - match = (*width - modelist[i]->hdisplay) * - (*width - modelist[i]->hdisplay) + - (*height - modelist[i]->vdisplay) * - (*height - modelist[i]->vdisplay); - if( match < bestmatch ) - { - bestmatch = match; - bestmode = i; - } - } - - if( bestmode != -1 ) - { - // Report width & height of best matching mode - *width = modelist[ bestmode ]->hdisplay; - *height = modelist[ bestmode ]->vdisplay; - } - - // Free modelist - XFree( modelist ); - - if( bestmode != -1 ) - { - return bestmode; - } - } -#endif - - // Default: Simply use the screen resolution - *width = DisplayWidth( _glfwLibrary.display, screen ); - *height = DisplayHeight( _glfwLibrary.display, screen ); - - return 0; -} - - -//======================================================================== -// Change the current video mode -//======================================================================== - -void _glfwSetVideoModeMODE( int screen, int mode, int rate ) -{ -#if defined( _GLFW_HAS_XRANDR ) - XRRScreenConfiguration *sc; - Window root; - - if( _glfwLibrary.XRandR.available ) - { - root = RootWindow( _glfwLibrary.display, screen ); - sc = XRRGetScreenInfo( _glfwLibrary.display, root ); - - // Remember old size and flag that we have changed the mode - if( !_glfwWin.FS.modeChanged ) - { - _glfwWin.FS.oldSizeID = XRRConfigCurrentConfiguration( sc, &_glfwWin.FS.oldRotation ); - _glfwWin.FS.oldWidth = DisplayWidth( _glfwLibrary.display, screen ); - _glfwWin.FS.oldHeight = DisplayHeight( _glfwLibrary.display, screen ); - - _glfwWin.FS.modeChanged = GL_TRUE; - } - - if( rate > 0 ) - { - // Set desired configuration - XRRSetScreenConfigAndRate( _glfwLibrary.display, - sc, - root, - mode, - RR_Rotate_0, - (short) rate, - CurrentTime ); - } - else - { - // Set desired configuration - XRRSetScreenConfig( _glfwLibrary.display, - sc, - root, - mode, - RR_Rotate_0, - CurrentTime ); - } - - XRRFreeScreenConfigInfo( sc ); - } -#elif defined( _GLFW_HAS_XF86VIDMODE ) - XF86VidModeModeInfo **modelist; - int modecount; - - // Use the XF86VidMode extension to control video resolution - if( _glfwLibrary.XF86VidMode.available ) - { - // Get a list of all available display modes - XF86VidModeGetAllModeLines( _glfwLibrary.display, screen, - &modecount, &modelist ); - - // Unlock mode switch if necessary - if( _glfwWin.FS.modeChanged ) - { - XF86VidModeLockModeSwitch( _glfwLibrary.display, screen, 0 ); - } - - // Change the video mode to the desired mode - XF86VidModeSwitchToMode( _glfwLibrary.display, screen, - modelist[ mode ] ); - - // Set viewport to upper left corner (where our window will be) - XF86VidModeSetViewPort( _glfwLibrary.display, screen, 0, 0 ); - - // Lock mode switch - XF86VidModeLockModeSwitch( _glfwLibrary.display, screen, 1 ); - - // Remember old mode and flag that we have changed the mode - if( !_glfwWin.FS.modeChanged ) - { - _glfwWin.FS.oldMode = *modelist[ 0 ]; - _glfwWin.FS.modeChanged = GL_TRUE; - } - - // Free mode list - XFree( modelist ); - } -#endif -} - - -//======================================================================== -// Change the current video mode -//======================================================================== - -void _glfwSetVideoMode( int screen, int *width, int *height, int *rate ) -{ - int bestmode; - - // Find a best match mode - bestmode = _glfwGetClosestVideoMode( screen, width, height, rate ); - - // Change mode - _glfwSetVideoModeMODE( screen, bestmode, *rate ); -} - - -//======================================================================== -// Restore the previously saved (original) video mode -//======================================================================== - -void _glfwRestoreVideoMode( void ) -{ - if( _glfwWin.FS.modeChanged ) - { -#if defined( _GLFW_HAS_XRANDR ) - if( _glfwLibrary.XRandR.available ) - { - XRRScreenConfiguration *sc; - - sc = XRRGetScreenInfo( _glfwLibrary.display, _glfwWin.root ); - - XRRSetScreenConfig( _glfwLibrary.display, - sc, - _glfwWin.root, - _glfwWin.FS.oldSizeID, - _glfwWin.FS.oldRotation, - CurrentTime ); - - XRRFreeScreenConfigInfo( sc ); - } -#elif defined( _GLFW_HAS_XF86VIDMODE ) - if( _glfwLibrary.XF86VidMode.available ) - { - // Unlock mode switch - XF86VidModeLockModeSwitch( _glfwLibrary.display, _glfwWin.screen, 0 ); - - // Change the video mode back to the old mode - XF86VidModeSwitchToMode( _glfwLibrary.display, - _glfwWin.screen, - &_glfwWin.FS.oldMode ); - } -#endif - _glfwWin.FS.modeChanged = GL_FALSE; - } -} - - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -struct _glfwResolution -{ - int width; - int height; -}; - -//======================================================================== -// List available video modes -//======================================================================== - -int _glfwPlatformGetVideoModes( GLFWvidmode *list, int maxcount ) -{ - int count, k, l, r, g, b, rgba, gl; - int depth, screen; - Display *dpy; - XVisualInfo *vislist, dummy; - int viscount, rgbcount, rescount; - int *rgbarray; - struct _glfwResolution *resarray; - - // Get display and screen - dpy = _glfwLibrary.display; - screen = DefaultScreen( dpy ); - - // Get list of visuals - vislist = XGetVisualInfo( dpy, 0, &dummy, &viscount ); - if( vislist == NULL ) - { - return 0; - } - - rgbarray = (int*) malloc( sizeof(int) * viscount ); - rgbcount = 0; - - // Build RGB array - for( k = 0; k < viscount; k++ ) - { - // Does the visual support OpenGL & true color? - glXGetConfig( dpy, &vislist[k], GLX_USE_GL, &gl ); - glXGetConfig( dpy, &vislist[k], GLX_RGBA, &rgba ); - if( gl && rgba ) - { - // Get color depth for this visual - depth = vislist[k].depth; - - // Convert to RGB - BPP2RGB( depth, &r, &g, &b ); - depth = (r<<16) | (g<<8) | b; - - // Is this mode unique? - for( l = 0; l < rgbcount; l++ ) - { - if( depth == rgbarray[ l ] ) - { - break; - } - } - if( l >= rgbcount ) - { - rgbarray[ rgbcount ] = depth; - rgbcount++; - } - } - } - - rescount = 0; - resarray = NULL; - - // Build resolution array -#if defined( _GLFW_HAS_XRANDR ) - if( _glfwLibrary.XRandR.available ) - { - XRRScreenConfiguration *sc; - XRRScreenSize *sizelist; - int sizecount; - - sc = XRRGetScreenInfo( dpy, RootWindow( dpy, screen ) ); - sizelist = XRRConfigSizes( sc, &sizecount ); - - resarray = (struct _glfwResolution*) malloc( sizeof(struct _glfwResolution) * sizecount ); - - for( k = 0; k < sizecount; k++ ) - { - resarray[ rescount ].width = sizelist[ k ].width; - resarray[ rescount ].height = sizelist[ k ].height; - rescount++; - } - - XRRFreeScreenConfigInfo( sc ); - } -#elif defined( _GLFW_HAS_XF86VIDMODE ) - if( _glfwLibrary.XF86VidMode.available ) - { - XF86VidModeModeInfo **modelist; - int modecount, width, height; - - XF86VidModeGetAllModeLines( dpy, screen, &modecount, &modelist ); - - resarray = (struct _glfwResolution*) malloc( sizeof(struct _glfwResolution) * modecount ); - - for( k = 0; k < modecount; k++ ) - { - width = modelist[ k ]->hdisplay; - height = modelist[ k ]->vdisplay; - - // Is this mode unique? - for( l = 0; l < rescount; l++ ) - { - if( width == resarray[ l ].width && height == resarray[ l ].height ) - { - break; - } - } - - if( l >= rescount ) - { - resarray[ rescount ].width = width; - resarray[ rescount ].height = height; - rescount++; - } - } - - XFree( modelist ); - } -#endif - - if( !resarray ) - { - rescount = 1; - resarray = (struct _glfwResolution*) malloc( sizeof(struct _glfwResolution) * rescount ); - - resarray[ 0 ].width = DisplayWidth( dpy, screen ); - resarray[ 0 ].height = DisplayHeight( dpy, screen ); - } - - // Build permutations of colors and resolutions - count = 0; - for( k = 0; k < rgbcount && count < maxcount; k++ ) - { - for( l = 0; l < rescount && count < maxcount; l++ ) - { - list[count].Width = resarray[ l ].width; - list[count].Height = resarray[ l ].height; - list[count].RedBits = (rgbarray[ k ] >> 16) & 255; - list[count].GreenBits = (rgbarray[ k ] >> 8) & 255; - list[count].BlueBits = rgbarray[ k ] & 255; - count++; - } - } - - // Free visuals list - XFree( vislist ); - - free( resarray ); - free( rgbarray ); - - return count; -} - - -//======================================================================== -// Get the desktop video mode -//======================================================================== - -void _glfwPlatformGetDesktopMode( GLFWvidmode *mode ) -{ - Display *dpy; - int bpp, screen; - - // Get display and screen - dpy = _glfwLibrary.display; - screen = DefaultScreen( dpy ); - - // Get display depth - bpp = DefaultDepth( dpy, screen ); - - // Convert BPP to RGB bits - BPP2RGB( bpp, &mode->RedBits, &mode->GreenBits, &mode->BlueBits ); - -#if defined( _GLFW_HAS_XRANDR ) - if( _glfwLibrary.XRandR.available ) - { - if( _glfwWin.FS.modeChanged ) - { - mode->Width = _glfwWin.FS.oldWidth; - mode->Height = _glfwWin.FS.oldHeight; - return; - } - } -#elif defined( _GLFW_HAS_XF86VIDMODE ) - if( _glfwLibrary.XF86VidMode.available ) - { - XF86VidModeModeInfo **modelist; - int modecount; - - if( _glfwWin.FS.modeChanged ) - { - // The old (desktop) mode is stored in _glfwWin.FS.oldMode - mode->Width = _glfwWin.FS.oldMode.hdisplay; - mode->Height = _glfwWin.FS.oldMode.vdisplay; - } - else - { - // Use the XF86VidMode extension to get list of video modes - XF86VidModeGetAllModeLines( dpy, screen, &modecount, - &modelist ); - - // The first mode in the list is the current (desktio) mode - mode->Width = modelist[ 0 ]->hdisplay; - mode->Height = modelist[ 0 ]->vdisplay; - - // Free list - XFree( modelist ); - } - - return; - } -#endif - - // Get current display width and height - mode->Width = DisplayWidth( dpy, screen ); - mode->Height = DisplayHeight( dpy, screen ); -} - diff --git a/ogl_editor/src/External/glfw/lib/x11/x11_glext.c b/ogl_editor/src/External/glfw/lib/x11/x11_glext.c deleted file mode 100644 index 523dede..0000000 --- a/ogl_editor/src/External/glfw/lib/x11/x11_glext.c +++ /dev/null @@ -1,89 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: X11/GLX -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -void (*glXGetProcAddress(const GLubyte *procName))(); -void (*glXGetProcAddressARB(const GLubyte *procName))(); -void (*glXGetProcAddressEXT(const GLubyte *procName))(); - -// We support four different ways for getting addresses for GL/GLX -// extension functions: glXGetProcAddress, glXGetProcAddressARB, -// glXGetProcAddressEXT, and dlsym -#if defined( _GLFW_HAS_GLXGETPROCADDRESSARB ) - #define _glfw_glXGetProcAddress(x) glXGetProcAddressARB(x) -#elif defined( _GLFW_HAS_GLXGETPROCADDRESS ) - #define _glfw_glXGetProcAddress(x) glXGetProcAddress(x) -#elif defined( _GLFW_HAS_GLXGETPROCADDRESSEXT ) - #define _glfw_glXGetProcAddress(x) glXGetProcAddressEXT(x) -#elif defined( _GLFW_HAS_DLOPEN ) - #define _glfw_glXGetProcAddress(x) dlsym(_glfwLibrary.Libs.libGL,x) -#else -#define _glfw_glXGetProcAddress(x) NULL -#endif - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Check if an OpenGL extension is available at runtime -//======================================================================== - -int _glfwPlatformExtensionSupported( const char *extension ) -{ - const GLubyte *extensions; - - // Get list of GLX extensions - extensions = (const GLubyte*) glXQueryExtensionsString( _glfwLibrary.display, - _glfwWin.screen ); - if( extensions != NULL ) - { - if( _glfwStringInExtensionString( extension, extensions ) ) - { - return GL_TRUE; - } - } - - return GL_FALSE; -} - - -//======================================================================== -// Get the function pointer to an OpenGL function -//======================================================================== - -void * _glfwPlatformGetProcAddress( const char *procname ) -{ - return (void *) _glfw_glXGetProcAddress( (const GLubyte *) procname ); -} - diff --git a/ogl_editor/src/External/glfw/lib/x11/x11_init.c b/ogl_editor/src/External/glfw/lib/x11/x11_init.c deleted file mode 100644 index 083316e..0000000 --- a/ogl_editor/src/External/glfw/lib/x11/x11_init.c +++ /dev/null @@ -1,288 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: X11/GLX -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Initialize GLFW thread package -//======================================================================== - -static void initThreads( void ) -{ - // Initialize critical section handle -#ifdef _GLFW_HAS_PTHREAD - (void) pthread_mutex_init( &_glfwThrd.CriticalSection, NULL ); -#endif - - // The first thread (the main thread) has ID 0 - _glfwThrd.NextID = 0; - - // Fill out information about the main thread (this thread) - _glfwThrd.First.ID = _glfwThrd.NextID++; - _glfwThrd.First.Function = NULL; - _glfwThrd.First.Previous = NULL; - _glfwThrd.First.Next = NULL; -#ifdef _GLFW_HAS_PTHREAD - _glfwThrd.First.PosixID = pthread_self(); -#endif -} - - -//======================================================================== -// Terminate GLFW thread package -//======================================================================== - -static void terminateThreads( void ) -{ -#ifdef _GLFW_HAS_PTHREAD - - _GLFWthread *t, *t_next; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Kill all threads (NOTE: THE USER SHOULD WAIT FOR ALL THREADS TO - // DIE, _BEFORE_ CALLING glfwTerminate()!!!) - t = _glfwThrd.First.Next; - while( t != NULL ) - { - // Get pointer to next thread - t_next = t->Next; - - // Simply murder the process, no mercy! - pthread_kill( t->PosixID, SIGKILL ); - - // Free memory allocated for this thread - free( (void *) t ); - - // Select next thread in list - t = t_next; - } - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Delete critical section handle - pthread_mutex_destroy( &_glfwThrd.CriticalSection ); - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Dynamically load libraries -//======================================================================== - -static void initLibraries( void ) -{ -#ifdef _GLFW_DLOPEN_LIBGL - int i; - char *libGL_names[ ] = - { - "libGL.so", - "libGL.so.1", - "/usr/lib/libGL.so", - "/usr/lib/libGL.so.1", - NULL - }; - - _glfwLibrary.Libs.libGL = NULL; - for( i = 0; !libGL_names[ i ] != NULL; i ++ ) - { - _glfwLibrary.Libs.libGL = dlopen( libGL_names[ i ], - RTLD_LAZY | RTLD_GLOBAL ); - if( _glfwLibrary.Libs.libGL ) - break; - } -#endif -} - - -//======================================================================== -// Terminate GLFW when exiting application -//======================================================================== - -static void glfw_atexit( void ) -{ - glfwTerminate(); -} - - -//======================================================================== -// Initialize X11 display -//======================================================================== - -static int initDisplay( void ) -{ - // Open display - _glfwLibrary.display = XOpenDisplay( 0 ); - if( !_glfwLibrary.display ) - { - fprintf(stderr, "Failed to open X display\n"); - return GL_FALSE; - } - - // Check for XF86VidMode extension -#ifdef _GLFW_HAS_XF86VIDMODE - _glfwLibrary.XF86VidMode.available = - XF86VidModeQueryExtension( _glfwLibrary.display, - &_glfwLibrary.XF86VidMode.eventBase, - &_glfwLibrary.XF86VidMode.errorBase); -#else - _glfwLibrary.XF86VidMode.available = 0; -#endif - - // Check for XRandR extension -#ifdef _GLFW_HAS_XRANDR - _glfwLibrary.XRandR.available = - XRRQueryExtension( _glfwLibrary.display, - &_glfwLibrary.XRandR.eventBase, - &_glfwLibrary.XRandR.errorBase ); -#else - _glfwLibrary.XRandR.available = 0; -#endif - - // Fullscreen & screen saver settings - // Check if GLX is supported on this display - if( !glXQueryExtension( _glfwLibrary.display, NULL, NULL ) ) - { - fprintf(stderr, "GLX not supported\n"); - return GL_FALSE; - } - - // Retrieve GLX version - if( !glXQueryVersion( _glfwLibrary.display, - &_glfwLibrary.glxMajor, - &_glfwLibrary.glxMinor ) ) - { - fprintf(stderr, "Unable to query GLX version\n"); - return GL_FALSE; - } - - return GL_TRUE; -} - - -//======================================================================== -// Terminate X11 display -//======================================================================== - -static void terminateDisplay( void ) -{ - // Open display - if( _glfwLibrary.display ) - { - XCloseDisplay( _glfwLibrary.display ); - _glfwLibrary.display = NULL; - } -} - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Initialize various GLFW state -//======================================================================== - -int _glfwPlatformInit( void ) -{ - // Initialize display - if( !initDisplay() ) - { - return GL_FALSE; - } - - // Initialize thread package - initThreads(); - - // Try to load libGL.so if necessary - initLibraries(); - - _glfwPlatformGetDesktopMode( &_glfwLibrary.desktopMode ); - - // Install atexit() routine - atexit( glfw_atexit ); - - // Initialize joysticks - _glfwInitJoysticks(); - - // Start the timer - _glfwInitTimer(); - - return GL_TRUE; -} - - -//======================================================================== -// Close window and kill all threads -//======================================================================== - -int _glfwPlatformTerminate( void ) -{ -#ifdef _GLFW_HAS_PTHREAD - // Only the main thread is allowed to do this... - if( pthread_self() != _glfwThrd.First.PosixID ) - { - return GL_FALSE; - } -#endif // _GLFW_HAS_PTHREAD - - // Close OpenGL window - glfwCloseWindow(); - - // Kill thread package - terminateThreads(); - - // Terminate display - terminateDisplay(); - - // Terminate joysticks - _glfwTerminateJoysticks(); - - // Unload libGL.so if necessary -#ifdef _GLFW_DLOPEN_LIBGL - if( _glfwLibrary.Libs.libGL != NULL ) - { - dlclose( _glfwLibrary.Libs.libGL ); - _glfwLibrary.Libs.libGL = NULL; - } -#endif - - return GL_TRUE; -} - diff --git a/ogl_editor/src/External/glfw/lib/x11/x11_joystick.c b/ogl_editor/src/External/glfw/lib/x11/x11_joystick.c deleted file mode 100644 index 7ed22d0..0000000 --- a/ogl_editor/src/External/glfw/lib/x11/x11_joystick.c +++ /dev/null @@ -1,367 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: X11/GLX -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -//======================================================================== -// Note: Only Linux joystick input is supported at the moment. Other -// systems will behave as if there are no joysticks connected. -//======================================================================== - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -#ifdef _GLFW_USE_LINUX_JOYSTICKS - -//------------------------------------------------------------------------ -// Here are the Linux joystick driver v1.x interface definitions that we -// use (we do not want to rely on ): -//------------------------------------------------------------------------ - -#include -#include -#include - -// Joystick event types -#define JS_EVENT_BUTTON 0x01 /* button pressed/released */ -#define JS_EVENT_AXIS 0x02 /* joystick moved */ -#define JS_EVENT_INIT 0x80 /* initial state of device */ - -// Joystick event structure -struct js_event { - unsigned int time; /* (u32) event timestamp in milliseconds */ - signed short value; /* (s16) value */ - unsigned char type; /* (u8) event type */ - unsigned char number; /* (u8) axis/button number */ -}; - -// Joystick IOCTL commands -#define JSIOCGVERSION _IOR('j', 0x01, int) /* get driver version (u32) */ -#define JSIOCGAXES _IOR('j', 0x11, char) /* get number of axes (u8) */ -#define JSIOCGBUTTONS _IOR('j', 0x12, char) /* get number of buttons (u8) */ - -#endif // _GLFW_USE_LINUX_JOYSTICKS - - -//======================================================================== -// Initialize joystick interface -//======================================================================== - -void _glfwInitJoysticks( void ) -{ -#ifdef _GLFW_USE_LINUX_JOYSTICKS - int k, n, fd, joy_count; - char *joy_base_name, joy_dev_name[ 20 ]; - int driver_version = 0x000800; - char ret_data; -#endif // _GLFW_USE_LINUX_JOYSTICKS - int i; - - // Start by saying that there are no sticks - for( i = 0; i <= GLFW_JOYSTICK_LAST; ++ i ) - { - _glfwJoy[ i ].Present = GL_FALSE; - } - -#ifdef _GLFW_USE_LINUX_JOYSTICKS - - // Try to open joysticks (nonblocking) - joy_count = 0; - for( k = 0; k <= 1 && joy_count <= GLFW_JOYSTICK_LAST; ++ k ) - { - // Pick joystick base name - switch( k ) - { - case 0: - joy_base_name = "/dev/input/js"; // USB sticks - break; - case 1: - joy_base_name = "/dev/js"; // "Legacy" sticks - break; - default: - continue; // (should never happen) - } - - // Try to open a few of these sticks - for( i = 0; i <= 50 && joy_count <= GLFW_JOYSTICK_LAST; ++ i ) - { - sprintf( joy_dev_name, "%s%d", joy_base_name, i ); - fd = open( joy_dev_name, O_NONBLOCK ); - if( fd != -1 ) - { - // Remember fd - _glfwJoy[ joy_count ].fd = fd; - - // Check that the joystick driver version is 1.0+ - ioctl( fd, JSIOCGVERSION, &driver_version ); - if( driver_version < 0x010000 ) - { - // It's an old 0.x interface (we don't support it) - close( fd ); - continue; - } - - // Get number of joystick axes - ioctl( fd, JSIOCGAXES, &ret_data ); - _glfwJoy[ joy_count ].NumAxes = (int) ret_data; - - // Get number of joystick buttons - ioctl( fd, JSIOCGBUTTONS, &ret_data ); - _glfwJoy[ joy_count ].NumButtons = (int) ret_data; - - // Allocate memory for joystick state - _glfwJoy[ joy_count ].Axis = - (float *) malloc( sizeof(float) * - _glfwJoy[ joy_count ].NumAxes ); - if( _glfwJoy[ joy_count ].Axis == NULL ) - { - close( fd ); - continue; - } - _glfwJoy[ joy_count ].Button = - (unsigned char *) malloc( sizeof(char) * - _glfwJoy[ joy_count ].NumButtons ); - if( _glfwJoy[ joy_count ].Button == NULL ) - { - free( _glfwJoy[ joy_count ].Axis ); - close( fd ); - continue; - } - - // Clear joystick state - for( n = 0; n < _glfwJoy[ joy_count ].NumAxes; ++ n ) - { - _glfwJoy[ joy_count ].Axis[ n ] = 0.0f; - } - for( n = 0; n < _glfwJoy[ joy_count ].NumButtons; ++ n ) - { - _glfwJoy[ joy_count ].Button[ n ] = GLFW_RELEASE; - } - - // The joystick is supported and connected - _glfwJoy[ joy_count ].Present = GL_TRUE; - joy_count ++; - } - } - } - -#endif // _GLFW_USE_LINUX_JOYSTICKS - -} - - -//======================================================================== -// Close all opened joystick handles -//======================================================================== - -void _glfwTerminateJoysticks( void ) -{ - -#ifdef _GLFW_USE_LINUX_JOYSTICKS - - int i; - - // Close any opened joysticks - for( i = 0; i <= GLFW_JOYSTICK_LAST; ++ i ) - { - if( _glfwJoy[ i ].Present ) - { - close( _glfwJoy[ i ].fd ); - free( _glfwJoy[ i ].Axis ); - free( _glfwJoy[ i ].Button ); - _glfwJoy[ i ].Present = GL_FALSE; - } - } - -#endif // _GLFW_USE_LINUX_JOYSTICKS - -} - - -//======================================================================== -// Empty joystick event queue -//======================================================================== - -static void pollJoystickEvents( void ) -{ - -#ifdef _GLFW_USE_LINUX_JOYSTICKS - - struct js_event e; - int i; - - // Get joystick events for all GLFW joysticks - for( i = 0; i <= GLFW_JOYSTICK_LAST; ++ i ) - { - // Is the stick present? - if( _glfwJoy[ i ].Present ) - { - // Read all queued events (non-blocking) - while( read(_glfwJoy[i].fd, &e, sizeof(struct js_event)) > 0 ) - { - // We don't care if it's an init event or not - e.type &= ~JS_EVENT_INIT; - - // Check event type - switch( e.type ) - { - case JS_EVENT_AXIS: - _glfwJoy[ i ].Axis[ e.number ] = (float) e.value / - 32767.0f; - // We need to change the sign for the Y axes, so that - // positive = up/forward, according to the GLFW spec. - if( e.number & 1 ) - { - _glfwJoy[ i ].Axis[ e.number ] = - -_glfwJoy[ i ].Axis[ e.number ]; - } - break; - - case JS_EVENT_BUTTON: - _glfwJoy[ i ].Button[ e.number ] = - e.value ? GLFW_PRESS : GLFW_RELEASE; - break; - - default: - break; - } - } - } - } - -#endif // _GLFW_USE_LINUX_JOYSTICKS - -} - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Determine joystick capabilities -//======================================================================== - -int _glfwPlatformGetJoystickParam( int joy, int param ) -{ - // Is joystick present? - if( !_glfwJoy[ joy ].Present ) - { - return 0; - } - - switch( param ) - { - case GLFW_PRESENT: - return GL_TRUE; - - case GLFW_AXES: - return _glfwJoy[ joy ].NumAxes; - - case GLFW_BUTTONS: - return _glfwJoy[ joy ].NumButtons; - - default: - break; - } - - return 0; -} - - -//======================================================================== -// Get joystick axis positions -//======================================================================== - -int _glfwPlatformGetJoystickPos( int joy, float *pos, int numaxes ) -{ - int i; - - // Is joystick present? - if( !_glfwJoy[ joy ].Present ) - { - return 0; - } - - // Update joystick state - pollJoystickEvents(); - - // Does the joystick support less axes than requested? - if( _glfwJoy[ joy ].NumAxes < numaxes ) - { - numaxes = _glfwJoy[ joy ].NumAxes; - } - - // Copy axis positions from internal state - for( i = 0; i < numaxes; ++ i ) - { - pos[ i ] = _glfwJoy[ joy ].Axis[ i ]; - } - - return numaxes; -} - - -//======================================================================== -// Get joystick button states -//======================================================================== - -int _glfwPlatformGetJoystickButtons( int joy, unsigned char *buttons, - int numbuttons ) -{ - int i; - - // Is joystick present? - if( !_glfwJoy[ joy ].Present ) - { - return 0; - } - - // Update joystick state - pollJoystickEvents(); - - // Does the joystick support less buttons than requested? - if( _glfwJoy[ joy ].NumButtons < numbuttons ) - { - numbuttons = _glfwJoy[ joy ].NumButtons; - } - - // Copy button states from internal state - for( i = 0; i < numbuttons; ++ i ) - { - buttons[ i ] = _glfwJoy[ joy ].Button[ i ]; - } - - return numbuttons; -} - diff --git a/ogl_editor/src/External/glfw/lib/x11/x11_keysym2unicode.c b/ogl_editor/src/External/glfw/lib/x11/x11_keysym2unicode.c deleted file mode 100644 index 17bfb99..0000000 --- a/ogl_editor/src/External/glfw/lib/x11/x11_keysym2unicode.c +++ /dev/null @@ -1,901 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: X11/GLX -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - -/* - * Marcus: This code was originally written by Markus G. Kuhn. - * I have made some slight changes (trimmed it down a bit from >60 KB to - * 20 KB), but the functionality is the same. - */ - -/* - * This module converts keysym values into the corresponding ISO 10646 - * (UCS, Unicode) values. - * - * The array keysymtab[] contains pairs of X11 keysym values for graphical - * characters and the corresponding Unicode value. The function - * _glfwKeySym2Unicode() maps a keysym onto a Unicode value using a binary - * search, therefore keysymtab[] must remain SORTED by keysym value. - * - * We allow to represent any UCS character in the range U-00000000 to - * U-00FFFFFF by a keysym value in the range 0x01000000 to 0x01ffffff. - * This admittedly does not cover the entire 31-bit space of UCS, but - * it does cover all of the characters up to U-10FFFF, which can be - * represented by UTF-16, and more, and it is very unlikely that higher - * UCS codes will ever be assigned by ISO. So to get Unicode character - * U+ABCD you can directly use keysym 0x0100abcd. - * - * Original author: Markus G. Kuhn , University of - * Cambridge, April 2001 - * - * Special thanks to Richard Verhoeven for preparing - * an initial draft of the mapping table. - * - */ - - -//************************************************************************ -//**** KeySym to Unicode mapping table **** -//************************************************************************ - -static struct codepair { - unsigned short keysym; - unsigned short ucs; -} keysymtab[] = { - { 0x01a1, 0x0104 }, - { 0x01a2, 0x02d8 }, - { 0x01a3, 0x0141 }, - { 0x01a5, 0x013d }, - { 0x01a6, 0x015a }, - { 0x01a9, 0x0160 }, - { 0x01aa, 0x015e }, - { 0x01ab, 0x0164 }, - { 0x01ac, 0x0179 }, - { 0x01ae, 0x017d }, - { 0x01af, 0x017b }, - { 0x01b1, 0x0105 }, - { 0x01b2, 0x02db }, - { 0x01b3, 0x0142 }, - { 0x01b5, 0x013e }, - { 0x01b6, 0x015b }, - { 0x01b7, 0x02c7 }, - { 0x01b9, 0x0161 }, - { 0x01ba, 0x015f }, - { 0x01bb, 0x0165 }, - { 0x01bc, 0x017a }, - { 0x01bd, 0x02dd }, - { 0x01be, 0x017e }, - { 0x01bf, 0x017c }, - { 0x01c0, 0x0154 }, - { 0x01c3, 0x0102 }, - { 0x01c5, 0x0139 }, - { 0x01c6, 0x0106 }, - { 0x01c8, 0x010c }, - { 0x01ca, 0x0118 }, - { 0x01cc, 0x011a }, - { 0x01cf, 0x010e }, - { 0x01d0, 0x0110 }, - { 0x01d1, 0x0143 }, - { 0x01d2, 0x0147 }, - { 0x01d5, 0x0150 }, - { 0x01d8, 0x0158 }, - { 0x01d9, 0x016e }, - { 0x01db, 0x0170 }, - { 0x01de, 0x0162 }, - { 0x01e0, 0x0155 }, - { 0x01e3, 0x0103 }, - { 0x01e5, 0x013a }, - { 0x01e6, 0x0107 }, - { 0x01e8, 0x010d }, - { 0x01ea, 0x0119 }, - { 0x01ec, 0x011b }, - { 0x01ef, 0x010f }, - { 0x01f0, 0x0111 }, - { 0x01f1, 0x0144 }, - { 0x01f2, 0x0148 }, - { 0x01f5, 0x0151 }, - { 0x01f8, 0x0159 }, - { 0x01f9, 0x016f }, - { 0x01fb, 0x0171 }, - { 0x01fe, 0x0163 }, - { 0x01ff, 0x02d9 }, - { 0x02a1, 0x0126 }, - { 0x02a6, 0x0124 }, - { 0x02a9, 0x0130 }, - { 0x02ab, 0x011e }, - { 0x02ac, 0x0134 }, - { 0x02b1, 0x0127 }, - { 0x02b6, 0x0125 }, - { 0x02b9, 0x0131 }, - { 0x02bb, 0x011f }, - { 0x02bc, 0x0135 }, - { 0x02c5, 0x010a }, - { 0x02c6, 0x0108 }, - { 0x02d5, 0x0120 }, - { 0x02d8, 0x011c }, - { 0x02dd, 0x016c }, - { 0x02de, 0x015c }, - { 0x02e5, 0x010b }, - { 0x02e6, 0x0109 }, - { 0x02f5, 0x0121 }, - { 0x02f8, 0x011d }, - { 0x02fd, 0x016d }, - { 0x02fe, 0x015d }, - { 0x03a2, 0x0138 }, - { 0x03a3, 0x0156 }, - { 0x03a5, 0x0128 }, - { 0x03a6, 0x013b }, - { 0x03aa, 0x0112 }, - { 0x03ab, 0x0122 }, - { 0x03ac, 0x0166 }, - { 0x03b3, 0x0157 }, - { 0x03b5, 0x0129 }, - { 0x03b6, 0x013c }, - { 0x03ba, 0x0113 }, - { 0x03bb, 0x0123 }, - { 0x03bc, 0x0167 }, - { 0x03bd, 0x014a }, - { 0x03bf, 0x014b }, - { 0x03c0, 0x0100 }, - { 0x03c7, 0x012e }, - { 0x03cc, 0x0116 }, - { 0x03cf, 0x012a }, - { 0x03d1, 0x0145 }, - { 0x03d2, 0x014c }, - { 0x03d3, 0x0136 }, - { 0x03d9, 0x0172 }, - { 0x03dd, 0x0168 }, - { 0x03de, 0x016a }, - { 0x03e0, 0x0101 }, - { 0x03e7, 0x012f }, - { 0x03ec, 0x0117 }, - { 0x03ef, 0x012b }, - { 0x03f1, 0x0146 }, - { 0x03f2, 0x014d }, - { 0x03f3, 0x0137 }, - { 0x03f9, 0x0173 }, - { 0x03fd, 0x0169 }, - { 0x03fe, 0x016b }, - { 0x047e, 0x203e }, - { 0x04a1, 0x3002 }, - { 0x04a2, 0x300c }, - { 0x04a3, 0x300d }, - { 0x04a4, 0x3001 }, - { 0x04a5, 0x30fb }, - { 0x04a6, 0x30f2 }, - { 0x04a7, 0x30a1 }, - { 0x04a8, 0x30a3 }, - { 0x04a9, 0x30a5 }, - { 0x04aa, 0x30a7 }, - { 0x04ab, 0x30a9 }, - { 0x04ac, 0x30e3 }, - { 0x04ad, 0x30e5 }, - { 0x04ae, 0x30e7 }, - { 0x04af, 0x30c3 }, - { 0x04b0, 0x30fc }, - { 0x04b1, 0x30a2 }, - { 0x04b2, 0x30a4 }, - { 0x04b3, 0x30a6 }, - { 0x04b4, 0x30a8 }, - { 0x04b5, 0x30aa }, - { 0x04b6, 0x30ab }, - { 0x04b7, 0x30ad }, - { 0x04b8, 0x30af }, - { 0x04b9, 0x30b1 }, - { 0x04ba, 0x30b3 }, - { 0x04bb, 0x30b5 }, - { 0x04bc, 0x30b7 }, - { 0x04bd, 0x30b9 }, - { 0x04be, 0x30bb }, - { 0x04bf, 0x30bd }, - { 0x04c0, 0x30bf }, - { 0x04c1, 0x30c1 }, - { 0x04c2, 0x30c4 }, - { 0x04c3, 0x30c6 }, - { 0x04c4, 0x30c8 }, - { 0x04c5, 0x30ca }, - { 0x04c6, 0x30cb }, - { 0x04c7, 0x30cc }, - { 0x04c8, 0x30cd }, - { 0x04c9, 0x30ce }, - { 0x04ca, 0x30cf }, - { 0x04cb, 0x30d2 }, - { 0x04cc, 0x30d5 }, - { 0x04cd, 0x30d8 }, - { 0x04ce, 0x30db }, - { 0x04cf, 0x30de }, - { 0x04d0, 0x30df }, - { 0x04d1, 0x30e0 }, - { 0x04d2, 0x30e1 }, - { 0x04d3, 0x30e2 }, - { 0x04d4, 0x30e4 }, - { 0x04d5, 0x30e6 }, - { 0x04d6, 0x30e8 }, - { 0x04d7, 0x30e9 }, - { 0x04d8, 0x30ea }, - { 0x04d9, 0x30eb }, - { 0x04da, 0x30ec }, - { 0x04db, 0x30ed }, - { 0x04dc, 0x30ef }, - { 0x04dd, 0x30f3 }, - { 0x04de, 0x309b }, - { 0x04df, 0x309c }, - { 0x05ac, 0x060c }, - { 0x05bb, 0x061b }, - { 0x05bf, 0x061f }, - { 0x05c1, 0x0621 }, - { 0x05c2, 0x0622 }, - { 0x05c3, 0x0623 }, - { 0x05c4, 0x0624 }, - { 0x05c5, 0x0625 }, - { 0x05c6, 0x0626 }, - { 0x05c7, 0x0627 }, - { 0x05c8, 0x0628 }, - { 0x05c9, 0x0629 }, - { 0x05ca, 0x062a }, - { 0x05cb, 0x062b }, - { 0x05cc, 0x062c }, - { 0x05cd, 0x062d }, - { 0x05ce, 0x062e }, - { 0x05cf, 0x062f }, - { 0x05d0, 0x0630 }, - { 0x05d1, 0x0631 }, - { 0x05d2, 0x0632 }, - { 0x05d3, 0x0633 }, - { 0x05d4, 0x0634 }, - { 0x05d5, 0x0635 }, - { 0x05d6, 0x0636 }, - { 0x05d7, 0x0637 }, - { 0x05d8, 0x0638 }, - { 0x05d9, 0x0639 }, - { 0x05da, 0x063a }, - { 0x05e0, 0x0640 }, - { 0x05e1, 0x0641 }, - { 0x05e2, 0x0642 }, - { 0x05e3, 0x0643 }, - { 0x05e4, 0x0644 }, - { 0x05e5, 0x0645 }, - { 0x05e6, 0x0646 }, - { 0x05e7, 0x0647 }, - { 0x05e8, 0x0648 }, - { 0x05e9, 0x0649 }, - { 0x05ea, 0x064a }, - { 0x05eb, 0x064b }, - { 0x05ec, 0x064c }, - { 0x05ed, 0x064d }, - { 0x05ee, 0x064e }, - { 0x05ef, 0x064f }, - { 0x05f0, 0x0650 }, - { 0x05f1, 0x0651 }, - { 0x05f2, 0x0652 }, - { 0x06a1, 0x0452 }, - { 0x06a2, 0x0453 }, - { 0x06a3, 0x0451 }, - { 0x06a4, 0x0454 }, - { 0x06a5, 0x0455 }, - { 0x06a6, 0x0456 }, - { 0x06a7, 0x0457 }, - { 0x06a8, 0x0458 }, - { 0x06a9, 0x0459 }, - { 0x06aa, 0x045a }, - { 0x06ab, 0x045b }, - { 0x06ac, 0x045c }, - { 0x06ae, 0x045e }, - { 0x06af, 0x045f }, - { 0x06b0, 0x2116 }, - { 0x06b1, 0x0402 }, - { 0x06b2, 0x0403 }, - { 0x06b3, 0x0401 }, - { 0x06b4, 0x0404 }, - { 0x06b5, 0x0405 }, - { 0x06b6, 0x0406 }, - { 0x06b7, 0x0407 }, - { 0x06b8, 0x0408 }, - { 0x06b9, 0x0409 }, - { 0x06ba, 0x040a }, - { 0x06bb, 0x040b }, - { 0x06bc, 0x040c }, - { 0x06be, 0x040e }, - { 0x06bf, 0x040f }, - { 0x06c0, 0x044e }, - { 0x06c1, 0x0430 }, - { 0x06c2, 0x0431 }, - { 0x06c3, 0x0446 }, - { 0x06c4, 0x0434 }, - { 0x06c5, 0x0435 }, - { 0x06c6, 0x0444 }, - { 0x06c7, 0x0433 }, - { 0x06c8, 0x0445 }, - { 0x06c9, 0x0438 }, - { 0x06ca, 0x0439 }, - { 0x06cb, 0x043a }, - { 0x06cc, 0x043b }, - { 0x06cd, 0x043c }, - { 0x06ce, 0x043d }, - { 0x06cf, 0x043e }, - { 0x06d0, 0x043f }, - { 0x06d1, 0x044f }, - { 0x06d2, 0x0440 }, - { 0x06d3, 0x0441 }, - { 0x06d4, 0x0442 }, - { 0x06d5, 0x0443 }, - { 0x06d6, 0x0436 }, - { 0x06d7, 0x0432 }, - { 0x06d8, 0x044c }, - { 0x06d9, 0x044b }, - { 0x06da, 0x0437 }, - { 0x06db, 0x0448 }, - { 0x06dc, 0x044d }, - { 0x06dd, 0x0449 }, - { 0x06de, 0x0447 }, - { 0x06df, 0x044a }, - { 0x06e0, 0x042e }, - { 0x06e1, 0x0410 }, - { 0x06e2, 0x0411 }, - { 0x06e3, 0x0426 }, - { 0x06e4, 0x0414 }, - { 0x06e5, 0x0415 }, - { 0x06e6, 0x0424 }, - { 0x06e7, 0x0413 }, - { 0x06e8, 0x0425 }, - { 0x06e9, 0x0418 }, - { 0x06ea, 0x0419 }, - { 0x06eb, 0x041a }, - { 0x06ec, 0x041b }, - { 0x06ed, 0x041c }, - { 0x06ee, 0x041d }, - { 0x06ef, 0x041e }, - { 0x06f0, 0x041f }, - { 0x06f1, 0x042f }, - { 0x06f2, 0x0420 }, - { 0x06f3, 0x0421 }, - { 0x06f4, 0x0422 }, - { 0x06f5, 0x0423 }, - { 0x06f6, 0x0416 }, - { 0x06f7, 0x0412 }, - { 0x06f8, 0x042c }, - { 0x06f9, 0x042b }, - { 0x06fa, 0x0417 }, - { 0x06fb, 0x0428 }, - { 0x06fc, 0x042d }, - { 0x06fd, 0x0429 }, - { 0x06fe, 0x0427 }, - { 0x06ff, 0x042a }, - { 0x07a1, 0x0386 }, - { 0x07a2, 0x0388 }, - { 0x07a3, 0x0389 }, - { 0x07a4, 0x038a }, - { 0x07a5, 0x03aa }, - { 0x07a7, 0x038c }, - { 0x07a8, 0x038e }, - { 0x07a9, 0x03ab }, - { 0x07ab, 0x038f }, - { 0x07ae, 0x0385 }, - { 0x07af, 0x2015 }, - { 0x07b1, 0x03ac }, - { 0x07b2, 0x03ad }, - { 0x07b3, 0x03ae }, - { 0x07b4, 0x03af }, - { 0x07b5, 0x03ca }, - { 0x07b6, 0x0390 }, - { 0x07b7, 0x03cc }, - { 0x07b8, 0x03cd }, - { 0x07b9, 0x03cb }, - { 0x07ba, 0x03b0 }, - { 0x07bb, 0x03ce }, - { 0x07c1, 0x0391 }, - { 0x07c2, 0x0392 }, - { 0x07c3, 0x0393 }, - { 0x07c4, 0x0394 }, - { 0x07c5, 0x0395 }, - { 0x07c6, 0x0396 }, - { 0x07c7, 0x0397 }, - { 0x07c8, 0x0398 }, - { 0x07c9, 0x0399 }, - { 0x07ca, 0x039a }, - { 0x07cb, 0x039b }, - { 0x07cc, 0x039c }, - { 0x07cd, 0x039d }, - { 0x07ce, 0x039e }, - { 0x07cf, 0x039f }, - { 0x07d0, 0x03a0 }, - { 0x07d1, 0x03a1 }, - { 0x07d2, 0x03a3 }, - { 0x07d4, 0x03a4 }, - { 0x07d5, 0x03a5 }, - { 0x07d6, 0x03a6 }, - { 0x07d7, 0x03a7 }, - { 0x07d8, 0x03a8 }, - { 0x07d9, 0x03a9 }, - { 0x07e1, 0x03b1 }, - { 0x07e2, 0x03b2 }, - { 0x07e3, 0x03b3 }, - { 0x07e4, 0x03b4 }, - { 0x07e5, 0x03b5 }, - { 0x07e6, 0x03b6 }, - { 0x07e7, 0x03b7 }, - { 0x07e8, 0x03b8 }, - { 0x07e9, 0x03b9 }, - { 0x07ea, 0x03ba }, - { 0x07eb, 0x03bb }, - { 0x07ec, 0x03bc }, - { 0x07ed, 0x03bd }, - { 0x07ee, 0x03be }, - { 0x07ef, 0x03bf }, - { 0x07f0, 0x03c0 }, - { 0x07f1, 0x03c1 }, - { 0x07f2, 0x03c3 }, - { 0x07f3, 0x03c2 }, - { 0x07f4, 0x03c4 }, - { 0x07f5, 0x03c5 }, - { 0x07f6, 0x03c6 }, - { 0x07f7, 0x03c7 }, - { 0x07f8, 0x03c8 }, - { 0x07f9, 0x03c9 }, - { 0x08a1, 0x23b7 }, - { 0x08a2, 0x250c }, - { 0x08a3, 0x2500 }, - { 0x08a4, 0x2320 }, - { 0x08a5, 0x2321 }, - { 0x08a6, 0x2502 }, - { 0x08a7, 0x23a1 }, - { 0x08a8, 0x23a3 }, - { 0x08a9, 0x23a4 }, - { 0x08aa, 0x23a6 }, - { 0x08ab, 0x239b }, - { 0x08ac, 0x239d }, - { 0x08ad, 0x239e }, - { 0x08ae, 0x23a0 }, - { 0x08af, 0x23a8 }, - { 0x08b0, 0x23ac }, - { 0x08bc, 0x2264 }, - { 0x08bd, 0x2260 }, - { 0x08be, 0x2265 }, - { 0x08bf, 0x222b }, - { 0x08c0, 0x2234 }, - { 0x08c1, 0x221d }, - { 0x08c2, 0x221e }, - { 0x08c5, 0x2207 }, - { 0x08c8, 0x223c }, - { 0x08c9, 0x2243 }, - { 0x08cd, 0x21d4 }, - { 0x08ce, 0x21d2 }, - { 0x08cf, 0x2261 }, - { 0x08d6, 0x221a }, - { 0x08da, 0x2282 }, - { 0x08db, 0x2283 }, - { 0x08dc, 0x2229 }, - { 0x08dd, 0x222a }, - { 0x08de, 0x2227 }, - { 0x08df, 0x2228 }, - { 0x08ef, 0x2202 }, - { 0x08f6, 0x0192 }, - { 0x08fb, 0x2190 }, - { 0x08fc, 0x2191 }, - { 0x08fd, 0x2192 }, - { 0x08fe, 0x2193 }, - { 0x09e0, 0x25c6 }, - { 0x09e1, 0x2592 }, - { 0x09e2, 0x2409 }, - { 0x09e3, 0x240c }, - { 0x09e4, 0x240d }, - { 0x09e5, 0x240a }, - { 0x09e8, 0x2424 }, - { 0x09e9, 0x240b }, - { 0x09ea, 0x2518 }, - { 0x09eb, 0x2510 }, - { 0x09ec, 0x250c }, - { 0x09ed, 0x2514 }, - { 0x09ee, 0x253c }, - { 0x09ef, 0x23ba }, - { 0x09f0, 0x23bb }, - { 0x09f1, 0x2500 }, - { 0x09f2, 0x23bc }, - { 0x09f3, 0x23bd }, - { 0x09f4, 0x251c }, - { 0x09f5, 0x2524 }, - { 0x09f6, 0x2534 }, - { 0x09f7, 0x252c }, - { 0x09f8, 0x2502 }, - { 0x0aa1, 0x2003 }, - { 0x0aa2, 0x2002 }, - { 0x0aa3, 0x2004 }, - { 0x0aa4, 0x2005 }, - { 0x0aa5, 0x2007 }, - { 0x0aa6, 0x2008 }, - { 0x0aa7, 0x2009 }, - { 0x0aa8, 0x200a }, - { 0x0aa9, 0x2014 }, - { 0x0aaa, 0x2013 }, - { 0x0aae, 0x2026 }, - { 0x0aaf, 0x2025 }, - { 0x0ab0, 0x2153 }, - { 0x0ab1, 0x2154 }, - { 0x0ab2, 0x2155 }, - { 0x0ab3, 0x2156 }, - { 0x0ab4, 0x2157 }, - { 0x0ab5, 0x2158 }, - { 0x0ab6, 0x2159 }, - { 0x0ab7, 0x215a }, - { 0x0ab8, 0x2105 }, - { 0x0abb, 0x2012 }, - { 0x0abc, 0x2329 }, - { 0x0abe, 0x232a }, - { 0x0ac3, 0x215b }, - { 0x0ac4, 0x215c }, - { 0x0ac5, 0x215d }, - { 0x0ac6, 0x215e }, - { 0x0ac9, 0x2122 }, - { 0x0aca, 0x2613 }, - { 0x0acc, 0x25c1 }, - { 0x0acd, 0x25b7 }, - { 0x0ace, 0x25cb }, - { 0x0acf, 0x25af }, - { 0x0ad0, 0x2018 }, - { 0x0ad1, 0x2019 }, - { 0x0ad2, 0x201c }, - { 0x0ad3, 0x201d }, - { 0x0ad4, 0x211e }, - { 0x0ad6, 0x2032 }, - { 0x0ad7, 0x2033 }, - { 0x0ad9, 0x271d }, - { 0x0adb, 0x25ac }, - { 0x0adc, 0x25c0 }, - { 0x0add, 0x25b6 }, - { 0x0ade, 0x25cf }, - { 0x0adf, 0x25ae }, - { 0x0ae0, 0x25e6 }, - { 0x0ae1, 0x25ab }, - { 0x0ae2, 0x25ad }, - { 0x0ae3, 0x25b3 }, - { 0x0ae4, 0x25bd }, - { 0x0ae5, 0x2606 }, - { 0x0ae6, 0x2022 }, - { 0x0ae7, 0x25aa }, - { 0x0ae8, 0x25b2 }, - { 0x0ae9, 0x25bc }, - { 0x0aea, 0x261c }, - { 0x0aeb, 0x261e }, - { 0x0aec, 0x2663 }, - { 0x0aed, 0x2666 }, - { 0x0aee, 0x2665 }, - { 0x0af0, 0x2720 }, - { 0x0af1, 0x2020 }, - { 0x0af2, 0x2021 }, - { 0x0af3, 0x2713 }, - { 0x0af4, 0x2717 }, - { 0x0af5, 0x266f }, - { 0x0af6, 0x266d }, - { 0x0af7, 0x2642 }, - { 0x0af8, 0x2640 }, - { 0x0af9, 0x260e }, - { 0x0afa, 0x2315 }, - { 0x0afb, 0x2117 }, - { 0x0afc, 0x2038 }, - { 0x0afd, 0x201a }, - { 0x0afe, 0x201e }, - { 0x0ba3, 0x003c }, - { 0x0ba6, 0x003e }, - { 0x0ba8, 0x2228 }, - { 0x0ba9, 0x2227 }, - { 0x0bc0, 0x00af }, - { 0x0bc2, 0x22a5 }, - { 0x0bc3, 0x2229 }, - { 0x0bc4, 0x230a }, - { 0x0bc6, 0x005f }, - { 0x0bca, 0x2218 }, - { 0x0bcc, 0x2395 }, - { 0x0bce, 0x22a4 }, - { 0x0bcf, 0x25cb }, - { 0x0bd3, 0x2308 }, - { 0x0bd6, 0x222a }, - { 0x0bd8, 0x2283 }, - { 0x0bda, 0x2282 }, - { 0x0bdc, 0x22a2 }, - { 0x0bfc, 0x22a3 }, - { 0x0cdf, 0x2017 }, - { 0x0ce0, 0x05d0 }, - { 0x0ce1, 0x05d1 }, - { 0x0ce2, 0x05d2 }, - { 0x0ce3, 0x05d3 }, - { 0x0ce4, 0x05d4 }, - { 0x0ce5, 0x05d5 }, - { 0x0ce6, 0x05d6 }, - { 0x0ce7, 0x05d7 }, - { 0x0ce8, 0x05d8 }, - { 0x0ce9, 0x05d9 }, - { 0x0cea, 0x05da }, - { 0x0ceb, 0x05db }, - { 0x0cec, 0x05dc }, - { 0x0ced, 0x05dd }, - { 0x0cee, 0x05de }, - { 0x0cef, 0x05df }, - { 0x0cf0, 0x05e0 }, - { 0x0cf1, 0x05e1 }, - { 0x0cf2, 0x05e2 }, - { 0x0cf3, 0x05e3 }, - { 0x0cf4, 0x05e4 }, - { 0x0cf5, 0x05e5 }, - { 0x0cf6, 0x05e6 }, - { 0x0cf7, 0x05e7 }, - { 0x0cf8, 0x05e8 }, - { 0x0cf9, 0x05e9 }, - { 0x0cfa, 0x05ea }, - { 0x0da1, 0x0e01 }, - { 0x0da2, 0x0e02 }, - { 0x0da3, 0x0e03 }, - { 0x0da4, 0x0e04 }, - { 0x0da5, 0x0e05 }, - { 0x0da6, 0x0e06 }, - { 0x0da7, 0x0e07 }, - { 0x0da8, 0x0e08 }, - { 0x0da9, 0x0e09 }, - { 0x0daa, 0x0e0a }, - { 0x0dab, 0x0e0b }, - { 0x0dac, 0x0e0c }, - { 0x0dad, 0x0e0d }, - { 0x0dae, 0x0e0e }, - { 0x0daf, 0x0e0f }, - { 0x0db0, 0x0e10 }, - { 0x0db1, 0x0e11 }, - { 0x0db2, 0x0e12 }, - { 0x0db3, 0x0e13 }, - { 0x0db4, 0x0e14 }, - { 0x0db5, 0x0e15 }, - { 0x0db6, 0x0e16 }, - { 0x0db7, 0x0e17 }, - { 0x0db8, 0x0e18 }, - { 0x0db9, 0x0e19 }, - { 0x0dba, 0x0e1a }, - { 0x0dbb, 0x0e1b }, - { 0x0dbc, 0x0e1c }, - { 0x0dbd, 0x0e1d }, - { 0x0dbe, 0x0e1e }, - { 0x0dbf, 0x0e1f }, - { 0x0dc0, 0x0e20 }, - { 0x0dc1, 0x0e21 }, - { 0x0dc2, 0x0e22 }, - { 0x0dc3, 0x0e23 }, - { 0x0dc4, 0x0e24 }, - { 0x0dc5, 0x0e25 }, - { 0x0dc6, 0x0e26 }, - { 0x0dc7, 0x0e27 }, - { 0x0dc8, 0x0e28 }, - { 0x0dc9, 0x0e29 }, - { 0x0dca, 0x0e2a }, - { 0x0dcb, 0x0e2b }, - { 0x0dcc, 0x0e2c }, - { 0x0dcd, 0x0e2d }, - { 0x0dce, 0x0e2e }, - { 0x0dcf, 0x0e2f }, - { 0x0dd0, 0x0e30 }, - { 0x0dd1, 0x0e31 }, - { 0x0dd2, 0x0e32 }, - { 0x0dd3, 0x0e33 }, - { 0x0dd4, 0x0e34 }, - { 0x0dd5, 0x0e35 }, - { 0x0dd6, 0x0e36 }, - { 0x0dd7, 0x0e37 }, - { 0x0dd8, 0x0e38 }, - { 0x0dd9, 0x0e39 }, - { 0x0dda, 0x0e3a }, - { 0x0ddf, 0x0e3f }, - { 0x0de0, 0x0e40 }, - { 0x0de1, 0x0e41 }, - { 0x0de2, 0x0e42 }, - { 0x0de3, 0x0e43 }, - { 0x0de4, 0x0e44 }, - { 0x0de5, 0x0e45 }, - { 0x0de6, 0x0e46 }, - { 0x0de7, 0x0e47 }, - { 0x0de8, 0x0e48 }, - { 0x0de9, 0x0e49 }, - { 0x0dea, 0x0e4a }, - { 0x0deb, 0x0e4b }, - { 0x0dec, 0x0e4c }, - { 0x0ded, 0x0e4d }, - { 0x0df0, 0x0e50 }, - { 0x0df1, 0x0e51 }, - { 0x0df2, 0x0e52 }, - { 0x0df3, 0x0e53 }, - { 0x0df4, 0x0e54 }, - { 0x0df5, 0x0e55 }, - { 0x0df6, 0x0e56 }, - { 0x0df7, 0x0e57 }, - { 0x0df8, 0x0e58 }, - { 0x0df9, 0x0e59 }, - { 0x0ea1, 0x3131 }, - { 0x0ea2, 0x3132 }, - { 0x0ea3, 0x3133 }, - { 0x0ea4, 0x3134 }, - { 0x0ea5, 0x3135 }, - { 0x0ea6, 0x3136 }, - { 0x0ea7, 0x3137 }, - { 0x0ea8, 0x3138 }, - { 0x0ea9, 0x3139 }, - { 0x0eaa, 0x313a }, - { 0x0eab, 0x313b }, - { 0x0eac, 0x313c }, - { 0x0ead, 0x313d }, - { 0x0eae, 0x313e }, - { 0x0eaf, 0x313f }, - { 0x0eb0, 0x3140 }, - { 0x0eb1, 0x3141 }, - { 0x0eb2, 0x3142 }, - { 0x0eb3, 0x3143 }, - { 0x0eb4, 0x3144 }, - { 0x0eb5, 0x3145 }, - { 0x0eb6, 0x3146 }, - { 0x0eb7, 0x3147 }, - { 0x0eb8, 0x3148 }, - { 0x0eb9, 0x3149 }, - { 0x0eba, 0x314a }, - { 0x0ebb, 0x314b }, - { 0x0ebc, 0x314c }, - { 0x0ebd, 0x314d }, - { 0x0ebe, 0x314e }, - { 0x0ebf, 0x314f }, - { 0x0ec0, 0x3150 }, - { 0x0ec1, 0x3151 }, - { 0x0ec2, 0x3152 }, - { 0x0ec3, 0x3153 }, - { 0x0ec4, 0x3154 }, - { 0x0ec5, 0x3155 }, - { 0x0ec6, 0x3156 }, - { 0x0ec7, 0x3157 }, - { 0x0ec8, 0x3158 }, - { 0x0ec9, 0x3159 }, - { 0x0eca, 0x315a }, - { 0x0ecb, 0x315b }, - { 0x0ecc, 0x315c }, - { 0x0ecd, 0x315d }, - { 0x0ece, 0x315e }, - { 0x0ecf, 0x315f }, - { 0x0ed0, 0x3160 }, - { 0x0ed1, 0x3161 }, - { 0x0ed2, 0x3162 }, - { 0x0ed3, 0x3163 }, - { 0x0ed4, 0x11a8 }, - { 0x0ed5, 0x11a9 }, - { 0x0ed6, 0x11aa }, - { 0x0ed7, 0x11ab }, - { 0x0ed8, 0x11ac }, - { 0x0ed9, 0x11ad }, - { 0x0eda, 0x11ae }, - { 0x0edb, 0x11af }, - { 0x0edc, 0x11b0 }, - { 0x0edd, 0x11b1 }, - { 0x0ede, 0x11b2 }, - { 0x0edf, 0x11b3 }, - { 0x0ee0, 0x11b4 }, - { 0x0ee1, 0x11b5 }, - { 0x0ee2, 0x11b6 }, - { 0x0ee3, 0x11b7 }, - { 0x0ee4, 0x11b8 }, - { 0x0ee5, 0x11b9 }, - { 0x0ee6, 0x11ba }, - { 0x0ee7, 0x11bb }, - { 0x0ee8, 0x11bc }, - { 0x0ee9, 0x11bd }, - { 0x0eea, 0x11be }, - { 0x0eeb, 0x11bf }, - { 0x0eec, 0x11c0 }, - { 0x0eed, 0x11c1 }, - { 0x0eee, 0x11c2 }, - { 0x0eef, 0x316d }, - { 0x0ef0, 0x3171 }, - { 0x0ef1, 0x3178 }, - { 0x0ef2, 0x317f }, - { 0x0ef3, 0x3181 }, - { 0x0ef4, 0x3184 }, - { 0x0ef5, 0x3186 }, - { 0x0ef6, 0x318d }, - { 0x0ef7, 0x318e }, - { 0x0ef8, 0x11eb }, - { 0x0ef9, 0x11f0 }, - { 0x0efa, 0x11f9 }, - { 0x0eff, 0x20a9 }, - { 0x13a4, 0x20ac }, - { 0x13bc, 0x0152 }, - { 0x13bd, 0x0153 }, - { 0x13be, 0x0178 }, - { 0x20ac, 0x20ac }, - // Numeric keypad with numlock on - { XK_KP_Space, ' ' }, - { XK_KP_Equal, '=' }, - { XK_KP_Multiply, '*' }, - { XK_KP_Add, '+' }, - { XK_KP_Separator, ',' }, - { XK_KP_Subtract, '-' }, - { XK_KP_Decimal, '.' }, - { XK_KP_Divide, '/' }, - { XK_KP_0, 0x0030 }, - { XK_KP_1, 0x0031 }, - { XK_KP_2, 0x0032 }, - { XK_KP_3, 0x0033 }, - { XK_KP_4, 0x0034 }, - { XK_KP_5, 0x0035 }, - { XK_KP_6, 0x0036 }, - { XK_KP_7, 0x0037 }, - { XK_KP_8, 0x0038 }, - { XK_KP_9, 0x0039 } -}; - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Convert X11 KeySym to Unicode -//======================================================================== - -long _glfwKeySym2Unicode( KeySym keysym ) -{ - int min = 0; - int max = sizeof(keysymtab) / sizeof(struct codepair) - 1; - int mid; - - /* First check for Latin-1 characters (1:1 mapping) */ - if( (keysym >= 0x0020 && keysym <= 0x007e) || - (keysym >= 0x00a0 && keysym <= 0x00ff) ) - { return keysym; - } - - /* Also check for directly encoded 24-bit UCS characters */ - if( (keysym & 0xff000000) == 0x01000000 ) - { - return keysym & 0x00ffffff; - } - - /* Binary search in table */ - while( max >= min ) - { - mid = (min + max) / 2; - if( keysymtab[mid].keysym < keysym ) - { - min = mid + 1; - } - else if( keysymtab[mid].keysym > keysym ) - { - max = mid - 1; - } - else - { - /* Found it! */ - return keysymtab[mid].ucs; - } - } - - /* No matching Unicode value found */ - return -1; -} diff --git a/ogl_editor/src/External/glfw/lib/x11/x11_thread.c b/ogl_editor/src/External/glfw/lib/x11/x11_thread.c deleted file mode 100644 index d4d1797..0000000 --- a/ogl_editor/src/External/glfw/lib/x11/x11_thread.c +++ /dev/null @@ -1,503 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: X11/GLX -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -#ifdef _GLFW_HAS_PTHREAD - -//======================================================================== -// This is simply a "wrapper" for calling the user thread function. -//======================================================================== - -void * _glfwNewThread( void * arg ) -{ - GLFWthreadfun threadfun; - _GLFWthread *t; - pthread_t posixID; - - // Get current thread ID - posixID = pthread_self(); - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Loop through entire list of threads to find the matching POSIX - // thread ID - for( t = &_glfwThrd.First; t != NULL; t = t->Next ) - { - if( t->PosixID == posixID ) - { - break; - } - } - if( t == NULL ) - { - LEAVE_THREAD_CRITICAL_SECTION - return NULL; - } - - // Get user thread function pointer - threadfun = t->Function; - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Call the user thread function - threadfun( arg ); - - // Remove thread from thread list - ENTER_THREAD_CRITICAL_SECTION - _glfwRemoveThread( t ); - LEAVE_THREAD_CRITICAL_SECTION - - // When the thread function returns, the thread will die... - return NULL; -} - -#endif // _GLFW_HAS_PTHREAD - - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Create a new thread -//======================================================================== - -GLFWthread _glfwPlatformCreateThread( GLFWthreadfun fun, void *arg ) -{ -#ifdef _GLFW_HAS_PTHREAD - - GLFWthread ID; - _GLFWthread *t; - int result; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Create a new thread information memory area - t = (_GLFWthread *) malloc( sizeof(_GLFWthread) ); - if( t == NULL ) - { - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - return -1; - } - - // Get a new unique thread id - ID = _glfwThrd.NextID ++; - - // Store thread information in the thread list - t->Function = fun; - t->ID = ID; - - // Create thread - result = pthread_create( - &t->PosixID, // Thread handle - NULL, // Default thread attributes - _glfwNewThread, // Thread function (a wrapper function) - (void *)arg // Argument to thread is user argument - ); - - // Did the thread creation fail? - if( result != 0 ) - { - free( (void *) t ); - LEAVE_THREAD_CRITICAL_SECTION - return -1; - } - - // Append thread to thread list - _glfwAppendThread( t ); - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Return the GLFW thread ID - return ID; - -#else - - return -1; - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Kill a thread. NOTE: THIS IS A VERY DANGEROUS OPERATION, AND SHOULD NOT -// BE USED EXCEPT IN EXTREME SITUATIONS! -//======================================================================== - -void _glfwPlatformDestroyThread( GLFWthread ID ) -{ -#ifdef _GLFW_HAS_PTHREAD - - _GLFWthread *t; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Get thread information pointer - t = _glfwGetThreadPointer( ID ); - if( t == NULL ) - { - LEAVE_THREAD_CRITICAL_SECTION - return; - } - - // Simply murder the process, no mercy! - pthread_kill( t->PosixID, SIGKILL ); - - // Remove thread from thread list - _glfwRemoveThread( t ); - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Wait for a thread to die -//======================================================================== - -int _glfwPlatformWaitThread( GLFWthread ID, int waitmode ) -{ -#ifdef _GLFW_HAS_PTHREAD - - pthread_t thread; - _GLFWthread *t; - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Get thread information pointer - t = _glfwGetThreadPointer( ID ); - - // Is the thread already dead? - if( t == NULL ) - { - LEAVE_THREAD_CRITICAL_SECTION - return GL_TRUE; - } - - // If got this far, the thread is alive => polling returns FALSE - if( waitmode == GLFW_NOWAIT ) - { - LEAVE_THREAD_CRITICAL_SECTION - return GL_FALSE; - } - - // Get thread handle - thread = t->PosixID; - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Wait for thread to die - (void) pthread_join( thread, NULL ); - - return GL_TRUE; - -#else - - return GL_TRUE; - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Return the thread ID for the current thread -//======================================================================== - -GLFWthread _glfwPlatformGetThreadID( void ) -{ -#ifdef _GLFW_HAS_PTHREAD - - _GLFWthread *t; - GLFWthread ID = -1; - pthread_t posixID; - - // Get current thread ID - posixID = pthread_self(); - - // Enter critical section - ENTER_THREAD_CRITICAL_SECTION - - // Loop through entire list of threads to find the matching POSIX - // thread ID - for( t = &_glfwThrd.First; t != NULL; t = t->Next ) - { - if( t->PosixID == posixID ) - { - ID = t->ID; - break; - } - } - - // Leave critical section - LEAVE_THREAD_CRITICAL_SECTION - - // Return the found GLFW thread identifier - return ID; - -#else - - return 0; - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Create a mutual exclusion object -//======================================================================== - -GLFWmutex _glfwPlatformCreateMutex( void ) -{ -#ifdef _GLFW_HAS_PTHREAD - - pthread_mutex_t *mutex; - - // Allocate memory for mutex - mutex = (pthread_mutex_t *) malloc( sizeof( pthread_mutex_t ) ); - if( !mutex ) - { - return NULL; - } - - // Initialise a mutex object - (void) pthread_mutex_init( mutex, NULL ); - - // Cast to GLFWmutex and return - return (GLFWmutex) mutex; - -#else - - return (GLFWmutex) 0; - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Destroy a mutual exclusion object -//======================================================================== - -void _glfwPlatformDestroyMutex( GLFWmutex mutex ) -{ -#ifdef _GLFW_HAS_PTHREAD - - // Destroy the mutex object - pthread_mutex_destroy( (pthread_mutex_t *) mutex ); - - // Free memory for mutex object - free( (void *) mutex ); - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Request access to a mutex -//======================================================================== - -void _glfwPlatformLockMutex( GLFWmutex mutex ) -{ -#ifdef _GLFW_HAS_PTHREAD - - // Wait for mutex to be released - (void) pthread_mutex_lock( (pthread_mutex_t *) mutex ); - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Release a mutex -//======================================================================== - -void _glfwPlatformUnlockMutex( GLFWmutex mutex ) -{ -#ifdef _GLFW_HAS_PTHREAD - - // Release mutex - pthread_mutex_unlock( (pthread_mutex_t *) mutex ); - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Create a new condition variable object -//======================================================================== - -GLFWcond _glfwPlatformCreateCond( void ) -{ -#ifdef _GLFW_HAS_PTHREAD - - pthread_cond_t *cond; - - // Allocate memory for condition variable - cond = (pthread_cond_t *) malloc( sizeof(pthread_cond_t) ); - if( !cond ) - { - return NULL; - } - - // Initialise condition variable - (void) pthread_cond_init( cond, NULL ); - - // Cast to GLFWcond and return - return (GLFWcond) cond; - -#else - - return (GLFWcond) 0; - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Destroy a condition variable object -//======================================================================== - -void _glfwPlatformDestroyCond( GLFWcond cond ) -{ -#ifdef _GLFW_HAS_PTHREAD - - // Destroy the condition variable object - (void) pthread_cond_destroy( (pthread_cond_t *) cond ); - - // Free memory for condition variable object - free( (void *) cond ); - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Wait for a condition to be raised -//======================================================================== - -void _glfwPlatformWaitCond( GLFWcond cond, GLFWmutex mutex, - double timeout ) -{ -#ifdef _GLFW_HAS_PTHREAD - - struct timeval currenttime; - struct timespec wait; - long dt_sec, dt_usec; - - // Select infinite or timed wait - if( timeout >= GLFW_INFINITY ) - { - // Wait for condition (infinite wait) - (void) pthread_cond_wait( (pthread_cond_t *) cond, - (pthread_mutex_t *) mutex ); - } - else - { - // Set timeout time, relatvie to current time - gettimeofday( ¤ttime, NULL ); - dt_sec = (long) timeout; - dt_usec = (long) ((timeout - (double)dt_sec) * 1000000.0); - wait.tv_nsec = (currenttime.tv_usec + dt_usec) * 1000L; - if( wait.tv_nsec > 1000000000L ) - { - wait.tv_nsec -= 1000000000L; - dt_sec ++; - } - wait.tv_sec = currenttime.tv_sec + dt_sec; - - // Wait for condition (timed wait) - (void) pthread_cond_timedwait( (pthread_cond_t *) cond, - (pthread_mutex_t *) mutex, &wait ); - } - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Signal a condition to one waiting thread -//======================================================================== - -void _glfwPlatformSignalCond( GLFWcond cond ) -{ -#ifdef _GLFW_HAS_PTHREAD - - // Signal condition - (void) pthread_cond_signal( (pthread_cond_t *) cond ); - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Broadcast a condition to all waiting threads -//======================================================================== - -void _glfwPlatformBroadcastCond( GLFWcond cond ) -{ -#ifdef _GLFW_HAS_PTHREAD - - // Broadcast condition - (void) pthread_cond_broadcast( (pthread_cond_t *) cond ); - -#endif // _GLFW_HAS_PTHREAD -} - - -//======================================================================== -// Return the number of processors in the system. -//======================================================================== - -int _glfwPlatformGetNumberOfProcessors( void ) -{ - int n; - - // Get number of processors online - _glfw_numprocessors( n ); - return n; -} - diff --git a/ogl_editor/src/External/glfw/lib/x11/x11_time.c b/ogl_editor/src/External/glfw/lib/x11/x11_time.c deleted file mode 100644 index d24cd9a..0000000 --- a/ogl_editor/src/External/glfw/lib/x11/x11_time.c +++ /dev/null @@ -1,174 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: X11/GLX -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -#include - - -//======================================================================== -// Return raw time -//======================================================================== - -static uint64_t getRawTime(void) -{ -#if defined( CLOCK_MONOTONIC ) - if( _glfwLibrary.Timer.monotonic ) - { - struct timespec ts; - - clock_gettime( CLOCK_MONOTONIC, &ts ); - return (uint64_t) ts.tv_sec * (uint64_t) 1000000000 + (uint64_t) ts.tv_nsec; - } - else -#endif - { - struct timeval tv; - - gettimeofday( &tv, NULL ); - return (uint64_t) tv.tv_sec * (uint64_t) 1000000 + (uint64_t) tv.tv_usec; - } -} - - -//======================================================================== -// Initialise timer -//======================================================================== - -void _glfwInitTimer( void ) -{ -#if defined( CLOCK_MONOTONIC ) - struct timespec ts; - - if( clock_gettime( CLOCK_MONOTONIC, &ts ) == 0 ) - { - _glfwLibrary.Timer.monotonic = GL_TRUE; - _glfwLibrary.Timer.resolution = 1e-9; - } - else -#endif - { - _glfwLibrary.Timer.resolution = 1e-6; - } - - _glfwLibrary.Timer.base = getRawTime(); -} - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Return timer value in seconds -//======================================================================== - -double _glfwPlatformGetTime( void ) -{ - return (double) (getRawTime() - _glfwLibrary.Timer.base) * - _glfwLibrary.Timer.resolution; -} - - -//======================================================================== -// Set timer value in seconds -//======================================================================== - -void _glfwPlatformSetTime( double time ) -{ - _glfwLibrary.Timer.base = getRawTime() - - (uint64_t) (time / _glfwLibrary.Timer.resolution); -} - - -//======================================================================== -// Put a thread to sleep for a specified amount of time -//======================================================================== - -void _glfwPlatformSleep( double time ) -{ -#ifdef _GLFW_HAS_PTHREAD - - if( time == 0.0 ) - { -#ifdef _GLFW_HAS_SCHED_YIELD - sched_yield(); -#endif - return; - } - - struct timeval currenttime; - struct timespec wait; - pthread_mutex_t mutex; - pthread_cond_t cond; - long dt_sec, dt_usec; - - // Not all pthread implementations have a pthread_sleep() function. We - // do it the portable way, using a timed wait for a condition that we - // will never signal. NOTE: The unistd functions sleep/usleep suspends - // the entire PROCESS, not a signle thread, which is why we can not - // use them to implement glfwSleep. - - // Set timeout time, relatvie to current time - gettimeofday( ¤ttime, NULL ); - dt_sec = (long) time; - dt_usec = (long) ((time - (double)dt_sec) * 1000000.0); - wait.tv_nsec = (currenttime.tv_usec + dt_usec) * 1000L; - if( wait.tv_nsec > 1000000000L ) - { - wait.tv_nsec -= 1000000000L; - dt_sec++; - } - wait.tv_sec = currenttime.tv_sec + dt_sec; - - // Initialize condition and mutex objects - pthread_mutex_init( &mutex, NULL ); - pthread_cond_init( &cond, NULL ); - - // Do a timed wait - pthread_mutex_lock( &mutex ); - pthread_cond_timedwait( &cond, &mutex, &wait ); - pthread_mutex_unlock( &mutex ); - - // Destroy condition and mutex objects - pthread_mutex_destroy( &mutex ); - pthread_cond_destroy( &cond ); - -#else - - // For systems without PTHREAD, use unistd usleep - if( time > 0 ) - { - usleep( (unsigned int) (time*1000000) ); - } - -#endif // _GLFW_HAS_PTHREAD -} - diff --git a/ogl_editor/src/External/glfw/lib/x11/x11_window.c b/ogl_editor/src/External/glfw/lib/x11/x11_window.c deleted file mode 100644 index 9159de2..0000000 --- a/ogl_editor/src/External/glfw/lib/x11/x11_window.c +++ /dev/null @@ -1,1938 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL framework -// Platform: X11/GLX -// API version: 2.7 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2002-2006 Marcus Geelnard -// Copyright (c) 2006-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -#include - - -/* Define GLX 1.4 FSAA tokens if not already defined */ -#ifndef GLX_VERSION_1_4 - -#define GLX_SAMPLE_BUFFERS 100000 -#define GLX_SAMPLES 100001 - -#endif /*GLX_VERSION_1_4*/ - -// Action for EWMH client messages -#define _NET_WM_STATE_REMOVE 0 -#define _NET_WM_STATE_ADD 1 -#define _NET_WM_STATE_TOGGLE 2 - - -//************************************************************************ -//**** GLFW internal functions **** -//************************************************************************ - -//======================================================================== -// Error handler for BadMatch errors when requesting context with -// unavailable OpenGL versions using the GLX_ARB_create_context extension -//======================================================================== - -static int errorHandler( Display *display, XErrorEvent *event ) -{ - return 0; -} - - -//======================================================================== -// Checks whether the event is a MapNotify for the specified window -//======================================================================== - -static Bool isMapNotify( Display *d, XEvent *e, char *arg ) -{ - return (e->type == MapNotify) && (e->xmap.window == (Window)arg); -} - - -//======================================================================== -// Retrieve a single window property of the specified type -// Inspired by fghGetWindowProperty from freeglut -//======================================================================== - -static unsigned long getWindowProperty( Window window, - Atom property, - Atom type, - unsigned char** value ) -{ - Atom actualType; - int actualFormat; - unsigned long itemCount, bytesAfter; - - XGetWindowProperty( _glfwLibrary.display, - window, - property, - 0, - LONG_MAX, - False, - type, - &actualType, - &actualFormat, - &itemCount, - &bytesAfter, - value ); - - if( actualType != type ) - { - return 0; - } - - return itemCount; -} - - -//======================================================================== -// Check whether the specified atom is supported -//======================================================================== - -static Atom getSupportedAtom( Atom* supportedAtoms, - unsigned long atomCount, - const char* atomName ) -{ - Atom atom = XInternAtom( _glfwLibrary.display, atomName, True ); - if( atom != None ) - { - unsigned long i; - - for( i = 0; i < atomCount; i++ ) - { - if( supportedAtoms[i] == atom ) - { - return atom; - } - } - } - - return None; -} - - -//======================================================================== -// Check whether the running window manager is EWMH-compliant -//======================================================================== - -static GLboolean checkForEWMH( void ) -{ - Window *windowFromRoot = NULL; - Window *windowFromChild = NULL; - - // Hey kids; let's see if the window manager supports EWMH! - - // First we need a couple of atoms, which should already be there - Atom supportingWmCheck = XInternAtom( _glfwLibrary.display, - "_NET_SUPPORTING_WM_CHECK", - True ); - Atom wmSupported = XInternAtom( _glfwLibrary.display, - "_NET_SUPPORTED", - True ); - if( supportingWmCheck == None || wmSupported == None ) - { - return GL_FALSE; - } - - // Then we look for the _NET_SUPPORTING_WM_CHECK property of the root window - if( getWindowProperty( _glfwWin.root, - supportingWmCheck, - XA_WINDOW, - (unsigned char**) &windowFromRoot ) != 1 ) - { - XFree( windowFromRoot ); - return GL_FALSE; - } - - // It should be the ID of a child window (of the root) - // Then we look for the same property on the child window - if( getWindowProperty( *windowFromRoot, - supportingWmCheck, - XA_WINDOW, - (unsigned char**) &windowFromChild ) != 1 ) - { - XFree( windowFromRoot ); - XFree( windowFromChild ); - return GL_FALSE; - } - - // It should be the ID of that same child window - if( *windowFromRoot != *windowFromChild ) - { - XFree( windowFromRoot ); - XFree( windowFromChild ); - return GL_FALSE; - } - - XFree( windowFromRoot ); - XFree( windowFromChild ); - - // We are now fairly sure that an EWMH-compliant window manager is running - - Atom *supportedAtoms; - unsigned long atomCount; - - // Now we need to check the _NET_SUPPORTED property of the root window - atomCount = getWindowProperty( _glfwWin.root, - wmSupported, - XA_ATOM, - (unsigned char**) &supportedAtoms ); - - // See which of the atoms we support that are supported by the WM - - _glfwWin.wmState = getSupportedAtom( supportedAtoms, - atomCount, - "_NET_WM_STATE" ); - - _glfwWin.wmStateFullscreen = getSupportedAtom( supportedAtoms, - atomCount, - "_NET_WM_STATE_FULLSCREEN" ); - - _glfwWin.wmPing = getSupportedAtom( supportedAtoms, - atomCount, - "_NET_WM_PING" ); - - _glfwWin.wmActiveWindow = getSupportedAtom( supportedAtoms, - atomCount, - "_NET_ACTIVE_WINDOW" ); - - XFree( supportedAtoms ); - - return GL_TRUE; -} - -//======================================================================== -// Translates an X Window key to internal coding -//======================================================================== - -static int translateKey( int keycode ) -{ - KeySym key, key_lc, key_uc; - - // Try secondary keysym, for numeric keypad keys - // Note: This way we always force "NumLock = ON", which at least - // enables GLFW users to detect numeric keypad keys - key = XKeycodeToKeysym( _glfwLibrary.display, keycode, 1 ); - switch( key ) - { - // Numeric keypad - case XK_KP_0: return GLFW_KEY_KP_0; - case XK_KP_1: return GLFW_KEY_KP_1; - case XK_KP_2: return GLFW_KEY_KP_2; - case XK_KP_3: return GLFW_KEY_KP_3; - case XK_KP_4: return GLFW_KEY_KP_4; - case XK_KP_5: return GLFW_KEY_KP_5; - case XK_KP_6: return GLFW_KEY_KP_6; - case XK_KP_7: return GLFW_KEY_KP_7; - case XK_KP_8: return GLFW_KEY_KP_8; - case XK_KP_9: return GLFW_KEY_KP_9; - case XK_KP_Separator: - case XK_KP_Decimal: return GLFW_KEY_KP_DECIMAL; - case XK_KP_Equal: return GLFW_KEY_KP_EQUAL; - case XK_KP_Enter: return GLFW_KEY_KP_ENTER; - default: break; - } - - // Now try pimary keysym - key = XKeycodeToKeysym( _glfwLibrary.display, keycode, 0 ); - switch( key ) - { - // Special keys (non character keys) - case XK_Escape: return GLFW_KEY_ESC; - case XK_Tab: return GLFW_KEY_TAB; - case XK_Shift_L: return GLFW_KEY_LSHIFT; - case XK_Shift_R: return GLFW_KEY_RSHIFT; - case XK_Control_L: return GLFW_KEY_LCTRL; - case XK_Control_R: return GLFW_KEY_RCTRL; - case XK_Meta_L: - case XK_Alt_L: return GLFW_KEY_LALT; - case XK_Mode_switch: // Mapped to Alt_R on many keyboards - case XK_Meta_R: - case XK_ISO_Level3_Shift: // AltGr on at least some machines - case XK_Alt_R: return GLFW_KEY_RALT; - case XK_Super_L: return GLFW_KEY_LSUPER; - case XK_Super_R: return GLFW_KEY_RSUPER; - case XK_Menu: return GLFW_KEY_MENU; - case XK_Num_Lock: return GLFW_KEY_KP_NUM_LOCK; - case XK_Caps_Lock: return GLFW_KEY_CAPS_LOCK; - case XK_Scroll_Lock: return GLFW_KEY_SCROLL_LOCK; - case XK_Pause: return GLFW_KEY_PAUSE; - case XK_KP_Delete: - case XK_Delete: return GLFW_KEY_DEL; - case XK_BackSpace: return GLFW_KEY_BACKSPACE; - case XK_Return: return GLFW_KEY_ENTER; - case XK_KP_Home: - case XK_Home: return GLFW_KEY_HOME; - case XK_KP_End: - case XK_End: return GLFW_KEY_END; - case XK_KP_Page_Up: - case XK_Page_Up: return GLFW_KEY_PAGEUP; - case XK_KP_Page_Down: - case XK_Page_Down: return GLFW_KEY_PAGEDOWN; - case XK_KP_Insert: - case XK_Insert: return GLFW_KEY_INSERT; - case XK_KP_Left: - case XK_Left: return GLFW_KEY_LEFT; - case XK_KP_Right: - case XK_Right: return GLFW_KEY_RIGHT; - case XK_KP_Down: - case XK_Down: return GLFW_KEY_DOWN; - case XK_KP_Up: - case XK_Up: return GLFW_KEY_UP; - case XK_F1: return GLFW_KEY_F1; - case XK_F2: return GLFW_KEY_F2; - case XK_F3: return GLFW_KEY_F3; - case XK_F4: return GLFW_KEY_F4; - case XK_F5: return GLFW_KEY_F5; - case XK_F6: return GLFW_KEY_F6; - case XK_F7: return GLFW_KEY_F7; - case XK_F8: return GLFW_KEY_F8; - case XK_F9: return GLFW_KEY_F9; - case XK_F10: return GLFW_KEY_F10; - case XK_F11: return GLFW_KEY_F11; - case XK_F12: return GLFW_KEY_F12; - case XK_F13: return GLFW_KEY_F13; - case XK_F14: return GLFW_KEY_F14; - case XK_F15: return GLFW_KEY_F15; - case XK_F16: return GLFW_KEY_F16; - case XK_F17: return GLFW_KEY_F17; - case XK_F18: return GLFW_KEY_F18; - case XK_F19: return GLFW_KEY_F19; - case XK_F20: return GLFW_KEY_F20; - case XK_F21: return GLFW_KEY_F21; - case XK_F22: return GLFW_KEY_F22; - case XK_F23: return GLFW_KEY_F23; - case XK_F24: return GLFW_KEY_F24; - case XK_F25: return GLFW_KEY_F25; - - // Numeric keypad (should have been detected in secondary keysym!) - case XK_KP_Divide: return GLFW_KEY_KP_DIVIDE; - case XK_KP_Multiply: return GLFW_KEY_KP_MULTIPLY; - case XK_KP_Subtract: return GLFW_KEY_KP_SUBTRACT; - case XK_KP_Add: return GLFW_KEY_KP_ADD; - case XK_KP_Equal: return GLFW_KEY_KP_EQUAL; - case XK_KP_Enter: return GLFW_KEY_KP_ENTER; - - // The rest (should be printable keys) - default: - // Make uppercase - XConvertCase( key, &key_lc, &key_uc ); - key = key_uc; - - // Valid ISO 8859-1 character? - if( (key >= 32 && key <= 126) || - (key >= 160 && key <= 255) ) - { - return (int) key; - } - return GLFW_KEY_UNKNOWN; - } -} - - -//======================================================================== -// Translates an X Window event to Unicode -//======================================================================== - -static int translateChar( XKeyEvent *event ) -{ - KeySym keysym; - - // Get X11 keysym - XLookupString( event, NULL, 0, &keysym, NULL ); - - // Convert to Unicode (see x11_keysym2unicode.c) - return (int) _glfwKeySym2Unicode( keysym ); -} - - -//======================================================================== -// Create a blank cursor (for locked mouse mode) -//======================================================================== - -static Cursor createNULLCursor( Display *display, Window root ) -{ - Pixmap cursormask; - XGCValues xgc; - GC gc; - XColor col; - Cursor cursor; - - cursormask = XCreatePixmap( display, root, 1, 1, 1 ); - xgc.function = GXclear; - gc = XCreateGC( display, cursormask, GCFunction, &xgc ); - XFillRectangle( display, cursormask, gc, 0, 0, 1, 1 ); - col.pixel = 0; - col.red = 0; - col.flags = 4; - cursor = XCreatePixmapCursor( display, cursormask, cursormask, - &col,&col, 0,0 ); - XFreePixmap( display, cursormask ); - XFreeGC( display, gc ); - - return cursor; -} - - -//======================================================================== -// Returns the specified attribute of the specified GLXFBConfig -// NOTE: Do not call this unless we have found GLX 1.3+ or GLX_SGIX_fbconfig -//======================================================================== - -static int getFBConfigAttrib( GLXFBConfig fbconfig, int attrib ) -{ - int value; - - if( _glfwWin.has_GLX_SGIX_fbconfig ) - { - _glfwWin.GetFBConfigAttribSGIX( _glfwLibrary.display, fbconfig, attrib, &value ); - } - else - { - glXGetFBConfigAttrib( _glfwLibrary.display, fbconfig, attrib, &value ); - } - - return value; -} - - -//======================================================================== -// Return a list of available and usable framebuffer configs -//======================================================================== - -static _GLFWfbconfig *getFBConfigs( unsigned int *found ) -{ - GLXFBConfig *fbconfigs; - _GLFWfbconfig *result; - int i, count = 0; - GLboolean trustWindowBit = GL_TRUE; - - *found = 0; - - if( _glfwLibrary.glxMajor == 1 && _glfwLibrary.glxMinor < 3 ) - { - if( !_glfwWin.has_GLX_SGIX_fbconfig ) - { - fprintf( stderr, "GLXFBConfigs are not supported by the X server\n" ); - return NULL; - } - } - - if( strcmp( glXGetClientString( _glfwLibrary.display, GLX_VENDOR ), - "Chromium" ) == 0 ) - { - // This is a (hopefully temporary) workaround for Chromium (VirtualBox - // GL) not setting the window bit on any GLXFBConfigs - trustWindowBit = GL_FALSE; - } - - if( _glfwWin.has_GLX_SGIX_fbconfig ) - { - fbconfigs = _glfwWin.ChooseFBConfigSGIX( _glfwLibrary.display, - _glfwWin.screen, - NULL, - &count ); - if( !count ) - { - fprintf( stderr, "No GLXFBConfigs returned\n" ); - return NULL; - } - } - else - { - fbconfigs = glXGetFBConfigs( _glfwLibrary.display, _glfwWin.screen, &count ); - if( !count ) - { - fprintf( stderr, "No GLXFBConfigs returned\n" ); - return NULL; - } - } - - result = (_GLFWfbconfig*) malloc( sizeof(_GLFWfbconfig) * count ); - if( !result ) - { - fprintf( stderr, "Out of memory\n" ); - return NULL; - } - - for( i = 0; i < count; i++ ) - { - if( !getFBConfigAttrib( fbconfigs[i], GLX_DOUBLEBUFFER ) || - !getFBConfigAttrib( fbconfigs[i], GLX_VISUAL_ID ) ) - { - // Only consider double-buffered GLXFBConfigs with associated visuals - continue; - } - - if( !( getFBConfigAttrib( fbconfigs[i], GLX_RENDER_TYPE ) & GLX_RGBA_BIT ) ) - { - // Only consider RGBA GLXFBConfigs - continue; - } - - if( !( getFBConfigAttrib( fbconfigs[i], GLX_DRAWABLE_TYPE ) & GLX_WINDOW_BIT ) ) - { - if( trustWindowBit ) - { - // Only consider window GLXFBConfigs - continue; - } - } - - result[*found].redBits = getFBConfigAttrib( fbconfigs[i], GLX_RED_SIZE ); - result[*found].greenBits = getFBConfigAttrib( fbconfigs[i], GLX_GREEN_SIZE ); - result[*found].blueBits = getFBConfigAttrib( fbconfigs[i], GLX_BLUE_SIZE ); - - result[*found].alphaBits = getFBConfigAttrib( fbconfigs[i], GLX_ALPHA_SIZE ); - result[*found].depthBits = getFBConfigAttrib( fbconfigs[i], GLX_DEPTH_SIZE ); - result[*found].stencilBits = getFBConfigAttrib( fbconfigs[i], GLX_STENCIL_SIZE ); - - result[*found].accumRedBits = getFBConfigAttrib( fbconfigs[i], GLX_ACCUM_RED_SIZE ); - result[*found].accumGreenBits = getFBConfigAttrib( fbconfigs[i], GLX_ACCUM_GREEN_SIZE ); - result[*found].accumBlueBits = getFBConfigAttrib( fbconfigs[i], GLX_ACCUM_BLUE_SIZE ); - result[*found].accumAlphaBits = getFBConfigAttrib( fbconfigs[i], GLX_ACCUM_ALPHA_SIZE ); - - result[*found].auxBuffers = getFBConfigAttrib( fbconfigs[i], GLX_AUX_BUFFERS ); - result[*found].stereo = getFBConfigAttrib( fbconfigs[i], GLX_STEREO ); - - if( _glfwWin.has_GLX_ARB_multisample ) - { - result[*found].samples = getFBConfigAttrib( fbconfigs[i], GLX_SAMPLES ); - } - else - { - result[*found].samples = 0; - } - - result[*found].platformID = (GLFWintptr) getFBConfigAttrib( fbconfigs[i], GLX_FBCONFIG_ID ); - - (*found)++; - } - - XFree( fbconfigs ); - - return result; -} - - -//======================================================================== -// Create the OpenGL context -//======================================================================== - -#define setGLXattrib( attribs, index, attribName, attribValue ) \ - attribs[index++] = attribName; \ - attribs[index++] = attribValue; - -static int createContext( const _GLFWwndconfig *wndconfig, GLXFBConfigID fbconfigID ) -{ - int attribs[40]; - int flags, dummy, index; - GLXFBConfig *fbconfig; - - // Retrieve the previously selected GLXFBConfig - { - index = 0; - - setGLXattrib( attribs, index, GLX_FBCONFIG_ID, (int) fbconfigID ); - setGLXattrib( attribs, index, None, None ); - - if( _glfwWin.has_GLX_SGIX_fbconfig ) - { - fbconfig = _glfwWin.ChooseFBConfigSGIX( _glfwLibrary.display, - _glfwWin.screen, - attribs, - &dummy ); - } - else - { - fbconfig = glXChooseFBConfig( _glfwLibrary.display, - _glfwWin.screen, - attribs, - &dummy ); - } - - if( fbconfig == NULL ) - { - fprintf(stderr, "Unable to retrieve the selected GLXFBConfig\n"); - return GL_FALSE; - } - } - - // Retrieve the corresponding visual - if( _glfwWin.has_GLX_SGIX_fbconfig ) - { - _glfwWin.visual = _glfwWin.GetVisualFromFBConfigSGIX( _glfwLibrary.display, - *fbconfig ); - } - else - { - _glfwWin.visual = glXGetVisualFromFBConfig( _glfwLibrary.display, *fbconfig ); - } - - if( _glfwWin.visual == NULL ) - { - XFree( fbconfig ); - - fprintf(stderr, "Unable to retrieve visual for GLXFBconfig\n"); - return GL_FALSE; - } - - if( _glfwWin.has_GLX_ARB_create_context ) - { - index = 0; - - if( wndconfig->glMajor != 1 || wndconfig->glMinor != 0 ) - { - // Request an explicitly versioned context - - setGLXattrib( attribs, index, GLX_CONTEXT_MAJOR_VERSION_ARB, wndconfig->glMajor ); - setGLXattrib( attribs, index, GLX_CONTEXT_MINOR_VERSION_ARB, wndconfig->glMinor ); - } - - if( wndconfig->glForward || wndconfig->glDebug ) - { - flags = 0; - - if( wndconfig->glForward ) - { - flags |= GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB; - } - - if( wndconfig->glDebug ) - { - flags |= GLX_CONTEXT_DEBUG_BIT_ARB; - } - - setGLXattrib( attribs, index, GLX_CONTEXT_FLAGS_ARB, flags ); - } - - if( wndconfig->glProfile ) - { - if( !_glfwWin.has_GLX_ARB_create_context_profile ) - { - fprintf( stderr, "OpenGL profile requested but GLX_ARB_create_context_profile " - "is unavailable\n" ); - return GL_FALSE; - } - - if( wndconfig->glProfile == GLFW_OPENGL_CORE_PROFILE ) - { - flags = GLX_CONTEXT_CORE_PROFILE_BIT_ARB; - } - else - { - flags = GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; - } - - setGLXattrib( attribs, index, GLX_CONTEXT_PROFILE_MASK_ARB, flags ); - } - - setGLXattrib( attribs, index, None, None ); - - // This is the only place we set an Xlib error handler, and we only do - // it because glXCreateContextAttribsARB generates a BadMatch error if - // the requested OpenGL version is unavailable (instead of a civilized - // response like returning NULL) - XSetErrorHandler( errorHandler ); - - _glfwWin.context = _glfwWin.CreateContextAttribsARB( _glfwLibrary.display, - *fbconfig, - NULL, - True, - attribs ); - - // We are done, so unset the error handler again (see above) - XSetErrorHandler( NULL ); - - // Copy the debug context hint as there's no way of verifying it - // This is the only code path capable of creating a debug context, - // so leave it as false (from the earlier memset) otherwise - _glfwWin.glDebug = wndconfig->glDebug; - } - else - { - if( _glfwWin.has_GLX_SGIX_fbconfig ) - { - _glfwWin.context = _glfwWin.CreateContextWithConfigSGIX( _glfwLibrary.display, - *fbconfig, - GLX_RGBA_TYPE, - NULL, - True ); - } - else - { - _glfwWin.context = glXCreateNewContext( _glfwLibrary.display, - *fbconfig, - GLX_RGBA_TYPE, - NULL, - True ); - } - } - - XFree( fbconfig ); - - if( _glfwWin.context == NULL ) - { - fprintf(stderr, "Unable to create OpenGL context\n"); - return GL_FALSE; - } - - _glfwWin.fbconfigID = fbconfigID; - - return GL_TRUE; -} - -#undef setGLXattrib - - -//======================================================================== -// Initialize GLX-specific extensions -//======================================================================== - -static void initGLXExtensions( void ) -{ - // This needs to include every function pointer loaded below - _glfwWin.SwapIntervalEXT = NULL; - _glfwWin.SwapIntervalMESA = NULL; - _glfwWin.SwapIntervalSGI = NULL; - _glfwWin.GetFBConfigAttribSGIX = NULL; - _glfwWin.ChooseFBConfigSGIX = NULL; - _glfwWin.CreateContextWithConfigSGIX = NULL; - _glfwWin.GetVisualFromFBConfigSGIX = NULL; - _glfwWin.CreateContextAttribsARB = NULL; - - // This needs to include every extension used below - _glfwWin.has_GLX_SGIX_fbconfig = GL_FALSE; - _glfwWin.has_GLX_EXT_swap_control = GL_FALSE; - _glfwWin.has_GLX_MESA_swap_control = GL_FALSE; - _glfwWin.has_GLX_SGI_swap_control = GL_FALSE; - _glfwWin.has_GLX_ARB_multisample = GL_FALSE; - _glfwWin.has_GLX_ARB_create_context = GL_FALSE; - _glfwWin.has_GLX_ARB_create_context_profile = GL_FALSE; - - if( _glfwPlatformExtensionSupported( "GLX_EXT_swap_control" ) ) - { - _glfwWin.SwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC) - _glfwPlatformGetProcAddress( "glXSwapIntervalEXT" ); - - if( _glfwWin.SwapIntervalEXT ) - { - _glfwWin.has_GLX_EXT_swap_control = GL_TRUE; - } - } - - if( _glfwPlatformExtensionSupported( "GLX_MESA_swap_control" ) ) - { - _glfwWin.SwapIntervalMESA = (PFNGLXSWAPINTERVALMESAPROC) - _glfwPlatformGetProcAddress( "glXSwapIntervalMESA" ); - - if( _glfwWin.SwapIntervalMESA ) - { - _glfwWin.has_GLX_MESA_swap_control = GL_TRUE; - } - } - - if( _glfwPlatformExtensionSupported( "GLX_SGI_swap_control" ) ) - { - _glfwWin.SwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC) - _glfwPlatformGetProcAddress( "glXSwapIntervalSGI" ); - - if( _glfwWin.SwapIntervalSGI ) - { - _glfwWin.has_GLX_SGI_swap_control = GL_TRUE; - } - } - - if( _glfwPlatformExtensionSupported( "GLX_SGIX_fbconfig" ) ) - { - _glfwWin.GetFBConfigAttribSGIX = (PFNGLXGETFBCONFIGATTRIBSGIXPROC) - _glfwPlatformGetProcAddress( "glXGetFBConfigAttribSGIX" ); - _glfwWin.ChooseFBConfigSGIX = (PFNGLXCHOOSEFBCONFIGSGIXPROC) - _glfwPlatformGetProcAddress( "glXChooseFBConfigSGIX" ); - _glfwWin.CreateContextWithConfigSGIX = (PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) - _glfwPlatformGetProcAddress( "glXCreateContextWithConfigSGIX" ); - _glfwWin.GetVisualFromFBConfigSGIX = (PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) - _glfwPlatformGetProcAddress( "glXGetVisualFromFBConfigSGIX" ); - - if( _glfwWin.GetFBConfigAttribSGIX && - _glfwWin.ChooseFBConfigSGIX && - _glfwWin.CreateContextWithConfigSGIX && - _glfwWin.GetVisualFromFBConfigSGIX ) - { - _glfwWin.has_GLX_SGIX_fbconfig = GL_TRUE; - } - } - - if( _glfwPlatformExtensionSupported( "GLX_ARB_multisample" ) ) - { - _glfwWin.has_GLX_ARB_multisample = GL_TRUE; - } - - if( _glfwPlatformExtensionSupported( "GLX_ARB_create_context" ) ) - { - _glfwWin.CreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC) - _glfwPlatformGetProcAddress( "glXCreateContextAttribsARB" ); - - if( _glfwWin.CreateContextAttribsARB ) - { - _glfwWin.has_GLX_ARB_create_context = GL_TRUE; - } - } - - if( _glfwPlatformExtensionSupported( "GLX_ARB_create_context_profile" ) ) - { - _glfwWin.has_GLX_ARB_create_context_profile = GL_TRUE; - } -} - - -//======================================================================== -// Create the X11 window (and its colormap) -//======================================================================== - -static GLboolean createWindow( int width, int height, - const _GLFWwndconfig *wndconfig ) -{ - XEvent event; - unsigned long wamask; - XSetWindowAttributes wa; - - // Every window needs a colormap - // Create one based on the visual used by the current context - - _glfwWin.colormap = XCreateColormap( _glfwLibrary.display, - _glfwWin.root, - _glfwWin.visual->visual, - AllocNone ); - - // Create the actual window - { - wamask = CWBorderPixel | CWColormap | CWEventMask; - - wa.colormap = _glfwWin.colormap; - wa.border_pixel = 0; - wa.event_mask = StructureNotifyMask | KeyPressMask | KeyReleaseMask | - PointerMotionMask | ButtonPressMask | ButtonReleaseMask | - ExposureMask | FocusChangeMask | VisibilityChangeMask; - - if( wndconfig->mode == GLFW_WINDOW ) - { - // The /only/ reason we are setting the background pixel here is - // that otherwise our window wont get any decorations on systems - // using Compiz on Intel hardware - wa.background_pixel = BlackPixel( _glfwLibrary.display, _glfwWin.screen ); - wamask |= CWBackPixel; - } - - _glfwWin.window = XCreateWindow( - _glfwLibrary.display, - _glfwWin.root, - 0, 0, // Upper left corner of this window on root - _glfwWin.width, _glfwWin.height, - 0, // Border width - _glfwWin.visual->depth, // Color depth - InputOutput, - _glfwWin.visual->visual, - wamask, - &wa - ); - if( !_glfwWin.window ) - { - _glfwPlatformCloseWindow(); - return GL_FALSE; - } - } - - // Check whether an EWMH-compliant window manager is running - _glfwWin.hasEWMH = checkForEWMH(); - - if( _glfwWin.fullscreen && !_glfwWin.hasEWMH ) - { - // This is the butcher's way of removing window decorations - // Setting the override-redirect attribute on a window makes the window - // manager ignore the window completely (ICCCM, section 4) - // The good thing is that this makes undecorated fullscreen windows - // easy to do; the bad thing is that we have to do everything manually - // and some things (like iconify/restore) won't work at all, as they're - // usually performed by the window manager - - XSetWindowAttributes attributes; - attributes.override_redirect = True; - XChangeWindowAttributes( _glfwLibrary.display, - _glfwWin.window, - CWOverrideRedirect, - &attributes ); - - _glfwWin.overrideRedirect = GL_TRUE; - } - - // Find or create the protocol atom for window close notifications - _glfwWin.wmDeleteWindow = XInternAtom( _glfwLibrary.display, - "WM_DELETE_WINDOW", - False ); - - // Declare the WM protocols we support - { - int count = 0; - Atom protocols[2]; - - // The WM_DELETE_WINDOW ICCCM protocol - // Basic window close notification protocol - if( _glfwWin.wmDeleteWindow != None ) - { - protocols[count++] = _glfwWin.wmDeleteWindow; - } - - // The _NET_WM_PING EWMH protocol - // Tells the WM to ping our window and flag us as unresponsive if we - // don't reply within a few seconds - if( _glfwWin.wmPing != None ) - { - protocols[count++] = _glfwWin.wmPing; - } - - if( count > 0 ) - { - XSetWMProtocols( _glfwLibrary.display, _glfwWin.window, - protocols, count ); - } - } - - // Set ICCCM WM_HINTS property - { - XWMHints *hints = XAllocWMHints(); - if( !hints ) - { - _glfwPlatformCloseWindow(); - return GL_FALSE; - } - - hints->flags = StateHint; - hints->initial_state = NormalState; - - XSetWMHints( _glfwLibrary.display, _glfwWin.window, hints ); - XFree( hints ); - } - - // Set ICCCM WM_NORMAL_HINTS property (even if no parts are set) - { - XSizeHints *hints = XAllocSizeHints(); - if( !hints ) - { - _glfwPlatformCloseWindow(); - return GL_FALSE; - } - - hints->flags = 0; - - if( wndconfig->windowNoResize && !_glfwWin.fullscreen ) - { - hints->flags |= (PMinSize | PMaxSize); - hints->min_width = hints->max_width = _glfwWin.width; - hints->min_height = hints->max_height = _glfwWin.height; - } - - XSetWMNormalHints( _glfwLibrary.display, _glfwWin.window, hints ); - XFree( hints ); - } - - _glfwPlatformSetWindowTitle( "GLFW Window" ); - - // Make sure the window is mapped before proceeding - XMapWindow( _glfwLibrary.display, _glfwWin.window ); - XPeekIfEvent( _glfwLibrary.display, &event, isMapNotify, - (char*)_glfwWin.window ); - - return GL_TRUE; -} - - -//======================================================================== -// Enter fullscreen mode -//======================================================================== - -static void enterFullscreenMode( void ) -{ - if( !_glfwWin.Saver.changed ) - { - // Remember old screen saver settings - XGetScreenSaver( _glfwLibrary.display, - &_glfwWin.Saver.timeout, &_glfwWin.Saver.interval, - &_glfwWin.Saver.blanking, &_glfwWin.Saver.exposure ); - - // Disable screen saver - XSetScreenSaver( _glfwLibrary.display, 0, 0, DontPreferBlanking, - DefaultExposures ); - - _glfwWin.Saver.changed = GL_TRUE; - } - - _glfwSetVideoMode( _glfwWin.screen, - &_glfwWin.width, &_glfwWin.height, - &_glfwWin.refreshRate ); - - if( _glfwWin.hasEWMH && - _glfwWin.wmState != None && - _glfwWin.wmStateFullscreen != None ) - { - if( _glfwWin.wmActiveWindow != None ) - { - // Ask the window manager to raise and focus the GLFW window - // Only focused windows with the _NET_WM_STATE_FULLSCREEN state end - // up on top of all other windows ("Stacking order" in EWMH spec) - - XEvent event; - memset( &event, 0, sizeof(event) ); - - event.type = ClientMessage; - event.xclient.window = _glfwWin.window; - event.xclient.format = 32; // Data is 32-bit longs - event.xclient.message_type = _glfwWin.wmActiveWindow; - event.xclient.data.l[0] = 1; // Sender is a normal application - event.xclient.data.l[1] = 0; // We don't really know the timestamp - - XSendEvent( _glfwLibrary.display, - _glfwWin.root, - False, - SubstructureNotifyMask | SubstructureRedirectMask, - &event ); - } - - // Ask the window manager to make the GLFW window a fullscreen window - // Fullscreen windows are undecorated and, when focused, are kept - // on top of all other windows - - XEvent event; - memset( &event, 0, sizeof(event) ); - - event.type = ClientMessage; - event.xclient.window = _glfwWin.window; - event.xclient.format = 32; // Data is 32-bit longs - event.xclient.message_type = _glfwWin.wmState; - event.xclient.data.l[0] = _NET_WM_STATE_ADD; - event.xclient.data.l[1] = _glfwWin.wmStateFullscreen; - event.xclient.data.l[2] = 0; // No secondary property - event.xclient.data.l[3] = 1; // Sender is a normal application - - XSendEvent( _glfwLibrary.display, - _glfwWin.root, - False, - SubstructureNotifyMask | SubstructureRedirectMask, - &event ); - } - else if( _glfwWin.overrideRedirect ) - { - // In override-redirect mode, we have divorced ourselves from the - // window manager, so we need to do everything manually - - XRaiseWindow( _glfwLibrary.display, _glfwWin.window ); - XSetInputFocus( _glfwLibrary.display, _glfwWin.window, - RevertToParent, CurrentTime ); - XMoveWindow( _glfwLibrary.display, _glfwWin.window, 0, 0 ); - XResizeWindow( _glfwLibrary.display, _glfwWin.window, - _glfwWin.width, _glfwWin.height ); - } - - if( _glfwWin.mouseLock ) - { - _glfwPlatformHideMouseCursor(); - } - - // HACK: Try to get window inside viewport (for virtual displays) by moving - // the mouse cursor to the upper left corner (and then to the center) - // This hack should be harmless on saner systems as well - XWarpPointer( _glfwLibrary.display, None, _glfwWin.window, 0,0,0,0, 0,0 ); - XWarpPointer( _glfwLibrary.display, None, _glfwWin.window, 0,0,0,0, - _glfwWin.width / 2, _glfwWin.height / 2 ); -} - -//======================================================================== -// Leave fullscreen mode -//======================================================================== - -static void leaveFullscreenMode( void ) -{ - _glfwRestoreVideoMode(); - - // Did we change the screen saver setting? - if( _glfwWin.Saver.changed ) - { - // Restore old screen saver settings - XSetScreenSaver( _glfwLibrary.display, - _glfwWin.Saver.timeout, - _glfwWin.Saver.interval, - _glfwWin.Saver.blanking, - _glfwWin.Saver.exposure ); - - _glfwWin.Saver.changed = GL_FALSE; - } - - if( _glfwWin.hasEWMH && - _glfwWin.wmState != None && - _glfwWin.wmStateFullscreen != None ) - { - // Ask the window manager to make the GLFW window a normal window - // Normal windows usually have frames and other decorations - - XEvent event; - memset( &event, 0, sizeof(event) ); - - event.type = ClientMessage; - event.xclient.window = _glfwWin.window; - event.xclient.format = 32; // Data is 32-bit longs - event.xclient.message_type = _glfwWin.wmState; - event.xclient.data.l[0] = _NET_WM_STATE_REMOVE; - event.xclient.data.l[1] = _glfwWin.wmStateFullscreen; - event.xclient.data.l[2] = 0; // No secondary property - event.xclient.data.l[3] = 1; // Sender is a normal application - - XSendEvent( _glfwLibrary.display, - _glfwWin.root, - False, - SubstructureNotifyMask | SubstructureRedirectMask, - &event ); - } - - if( _glfwWin.mouseLock ) - { - _glfwPlatformShowMouseCursor(); - } -} - -//======================================================================== -// Get and process next X event (called by _glfwPlatformPollEvents) -// Returns GL_TRUE if a window close request was received -//======================================================================== - -static GLboolean processSingleEvent( void ) -{ - XEvent event; - XNextEvent( _glfwLibrary.display, &event ); - - switch( event.type ) - { - case KeyPress: - { - // A keyboard key was pressed - - // Translate and report key press - _glfwInputKey( translateKey( event.xkey.keycode ), GLFW_PRESS ); - - // Translate and report character input - if( _glfwWin.charCallback ) - { - _glfwInputChar( translateChar( &event.xkey ), GLFW_PRESS ); - } - break; - } - - case KeyRelease: - { - // A keyboard key was released - - // Do not report key releases for key repeats. For key repeats we - // will get KeyRelease/KeyPress pairs with similar or identical - // time stamps. User selected key repeat filtering is handled in - // _glfwInputKey()/_glfwInputChar(). - if( XEventsQueued( _glfwLibrary.display, QueuedAfterReading ) ) - { - XEvent nextEvent; - XPeekEvent( _glfwLibrary.display, &nextEvent ); - - if( nextEvent.type == KeyPress && - nextEvent.xkey.window == event.xkey.window && - nextEvent.xkey.keycode == event.xkey.keycode ) - { - // This last check is a hack to work around key repeats - // leaking through due to some sort of time drift - // Toshiyuki Takahashi can press a button 16 times per - // second so it's fairly safe to assume that no human is - // pressing the key 50 times per second (value is ms) - if( ( nextEvent.xkey.time - event.xkey.time ) < 20 ) - { - // Do not report anything for this event - break; - } - } - } - - // Translate and report key release - _glfwInputKey( translateKey( event.xkey.keycode ), GLFW_RELEASE ); - - // Translate and report character input - if( _glfwWin.charCallback ) - { - _glfwInputChar( translateChar( &event.xkey ), GLFW_RELEASE ); - } - break; - } - - case ButtonPress: - { - // A mouse button was pressed or a scrolling event occurred - - if( event.xbutton.button == Button1 ) - { - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_LEFT, GLFW_PRESS ); - } - else if( event.xbutton.button == Button2 ) - { - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_MIDDLE, GLFW_PRESS ); - } - else if( event.xbutton.button == Button3 ) - { - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_RIGHT, GLFW_PRESS ); - } - - // XFree86 3.3.2 and later translates mouse wheel up/down into - // mouse button 4 & 5 presses - else if( event.xbutton.button == Button4 ) - { - _glfwInput.WheelPos++; // To verify: is this up or down? - if( _glfwWin.mouseWheelCallback ) - { - _glfwWin.mouseWheelCallback( _glfwInput.WheelPos ); - } - } - else if( event.xbutton.button == Button5 ) - { - _glfwInput.WheelPos--; - if( _glfwWin.mouseWheelCallback ) - { - _glfwWin.mouseWheelCallback( _glfwInput.WheelPos ); - } - } - break; - } - - case ButtonRelease: - { - // A mouse button was released - - if( event.xbutton.button == Button1 ) - { - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_LEFT, - GLFW_RELEASE ); - } - else if( event.xbutton.button == Button2 ) - { - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_MIDDLE, - GLFW_RELEASE ); - } - else if( event.xbutton.button == Button3 ) - { - _glfwInputMouseClick( GLFW_MOUSE_BUTTON_RIGHT, - GLFW_RELEASE ); - } - break; - } - - case MotionNotify: - { - // The mouse cursor was moved - - if( event.xmotion.x != _glfwInput.CursorPosX || - event.xmotion.y != _glfwInput.CursorPosY ) - { - // The mouse cursor was moved and we didn't do it - - if( _glfwWin.mouseLock ) - { - if( _glfwWin.pointerHidden ) - { - _glfwInput.MousePosX += event.xmotion.x - - _glfwInput.CursorPosX; - _glfwInput.MousePosY += event.xmotion.y - - _glfwInput.CursorPosY; - } - } - else - { - _glfwInput.MousePosX = event.xmotion.x; - _glfwInput.MousePosY = event.xmotion.y; - } - - _glfwInput.CursorPosX = event.xmotion.x; - _glfwInput.CursorPosY = event.xmotion.y; - _glfwInput.MouseMoved = GL_TRUE; - - if( _glfwWin.mousePosCallback ) - { - _glfwWin.mousePosCallback( _glfwInput.MousePosX, - _glfwInput.MousePosY ); - } - } - break; - } - - case ConfigureNotify: - { - if( event.xconfigure.width != _glfwWin.width || - event.xconfigure.height != _glfwWin.height ) - { - // The window was resized - - _glfwWin.width = event.xconfigure.width; - _glfwWin.height = event.xconfigure.height; - if( _glfwWin.windowSizeCallback ) - { - _glfwWin.windowSizeCallback( _glfwWin.width, - _glfwWin.height ); - } - } - break; - } - - case ClientMessage: - { - if( (Atom) event.xclient.data.l[ 0 ] == _glfwWin.wmDeleteWindow ) - { - // The window manager was asked to close the window, for example by - // the user pressing a 'close' window decoration button - - return GL_TRUE; - } - else if( _glfwWin.wmPing != None && - (Atom) event.xclient.data.l[ 0 ] == _glfwWin.wmPing ) - { - // The window manager is pinging us to make sure we are still - // responding to events - - event.xclient.window = _glfwWin.root; - XSendEvent( _glfwLibrary.display, - event.xclient.window, - False, - SubstructureNotifyMask | SubstructureRedirectMask, - &event ); - } - - break; - } - - case MapNotify: - { - // The window was mapped - - _glfwWin.iconified = GL_FALSE; - break; - } - - case UnmapNotify: - { - // The window was unmapped - - _glfwWin.iconified = GL_TRUE; - break; - } - - case FocusIn: - { - // The window gained focus - - _glfwWin.active = GL_TRUE; - - if( _glfwWin.mouseLock ) - { - _glfwPlatformHideMouseCursor(); - } - - break; - } - - case FocusOut: - { - // The window lost focus - - _glfwWin.active = GL_FALSE; - _glfwInputDeactivation(); - - if( _glfwWin.mouseLock ) - { - _glfwPlatformShowMouseCursor(); - } - - break; - } - - case Expose: - { - // The window's contents was damaged - - if( _glfwWin.windowRefreshCallback ) - { - _glfwWin.windowRefreshCallback(); - } - break; - } - - // Was the window destroyed? - case DestroyNotify: - return GL_FALSE; - - default: - { -#if defined( _GLFW_HAS_XRANDR ) - switch( event.type - _glfwLibrary.XRandR.eventBase ) - { - case RRScreenChangeNotify: - { - // Show XRandR that we really care - XRRUpdateConfiguration( &event ); - break; - } - } -#endif - break; - } - } - - // The window was not destroyed - return GL_FALSE; -} - - - -//************************************************************************ -//**** Platform implementation functions **** -//************************************************************************ - -//======================================================================== -// Here is where the window is created, and -// the OpenGL rendering context is created -//======================================================================== - -int _glfwPlatformOpenWindow( int width, int height, - const _GLFWwndconfig* wndconfig, - const _GLFWfbconfig* fbconfig ) -{ - _GLFWfbconfig closest; - - // Clear platform specific GLFW window state - _glfwWin.refreshRate = wndconfig->refreshRate; - _glfwWin.windowNoResize = wndconfig->windowNoResize; - - // As the 2.x API doesn't understand multiple display devices, we hardcode - // this choice and hope for the best - _glfwWin.screen = DefaultScreen( _glfwLibrary.display ); - _glfwWin.root = RootWindow( _glfwLibrary.display, _glfwWin.screen ); - - // Create the invisible cursor for hidden cursor mode - _glfwWin.cursor = createNULLCursor( _glfwLibrary.display, _glfwWin.root ); - - initGLXExtensions(); - - // Choose the best available fbconfig - { - unsigned int fbcount; - _GLFWfbconfig *fbconfigs; - const _GLFWfbconfig *result; - - fbconfigs = getFBConfigs( &fbcount ); - if( !fbconfigs ) - { - return GL_FALSE; - } - - result = _glfwChooseFBConfig( fbconfig, fbconfigs, fbcount ); - if( !result ) - { - free( fbconfigs ); - return GL_FALSE; - } - - closest = *result; - free( fbconfigs ); - } - - if( !createContext( wndconfig, (GLXFBConfigID) closest.platformID ) ) - { - return GL_FALSE; - } - - if( !createWindow( width, height, wndconfig ) ) - { - return GL_FALSE; - } - - if( wndconfig->mode == GLFW_FULLSCREEN ) - { -#if defined( _GLFW_HAS_XRANDR ) - // Request screen change notifications - if( _glfwLibrary.XRandR.available ) - { - XRRSelectInput( _glfwLibrary.display, - _glfwWin.window, - RRScreenChangeNotifyMask ); - } -#endif - enterFullscreenMode(); - } - - // Process the window map event and any other that may have arrived - _glfwPlatformPollEvents(); - - // Retrieve and set initial cursor position - { - Window window, root; - int windowX, windowY, rootX, rootY; - unsigned int mask; - - XQueryPointer( _glfwLibrary.display, - _glfwWin.window, - &root, - &window, - &rootX, &rootY, - &windowX, &windowY, - &mask ); - - // TODO: Probably check for some corner cases here. - - _glfwInput.MousePosX = windowX; - _glfwInput.MousePosY = windowY; - } - - // Connect the context to the window - glXMakeCurrent( _glfwLibrary.display, _glfwWin.window, _glfwWin.context ); - - return GL_TRUE; -} - - -//======================================================================== -// Properly kill the window/video display -//======================================================================== - -void _glfwPlatformCloseWindow( void ) -{ - if( _glfwWin.fullscreen ) - { - leaveFullscreenMode(); - } - - if( _glfwWin.context ) - { - // Release and destroy the context - glXMakeCurrent( _glfwLibrary.display, None, NULL ); - glXDestroyContext( _glfwLibrary.display, _glfwWin.context ); - _glfwWin.context = NULL; - } - - if( _glfwWin.visual ) - { - XFree( _glfwWin.visual ); - _glfwWin.visual = NULL; - } - - if( _glfwWin.window ) - { - XUnmapWindow( _glfwLibrary.display, _glfwWin.window ); - XDestroyWindow( _glfwLibrary.display, _glfwWin.window ); - _glfwWin.window = (Window) 0; - } - - if( _glfwWin.colormap ) - { - XFreeColormap( _glfwLibrary.display, _glfwWin.colormap ); - _glfwWin.colormap = (Colormap) 0; - } - - if( _glfwWin.cursor ) - { - XFreeCursor( _glfwLibrary.display, _glfwWin.cursor ); - _glfwWin.cursor = (Cursor) 0; - } -} - - -//======================================================================== -// Set the window title -//======================================================================== - -void _glfwPlatformSetWindowTitle( const char *title ) -{ - // Set window & icon title - XStoreName( _glfwLibrary.display, _glfwWin.window, title ); - XSetIconName( _glfwLibrary.display, _glfwWin.window, title ); -} - - -//======================================================================== -// Set the window size -//======================================================================== - -void _glfwPlatformSetWindowSize( int width, int height ) -{ - int mode = 0, rate, sizeChanged = GL_FALSE; - - rate = _glfwWin.refreshRate; - - if( _glfwWin.fullscreen ) - { - // Get the closest matching video mode for the specified window size - mode = _glfwGetClosestVideoMode( _glfwWin.screen, &width, &height, &rate ); - } - - if( _glfwWin.windowNoResize ) - { - // Update window size restrictions to match new window size - - XSizeHints *hints = XAllocSizeHints(); - - hints->flags |= (PMinSize | PMaxSize); - hints->min_width = hints->max_width = width; - hints->min_height = hints->max_height = height; - - XSetWMNormalHints( _glfwLibrary.display, _glfwWin.window, hints ); - XFree( hints ); - } - - // Change window size before changing fullscreen mode? - if( _glfwWin.fullscreen && (width > _glfwWin.width) ) - { - XResizeWindow( _glfwLibrary.display, _glfwWin.window, width, height ); - sizeChanged = GL_TRUE; - } - - if( _glfwWin.fullscreen ) - { - // Change video mode, keeping current refresh rate - _glfwSetVideoModeMODE( _glfwWin.screen, mode, _glfwWin.refreshRate ); - } - - // Set window size (if not already changed) - if( !sizeChanged ) - { - XResizeWindow( _glfwLibrary.display, _glfwWin.window, width, height ); - } -} - - -//======================================================================== -// Set the window position. -//======================================================================== - -void _glfwPlatformSetWindowPos( int x, int y ) -{ - XMoveWindow( _glfwLibrary.display, _glfwWin.window, x, y ); -} - - -//======================================================================== -// Window iconification -//======================================================================== - -void _glfwPlatformIconifyWindow( void ) -{ - if( _glfwWin.overrideRedirect ) - { - // We can't iconify/restore override-redirect windows, as that's - // performed by the window manager - return; - } - - XIconifyWindow( _glfwLibrary.display, _glfwWin.window, _glfwWin.screen ); -} - - -//======================================================================== -// Window un-iconification -//======================================================================== - -void _glfwPlatformRestoreWindow( void ) -{ - if( _glfwWin.overrideRedirect ) - { - // We can't iconify/restore override-redirect windows, as that's - // performed by the window manager - return; - } - - XMapWindow( _glfwLibrary.display, _glfwWin.window ); -} - - -//======================================================================== -// Swap OpenGL buffers and poll any new events -//======================================================================== - -void _glfwPlatformSwapBuffers( void ) -{ - // Update display-buffer - glXSwapBuffers( _glfwLibrary.display, _glfwWin.window ); -} - - -//======================================================================== -// Set double buffering swap interval -//======================================================================== - -void _glfwPlatformSwapInterval( int interval ) -{ - if( _glfwWin.has_GLX_EXT_swap_control ) - { - _glfwWin.SwapIntervalEXT( _glfwLibrary.display, - _glfwWin.window, - interval ); - } - else if( _glfwWin.has_GLX_MESA_swap_control ) - { - _glfwWin.SwapIntervalMESA( interval ); - } - else if( _glfwWin.has_GLX_SGI_swap_control ) - { - if( interval > 0 ) - { - _glfwWin.SwapIntervalSGI( interval ); - } - } -} - - -//======================================================================== -// Read back framebuffer parameters from the context -//======================================================================== - -void _glfwPlatformRefreshWindowParams( void ) -{ - int dummy; - GLXFBConfig *fbconfig; -#if defined( _GLFW_HAS_XRANDR ) - XRRScreenConfiguration *sc; -#elif defined( _GLFW_HAS_XF86VIDMODE ) - XF86VidModeModeLine modeline; - int dotclock; - float pixels_per_second, pixels_per_frame; -#endif - int attribs[] = { GLX_FBCONFIG_ID, _glfwWin.fbconfigID, None }; - - if( _glfwWin.has_GLX_SGIX_fbconfig ) - { - fbconfig = _glfwWin.ChooseFBConfigSGIX( _glfwLibrary.display, - _glfwWin.screen, - attribs, - &dummy ); - } - else - { - fbconfig = glXChooseFBConfig( _glfwLibrary.display, - _glfwWin.screen, - attribs, - &dummy ); - } - - if( fbconfig == NULL ) - { - // This should never ever happen - // TODO: Figure out what to do when this happens - fprintf( stderr, "Cannot find known GLXFBConfig by ID. " - "This cannot happen. Have a nice day.\n"); - abort(); - } - - // There is no clear definition of an "accelerated" context on X11/GLX, and - // true sounds better than false, so we hardcode true here - _glfwWin.accelerated = GL_TRUE; - - _glfwWin.redBits = getFBConfigAttrib( *fbconfig, GLX_RED_SIZE ); - _glfwWin.greenBits = getFBConfigAttrib( *fbconfig, GLX_GREEN_SIZE ); - _glfwWin.blueBits = getFBConfigAttrib( *fbconfig, GLX_BLUE_SIZE ); - - _glfwWin.alphaBits = getFBConfigAttrib( *fbconfig, GLX_ALPHA_SIZE ); - _glfwWin.depthBits = getFBConfigAttrib( *fbconfig, GLX_DEPTH_SIZE ); - _glfwWin.stencilBits = getFBConfigAttrib( *fbconfig, GLX_STENCIL_SIZE ); - - _glfwWin.accumRedBits = getFBConfigAttrib( *fbconfig, GLX_ACCUM_RED_SIZE ); - _glfwWin.accumGreenBits = getFBConfigAttrib( *fbconfig, GLX_ACCUM_GREEN_SIZE ); - _glfwWin.accumBlueBits = getFBConfigAttrib( *fbconfig, GLX_ACCUM_BLUE_SIZE ); - _glfwWin.accumAlphaBits = getFBConfigAttrib( *fbconfig, GLX_ACCUM_ALPHA_SIZE ); - - _glfwWin.auxBuffers = getFBConfigAttrib( *fbconfig, GLX_AUX_BUFFERS ); - _glfwWin.stereo = getFBConfigAttrib( *fbconfig, GLX_STEREO ) ? 1 : 0; - - // Get FSAA buffer sample count - if( _glfwWin.has_GLX_ARB_multisample ) - { - _glfwWin.samples = getFBConfigAttrib( *fbconfig, GLX_SAMPLES ); - } - else - { - _glfwWin.samples = 0; - } - - // Default to refresh rate unknown (=0 according to GLFW spec) - _glfwWin.refreshRate = 0; - - // Retrieve refresh rate if possible -#if defined( _GLFW_HAS_XRANDR ) - if( _glfwLibrary.XRandR.available ) - { - sc = XRRGetScreenInfo( _glfwLibrary.display, _glfwWin.root ); - _glfwWin.refreshRate = XRRConfigCurrentRate( sc ); - XRRFreeScreenConfigInfo( sc ); - } -#elif defined( _GLFW_HAS_XF86VIDMODE ) - if( _glfwLibrary.XF86VidMode.available ) - { - // Use the XF86VidMode extension to get current video mode - XF86VidModeGetModeLine( _glfwLibrary.display, _glfwWin.screen, - &dotclock, &modeline ); - pixels_per_second = 1000.0f * (float) dotclock; - pixels_per_frame = (float) modeline.htotal * modeline.vtotal; - _glfwWin.refreshRate = (int)(pixels_per_second/pixels_per_frame+0.5); - } -#endif - - XFree( fbconfig ); -} - - -//======================================================================== -// Poll for new window and input events -//======================================================================== - -void _glfwPlatformPollEvents( void ) -{ - GLboolean closeRequested = GL_FALSE; - - // Flag that the cursor has not moved - _glfwInput.MouseMoved = GL_FALSE; - - // Process all pending events - while( XPending( _glfwLibrary.display ) ) - { - if( processSingleEvent() ) - { - closeRequested = GL_TRUE; - } - } - - // Did we get mouse movement in fully enabled hidden cursor mode? - if( _glfwInput.MouseMoved && _glfwWin.pointerHidden ) - { - _glfwPlatformSetMouseCursorPos( _glfwWin.width/2, - _glfwWin.height/2 ); - - // NOTE: This is a temporary fix. It works as long as you use offsets - // accumulated over the course of a frame, instead of performing - // the necessary actions per callback call. - XFlush( _glfwLibrary.display ); - } - - if( closeRequested && _glfwWin.windowCloseCallback ) - { - closeRequested = _glfwWin.windowCloseCallback(); - } - if( closeRequested ) - { - glfwCloseWindow(); - } -} - - -//======================================================================== -// Wait for new window and input events -//======================================================================== - -void _glfwPlatformWaitEvents( void ) -{ - XEvent event; - - // Block waiting for an event to arrive - XNextEvent( _glfwLibrary.display, &event ); - XPutBackEvent( _glfwLibrary.display, &event ); - - _glfwPlatformPollEvents(); -} - - -//======================================================================== -// Hide mouse cursor (lock it) -//======================================================================== - -void _glfwPlatformHideMouseCursor( void ) -{ - // Hide cursor - if( !_glfwWin.pointerHidden ) - { - XDefineCursor( _glfwLibrary.display, _glfwWin.window, _glfwWin.cursor ); - _glfwWin.pointerHidden = GL_TRUE; - } - - // Grab cursor to user window - if( !_glfwWin.pointerGrabbed ) - { - if( XGrabPointer( _glfwLibrary.display, _glfwWin.window, True, - ButtonPressMask | ButtonReleaseMask | - PointerMotionMask, GrabModeAsync, GrabModeAsync, - _glfwWin.window, None, CurrentTime ) == - GrabSuccess ) - { - _glfwWin.pointerGrabbed = GL_TRUE; - } - } - - // Move cursor to the middle of the window - _glfwPlatformSetMouseCursorPos( _glfwWin.width / 2, _glfwWin.height / 2 ); -} - - -//======================================================================== -// Show mouse cursor (unlock it) -//======================================================================== - -void _glfwPlatformShowMouseCursor( void ) -{ - // Un-grab cursor (only in windowed mode: in fullscreen mode we still - // want the mouse grabbed in order to confine the cursor to the window - // area) - if( _glfwWin.pointerGrabbed ) - { - XUngrabPointer( _glfwLibrary.display, CurrentTime ); - _glfwWin.pointerGrabbed = GL_FALSE; - } - - // Show cursor - if( _glfwWin.pointerHidden ) - { - XUndefineCursor( _glfwLibrary.display, _glfwWin.window ); - _glfwWin.pointerHidden = GL_FALSE; - } -} - - -//======================================================================== -// Set physical mouse cursor position -//======================================================================== - -void _glfwPlatformSetMouseCursorPos( int x, int y ) -{ - // Store the new position so we can recognise it later - _glfwInput.CursorPosX = x; - _glfwInput.CursorPosY = y; - - XWarpPointer( _glfwLibrary.display, None, _glfwWin.window, 0,0,0,0, x, y ); -} - diff --git a/ogl_editor/src/External/mxml/ANNOUNCEMENT b/ogl_editor/src/External/mxml/ANNOUNCEMENT deleted file mode 100644 index 64cfd0d..0000000 --- a/ogl_editor/src/External/mxml/ANNOUNCEMENT +++ /dev/null @@ -1,14 +0,0 @@ -Mini-XML 2.7 is now available for download from: - - http://www.minixml.org/software.php - -Mini-XML 2.7 fixes some minor platform and XML issues. Changes include: - -- Updated the source headers to reference the Mini-XML license and its - exceptions to the LGPL2 (STR #108) -- The shared library did not include a destructor for the thread- - specific data key on UNIX-based operating systems (STR #103) -- mxmlLoad* did not error out on XML with multiple root nodes (STR #101) -- Fixed an issue with the _mxml_vstrdupf function (STR #107) -- mxmlSave* no longer write all siblings of the passed node, just that - node and its children (STR #109) diff --git a/ogl_editor/src/External/mxml/CHANGES b/ogl_editor/src/External/mxml/CHANGES deleted file mode 100644 index 8268819..0000000 --- a/ogl_editor/src/External/mxml/CHANGES +++ /dev/null @@ -1,345 +0,0 @@ -CHANGES - 2011-12-20 --------------------- - -CHANGES IN Mini-XML 2.7 - - - Added 64-bit configurations to the VC++ project files (STR #129) - - Fixed conformance of mxmldoc's HTML and CSS output. - - Added data accessor ("get") functions and made the mxml_node_t and - mxml_index_t structures private but still available in the Mini-XML - header to preserve source compatibility (STR #118) - - Updated the source headers to reference the Mini-XML license and its - exceptions to the LGPL2 (STR #108) - - Fixed a memory leak when loading a badly-formed XML file (STR #121) - - Added a new mxmlFindPath() function to find the value node of a - named element (STR #110) - - Building a static version of the library did not work on Windows - (STR #112) - - The shared library did not include a destructor for the thread- - specific data key on UNIX-based operating systems (STR #103) - - mxmlLoad* did not error out on XML with multiple root nodes (STR #101) - - Fixed an issue with the _mxml_vstrdupf function (STR #107) - - mxmlSave* no longer write all siblings of the passed node, just that - node and its children (STR #109) - - -CHANGES IN Mini-XML 2.6 - - - Documentation fixes (STR #91, STR #92) - - The mxmldoc program did not handle typedef comments properly (STR #72) - - Added support for "long long" printf formats. - - The XML parser now ignores BOMs in UTF-8 XML files (STR #89) - - The mxmldoc program now supports generating Xcode documentation sets. - - mxmlSave*() did not output UTF-8 correctly on some platforms. - - mxmlNewXML() now adds encoding="utf-8" in the ?xml directive to avoid - problems with non-conformant XML parsers that assume something other - than UTF-8 as the default encoding. - - Wrapping was not disabled when mxmlSetWrapMargin(0) was called, and - "" was always followed by a newline (STR #76) - - The mxml.pc.in file was broken (STR #79) - - The mxmldoc program now handles "typedef enum name {} name" correctly - (STR #72) - - -CHANGES IN Mini-XML 2.5 - - - The mxmldoc program now makes greater use of CSS and - supports a --css option to embed an alternate stylesheet. - - The mxmldoc program now supports --header and --footer - options to insert documentation content before and - after the generated content. - - The mxmldoc program now supports a --framed option to - generate framed HTML output. - - The mxmldoc program now creates a table of contents - including any headings in the --intro file when - generating HTML output. - - The man pages and man page output from mxmldoc did - not use "\-" for dashes (STR #68) - - The debug version of the Mini-XML DLL could not be - built (STR #65) - - Processing instructions and directives did not work - when not at the top level of a document (STR #67) - - Spaces around the "=" in attributes were not supported - (STR #67) - - -CHANGES IN Mini-XML 2.4 - - - Fixed shared library build problems on HP-UX and Mac OS X. - - The mxmldoc program did not output argument descriptions - for functions properly. - - All global settings (custom, error, and entity callbacks - and the wrap margin) are now managed separately for each - thread. - - Added mxmlElementDeleteAttr() function (STR #59) - - mxmlElementSetAttrf() did not work (STR #57) - - mxmlLoad*() incorrectly treated declarations as parent - elements (STR #56) - - mxmlLoad*() incorrectly allowed attributes without values - (STR #47) - - Fixed Visual C++ build problems (STR #49) - - mxmlLoad*() did not return NULL when an element contained - an error (STR #46) - - Added support for the apos character entity (STR #54) - - Fixed whitespace detection with Unicode characters (STR - #48) - - mxmlWalkNext() and mxmlWalkPrev() did not work correctly - when called with a node with no children as the top node - (STR #53) - - -CHANGES IN Mini-XML 2.3 - - - Added two exceptions to the LGPL to support static - linking of applications against Mini-XML - - The mxmldoc utility can now generate man pages, too. - - Added a mxmlNewXML() function - - Added a mxmlElementSetAttrf() function (STR #43) - - Added snprintf() emulation function for test program (STR - #32) - - Added the _CRT_SECURE_NO_DEPRECATE definition when - building on VC++ 2005 (STR #36) - - mxmlLoad*() did not detect missing > characters in - elements (STR #41) - - mxmlLoad*() did not detect missing close tags at the end - of an XML document (STR #45) - - Added user_data and ref_count members to mxml_node_t - structure - - Added mxmlReleaseNode() and mxmlRetainNode() APIs for - reference-counted nodes - - Added mxmlSetWrapMargin() to control the wrapping of XML - output - - Added conditional check for EINTR error code for - certain Windows compilers that do not define it (STR - #33) - - The mxmldoc program now generates correct HTML 4.0 - output - previously it generated invalid XHTML - - The mxmldoc program now supports "@deprecated@, - "@private@", and "@since version@" comments - - Fixed function and enumeration type bugs in mxmldoc. - - Fixed the XML schema for mxmldoc - - The mxmldoc program now supports --intro, --section, - and --title options - - The mxmlLoad*() functions could leak a node on an error - (STR #27) - - The mxml_vsnprintf() function could get in an infinite - loop on a buffer overflow (STR #25) - - Added new mxmlNewCDATA() and mxmlSetCDATA() functions - to create and set CDATA nodes, which are really just - special element nodes - - Added new MXML_IGNORE type and MXML_IGNORE_CB callback - to ignore non-element nodes, e.g. whitespace - - mxmlLoad*() crashed when reporting an error in some - invalid XML (STR #23) - - -CHANGES IN Mini-XML 2.2.2 - - - mxmlLoad*() did not treat custom data as opaque, so - whitespace characters would be lost. - - -CHANGES IN Mini-XML 2.2.1 - - - mxmlLoadFd(), mxmlLoadFile(), and mxmlLoadString() now - correctly return NULL on error (STR #21) - - mxmlNewInteger(), mxmlNewOpaque(), mxmlNewReal(), - mxmlNewText(), and mxmlNewTextf() incorrectly required - a parent node (STR #22) - - Fixed an XML output bug in mxmldoc. - - The "make install" target now uses the install command - to set the proper permissions on UNIX/Linux/OSX. - - Fixed a MingW/Cygwin compilation problem (STR #18) - - -CHANGES IN Mini-XML 2.2 - - - Added shared library support (STR #17) - - mxmlLoad*() now returns an error when an XML stream - contains illegal control characters (STR #10) - - mxmlLoad*() now returns an error when an element - contains two attributes with the same name in - conformance with the XML spec (STR #16) - - Added support for CDATA (STR #14, STR #15) - - Updated comment and processing instruction handling - - no entity support per XML specification. - - Added checking for invalid comment termination ("--->" - is not allowed) - - -CHANGES IN Mini-XML 2.1 - - - Added support for custom data nodes (STR #6) - - Now treat UTF-8 sequences which are longer than - necessary as an error (STR #4) - - Fixed entity number support (STR #8) - - Fixed mxmlLoadString() bug with UTF-8 (STR #7) - - Fixed entity lookup bug (STR #5) - - Added mxmlLoadFd() and mxmlSaveFd() functions. - - Fixed multi-word UTF-16 handling. - - -CHANGES IN Mini-XML 2.0 - - - New programmers manual. - - Added Visual C++ project files for Microsoft Windows - users. - - Added optimizations to mxmldoc, mxmlSaveFile(), and - mxmlIndexNew() (STR #2) - - mxmlEntityAddCallback() now returns an integer status - (STR #2) - - Added UTF-16 support (input only; all output is UTF-8) - - Added index functions to build a searchable index of - XML nodes. - - Added character entity callback interface to support - additional character entities beyond those defined in - the XHTML specification. - - Added support for XHTML character entities. - - The mxmldoc utility now produces XML output which - conforms to an updated XML schema, described in the file - "doc/mxmldoc.xsd". - - Changed the whitespace callback interface to return - strings instead of a single character, allowing for - greater control over the formatting of XML files - written using Mini-XML. THIS CHANGE WILL REQUIRE - CHANGES TO YOUR 1.x CODE IF YOU USE WHITESPACE - CALLBACKS. - - The mxmldoc utility is now capable of documenting C++ - classes, functions, and structures, and correctly - handles C++ comments. - - Added new modular tests for mxmldoc. - - Updated the mxmldoc output to be more compatible with - embedding in manuals produced with HTMLDOC. - - The makefile incorrectly included a "/" separator - between the destination path and install path. This - caused problems when building and installing with - MingW. - - -CHANGES IN Mini-XML 1.3 - - - Fixes for mxmldoc. - - Added support for reading standard HTML entity names. - - mxmlLoadString/File() did not decode character - entities in element names, attribute names, or - attribute values. - - mxmlLoadString/File() would crash when loading non- - conformant XML data under an existing parent (top) - node. - - Fixed several bugs in the mxmldoc utility. - - Added new error callback function to catch a variety - of errors and log them to someplace other than stderr. - - The mxmlElementSetAttr() function now allows for NULL - attribute values. - - The load and save functions now properly handle quoted - element and attribute name strings properly, e.g. for - !DOCTYPE declarations. - - -CHANGES IN Mini-XML 1.2 - - - Added new "set" methods to set the value of a node. - - Added new formatted text methods mxmlNewTextf() and - mxmlSetTextf() to create/set a text node value using - printf-style formats. - - Added new standard callbacks for use with the mxmlLoad - functions. - - Updated the HTML documentation to include examples of - the walk and load function output. - - Added --with/without-ansi configure option to control - the strdup() function check. - - Added --with/without-snprintf configure option to - control the snprintf() and vsnprintf() function - checks. - - -CHANGES IN Mini-XML 1.1.2 - - - The mxml(3) man page wasn't updated for the string - functions. - - mxmlSaveString() returned the wrong number of - characters. - - mxml_add_char() updated the buffer pointer in the - wrong place. - - -CHANGES IN Mini-XML 1.1.1 - - - The private mxml_add_ch() function did not update the - start-of-buffer pointer which could cause a crash when - using mxmlSaveString(). - - The private mxml_write_ws() function called putc() - instead of using the proper callback which could cause - a crash when using mxmlSaveString(). - - Added a mxmlSaveAllocString() convenience function for - saving an XML node tree to an allocated string. - - -CHANGES IN Mini-XML 1.1 - - - The mxmlLoadFile() function now uses dynamically - allocated string buffers for element names, attribute - names, and attribute values. Previously they were - capped at 16383, 255, and 255 bytes, respectively. - - Added a new mxmlLoadString() function for loading an - XML node tree from a string. - - Added a new mxmlSaveString() function for saving an - XML node tree to a string. - - Add emulation of strdup() if the local platform does - not provide the function. - - -CHANGES IN Mini-XML 1.0 - - - The mxmldoc program now handles function arguments, - structures, unions, enumerations, classes, and - typedefs properly. - - Documentation provided via mxmldoc and more in-line - comments in the code. - - Added man pages and packaging files. - - -CHANGES IN Mini-XML 0.93 - - - New mxmldoc example program that is also used to - create and update code documentation using XML and - produce HTML reference pages. - - Added mxmlAdd() and mxmlRemove() functions to add and - remove nodes from a tree. This provides more - flexibility over where the nodes are inserted and - allows nodes to be moved within the tree as needed. - - mxmlLoadFile() now correctly handles comments. - - mxmlLoadFile() now supports the required "gt", "quot", - and "nbsp" character entities. - - mxmlSaveFile() now uses newlines as whitespace - when valid to do so. - - mxmlFindElement() now also takes attribute name and - attribute value string arguments to limit the search - to specific elements with attributes and/or values. - NULL pointers can be used as "wildcards". - - Added uninstall target to makefile, and auto-reconfig - if Makefile.in or configure.in are changed. - - mxmlFindElement(), mxmlWalkNext(), and mxmlWalkPrev() - now all provide "descend" arguments to control whether - they descend into child nodes in the tree. - - Fixed some whitespace issues in mxmlLoadFile(). - - Fixed Unicode output and whitespace issues in - mxmlSaveFile(). - - mxmlSaveFile() now supports a whitespace callback to - provide more human-readable XML output under program - control. - - -CHANGES IN Mini-XML 0.92 - - - mxmlSaveFile() didn't return a value on success. - - -CHANGES IN Mini-XML 0.91 - - - mxmlWalkNext() would go into an infinite loop. - - -CHANGES IN Mini-XML 0.9 - - - Initial public release. diff --git a/ogl_editor/src/External/mxml/COPYING b/ogl_editor/src/External/mxml/COPYING deleted file mode 100644 index 4d0aa78..0000000 --- a/ogl_editor/src/External/mxml/COPYING +++ /dev/null @@ -1,507 +0,0 @@ - Mini-XML License - September 18, 2010 - - -The Mini-XML library and included programs are provided under the -terms of the GNU Library General Public License version 2 (LGPL2) -with the following exceptions: - - 1. Static linking of applications to the Mini-XML library -does not constitute a derivative work and does not require -the author to provide source code for the application, use -the shared Mini-XML libraries, or link their applications -against a user-supplied version of Mini-XML. - -If you link the application to a modified version of -Mini-XML, then the changes to Mini-XML must be provided -under the terms of the LGPL2 in sections 1, 2, and 4. - - 2. You do not have to provide a copy of the Mini-XML license -with programs that are linked to the Mini-XML library, nor -do you have to identify the Mini-XML license in your -program or documentation as required by section 6 of the -LGPL2. - - - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - [This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if -you distribute copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - d) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the source code distributed need not include anything that is normally -distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Library General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/ogl_editor/src/External/mxml/README b/ogl_editor/src/External/mxml/README deleted file mode 100644 index 506554d..0000000 --- a/ogl_editor/src/External/mxml/README +++ /dev/null @@ -1,196 +0,0 @@ -README - 2011-12-20 -------------------- - - -INTRODUCTION - - This README file describes the Mini-XML library version 2.7. - - Mini-XML is a small XML parsing library that you can use to read XML and - XML-like data files in your application without requiring large non-standard - libraries. Mini-XML only requires an ANSI C compatible compiler (GCC works, - as do most vendors' ANSI C compilers) and a "make" program. - - Mini-XML provides the following functionality: - - - Reading of UTF-8 and UTF-16 and writing of UTF-8 encoded XML files and - strings. - - Data is stored in a linked-list tree structure, preserving the XML - data hierarchy. - - Supports arbitrary element names, attributes, and attribute values - with no preset limits, just available memory. - - Supports integer, real, opaque ("cdata"), and text data types in - "leaf" nodes. - - Functions for creating and managing trees of data. - - "Find" and "walk" functions for easily locating and navigating trees - of data. - - Mini-XML doesn't do validation or other types of processing on the data - based upon schema files or other sources of definition information. - - -BUILDING Mini-XML - - Mini-XML comes with an autoconf-based configure script; just type the - following command to get things going: - - ./configure - - The default install prefix is /usr/local, which can be overridden using the - --prefix option: - - ./configure --prefix=/foo - - Other configure options can be found using the --help option: - - ./configure --help - - Once you have configured the software, type "make" to do the build and run - the test program to verify that things are working, as follows: - - make - - If you are using Mini-XML under Microsoft Windows with Visual C++ 2008, use - the included project files in the "vcnet" subdirectory to build the library - instead. - - -INSTALLING Mini-XML - - The "install" target will install Mini-XML in the lib and include - directories: - - make install - - Once you have installed it, use the "-lmxml" option to link your application - against it. - - -DOCUMENTATION - - The documentation is available in the "doc" subdirectory in the files - "mxml.html" (HTML) and "mxml.pdf" (PDF). You can also look at the - "testmxml.c" and "mxmldoc.c" source files for examples of using Mini-XML. - - Mini-XML provides a single header file which you include: - - #include - - Nodes are defined by the "mxml_node_t" structure; the "type" member defines - the node type (element, integer, opaque, real, or text) which determines - which value you want to look at in the "value" union. New nodes can be - created using the "mxmlNewElement()", "mxmlNewInteger()", "mxmlNewOpaque()", - "mxmlNewReal()", and "mxmlNewText()" functions. Only elements can have - child nodes, and the top node must be an element, usually "?xml". - - You load an XML file using the "mxmlLoadFile()" function: - - FILE *fp; - mxml_node_t *tree; - - fp = fopen("filename.xml", "r"); - tree = mxmlLoadFile(NULL, fp, MXML_NO_CALLBACK); - fclose(fp); - - Similarly, you save an XML file using the "mxmlSaveFile()" function: - - FILE *fp; - mxml_node_t *tree; - - fp = fopen("filename.xml", "w"); - mxmlSaveFile(tree, fp, MXML_NO_CALLBACK); - fclose(fp); - - The "mxmlLoadString()", "mxmlSaveAllocString()", and "mxmlSaveString()" - functions load XML node trees from and save XML node trees to strings: - - char buffer[8192]; - char *ptr; - mxml_node_t *tree; - - ... - tree = mxmlLoadString(NULL, buffer, MXML_NO_CALLBACK); - - ... - mxmlSaveString(tree, buffer, sizeof(buffer), MXML_NO_CALLBACK); - - ... - ptr = mxmlSaveAllocString(tree, MXML_NO_CALLBACK); - - You can find a named element/node using the "mxmlFindElement()" function: - - mxml_node_t *node = mxmlFindElement(tree, tree, "name", "attr", - "value", MXML_DESCEND); - - The "name", "attr", and "value" arguments can be passed as NULL to act as - wildcards, e.g.: - - /* Find the first "a" element */ - node = mxmlFindElement(tree, tree, "a", NULL, NULL, MXML_DESCEND); - - /* Find the first "a" element with "href" attribute */ - node = mxmlFindElement(tree, tree, "a", "href", NULL, MXML_DESCEND); - - /* Find the first "a" element with "href" to a URL */ - node = mxmlFindElement(tree, tree, "a", "href", - "http://www.minixml.org/", - MXML_DESCEND); - - /* Find the first element with a "src" attribute*/ - node = mxmlFindElement(tree, tree, NULL, "src", NULL, MXML_DESCEND); - - /* Find the first element with a "src" = "foo.jpg" */ - node = mxmlFindElement(tree, tree, NULL, "src", "foo.jpg", - MXML_DESCEND); - - You can also iterate with the same function: - - mxml_node_t *node; - - for (node = mxmlFindElement(tree, tree, "name", NULL, NULL, - MXML_DESCEND); - node != NULL; - node = mxmlFindElement(node, tree, "name", NULL, NULL, - MXML_DESCEND)) - { - ... do something ... - } - - The "mxmlFindPath()" function finds the (first) value node under a specific - element using a "path": - - mxml_node_t *value = mxmlFindPath(tree, "path/to/*/foo/bar"); - - The "mxmlGetInteger()", "mxmlGetOpaque()", "mxmlGetReal()", and - "mxmlGetText()" functions retrieve the value from a node: - - mxml_node_t *node; - - int intvalue = mxmlGetInteger(node); - - const char *opaquevalue = mxmlGetOpaque(node); - - double realvalue = mxmlGetReal(node); - - int whitespacevalue; - const char *textvalue = mxmlGetText(node, &whitespacevalue); - - Finally, once you are done with the XML data, use the "mxmlDelete()" - function to recursively free the memory that is used for a particular node - or the entire tree: - - mxmlDelete(tree); - - -GETTING HELP AND REPORTING PROBLEMS - - The Mini-XML web site provides access to a discussion forum and bug - reporting page: - - http://www.minixml.org/ - - -LEGAL STUFF - - The Mini-XML library is Copyright 2003-2011 by Michael Sweet. License terms - are described in the file "COPYING". diff --git a/ogl_editor/src/External/mxml/config.h b/ogl_editor/src/External/mxml/config.h deleted file mode 100644 index 9c3df99..0000000 --- a/ogl_editor/src/External/mxml/config.h +++ /dev/null @@ -1,98 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* - * "$Id: config.h.in 408 2010-09-19 05:26:46Z mike $" - * - * Configuration file for Mini-XML, a small XML-like file parsing library. - * - * Copyright 2003-2010 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - */ - -/* - * Include necessary headers... - */ - -#include -#include -#include -#include -#include - - -/* - * Version number... - */ - -#define MXML_VERSION "Mini-XML v2.7" - - -/* - * Inline function support... - */ - -#define inline - - -/* - * Long long support... - */ - -#define HAVE_LONG_LONG 1 - - -/* - * Do we have the snprintf() and vsnprintf() functions? - */ - -#define HAVE_SNPRINTF 1 -#define HAVE_VSNPRINTF 1 - - -/* - * Do we have the strXXX() functions? - */ - -#define HAVE_STRDUP 1 - - -/* - * Do we have threading support? - */ - -#if defined(__APPLE__) -#define HAVE_PTHREAD_H 1 -#endif - - -/* - * Define prototypes for string functions as needed... - */ - -# ifndef HAVE_STRDUP -extern char *_mxml_strdup(const char *); -# define strdup _mxml_strdup -# endif /* !HAVE_STRDUP */ - -extern char *_mxml_strdupf(const char *, ...); -extern char *_mxml_vstrdupf(const char *, va_list); - -# ifndef HAVE_SNPRINTF -extern int _mxml_snprintf(char *, size_t, const char *, ...); -# define snprintf _mxml_snprintf -# endif /* !HAVE_SNPRINTF */ - -# ifndef HAVE_VSNPRINTF -extern int _mxml_vsnprintf(char *, size_t, const char *, va_list); -# define vsnprintf _mxml_vsnprintf -# endif /* !HAVE_VSNPRINTF */ - -/* - * End of "$Id: config.h.in 408 2010-09-19 05:26:46Z mike $". - */ diff --git a/ogl_editor/src/External/mxml/mxml-attr.c b/ogl_editor/src/External/mxml/mxml-attr.c deleted file mode 100644 index c9950f5..0000000 --- a/ogl_editor/src/External/mxml/mxml-attr.c +++ /dev/null @@ -1,319 +0,0 @@ -/* - * "$Id: mxml-attr.c 408 2010-09-19 05:26:46Z mike $" - * - * Attribute support code for Mini-XML, a small XML-like file parsing library. - * - * Copyright 2003-2010 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - * - * Contents: - * - * mxmlElementDeleteAttr() - Delete an attribute. - * mxmlElementGetAttr() - Get an attribute. - * mxmlElementSetAttr() - Set an attribute. - * mxmlElementSetAttrf() - Set an attribute with a formatted value. - * mxml_set_attr() - Set or add an attribute name/value pair. - */ - -/* - * Include necessary headers... - */ - -#include "config.h" -#include "mxml.h" - - -/* - * Local functions... - */ - -static int mxml_set_attr(mxml_node_t *node, const char *name, - char *value); - - -/* - * 'mxmlElementDeleteAttr()' - Delete an attribute. - * - * @since Mini-XML 2.4@ - */ - -void -mxmlElementDeleteAttr(mxml_node_t *node,/* I - Element */ - const char *name)/* I - Attribute name */ -{ - int i; /* Looping var */ - mxml_attr_t *attr; /* Cirrent attribute */ - - -#ifdef DEBUG - fprintf(stderr, "mxmlElementDeleteAttr(node=%p, name=\"%s\")\n", - node, name ? name : "(null)"); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!node || node->type != MXML_ELEMENT || !name) - return; - - /* - * Look for the attribute... - */ - - for (i = node->value.element.num_attrs, attr = node->value.element.attrs; - i > 0; - i --, attr ++) - { -#ifdef DEBUG - printf(" %s=\"%s\"\n", attr->name, attr->value); -#endif /* DEBUG */ - - if (!strcmp(attr->name, name)) - { - /* - * Delete this attribute... - */ - - free(attr->name); - free(attr->value); - - i --; - if (i > 0) - memmove(attr, attr + 1, i * sizeof(mxml_attr_t)); - - node->value.element.num_attrs --; - return; - } - } -} - - -/* - * 'mxmlElementGetAttr()' - Get an attribute. - * - * This function returns NULL if the node is not an element or the - * named attribute does not exist. - */ - -const char * /* O - Attribute value or NULL */ -mxmlElementGetAttr(mxml_node_t *node, /* I - Element node */ - const char *name) /* I - Name of attribute */ -{ - int i; /* Looping var */ - mxml_attr_t *attr; /* Cirrent attribute */ - - -#ifdef DEBUG - fprintf(stderr, "mxmlElementGetAttr(node=%p, name=\"%s\")\n", - node, name ? name : "(null)"); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!node || node->type != MXML_ELEMENT || !name) - return (NULL); - - /* - * Look for the attribute... - */ - - for (i = node->value.element.num_attrs, attr = node->value.element.attrs; - i > 0; - i --, attr ++) - { -#ifdef DEBUG - printf(" %s=\"%s\"\n", attr->name, attr->value); -#endif /* DEBUG */ - - if (!strcmp(attr->name, name)) - { -#ifdef DEBUG - printf(" Returning \"%s\"!\n", attr->value); -#endif /* DEBUG */ - return (attr->value); - } - } - - /* - * Didn't find attribute, so return NULL... - */ - -#ifdef DEBUG - puts(" Returning NULL!\n"); -#endif /* DEBUG */ - - return (NULL); -} - - -/* - * 'mxmlElementSetAttr()' - Set an attribute. - * - * If the named attribute already exists, the value of the attribute - * is replaced by the new string value. The string value is copied - * into the element node. This function does nothing if the node is - * not an element. - */ - -void -mxmlElementSetAttr(mxml_node_t *node, /* I - Element node */ - const char *name, /* I - Name of attribute */ - const char *value) /* I - Attribute value */ -{ - char *valuec; /* Copy of value */ - - -#ifdef DEBUG - fprintf(stderr, "mxmlElementSetAttr(node=%p, name=\"%s\", value=\"%s\")\n", - node, name ? name : "(null)", value ? value : "(null)"); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!node || node->type != MXML_ELEMENT || !name) - return; - - if (value) - valuec = strdup(value); - else - valuec = NULL; - - if (mxml_set_attr(node, name, valuec)) - free(valuec); -} - - -/* - * 'mxmlElementSetAttrf()' - Set an attribute with a formatted value. - * - * If the named attribute already exists, the value of the attribute - * is replaced by the new formatted string. The formatted string value is - * copied into the element node. This function does nothing if the node - * is not an element. - * - * @since Mini-XML 2.3@ - */ - -void -mxmlElementSetAttrf(mxml_node_t *node, /* I - Element node */ - const char *name, /* I - Name of attribute */ - const char *format,/* I - Printf-style attribute value */ - ...) /* I - Additional arguments as needed */ -{ - va_list ap; /* Argument pointer */ - char *value; /* Value */ - - -#ifdef DEBUG - fprintf(stderr, - "mxmlElementSetAttrf(node=%p, name=\"%s\", format=\"%s\", ...)\n", - node, name ? name : "(null)", format ? format : "(null)"); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!node || node->type != MXML_ELEMENT || !name || !format) - return; - - /* - * Format the value... - */ - - va_start(ap, format); - value = _mxml_vstrdupf(format, ap); - va_end(ap); - - if (!value) - mxml_error("Unable to allocate memory for attribute '%s' in element %s!", - name, node->value.element.name); - else if (mxml_set_attr(node, name, value)) - free(value); -} - - -/* - * 'mxml_set_attr()' - Set or add an attribute name/value pair. - */ - -static int /* O - 0 on success, -1 on failure */ -mxml_set_attr(mxml_node_t *node, /* I - Element node */ - const char *name, /* I - Attribute name */ - char *value) /* I - Attribute value */ -{ - int i; /* Looping var */ - mxml_attr_t *attr; /* New attribute */ - - - /* - * Look for the attribute... - */ - - for (i = node->value.element.num_attrs, attr = node->value.element.attrs; - i > 0; - i --, attr ++) - if (!strcmp(attr->name, name)) - { - /* - * Free the old value as needed... - */ - - if (attr->value) - free(attr->value); - - attr->value = value; - - return (0); - } - - /* - * Add a new attribute... - */ - - if (node->value.element.num_attrs == 0) - attr = malloc(sizeof(mxml_attr_t)); - else - attr = realloc(node->value.element.attrs, - (node->value.element.num_attrs + 1) * sizeof(mxml_attr_t)); - - if (!attr) - { - mxml_error("Unable to allocate memory for attribute '%s' in element %s!", - name, node->value.element.name); - return (-1); - } - - node->value.element.attrs = attr; - attr += node->value.element.num_attrs; - - if ((attr->name = strdup(name)) == NULL) - { - mxml_error("Unable to allocate memory for attribute '%s' in element %s!", - name, node->value.element.name); - return (-1); - } - - attr->value = value; - - node->value.element.num_attrs ++; - - return (0); -} - - -/* - * End of "$Id: mxml-attr.c 408 2010-09-19 05:26:46Z mike $". - */ diff --git a/ogl_editor/src/External/mxml/mxml-entity.c b/ogl_editor/src/External/mxml/mxml-entity.c deleted file mode 100644 index c5c9f61..0000000 --- a/ogl_editor/src/External/mxml/mxml-entity.c +++ /dev/null @@ -1,460 +0,0 @@ -/* - * "$Id: mxml-entity.c 408 2010-09-19 05:26:46Z mike $" - * - * Character entity support code for Mini-XML, a small XML-like - * file parsing library. - * - * Copyright 2003-2010 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - * - * Contents: - * - * mxmlEntityAddCallback() - Add a callback to convert entities to - * Unicode. - * mxmlEntityGetName() - Get the name that corresponds to the - * character value. - * mxmlEntityGetValue() - Get the character corresponding to a named - * entity. - * mxmlEntityRemoveCallback() - Remove a callback. - * _mxml_entity_cb() - Lookup standard (X)HTML entities. - */ - -/* - * Include necessary headers... - */ - -#include "mxml-private.h" - - -/* - * 'mxmlEntityAddCallback()' - Add a callback to convert entities to Unicode. - */ - -int /* O - 0 on success, -1 on failure */ -mxmlEntityAddCallback( - mxml_entity_cb_t cb) /* I - Callback function to add */ -{ - _mxml_global_t *global = _mxml_global(); - /* Global data */ - - - if (global->num_entity_cbs < (int)(sizeof(global->entity_cbs) / sizeof(global->entity_cbs[0]))) - { - global->entity_cbs[global->num_entity_cbs] = cb; - global->num_entity_cbs ++; - - return (0); - } - else - { - mxml_error("Unable to add entity callback!"); - - return (-1); - } -} - - -/* - * 'mxmlEntityGetName()' - Get the name that corresponds to the character value. - * - * If val does not need to be represented by a named entity, NULL is returned. - */ - -const char * /* O - Entity name or NULL */ -mxmlEntityGetName(int val) /* I - Character value */ -{ - switch (val) - { - case '&' : - return ("amp"); - - case '<' : - return ("lt"); - - case '>' : - return ("gt"); - - case '\"' : - return ("quot"); - - default : - return (NULL); - } -} - - -/* - * 'mxmlEntityGetValue()' - Get the character corresponding to a named entity. - * - * The entity name can also be a numeric constant. -1 is returned if the - * name is not known. - */ - -int /* O - Character value or -1 on error */ -mxmlEntityGetValue(const char *name) /* I - Entity name */ -{ - int i; /* Looping var */ - int ch; /* Character value */ - _mxml_global_t *global = _mxml_global(); - /* Global data */ - - - for (i = 0; i < global->num_entity_cbs; i ++) - if ((ch = (global->entity_cbs[i])(name)) >= 0) - return (ch); - - return (-1); -} - - -/* - * 'mxmlEntityRemoveCallback()' - Remove a callback. - */ - -void -mxmlEntityRemoveCallback( - mxml_entity_cb_t cb) /* I - Callback function to remove */ -{ - int i; /* Looping var */ - _mxml_global_t *global = _mxml_global(); - /* Global data */ - - - for (i = 0; i < global->num_entity_cbs; i ++) - if (cb == global->entity_cbs[i]) - { - /* - * Remove the callback... - */ - - global->num_entity_cbs --; - - if (i < global->num_entity_cbs) - memmove(global->entity_cbs + i, global->entity_cbs + i + 1, - (global->num_entity_cbs - i) * sizeof(global->entity_cbs[0])); - - return; - } -} - - -/* - * '_mxml_entity_cb()' - Lookup standard (X)HTML entities. - */ - -int /* O - Unicode value or -1 */ -_mxml_entity_cb(const char *name) /* I - Entity name */ -{ - int diff, /* Difference between names */ - current, /* Current entity in search */ - first, /* First entity in search */ - last; /* Last entity in search */ - static const struct - { - const char *name; /* Entity name */ - int val; /* Character value */ - } entities[] = - { - { "AElig", 198 }, - { "Aacute", 193 }, - { "Acirc", 194 }, - { "Agrave", 192 }, - { "Alpha", 913 }, - { "Aring", 197 }, - { "Atilde", 195 }, - { "Auml", 196 }, - { "Beta", 914 }, - { "Ccedil", 199 }, - { "Chi", 935 }, - { "Dagger", 8225 }, - { "Delta", 916 }, - { "Dstrok", 208 }, - { "ETH", 208 }, - { "Eacute", 201 }, - { "Ecirc", 202 }, - { "Egrave", 200 }, - { "Epsilon", 917 }, - { "Eta", 919 }, - { "Euml", 203 }, - { "Gamma", 915 }, - { "Iacute", 205 }, - { "Icirc", 206 }, - { "Igrave", 204 }, - { "Iota", 921 }, - { "Iuml", 207 }, - { "Kappa", 922 }, - { "Lambda", 923 }, - { "Mu", 924 }, - { "Ntilde", 209 }, - { "Nu", 925 }, - { "OElig", 338 }, - { "Oacute", 211 }, - { "Ocirc", 212 }, - { "Ograve", 210 }, - { "Omega", 937 }, - { "Omicron", 927 }, - { "Oslash", 216 }, - { "Otilde", 213 }, - { "Ouml", 214 }, - { "Phi", 934 }, - { "Pi", 928 }, - { "Prime", 8243 }, - { "Psi", 936 }, - { "Rho", 929 }, - { "Scaron", 352 }, - { "Sigma", 931 }, - { "THORN", 222 }, - { "Tau", 932 }, - { "Theta", 920 }, - { "Uacute", 218 }, - { "Ucirc", 219 }, - { "Ugrave", 217 }, - { "Upsilon", 933 }, - { "Uuml", 220 }, - { "Xi", 926 }, - { "Yacute", 221 }, - { "Yuml", 376 }, - { "Zeta", 918 }, - { "aacute", 225 }, - { "acirc", 226 }, - { "acute", 180 }, - { "aelig", 230 }, - { "agrave", 224 }, - { "alefsym", 8501 }, - { "alpha", 945 }, - { "amp", '&' }, - { "and", 8743 }, - { "ang", 8736 }, - { "apos", '\'' }, - { "aring", 229 }, - { "asymp", 8776 }, - { "atilde", 227 }, - { "auml", 228 }, - { "bdquo", 8222 }, - { "beta", 946 }, - { "brkbar", 166 }, - { "brvbar", 166 }, - { "bull", 8226 }, - { "cap", 8745 }, - { "ccedil", 231 }, - { "cedil", 184 }, - { "cent", 162 }, - { "chi", 967 }, - { "circ", 710 }, - { "clubs", 9827 }, - { "cong", 8773 }, - { "copy", 169 }, - { "crarr", 8629 }, - { "cup", 8746 }, - { "curren", 164 }, - { "dArr", 8659 }, - { "dagger", 8224 }, - { "darr", 8595 }, - { "deg", 176 }, - { "delta", 948 }, - { "diams", 9830 }, - { "die", 168 }, - { "divide", 247 }, - { "eacute", 233 }, - { "ecirc", 234 }, - { "egrave", 232 }, - { "empty", 8709 }, - { "emsp", 8195 }, - { "ensp", 8194 }, - { "epsilon", 949 }, - { "equiv", 8801 }, - { "eta", 951 }, - { "eth", 240 }, - { "euml", 235 }, - { "euro", 8364 }, - { "exist", 8707 }, - { "fnof", 402 }, - { "forall", 8704 }, - { "frac12", 189 }, - { "frac14", 188 }, - { "frac34", 190 }, - { "frasl", 8260 }, - { "gamma", 947 }, - { "ge", 8805 }, - { "gt", '>' }, - { "hArr", 8660 }, - { "harr", 8596 }, - { "hearts", 9829 }, - { "hellip", 8230 }, - { "hibar", 175 }, - { "iacute", 237 }, - { "icirc", 238 }, - { "iexcl", 161 }, - { "igrave", 236 }, - { "image", 8465 }, - { "infin", 8734 }, - { "int", 8747 }, - { "iota", 953 }, - { "iquest", 191 }, - { "isin", 8712 }, - { "iuml", 239 }, - { "kappa", 954 }, - { "lArr", 8656 }, - { "lambda", 955 }, - { "lang", 9001 }, - { "laquo", 171 }, - { "larr", 8592 }, - { "lceil", 8968 }, - { "ldquo", 8220 }, - { "le", 8804 }, - { "lfloor", 8970 }, - { "lowast", 8727 }, - { "loz", 9674 }, - { "lrm", 8206 }, - { "lsaquo", 8249 }, - { "lsquo", 8216 }, - { "lt", '<' }, - { "macr", 175 }, - { "mdash", 8212 }, - { "micro", 181 }, - { "middot", 183 }, - { "minus", 8722 }, - { "mu", 956 }, - { "nabla", 8711 }, - { "nbsp", 160 }, - { "ndash", 8211 }, - { "ne", 8800 }, - { "ni", 8715 }, - { "not", 172 }, - { "notin", 8713 }, - { "nsub", 8836 }, - { "ntilde", 241 }, - { "nu", 957 }, - { "oacute", 243 }, - { "ocirc", 244 }, - { "oelig", 339 }, - { "ograve", 242 }, - { "oline", 8254 }, - { "omega", 969 }, - { "omicron", 959 }, - { "oplus", 8853 }, - { "or", 8744 }, - { "ordf", 170 }, - { "ordm", 186 }, - { "oslash", 248 }, - { "otilde", 245 }, - { "otimes", 8855 }, - { "ouml", 246 }, - { "para", 182 }, - { "part", 8706 }, - { "permil", 8240 }, - { "perp", 8869 }, - { "phi", 966 }, - { "pi", 960 }, - { "piv", 982 }, - { "plusmn", 177 }, - { "pound", 163 }, - { "prime", 8242 }, - { "prod", 8719 }, - { "prop", 8733 }, - { "psi", 968 }, - { "quot", '\"' }, - { "rArr", 8658 }, - { "radic", 8730 }, - { "rang", 9002 }, - { "raquo", 187 }, - { "rarr", 8594 }, - { "rceil", 8969 }, - { "rdquo", 8221 }, - { "real", 8476 }, - { "reg", 174 }, - { "rfloor", 8971 }, - { "rho", 961 }, - { "rlm", 8207 }, - { "rsaquo", 8250 }, - { "rsquo", 8217 }, - { "sbquo", 8218 }, - { "scaron", 353 }, - { "sdot", 8901 }, - { "sect", 167 }, - { "shy", 173 }, - { "sigma", 963 }, - { "sigmaf", 962 }, - { "sim", 8764 }, - { "spades", 9824 }, - { "sub", 8834 }, - { "sube", 8838 }, - { "sum", 8721 }, - { "sup", 8835 }, - { "sup1", 185 }, - { "sup2", 178 }, - { "sup3", 179 }, - { "supe", 8839 }, - { "szlig", 223 }, - { "tau", 964 }, - { "there4", 8756 }, - { "theta", 952 }, - { "thetasym", 977 }, - { "thinsp", 8201 }, - { "thorn", 254 }, - { "tilde", 732 }, - { "times", 215 }, - { "trade", 8482 }, - { "uArr", 8657 }, - { "uacute", 250 }, - { "uarr", 8593 }, - { "ucirc", 251 }, - { "ugrave", 249 }, - { "uml", 168 }, - { "upsih", 978 }, - { "upsilon", 965 }, - { "uuml", 252 }, - { "weierp", 8472 }, - { "xi", 958 }, - { "yacute", 253 }, - { "yen", 165 }, - { "yuml", 255 }, - { "zeta", 950 }, - { "zwj", 8205 }, - { "zwnj", 8204 } - }; - - - /* - * Do a binary search for the named entity... - */ - - first = 0; - last = (int)(sizeof(entities) / sizeof(entities[0]) - 1); - - while ((last - first) > 1) - { - current = (first + last) / 2; - - if ((diff = strcmp(name, entities[current].name)) == 0) - return (entities[current].val); - else if (diff < 0) - last = current; - else - first = current; - } - - /* - * If we get here, there is a small chance that there is still - * a match; check first and last... - */ - - if (!strcmp(name, entities[first].name)) - return (entities[first].val); - else if (!strcmp(name, entities[last].name)) - return (entities[last].val); - else - return (-1); -} - - -/* - * End of "$Id: mxml-entity.c 408 2010-09-19 05:26:46Z mike $". - */ diff --git a/ogl_editor/src/External/mxml/mxml-file.c b/ogl_editor/src/External/mxml/mxml-file.c deleted file mode 100644 index 9927040..0000000 --- a/ogl_editor/src/External/mxml/mxml-file.c +++ /dev/null @@ -1,3080 +0,0 @@ -/* - * "$Id: mxml-file.c 438 2011-03-24 05:47:51Z mike $" - * - * File loading code for Mini-XML, a small XML-like file parsing library. - * - * Copyright 2003-2011 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - * - * Contents: - * - * mxmlLoadFd() - Load a file descriptor into an XML node tree. - * mxmlLoadFile() - Load a file into an XML node tree. - * mxmlLoadString() - Load a string into an XML node tree. - * mxmlSaveAllocString() - Save an XML tree to an allocated string. - * mxmlSaveFd() - Save an XML tree to a file descriptor. - * mxmlSaveFile() - Save an XML tree to a file. - * mxmlSaveString() - Save an XML node tree to a string. - * mxmlSAXLoadFd() - Load a file descriptor into an XML node tree - * using a SAX callback. - * mxmlSAXLoadFile() - Load a file into an XML node tree - * using a SAX callback. - * mxmlSAXLoadString() - Load a string into an XML node tree - * using a SAX callback. - * mxmlSetCustomHandlers() - Set the handling functions for custom data. - * mxmlSetErrorCallback() - Set the error message callback. - * mxmlSetWrapMargin() - Set the wrap margin when saving XML data. - * mxml_add_char() - Add a character to a buffer, expanding as needed. - * mxml_fd_getc() - Read a character from a file descriptor. - * mxml_fd_putc() - Write a character to a file descriptor. - * mxml_fd_read() - Read a buffer of data from a file descriptor. - * mxml_fd_write() - Write a buffer of data to a file descriptor. - * mxml_file_getc() - Get a character from a file. - * mxml_file_putc() - Write a character to a file. - * mxml_get_entity() - Get the character corresponding to an entity... - * mxml_load_data() - Load data into an XML node tree. - * mxml_parse_element() - Parse an element for any attributes... - * mxml_string_getc() - Get a character from a string. - * mxml_string_putc() - Write a character to a string. - * mxml_write_name() - Write a name string. - * mxml_write_node() - Save an XML node to a file. - * mxml_write_string() - Write a string, escaping & and < as needed. - * mxml_write_ws() - Do whitespace callback... - */ - -/* - * Include necessary headers... - */ - -#ifndef WIN32 -# include -#endif /* !WIN32 */ -#include "mxml-private.h" - - -/* - * Character encoding... - */ - -#define ENCODE_UTF8 0 /* UTF-8 */ -#define ENCODE_UTF16BE 1 /* UTF-16 Big-Endian */ -#define ENCODE_UTF16LE 2 /* UTF-16 Little-Endian */ - - -/* - * Macro to test for a bad XML character... - */ - -#define mxml_bad_char(ch) ((ch) < ' ' && (ch) != '\n' && (ch) != '\r' && (ch) != '\t') - - -/* - * Types and structures... - */ - -typedef int (*_mxml_getc_cb_t)(void *, int *); -typedef int (*_mxml_putc_cb_t)(int, void *); - -typedef struct _mxml_fdbuf_s /**** File descriptor buffer ****/ -{ - int fd; /* File descriptor */ - unsigned char *current, /* Current position in buffer */ - *end, /* End of buffer */ - buffer[8192]; /* Character buffer */ -} _mxml_fdbuf_t; - - -/* - * Local functions... - */ - -static int mxml_add_char(int ch, char **ptr, char **buffer, - int *bufsize); -static int mxml_fd_getc(void *p, int *encoding); -static int mxml_fd_putc(int ch, void *p); -static int mxml_fd_read(_mxml_fdbuf_t *buf); -static int mxml_fd_write(_mxml_fdbuf_t *buf); -static int mxml_file_getc(void *p, int *encoding); -static int mxml_file_putc(int ch, void *p); -static int mxml_get_entity(mxml_node_t *parent, void *p, - int *encoding, - _mxml_getc_cb_t getc_cb); -static inline int mxml_isspace(int ch) - { - return (ch == ' ' || ch == '\t' || ch == '\r' || - ch == '\n'); - } -static mxml_node_t *mxml_load_data(mxml_node_t *top, void *p, - mxml_load_cb_t cb, - _mxml_getc_cb_t getc_cb, - mxml_sax_cb_t sax_cb, void *sax_data); -static int mxml_parse_element(mxml_node_t *node, void *p, - int *encoding, - _mxml_getc_cb_t getc_cb); -static int mxml_string_getc(void *p, int *encoding); -static int mxml_string_putc(int ch, void *p); -static int mxml_write_name(const char *s, void *p, - _mxml_putc_cb_t putc_cb); -static int mxml_write_node(mxml_node_t *node, void *p, - mxml_save_cb_t cb, int col, - _mxml_putc_cb_t putc_cb, - _mxml_global_t *global); -static int mxml_write_string(const char *s, void *p, - _mxml_putc_cb_t putc_cb); -static int mxml_write_ws(mxml_node_t *node, void *p, - mxml_save_cb_t cb, int ws, - int col, _mxml_putc_cb_t putc_cb); - - -/* - * 'mxmlLoadFd()' - Load a file descriptor into an XML node tree. - * - * The nodes in the specified file are added to the specified top node. - * If no top node is provided, the XML file MUST be well-formed with a - * single parent node like for the entire file. The callback - * function returns the value type that should be used for child nodes. - * If MXML_NO_CALLBACK is specified then all child nodes will be either - * MXML_ELEMENT or MXML_TEXT nodes. - * - * The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, - * MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading - * child nodes of the specified type. - */ - -mxml_node_t * /* O - First node or NULL if the file could not be read. */ -mxmlLoadFd(mxml_node_t *top, /* I - Top node */ - int fd, /* I - File descriptor to read from */ - mxml_load_cb_t cb) /* I - Callback function or MXML_NO_CALLBACK */ -{ - _mxml_fdbuf_t buf; /* File descriptor buffer */ - - - /* - * Initialize the file descriptor buffer... - */ - - buf.fd = fd; - buf.current = buf.buffer; - buf.end = buf.buffer; - - /* - * Read the XML data... - */ - - return (mxml_load_data(top, &buf, cb, mxml_fd_getc, MXML_NO_CALLBACK, NULL)); -} - - -/* - * 'mxmlLoadFile()' - Load a file into an XML node tree. - * - * The nodes in the specified file are added to the specified top node. - * If no top node is provided, the XML file MUST be well-formed with a - * single parent node like for the entire file. The callback - * function returns the value type that should be used for child nodes. - * If MXML_NO_CALLBACK is specified then all child nodes will be either - * MXML_ELEMENT or MXML_TEXT nodes. - * - * The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, - * MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading - * child nodes of the specified type. - */ - -mxml_node_t * /* O - First node or NULL if the file could not be read. */ -mxmlLoadFile(mxml_node_t *top, /* I - Top node */ - FILE *fp, /* I - File to read from */ - mxml_load_cb_t cb) /* I - Callback function or MXML_NO_CALLBACK */ -{ - /* - * Read the XML data... - */ - - return (mxml_load_data(top, fp, cb, mxml_file_getc, MXML_NO_CALLBACK, NULL)); -} - - -/* - * 'mxmlLoadString()' - Load a string into an XML node tree. - * - * The nodes in the specified string are added to the specified top node. - * If no top node is provided, the XML string MUST be well-formed with a - * single parent node like for the entire string. The callback - * function returns the value type that should be used for child nodes. - * If MXML_NO_CALLBACK is specified then all child nodes will be either - * MXML_ELEMENT or MXML_TEXT nodes. - * - * The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, - * MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading - * child nodes of the specified type. - */ - -mxml_node_t * /* O - First node or NULL if the string has errors. */ -mxmlLoadString(mxml_node_t *top, /* I - Top node */ - const char *s, /* I - String to load */ - mxml_load_cb_t cb) /* I - Callback function or MXML_NO_CALLBACK */ -{ - /* - * Read the XML data... - */ - - return (mxml_load_data(top, (void *)&s, cb, mxml_string_getc, MXML_NO_CALLBACK, - NULL)); -} - - -/* - * 'mxmlSaveAllocString()' - Save an XML tree to an allocated string. - * - * This function returns a pointer to a string containing the textual - * representation of the XML node tree. The string should be freed - * using the free() function when you are done with it. NULL is returned - * if the node would produce an empty string or if the string cannot be - * allocated. - * - * The callback argument specifies a function that returns a whitespace - * string or NULL before and after each element. If MXML_NO_CALLBACK - * is specified, whitespace will only be added before MXML_TEXT nodes - * with leading whitespace and before attribute names inside opening - * element tags. - */ - -char * /* O - Allocated string or NULL */ -mxmlSaveAllocString( - mxml_node_t *node, /* I - Node to write */ - mxml_save_cb_t cb) /* I - Whitespace callback or MXML_NO_CALLBACK */ -{ - int bytes; /* Required bytes */ - char buffer[8192]; /* Temporary buffer */ - char *s; /* Allocated string */ - - - /* - * Write the node to the temporary buffer... - */ - - bytes = mxmlSaveString(node, buffer, sizeof(buffer), cb); - - if (bytes <= 0) - return (NULL); - - if (bytes < (int)(sizeof(buffer) - 1)) - { - /* - * Node fit inside the buffer, so just duplicate that string and - * return... - */ - - return (strdup(buffer)); - } - - /* - * Allocate a buffer of the required size and save the node to the - * new buffer... - */ - - if ((s = malloc(bytes + 1)) == NULL) - return (NULL); - - mxmlSaveString(node, s, bytes + 1, cb); - - /* - * Return the allocated string... - */ - - return (s); -} - - -/* - * 'mxmlSaveFd()' - Save an XML tree to a file descriptor. - * - * The callback argument specifies a function that returns a whitespace - * string or NULL before and after each element. If MXML_NO_CALLBACK - * is specified, whitespace will only be added before MXML_TEXT nodes - * with leading whitespace and before attribute names inside opening - * element tags. - */ - -int /* O - 0 on success, -1 on error. */ -mxmlSaveFd(mxml_node_t *node, /* I - Node to write */ - int fd, /* I - File descriptor to write to */ - mxml_save_cb_t cb) /* I - Whitespace callback or MXML_NO_CALLBACK */ -{ - int col; /* Final column */ - _mxml_fdbuf_t buf; /* File descriptor buffer */ - _mxml_global_t *global = _mxml_global(); - /* Global data */ - - - /* - * Initialize the file descriptor buffer... - */ - - buf.fd = fd; - buf.current = buf.buffer; - buf.end = buf.buffer + sizeof(buf.buffer); - - /* - * Write the node... - */ - - if ((col = mxml_write_node(node, &buf, cb, 0, mxml_fd_putc, global)) < 0) - return (-1); - - if (col > 0) - if (mxml_fd_putc('\n', &buf) < 0) - return (-1); - - /* - * Flush and return... - */ - - return (mxml_fd_write(&buf)); -} - - -/* - * 'mxmlSaveFile()' - Save an XML tree to a file. - * - * The callback argument specifies a function that returns a whitespace - * string or NULL before and after each element. If MXML_NO_CALLBACK - * is specified, whitespace will only be added before MXML_TEXT nodes - * with leading whitespace and before attribute names inside opening - * element tags. - */ - -int /* O - 0 on success, -1 on error. */ -mxmlSaveFile(mxml_node_t *node, /* I - Node to write */ - FILE *fp, /* I - File to write to */ - mxml_save_cb_t cb) /* I - Whitespace callback or MXML_NO_CALLBACK */ -{ - int col; /* Final column */ - _mxml_global_t *global = _mxml_global(); - /* Global data */ - - - /* - * Write the node... - */ - - if ((col = mxml_write_node(node, fp, cb, 0, mxml_file_putc, global)) < 0) - return (-1); - - if (col > 0) - if (putc('\n', fp) < 0) - return (-1); - - /* - * Return 0 (success)... - */ - - return (0); -} - - -/* - * 'mxmlSaveString()' - Save an XML node tree to a string. - * - * This function returns the total number of bytes that would be - * required for the string but only copies (bufsize - 1) characters - * into the specified buffer. - * - * The callback argument specifies a function that returns a whitespace - * string or NULL before and after each element. If MXML_NO_CALLBACK - * is specified, whitespace will only be added before MXML_TEXT nodes - * with leading whitespace and before attribute names inside opening - * element tags. - */ - -int /* O - Size of string */ -mxmlSaveString(mxml_node_t *node, /* I - Node to write */ - char *buffer, /* I - String buffer */ - int bufsize, /* I - Size of string buffer */ - mxml_save_cb_t cb) /* I - Whitespace callback or MXML_NO_CALLBACK */ -{ - int col; /* Final column */ - char *ptr[2]; /* Pointers for putc_cb */ - _mxml_global_t *global = _mxml_global(); - /* Global data */ - - - /* - * Write the node... - */ - - ptr[0] = buffer; - ptr[1] = buffer + bufsize; - - if ((col = mxml_write_node(node, ptr, cb, 0, mxml_string_putc, global)) < 0) - return (-1); - - if (col > 0) - mxml_string_putc('\n', ptr); - - /* - * Nul-terminate the buffer... - */ - - if (ptr[0] >= ptr[1]) - buffer[bufsize - 1] = '\0'; - else - ptr[0][0] = '\0'; - - /* - * Return the number of characters... - */ - - return (ptr[0] - buffer); -} - - -/* - * 'mxmlSAXLoadFd()' - Load a file descriptor into an XML node tree - * using a SAX callback. - * - * The nodes in the specified file are added to the specified top node. - * If no top node is provided, the XML file MUST be well-formed with a - * single parent node like for the entire file. The callback - * function returns the value type that should be used for child nodes. - * If MXML_NO_CALLBACK is specified then all child nodes will be either - * MXML_ELEMENT or MXML_TEXT nodes. - * - * The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, - * MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading - * child nodes of the specified type. - * - * The SAX callback must call mxmlRetain() for any nodes that need to - * be kept for later use. Otherwise, nodes are deleted when the parent - * node is closed or after each data, comment, CDATA, or directive node. - * - * @since Mini-XML 2.3@ - */ - -mxml_node_t * /* O - First node or NULL if the file could not be read. */ -mxmlSAXLoadFd(mxml_node_t *top, /* I - Top node */ - int fd, /* I - File descriptor to read from */ - mxml_load_cb_t cb, /* I - Callback function or MXML_NO_CALLBACK */ - mxml_sax_cb_t sax_cb, /* I - SAX callback or MXML_NO_CALLBACK */ - void *sax_data) /* I - SAX user data */ -{ - _mxml_fdbuf_t buf; /* File descriptor buffer */ - - - /* - * Initialize the file descriptor buffer... - */ - - buf.fd = fd; - buf.current = buf.buffer; - buf.end = buf.buffer; - - /* - * Read the XML data... - */ - - return (mxml_load_data(top, &buf, cb, mxml_fd_getc, sax_cb, sax_data)); -} - - -/* - * 'mxmlSAXLoadFile()' - Load a file into an XML node tree - * using a SAX callback. - * - * The nodes in the specified file are added to the specified top node. - * If no top node is provided, the XML file MUST be well-formed with a - * single parent node like for the entire file. The callback - * function returns the value type that should be used for child nodes. - * If MXML_NO_CALLBACK is specified then all child nodes will be either - * MXML_ELEMENT or MXML_TEXT nodes. - * - * The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, - * MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading - * child nodes of the specified type. - * - * The SAX callback must call mxmlRetain() for any nodes that need to - * be kept for later use. Otherwise, nodes are deleted when the parent - * node is closed or after each data, comment, CDATA, or directive node. - * - * @since Mini-XML 2.3@ - */ - -mxml_node_t * /* O - First node or NULL if the file could not be read. */ -mxmlSAXLoadFile( - mxml_node_t *top, /* I - Top node */ - FILE *fp, /* I - File to read from */ - mxml_load_cb_t cb, /* I - Callback function or MXML_NO_CALLBACK */ - mxml_sax_cb_t sax_cb, /* I - SAX callback or MXML_NO_CALLBACK */ - void *sax_data) /* I - SAX user data */ -{ - /* - * Read the XML data... - */ - - return (mxml_load_data(top, fp, cb, mxml_file_getc, sax_cb, sax_data)); -} - - -/* - * 'mxmlSAXLoadString()' - Load a string into an XML node tree - * using a SAX callback. - * - * The nodes in the specified string are added to the specified top node. - * If no top node is provided, the XML string MUST be well-formed with a - * single parent node like for the entire string. The callback - * function returns the value type that should be used for child nodes. - * If MXML_NO_CALLBACK is specified then all child nodes will be either - * MXML_ELEMENT or MXML_TEXT nodes. - * - * The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, - * MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading - * child nodes of the specified type. - * - * The SAX callback must call mxmlRetain() for any nodes that need to - * be kept for later use. Otherwise, nodes are deleted when the parent - * node is closed or after each data, comment, CDATA, or directive node. - * - * @since Mini-XML 2.3@ - */ - -mxml_node_t * /* O - First node or NULL if the string has errors. */ -mxmlSAXLoadString( - mxml_node_t *top, /* I - Top node */ - const char *s, /* I - String to load */ - mxml_load_cb_t cb, /* I - Callback function or MXML_NO_CALLBACK */ - mxml_sax_cb_t sax_cb, /* I - SAX callback or MXML_NO_CALLBACK */ - void *sax_data) /* I - SAX user data */ -{ - /* - * Read the XML data... - */ - - return (mxml_load_data(top, (void *)&s, cb, mxml_string_getc, sax_cb, sax_data)); -} - - -/* - * 'mxmlSetCustomHandlers()' - Set the handling functions for custom data. - * - * The load function accepts a node pointer and a data string and must - * return 0 on success and non-zero on error. - * - * The save function accepts a node pointer and must return a malloc'd - * string on success and NULL on error. - * - */ - -void -mxmlSetCustomHandlers( - mxml_custom_load_cb_t load, /* I - Load function */ - mxml_custom_save_cb_t save) /* I - Save function */ -{ - _mxml_global_t *global = _mxml_global(); - /* Global data */ - - - global->custom_load_cb = load; - global->custom_save_cb = save; -} - - -/* - * 'mxmlSetErrorCallback()' - Set the error message callback. - */ - -void -mxmlSetErrorCallback(mxml_error_cb_t cb)/* I - Error callback function */ -{ - _mxml_global_t *global = _mxml_global(); - /* Global data */ - - - global->error_cb = cb; -} - - -/* - * 'mxmlSetWrapMargin()' - Set the wrap margin when saving XML data. - * - * Wrapping is disabled when "column" is 0. - * - * @since Mini-XML 2.3@ - */ - -void -mxmlSetWrapMargin(int column) /* I - Column for wrapping, 0 to disable wrapping */ -{ - _mxml_global_t *global = _mxml_global(); - /* Global data */ - - - global->wrap = column; -} - - -/* - * 'mxml_add_char()' - Add a character to a buffer, expanding as needed. - */ - -static int /* O - 0 on success, -1 on error */ -mxml_add_char(int ch, /* I - Character to add */ - char **bufptr, /* IO - Current position in buffer */ - char **buffer, /* IO - Current buffer */ - int *bufsize) /* IO - Current buffer size */ -{ - char *newbuffer; /* New buffer value */ - - - if (*bufptr >= (*buffer + *bufsize - 4)) - { - /* - * Increase the size of the buffer... - */ - - if (*bufsize < 1024) - (*bufsize) *= 2; - else - (*bufsize) += 1024; - - if ((newbuffer = realloc(*buffer, *bufsize)) == NULL) - { - free(*buffer); - - mxml_error("Unable to expand string buffer to %d bytes!", *bufsize); - - return (-1); - } - - *bufptr = newbuffer + (*bufptr - *buffer); - *buffer = newbuffer; - } - - if (ch < 0x80) - { - /* - * Single byte ASCII... - */ - - *(*bufptr)++ = ch; - } - else if (ch < 0x800) - { - /* - * Two-byte UTF-8... - */ - - *(*bufptr)++ = 0xc0 | (ch >> 6); - *(*bufptr)++ = 0x80 | (ch & 0x3f); - } - else if (ch < 0x10000) - { - /* - * Three-byte UTF-8... - */ - - *(*bufptr)++ = 0xe0 | (ch >> 12); - *(*bufptr)++ = 0x80 | ((ch >> 6) & 0x3f); - *(*bufptr)++ = 0x80 | (ch & 0x3f); - } - else - { - /* - * Four-byte UTF-8... - */ - - *(*bufptr)++ = 0xf0 | (ch >> 18); - *(*bufptr)++ = 0x80 | ((ch >> 12) & 0x3f); - *(*bufptr)++ = 0x80 | ((ch >> 6) & 0x3f); - *(*bufptr)++ = 0x80 | (ch & 0x3f); - } - - return (0); -} - - -/* - * 'mxml_fd_getc()' - Read a character from a file descriptor. - */ - -static int /* O - Character or EOF */ -mxml_fd_getc(void *p, /* I - File descriptor buffer */ - int *encoding) /* IO - Encoding */ -{ - _mxml_fdbuf_t *buf; /* File descriptor buffer */ - int ch, /* Current character */ - temp; /* Temporary character */ - - - /* - * Grab the next character in the buffer... - */ - - buf = (_mxml_fdbuf_t *)p; - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - ch = *(buf->current)++; - - switch (*encoding) - { - case ENCODE_UTF8 : - /* - * Got a UTF-8 character; convert UTF-8 to Unicode and return... - */ - - if (!(ch & 0x80)) - { -#if DEBUG > 1 - printf("mxml_fd_getc: %c (0x%04x)\n", ch < ' ' ? '.' : ch, ch); -#endif /* DEBUG > 1 */ - - if (mxml_bad_char(ch)) - { - mxml_error("Bad control character 0x%02x not allowed by XML standard!", - ch); - return (EOF); - } - - return (ch); - } - else if (ch == 0xfe) - { - /* - * UTF-16 big-endian BOM? - */ - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - ch = *(buf->current)++; - - if (ch != 0xff) - return (EOF); - - *encoding = ENCODE_UTF16BE; - - return (mxml_fd_getc(p, encoding)); - } - else if (ch == 0xff) - { - /* - * UTF-16 little-endian BOM? - */ - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - ch = *(buf->current)++; - - if (ch != 0xfe) - return (EOF); - - *encoding = ENCODE_UTF16LE; - - return (mxml_fd_getc(p, encoding)); - } - else if ((ch & 0xe0) == 0xc0) - { - /* - * Two-byte value... - */ - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - temp = *(buf->current)++; - - if ((temp & 0xc0) != 0x80) - return (EOF); - - ch = ((ch & 0x1f) << 6) | (temp & 0x3f); - - if (ch < 0x80) - { - mxml_error("Invalid UTF-8 sequence for character 0x%04x!", ch); - return (EOF); - } - } - else if ((ch & 0xf0) == 0xe0) - { - /* - * Three-byte value... - */ - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - temp = *(buf->current)++; - - if ((temp & 0xc0) != 0x80) - return (EOF); - - ch = ((ch & 0x0f) << 6) | (temp & 0x3f); - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - temp = *(buf->current)++; - - if ((temp & 0xc0) != 0x80) - return (EOF); - - ch = (ch << 6) | (temp & 0x3f); - - if (ch < 0x800) - { - mxml_error("Invalid UTF-8 sequence for character 0x%04x!", ch); - return (EOF); - } - - /* - * Ignore (strip) Byte Order Mark (BOM)... - */ - - if (ch == 0xfeff) - return (mxml_fd_getc(p, encoding)); - } - else if ((ch & 0xf8) == 0xf0) - { - /* - * Four-byte value... - */ - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - temp = *(buf->current)++; - - if ((temp & 0xc0) != 0x80) - return (EOF); - - ch = ((ch & 0x07) << 6) | (temp & 0x3f); - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - temp = *(buf->current)++; - - if ((temp & 0xc0) != 0x80) - return (EOF); - - ch = (ch << 6) | (temp & 0x3f); - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - temp = *(buf->current)++; - - if ((temp & 0xc0) != 0x80) - return (EOF); - - ch = (ch << 6) | (temp & 0x3f); - - if (ch < 0x10000) - { - mxml_error("Invalid UTF-8 sequence for character 0x%04x!", ch); - return (EOF); - } - } - else - return (EOF); - break; - - case ENCODE_UTF16BE : - /* - * Read UTF-16 big-endian char... - */ - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - temp = *(buf->current)++; - - ch = (ch << 8) | temp; - - if (mxml_bad_char(ch)) - { - mxml_error("Bad control character 0x%02x not allowed by XML standard!", - ch); - return (EOF); - } - else if (ch >= 0xd800 && ch <= 0xdbff) - { - /* - * Multi-word UTF-16 char... - */ - - int lch; - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - lch = *(buf->current)++; - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - temp = *(buf->current)++; - - lch = (lch << 8) | temp; - - if (lch < 0xdc00 || lch >= 0xdfff) - return (EOF); - - ch = (((ch & 0x3ff) << 10) | (lch & 0x3ff)) + 0x10000; - } - break; - - case ENCODE_UTF16LE : - /* - * Read UTF-16 little-endian char... - */ - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - temp = *(buf->current)++; - - ch |= (temp << 8); - - if (mxml_bad_char(ch)) - { - mxml_error("Bad control character 0x%02x not allowed by XML standard!", - ch); - return (EOF); - } - else if (ch >= 0xd800 && ch <= 0xdbff) - { - /* - * Multi-word UTF-16 char... - */ - - int lch; - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - lch = *(buf->current)++; - - if (buf->current >= buf->end) - if (mxml_fd_read(buf) < 0) - return (EOF); - - temp = *(buf->current)++; - - lch |= (temp << 8); - - if (lch < 0xdc00 || lch >= 0xdfff) - return (EOF); - - ch = (((ch & 0x3ff) << 10) | (lch & 0x3ff)) + 0x10000; - } - break; - } - -#if DEBUG > 1 - printf("mxml_fd_getc: %c (0x%04x)\n", ch < ' ' ? '.' : ch, ch); -#endif /* DEBUG > 1 */ - - return (ch); -} - - -/* - * 'mxml_fd_putc()' - Write a character to a file descriptor. - */ - -static int /* O - 0 on success, -1 on error */ -mxml_fd_putc(int ch, /* I - Character */ - void *p) /* I - File descriptor buffer */ -{ - _mxml_fdbuf_t *buf; /* File descriptor buffer */ - - - /* - * Flush the write buffer as needed... - */ - - buf = (_mxml_fdbuf_t *)p; - - if (buf->current >= buf->end) - if (mxml_fd_write(buf) < 0) - return (-1); - - *(buf->current)++ = ch; - - /* - * Return successfully... - */ - - return (0); -} - - -/* - * 'mxml_fd_read()' - Read a buffer of data from a file descriptor. - */ - -static int /* O - 0 on success, -1 on error */ -mxml_fd_read(_mxml_fdbuf_t *buf) /* I - File descriptor buffer */ -{ - int bytes; /* Bytes read... */ - - - /* - * Range check input... - */ - - if (!buf) - return (-1); - - /* - * Read from the file descriptor... - */ - - while ((bytes = read(buf->fd, buf->buffer, sizeof(buf->buffer))) < 0) -#ifdef EINTR - if (errno != EAGAIN && errno != EINTR) -#else - if (errno != EAGAIN) -#endif /* EINTR */ - return (-1); - - if (bytes == 0) - return (-1); - - /* - * Update the pointers and return success... - */ - - buf->current = buf->buffer; - buf->end = buf->buffer + bytes; - - return (0); -} - - -/* - * 'mxml_fd_write()' - Write a buffer of data to a file descriptor. - */ - -static int /* O - 0 on success, -1 on error */ -mxml_fd_write(_mxml_fdbuf_t *buf) /* I - File descriptor buffer */ -{ - int bytes; /* Bytes written */ - unsigned char *ptr; /* Pointer into buffer */ - - - /* - * Range check... - */ - - if (!buf) - return (-1); - - /* - * Return 0 if there is nothing to write... - */ - - if (buf->current == buf->buffer) - return (0); - - /* - * Loop until we have written everything... - */ - - for (ptr = buf->buffer; ptr < buf->current; ptr += bytes) - if ((bytes = write(buf->fd, ptr, buf->current - ptr)) < 0) - return (-1); - - /* - * All done, reset pointers and return success... - */ - - buf->current = buf->buffer; - - return (0); -} - - -/* - * 'mxml_file_getc()' - Get a character from a file. - */ - -static int /* O - Character or EOF */ -mxml_file_getc(void *p, /* I - Pointer to file */ - int *encoding) /* IO - Encoding */ -{ - int ch, /* Character from file */ - temp; /* Temporary character */ - FILE *fp; /* Pointer to file */ - - - /* - * Read a character from the file and see if it is EOF or ASCII... - */ - - fp = (FILE *)p; - ch = getc(fp); - - if (ch == EOF) - return (EOF); - - switch (*encoding) - { - case ENCODE_UTF8 : - /* - * Got a UTF-8 character; convert UTF-8 to Unicode and return... - */ - - if (!(ch & 0x80)) - { - if (mxml_bad_char(ch)) - { - mxml_error("Bad control character 0x%02x not allowed by XML standard!", - ch); - return (EOF); - } - -#if DEBUG > 1 - printf("mxml_file_getc: %c (0x%04x)\n", ch < ' ' ? '.' : ch, ch); -#endif /* DEBUG > 1 */ - - return (ch); - } - else if (ch == 0xfe) - { - /* - * UTF-16 big-endian BOM? - */ - - ch = getc(fp); - if (ch != 0xff) - return (EOF); - - *encoding = ENCODE_UTF16BE; - - return (mxml_file_getc(p, encoding)); - } - else if (ch == 0xff) - { - /* - * UTF-16 little-endian BOM? - */ - - ch = getc(fp); - if (ch != 0xfe) - return (EOF); - - *encoding = ENCODE_UTF16LE; - - return (mxml_file_getc(p, encoding)); - } - else if ((ch & 0xe0) == 0xc0) - { - /* - * Two-byte value... - */ - - if ((temp = getc(fp)) == EOF || (temp & 0xc0) != 0x80) - return (EOF); - - ch = ((ch & 0x1f) << 6) | (temp & 0x3f); - - if (ch < 0x80) - { - mxml_error("Invalid UTF-8 sequence for character 0x%04x!", ch); - return (EOF); - } - } - else if ((ch & 0xf0) == 0xe0) - { - /* - * Three-byte value... - */ - - if ((temp = getc(fp)) == EOF || (temp & 0xc0) != 0x80) - return (EOF); - - ch = ((ch & 0x0f) << 6) | (temp & 0x3f); - - if ((temp = getc(fp)) == EOF || (temp & 0xc0) != 0x80) - return (EOF); - - ch = (ch << 6) | (temp & 0x3f); - - if (ch < 0x800) - { - mxml_error("Invalid UTF-8 sequence for character 0x%04x!", ch); - return (EOF); - } - - /* - * Ignore (strip) Byte Order Mark (BOM)... - */ - - if (ch == 0xfeff) - return (mxml_file_getc(p, encoding)); - } - else if ((ch & 0xf8) == 0xf0) - { - /* - * Four-byte value... - */ - - if ((temp = getc(fp)) == EOF || (temp & 0xc0) != 0x80) - return (EOF); - - ch = ((ch & 0x07) << 6) | (temp & 0x3f); - - if ((temp = getc(fp)) == EOF || (temp & 0xc0) != 0x80) - return (EOF); - - ch = (ch << 6) | (temp & 0x3f); - - if ((temp = getc(fp)) == EOF || (temp & 0xc0) != 0x80) - return (EOF); - - ch = (ch << 6) | (temp & 0x3f); - - if (ch < 0x10000) - { - mxml_error("Invalid UTF-8 sequence for character 0x%04x!", ch); - return (EOF); - } - } - else - return (EOF); - break; - - case ENCODE_UTF16BE : - /* - * Read UTF-16 big-endian char... - */ - - ch = (ch << 8) | getc(fp); - - if (mxml_bad_char(ch)) - { - mxml_error("Bad control character 0x%02x not allowed by XML standard!", - ch); - return (EOF); - } - else if (ch >= 0xd800 && ch <= 0xdbff) - { - /* - * Multi-word UTF-16 char... - */ - - int lch = (getc(fp) << 8) | getc(fp); - - if (lch < 0xdc00 || lch >= 0xdfff) - return (EOF); - - ch = (((ch & 0x3ff) << 10) | (lch & 0x3ff)) + 0x10000; - } - break; - - case ENCODE_UTF16LE : - /* - * Read UTF-16 little-endian char... - */ - - ch |= (getc(fp) << 8); - - if (mxml_bad_char(ch)) - { - mxml_error("Bad control character 0x%02x not allowed by XML standard!", - ch); - return (EOF); - } - else if (ch >= 0xd800 && ch <= 0xdbff) - { - /* - * Multi-word UTF-16 char... - */ - - int lch = getc(fp) | (getc(fp) << 8); - - if (lch < 0xdc00 || lch >= 0xdfff) - return (EOF); - - ch = (((ch & 0x3ff) << 10) | (lch & 0x3ff)) + 0x10000; - } - break; - } - -#if DEBUG > 1 - printf("mxml_file_getc: %c (0x%04x)\n", ch < ' ' ? '.' : ch, ch); -#endif /* DEBUG > 1 */ - - return (ch); -} - - -/* - * 'mxml_file_putc()' - Write a character to a file. - */ - -static int /* O - 0 on success, -1 on failure */ -mxml_file_putc(int ch, /* I - Character to write */ - void *p) /* I - Pointer to file */ -{ - return (putc(ch, (FILE *)p) == EOF ? -1 : 0); -} - - -/* - * 'mxml_get_entity()' - Get the character corresponding to an entity... - */ - -static int /* O - Character value or EOF on error */ -mxml_get_entity(mxml_node_t *parent, /* I - Parent node */ - void *p, /* I - Pointer to source */ - int *encoding, /* IO - Character encoding */ - int (*getc_cb)(void *, int *)) - /* I - Get character function */ -{ - int ch; /* Current character */ - char entity[64], /* Entity string */ - *entptr; /* Pointer into entity */ - - - entptr = entity; - - while ((ch = (*getc_cb)(p, encoding)) != EOF) - if (ch > 126 || (!isalnum(ch) && ch != '#')) - break; - else if (entptr < (entity + sizeof(entity) - 1)) - *entptr++ = ch; - else - { - mxml_error("Entity name too long under parent <%s>!", - parent ? parent->value.element.name : "null"); - break; - } - - *entptr = '\0'; - - if (ch != ';') - { - mxml_error("Character entity \"%s\" not terminated under parent <%s>!", - entity, parent ? parent->value.element.name : "null"); - return (EOF); - } - - if (entity[0] == '#') - { - if (entity[1] == 'x') - ch = strtol(entity + 2, NULL, 16); - else - ch = strtol(entity + 1, NULL, 10); - } - else if ((ch = mxmlEntityGetValue(entity)) < 0) - mxml_error("Entity name \"%s;\" not supported under parent <%s>!", - entity, parent ? parent->value.element.name : "null"); - - if (mxml_bad_char(ch)) - { - mxml_error("Bad control character 0x%02x under parent <%s> not allowed by XML standard!", - ch, parent ? parent->value.element.name : "null"); - return (EOF); - } - - return (ch); -} - - -/* - * 'mxml_load_data()' - Load data into an XML node tree. - */ - -static mxml_node_t * /* O - First node or NULL if the file could not be read. */ -mxml_load_data( - mxml_node_t *top, /* I - Top node */ - void *p, /* I - Pointer to data */ - mxml_load_cb_t cb, /* I - Callback function or MXML_NO_CALLBACK */ - _mxml_getc_cb_t getc_cb, /* I - Read function */ - mxml_sax_cb_t sax_cb, /* I - SAX callback or MXML_NO_CALLBACK */ - void *sax_data) /* I - SAX user data */ -{ - mxml_node_t *node, /* Current node */ - *first, /* First node added */ - *parent; /* Current parent node */ - int ch, /* Character from file */ - whitespace; /* Non-zero if whitespace seen */ - char *buffer, /* String buffer */ - *bufptr; /* Pointer into buffer */ - int bufsize; /* Size of buffer */ - mxml_type_t type; /* Current node type */ - int encoding; /* Character encoding */ - _mxml_global_t *global = _mxml_global(); - /* Global data */ - static const char * const types[] = /* Type strings... */ - { - "MXML_ELEMENT", /* XML element with attributes */ - "MXML_INTEGER", /* Integer value */ - "MXML_OPAQUE", /* Opaque string */ - "MXML_REAL", /* Real value */ - "MXML_TEXT", /* Text fragment */ - "MXML_CUSTOM" /* Custom data */ - }; - - - /* - * Read elements and other nodes from the file... - */ - - if ((buffer = malloc(64)) == NULL) - { - mxml_error("Unable to allocate string buffer!"); - return (NULL); - } - - bufsize = 64; - bufptr = buffer; - parent = top; - first = NULL; - whitespace = 0; - encoding = ENCODE_UTF8; - - if (cb && parent) - type = (*cb)(parent); - else - type = MXML_TEXT; - - while ((ch = (*getc_cb)(p, &encoding)) != EOF) - { - if ((ch == '<' || - (mxml_isspace(ch) && type != MXML_OPAQUE && type != MXML_CUSTOM)) && - bufptr > buffer) - { - /* - * Add a new value node... - */ - - *bufptr = '\0'; - - switch (type) - { - case MXML_INTEGER : - node = mxmlNewInteger(parent, strtol(buffer, &bufptr, 0)); - break; - - case MXML_OPAQUE : - node = mxmlNewOpaque(parent, buffer); - break; - - case MXML_REAL : - node = mxmlNewReal(parent, strtod(buffer, &bufptr)); - break; - - case MXML_TEXT : - node = mxmlNewText(parent, whitespace, buffer); - break; - - case MXML_CUSTOM : - if (global->custom_load_cb) - { - /* - * Use the callback to fill in the custom data... - */ - - node = mxmlNewCustom(parent, NULL, NULL); - - if ((*global->custom_load_cb)(node, buffer)) - { - mxml_error("Bad custom value '%s' in parent <%s>!", - buffer, parent ? parent->value.element.name : "null"); - mxmlDelete(node); - node = NULL; - } - break; - } - - default : /* Ignore... */ - node = NULL; - break; - } - - if (*bufptr) - { - /* - * Bad integer/real number value... - */ - - mxml_error("Bad %s value '%s' in parent <%s>!", - type == MXML_INTEGER ? "integer" : "real", buffer, - parent ? parent->value.element.name : "null"); - break; - } - - bufptr = buffer; - whitespace = mxml_isspace(ch) && type == MXML_TEXT; - - if (!node && type != MXML_IGNORE) - { - /* - * Print error and return... - */ - - mxml_error("Unable to add value node of type %s to parent <%s>!", - types[type], parent ? parent->value.element.name : "null"); - goto error; - } - - if (sax_cb) - { - (*sax_cb)(node, MXML_SAX_DATA, sax_data); - - if (!mxmlRelease(node)) - node = NULL; - } - - if (!first && node) - first = node; - } - else if (mxml_isspace(ch) && type == MXML_TEXT) - whitespace = 1; - - /* - * Add lone whitespace node if we have an element and existing - * whitespace... - */ - - if (ch == '<' && whitespace && type == MXML_TEXT) - { - if (parent) - { - node = mxmlNewText(parent, whitespace, ""); - - if (sax_cb) - { - (*sax_cb)(node, MXML_SAX_DATA, sax_data); - - if (!mxmlRelease(node)) - node = NULL; - } - - if (!first && node) - first = node; - } - - whitespace = 0; - } - - if (ch == '<') - { - /* - * Start of open/close tag... - */ - - bufptr = buffer; - - while ((ch = (*getc_cb)(p, &encoding)) != EOF) - if (mxml_isspace(ch) || ch == '>' || (ch == '/' && bufptr > buffer)) - break; - else if (ch == '<') - { - mxml_error("Bare < in element!"); - goto error; - } - else if (ch == '&') - { - if ((ch = mxml_get_entity(parent, p, &encoding, getc_cb)) == EOF) - goto error; - - if (mxml_add_char(ch, &bufptr, &buffer, &bufsize)) - goto error; - } - else if (mxml_add_char(ch, &bufptr, &buffer, &bufsize)) - goto error; - else if (((bufptr - buffer) == 1 && buffer[0] == '?') || - ((bufptr - buffer) == 3 && !strncmp(buffer, "!--", 3)) || - ((bufptr - buffer) == 8 && !strncmp(buffer, "![CDATA[", 8))) - break; - - *bufptr = '\0'; - - if (!strcmp(buffer, "!--")) - { - /* - * Gather rest of comment... - */ - - while ((ch = (*getc_cb)(p, &encoding)) != EOF) - { - if (ch == '>' && bufptr > (buffer + 4) && - bufptr[-3] != '-' && bufptr[-2] == '-' && bufptr[-1] == '-') - break; - else if (mxml_add_char(ch, &bufptr, &buffer, &bufsize)) - goto error; - } - - /* - * Error out if we didn't get the whole comment... - */ - - if (ch != '>') - { - /* - * Print error and return... - */ - - mxml_error("Early EOF in comment node!"); - goto error; - } - - - /* - * Otherwise add this as an element under the current parent... - */ - - *bufptr = '\0'; - - if (!parent && first) - { - /* - * There can only be one root element! - */ - - mxml_error("<%s> cannot be a second root node after <%s>", - buffer, first->value.element.name); - goto error; - } - - if ((node = mxmlNewElement(parent, buffer)) == NULL) - { - /* - * Just print error for now... - */ - - mxml_error("Unable to add comment node to parent <%s>!", - parent ? parent->value.element.name : "null"); - break; - } - - if (sax_cb) - { - (*sax_cb)(node, MXML_SAX_COMMENT, sax_data); - - if (!mxmlRelease(node)) - node = NULL; - } - - if (node && !first) - first = node; - } - else if (!strcmp(buffer, "![CDATA[")) - { - /* - * Gather CDATA section... - */ - - while ((ch = (*getc_cb)(p, &encoding)) != EOF) - { - if (ch == '>' && !strncmp(bufptr - 2, "]]", 2)) - break; - else if (mxml_add_char(ch, &bufptr, &buffer, &bufsize)) - goto error; - } - - /* - * Error out if we didn't get the whole comment... - */ - - if (ch != '>') - { - /* - * Print error and return... - */ - - mxml_error("Early EOF in CDATA node!"); - goto error; - } - - - /* - * Otherwise add this as an element under the current parent... - */ - - *bufptr = '\0'; - - if (!parent && first) - { - /* - * There can only be one root element! - */ - - mxml_error("<%s> cannot be a second root node after <%s>", - buffer, first->value.element.name); - goto error; - } - - if ((node = mxmlNewElement(parent, buffer)) == NULL) - { - /* - * Print error and return... - */ - - mxml_error("Unable to add CDATA node to parent <%s>!", - parent ? parent->value.element.name : "null"); - goto error; - } - - if (sax_cb) - { - (*sax_cb)(node, MXML_SAX_CDATA, sax_data); - - if (!mxmlRelease(node)) - node = NULL; - } - - if (node && !first) - first = node; - } - else if (buffer[0] == '?') - { - /* - * Gather rest of processing instruction... - */ - - while ((ch = (*getc_cb)(p, &encoding)) != EOF) - { - if (ch == '>' && bufptr > buffer && bufptr[-1] == '?') - break; - else if (mxml_add_char(ch, &bufptr, &buffer, &bufsize)) - goto error; - } - - /* - * Error out if we didn't get the whole processing instruction... - */ - - if (ch != '>') - { - /* - * Print error and return... - */ - - mxml_error("Early EOF in processing instruction node!"); - goto error; - } - - /* - * Otherwise add this as an element under the current parent... - */ - - *bufptr = '\0'; - - if (!parent && first) - { - /* - * There can only be one root element! - */ - - mxml_error("<%s> cannot be a second root node after <%s>", - buffer, first->value.element.name); - goto error; - } - - if ((node = mxmlNewElement(parent, buffer)) == NULL) - { - /* - * Print error and return... - */ - - mxml_error("Unable to add processing instruction node to parent <%s>!", - parent ? parent->value.element.name : "null"); - goto error; - } - - if (sax_cb) - { - (*sax_cb)(node, MXML_SAX_DIRECTIVE, sax_data); - - if (!mxmlRelease(node)) - node = NULL; - } - - if (node) - { - if (!first) - first = node; - - if (!parent) - { - parent = node; - - if (cb) - type = (*cb)(parent); - } - } - } - else if (buffer[0] == '!') - { - /* - * Gather rest of declaration... - */ - - do - { - if (ch == '>') - break; - else - { - if (ch == '&') - if ((ch = mxml_get_entity(parent, p, &encoding, getc_cb)) == EOF) - goto error; - - if (mxml_add_char(ch, &bufptr, &buffer, &bufsize)) - goto error; - } - } - while ((ch = (*getc_cb)(p, &encoding)) != EOF); - - /* - * Error out if we didn't get the whole declaration... - */ - - if (ch != '>') - { - /* - * Print error and return... - */ - - mxml_error("Early EOF in declaration node!"); - goto error; - } - - /* - * Otherwise add this as an element under the current parent... - */ - - *bufptr = '\0'; - - if (!parent && first) - { - /* - * There can only be one root element! - */ - - mxml_error("<%s> cannot be a second root node after <%s>", - buffer, first->value.element.name); - goto error; - } - - if ((node = mxmlNewElement(parent, buffer)) == NULL) - { - /* - * Print error and return... - */ - - mxml_error("Unable to add declaration node to parent <%s>!", - parent ? parent->value.element.name : "null"); - goto error; - } - - if (sax_cb) - { - (*sax_cb)(node, MXML_SAX_DIRECTIVE, sax_data); - - if (!mxmlRelease(node)) - node = NULL; - } - - if (node) - { - if (!first) - first = node; - - if (!parent) - { - parent = node; - - if (cb) - type = (*cb)(parent); - } - } - } - else if (buffer[0] == '/') - { - /* - * Handle close tag... - */ - - if (!parent || strcmp(buffer + 1, parent->value.element.name)) - { - /* - * Close tag doesn't match tree; print an error for now... - */ - - mxml_error("Mismatched close tag <%s> under parent <%s>!", - buffer, parent ? parent->value.element.name : "(null)"); - goto error; - } - - /* - * Keep reading until we see >... - */ - - while (ch != '>' && ch != EOF) - ch = (*getc_cb)(p, &encoding); - - node = parent; - parent = parent->parent; - - if (sax_cb) - { - (*sax_cb)(node, MXML_SAX_ELEMENT_CLOSE, sax_data); - - if (!mxmlRelease(node) && first == node) - first = NULL; - } - - /* - * Ascend into the parent and set the value type as needed... - */ - - if (cb && parent) - type = (*cb)(parent); - } - else - { - /* - * Handle open tag... - */ - - if (!parent && first) - { - /* - * There can only be one root element! - */ - - mxml_error("<%s> cannot be a second root node after <%s>", - buffer, first->value.element.name); - goto error; - } - - if ((node = mxmlNewElement(parent, buffer)) == NULL) - { - /* - * Just print error for now... - */ - - mxml_error("Unable to add element node to parent <%s>!", - parent ? parent->value.element.name : "null"); - goto error; - } - - if (mxml_isspace(ch)) - { - if ((ch = mxml_parse_element(node, p, &encoding, getc_cb)) == EOF) - goto error; - } - else if (ch == '/') - { - if ((ch = (*getc_cb)(p, &encoding)) != '>') - { - mxml_error("Expected > but got '%c' instead for element <%s/>!", - ch, buffer); - mxmlDelete(node); - goto error; - } - - ch = '/'; - } - - if (sax_cb) - (*sax_cb)(node, MXML_SAX_ELEMENT_OPEN, sax_data); - - if (!first) - first = node; - - if (ch == EOF) - break; - - if (ch != '/') - { - /* - * Descend into this node, setting the value type as needed... - */ - - parent = node; - - if (cb && parent) - type = (*cb)(parent); - } - else if (sax_cb) - { - (*sax_cb)(node, MXML_SAX_ELEMENT_CLOSE, sax_data); - - if (!mxmlRelease(node) && first == node) - first = NULL; - } - } - - bufptr = buffer; - } - else if (ch == '&') - { - /* - * Add character entity to current buffer... - */ - - if ((ch = mxml_get_entity(parent, p, &encoding, getc_cb)) == EOF) - goto error; - - if (mxml_add_char(ch, &bufptr, &buffer, &bufsize)) - goto error; - } - else if (type == MXML_OPAQUE || type == MXML_CUSTOM || !mxml_isspace(ch)) - { - /* - * Add character to current buffer... - */ - - if (mxml_add_char(ch, &bufptr, &buffer, &bufsize)) - goto error; - } - } - - /* - * Free the string buffer - we don't need it anymore... - */ - - free(buffer); - - /* - * Find the top element and return it... - */ - - if (parent) - { - node = parent; - - while (parent->parent != top && parent->parent) - parent = parent->parent; - - if (node != parent) - { - mxml_error("Missing close tag under parent <%s>!", - node->value.element.name, - node->parent ? node->parent->value.element.name : "(null)"); - - mxmlDelete(first); - - return (NULL); - } - } - - if (parent) - return (parent); - else - return (first); - - /* - * Common error return... - */ - -error: - - mxmlDelete(first); - - free(buffer); - - return (NULL); -} - - -/* - * 'mxml_parse_element()' - Parse an element for any attributes... - */ - -static int /* O - Terminating character */ -mxml_parse_element( - mxml_node_t *node, /* I - Element node */ - void *p, /* I - Data to read from */ - int *encoding, /* IO - Encoding */ - _mxml_getc_cb_t getc_cb) /* I - Data callback */ -{ - int ch, /* Current character in file */ - quote; /* Quoting character */ - char *name, /* Attribute name */ - *value, /* Attribute value */ - *ptr; /* Pointer into name/value */ - int namesize, /* Size of name string */ - valsize; /* Size of value string */ - - - /* - * Initialize the name and value buffers... - */ - - if ((name = malloc(64)) == NULL) - { - mxml_error("Unable to allocate memory for name!"); - return (EOF); - } - - namesize = 64; - - if ((value = malloc(64)) == NULL) - { - free(name); - mxml_error("Unable to allocate memory for value!"); - return (EOF); - } - - valsize = 64; - - /* - * Loop until we hit a >, /, ?, or EOF... - */ - - while ((ch = (*getc_cb)(p, encoding)) != EOF) - { -#if DEBUG > 1 - fprintf(stderr, "parse_element: ch='%c'\n", ch); -#endif /* DEBUG > 1 */ - - /* - * Skip leading whitespace... - */ - - if (mxml_isspace(ch)) - continue; - - /* - * Stop at /, ?, or >... - */ - - if (ch == '/' || ch == '?') - { - /* - * Grab the > character and print an error if it isn't there... - */ - - quote = (*getc_cb)(p, encoding); - - if (quote != '>') - { - mxml_error("Expected '>' after '%c' for element %s, but got '%c'!", - ch, node->value.element.name, quote); - goto error; - } - - break; - } - else if (ch == '<') - { - mxml_error("Bare < in element %s!", node->value.element.name); - goto error; - } - else if (ch == '>') - break; - - /* - * Read the attribute name... - */ - - name[0] = ch; - ptr = name + 1; - - if (ch == '\"' || ch == '\'') - { - /* - * Name is in quotes, so get a quoted string... - */ - - quote = ch; - - while ((ch = (*getc_cb)(p, encoding)) != EOF) - { - if (ch == '&') - if ((ch = mxml_get_entity(node, p, encoding, getc_cb)) == EOF) - goto error; - - if (mxml_add_char(ch, &ptr, &name, &namesize)) - goto error; - - if (ch == quote) - break; - } - } - else - { - /* - * Grab an normal, non-quoted name... - */ - - while ((ch = (*getc_cb)(p, encoding)) != EOF) - if (mxml_isspace(ch) || ch == '=' || ch == '/' || ch == '>' || - ch == '?') - break; - else - { - if (ch == '&') - if ((ch = mxml_get_entity(node, p, encoding, getc_cb)) == EOF) - goto error; - - if (mxml_add_char(ch, &ptr, &name, &namesize)) - goto error; - } - } - - *ptr = '\0'; - - if (mxmlElementGetAttr(node, name)) - goto error; - - while (ch != EOF && mxml_isspace(ch)) - ch = (*getc_cb)(p, encoding); - - if (ch == '=') - { - /* - * Read the attribute value... - */ - - while ((ch = (*getc_cb)(p, encoding)) != EOF && mxml_isspace(ch)); - - if (ch == EOF) - { - mxml_error("Missing value for attribute '%s' in element %s!", - name, node->value.element.name); - goto error; - } - - if (ch == '\'' || ch == '\"') - { - /* - * Read quoted value... - */ - - quote = ch; - ptr = value; - - while ((ch = (*getc_cb)(p, encoding)) != EOF) - if (ch == quote) - break; - else - { - if (ch == '&') - if ((ch = mxml_get_entity(node, p, encoding, getc_cb)) == EOF) - goto error; - - if (mxml_add_char(ch, &ptr, &value, &valsize)) - goto error; - } - - *ptr = '\0'; - } - else - { - /* - * Read unquoted value... - */ - - value[0] = ch; - ptr = value + 1; - - while ((ch = (*getc_cb)(p, encoding)) != EOF) - if (mxml_isspace(ch) || ch == '=' || ch == '/' || ch == '>') - break; - else - { - if (ch == '&') - if ((ch = mxml_get_entity(node, p, encoding, getc_cb)) == EOF) - goto error; - - if (mxml_add_char(ch, &ptr, &value, &valsize)) - goto error; - } - - *ptr = '\0'; - } - - /* - * Set the attribute with the given string value... - */ - - mxmlElementSetAttr(node, name, value); - } - else - { - mxml_error("Missing value for attribute '%s' in element %s!", - name, node->value.element.name); - goto error; - } - - /* - * Check the end character... - */ - - if (ch == '/' || ch == '?') - { - /* - * Grab the > character and print an error if it isn't there... - */ - - quote = (*getc_cb)(p, encoding); - - if (quote != '>') - { - mxml_error("Expected '>' after '%c' for element %s, but got '%c'!", - ch, node->value.element.name, quote); - ch = EOF; - } - - break; - } - else if (ch == '>') - break; - } - - /* - * Free the name and value buffers and return... - */ - - free(name); - free(value); - - return (ch); - - /* - * Common error return point... - */ - -error: - - free(name); - free(value); - - return (EOF); -} - - -/* - * 'mxml_string_getc()' - Get a character from a string. - */ - -static int /* O - Character or EOF */ -mxml_string_getc(void *p, /* I - Pointer to file */ - int *encoding) /* IO - Encoding */ -{ - int ch; /* Character */ - const char **s; /* Pointer to string pointer */ - - - s = (const char **)p; - - if ((ch = (*s)[0] & 255) != 0 || *encoding == ENCODE_UTF16LE) - { - /* - * Got character; convert UTF-8 to integer and return... - */ - - (*s)++; - - switch (*encoding) - { - case ENCODE_UTF8 : - if (!(ch & 0x80)) - { -#if DEBUG > 1 - printf("mxml_string_getc: %c (0x%04x)\n", ch < ' ' ? '.' : ch, ch); -#endif /* DEBUG > 1 */ - - if (mxml_bad_char(ch)) - { - mxml_error("Bad control character 0x%02x not allowed by XML standard!", - ch); - return (EOF); - } - - return (ch); - } - else if (ch == 0xfe) - { - /* - * UTF-16 big-endian BOM? - */ - - if (((*s)[0] & 255) != 0xff) - return (EOF); - - *encoding = ENCODE_UTF16BE; - (*s)++; - - return (mxml_string_getc(p, encoding)); - } - else if (ch == 0xff) - { - /* - * UTF-16 little-endian BOM? - */ - - if (((*s)[0] & 255) != 0xfe) - return (EOF); - - *encoding = ENCODE_UTF16LE; - (*s)++; - - return (mxml_string_getc(p, encoding)); - } - else if ((ch & 0xe0) == 0xc0) - { - /* - * Two-byte value... - */ - - if (((*s)[0] & 0xc0) != 0x80) - return (EOF); - - ch = ((ch & 0x1f) << 6) | ((*s)[0] & 0x3f); - - (*s)++; - - if (ch < 0x80) - { - mxml_error("Invalid UTF-8 sequence for character 0x%04x!", ch); - return (EOF); - } - -#if DEBUG > 1 - printf("mxml_string_getc: %c (0x%04x)\n", ch < ' ' ? '.' : ch, ch); -#endif /* DEBUG > 1 */ - - return (ch); - } - else if ((ch & 0xf0) == 0xe0) - { - /* - * Three-byte value... - */ - - if (((*s)[0] & 0xc0) != 0x80 || - ((*s)[1] & 0xc0) != 0x80) - return (EOF); - - ch = ((((ch & 0x0f) << 6) | ((*s)[0] & 0x3f)) << 6) | ((*s)[1] & 0x3f); - - (*s) += 2; - - if (ch < 0x800) - { - mxml_error("Invalid UTF-8 sequence for character 0x%04x!", ch); - return (EOF); - } - - /* - * Ignore (strip) Byte Order Mark (BOM)... - */ - - if (ch == 0xfeff) - return (mxml_string_getc(p, encoding)); - -#if DEBUG > 1 - printf("mxml_string_getc: %c (0x%04x)\n", ch < ' ' ? '.' : ch, ch); -#endif /* DEBUG > 1 */ - - return (ch); - } - else if ((ch & 0xf8) == 0xf0) - { - /* - * Four-byte value... - */ - - if (((*s)[0] & 0xc0) != 0x80 || - ((*s)[1] & 0xc0) != 0x80 || - ((*s)[2] & 0xc0) != 0x80) - return (EOF); - - ch = ((((((ch & 0x07) << 6) | ((*s)[0] & 0x3f)) << 6) | - ((*s)[1] & 0x3f)) << 6) | ((*s)[2] & 0x3f); - - (*s) += 3; - - if (ch < 0x10000) - { - mxml_error("Invalid UTF-8 sequence for character 0x%04x!", ch); - return (EOF); - } - -#if DEBUG > 1 - printf("mxml_string_getc: %c (0x%04x)\n", ch < ' ' ? '.' : ch, ch); -#endif /* DEBUG > 1 */ - - return (ch); - } - else - return (EOF); - - case ENCODE_UTF16BE : - /* - * Read UTF-16 big-endian char... - */ - - ch = (ch << 8) | ((*s)[0] & 255); - (*s) ++; - - if (mxml_bad_char(ch)) - { - mxml_error("Bad control character 0x%02x not allowed by XML standard!", - ch); - return (EOF); - } - else if (ch >= 0xd800 && ch <= 0xdbff) - { - /* - * Multi-word UTF-16 char... - */ - - int lch; /* Lower word */ - - - if (!(*s)[0]) - return (EOF); - - lch = (((*s)[0] & 255) << 8) | ((*s)[1] & 255); - (*s) += 2; - - if (lch < 0xdc00 || lch >= 0xdfff) - return (EOF); - - ch = (((ch & 0x3ff) << 10) | (lch & 0x3ff)) + 0x10000; - } - -#if DEBUG > 1 - printf("mxml_string_getc: %c (0x%04x)\n", ch < ' ' ? '.' : ch, ch); -#endif /* DEBUG > 1 */ - - return (ch); - - case ENCODE_UTF16LE : - /* - * Read UTF-16 little-endian char... - */ - - ch = ch | (((*s)[0] & 255) << 8); - - if (!ch) - { - (*s) --; - return (EOF); - } - - (*s) ++; - - if (mxml_bad_char(ch)) - { - mxml_error("Bad control character 0x%02x not allowed by XML standard!", - ch); - return (EOF); - } - else if (ch >= 0xd800 && ch <= 0xdbff) - { - /* - * Multi-word UTF-16 char... - */ - - int lch; /* Lower word */ - - - if (!(*s)[1]) - return (EOF); - - lch = (((*s)[1] & 255) << 8) | ((*s)[0] & 255); - (*s) += 2; - - if (lch < 0xdc00 || lch >= 0xdfff) - return (EOF); - - ch = (((ch & 0x3ff) << 10) | (lch & 0x3ff)) + 0x10000; - } - -#if DEBUG > 1 - printf("mxml_string_getc: %c (0x%04x)\n", ch < ' ' ? '.' : ch, ch); -#endif /* DEBUG > 1 */ - - return (ch); - } - } - - return (EOF); -} - - -/* - * 'mxml_string_putc()' - Write a character to a string. - */ - -static int /* O - 0 on success, -1 on failure */ -mxml_string_putc(int ch, /* I - Character to write */ - void *p) /* I - Pointer to string pointers */ -{ - char **pp; /* Pointer to string pointers */ - - - pp = (char **)p; - - if (pp[0] < pp[1]) - pp[0][0] = ch; - - pp[0] ++; - - return (0); -} - - -/* - * 'mxml_write_name()' - Write a name string. - */ - -static int /* O - 0 on success, -1 on failure */ -mxml_write_name(const char *s, /* I - Name to write */ - void *p, /* I - Write pointer */ - int (*putc_cb)(int, void *)) - /* I - Write callback */ -{ - char quote; /* Quote character */ - const char *name; /* Entity name */ - - - if (*s == '\"' || *s == '\'') - { - /* - * Write a quoted name string... - */ - - if ((*putc_cb)(*s, p) < 0) - return (-1); - - quote = *s++; - - while (*s && *s != quote) - { - if ((name = mxmlEntityGetName(*s)) != NULL) - { - if ((*putc_cb)('&', p) < 0) - return (-1); - - while (*name) - { - if ((*putc_cb)(*name, p) < 0) - return (-1); - - name ++; - } - - if ((*putc_cb)(';', p) < 0) - return (-1); - } - else if ((*putc_cb)(*s, p) < 0) - return (-1); - - s ++; - } - - /* - * Write the end quote... - */ - - if ((*putc_cb)(quote, p) < 0) - return (-1); - } - else - { - /* - * Write a non-quoted name string... - */ - - while (*s) - { - if ((*putc_cb)(*s, p) < 0) - return (-1); - - s ++; - } - } - - return (0); -} - - -/* - * 'mxml_write_node()' - Save an XML node to a file. - */ - -static int /* O - Column or -1 on error */ -mxml_write_node(mxml_node_t *node, /* I - Node to write */ - void *p, /* I - File to write to */ - mxml_save_cb_t cb, /* I - Whitespace callback */ - int col, /* I - Current column */ - _mxml_putc_cb_t putc_cb,/* I - Output callback */ - _mxml_global_t *global)/* I - Global data */ -{ - int i, /* Looping var */ - width; /* Width of attr + value */ - mxml_attr_t *attr; /* Current attribute */ - char s[255]; /* Temporary string */ - - - /* - * Print the node value... - */ - - switch (node->type) - { - case MXML_ELEMENT : - col = mxml_write_ws(node, p, cb, MXML_WS_BEFORE_OPEN, col, putc_cb); - - if ((*putc_cb)('<', p) < 0) - return (-1); - if (node->value.element.name[0] == '?' || - !strncmp(node->value.element.name, "!--", 3) || - !strncmp(node->value.element.name, "![CDATA[", 8)) - { - /* - * Comments, CDATA, and processing instructions do not - * use character entities. - */ - - const char *ptr; /* Pointer into name */ - - - for (ptr = node->value.element.name; *ptr; ptr ++) - if ((*putc_cb)(*ptr, p) < 0) - return (-1); - } - else if (mxml_write_name(node->value.element.name, p, putc_cb) < 0) - return (-1); - - col += strlen(node->value.element.name) + 1; - - for (i = node->value.element.num_attrs, attr = node->value.element.attrs; - i > 0; - i --, attr ++) - { - width = strlen(attr->name); - - if (attr->value) - width += strlen(attr->value) + 3; - - if (global->wrap > 0 && (col + width) > global->wrap) - { - if ((*putc_cb)('\n', p) < 0) - return (-1); - - col = 0; - } - else - { - if ((*putc_cb)(' ', p) < 0) - return (-1); - - col ++; - } - - if (mxml_write_name(attr->name, p, putc_cb) < 0) - return (-1); - - if (attr->value) - { - if ((*putc_cb)('=', p) < 0) - return (-1); - if ((*putc_cb)('\"', p) < 0) - return (-1); - if (mxml_write_string(attr->value, p, putc_cb) < 0) - return (-1); - if ((*putc_cb)('\"', p) < 0) - return (-1); - } - - col += width; - } - - if (node->child) - { - /* - * Write children... - */ - - mxml_node_t *child; /* Current child */ - - - if ((*putc_cb)('>', p) < 0) - return (-1); - else - col ++; - - col = mxml_write_ws(node, p, cb, MXML_WS_AFTER_OPEN, col, putc_cb); - - for (child = node->child; child; child = child->next) - { - if ((col = mxml_write_node(child, p, cb, col, putc_cb, global)) < 0) - return (-1); - } - - /* - * The ? and ! elements are special-cases and have no end tags... - */ - - if (node->value.element.name[0] != '!' && - node->value.element.name[0] != '?') - { - col = mxml_write_ws(node, p, cb, MXML_WS_BEFORE_CLOSE, col, putc_cb); - - if ((*putc_cb)('<', p) < 0) - return (-1); - if ((*putc_cb)('/', p) < 0) - return (-1); - if (mxml_write_string(node->value.element.name, p, putc_cb) < 0) - return (-1); - if ((*putc_cb)('>', p) < 0) - return (-1); - - col += strlen(node->value.element.name) + 3; - - col = mxml_write_ws(node, p, cb, MXML_WS_AFTER_CLOSE, col, putc_cb); - } - } - else if (node->value.element.name[0] == '!' || - node->value.element.name[0] == '?') - { - /* - * The ? and ! elements are special-cases... - */ - - if ((*putc_cb)('>', p) < 0) - return (-1); - else - col ++; - - col = mxml_write_ws(node, p, cb, MXML_WS_AFTER_OPEN, col, putc_cb); - } - else - { - if ((*putc_cb)(' ', p) < 0) - return (-1); - if ((*putc_cb)('/', p) < 0) - return (-1); - if ((*putc_cb)('>', p) < 0) - return (-1); - - col += 3; - - col = mxml_write_ws(node, p, cb, MXML_WS_AFTER_OPEN, col, putc_cb); - } - break; - - case MXML_INTEGER : - if (node->prev) - { - if (global->wrap > 0 && col > global->wrap) - { - if ((*putc_cb)('\n', p) < 0) - return (-1); - - col = 0; - } - else if ((*putc_cb)(' ', p) < 0) - return (-1); - else - col ++; - } - - sprintf(s, "%d", node->value.integer); - if (mxml_write_string(s, p, putc_cb) < 0) - return (-1); - - col += strlen(s); - break; - - case MXML_OPAQUE : - if (mxml_write_string(node->value.opaque, p, putc_cb) < 0) - return (-1); - - col += strlen(node->value.opaque); - break; - - case MXML_REAL : - if (node->prev) - { - if (global->wrap > 0 && col > global->wrap) - { - if ((*putc_cb)('\n', p) < 0) - return (-1); - - col = 0; - } - else if ((*putc_cb)(' ', p) < 0) - return (-1); - else - col ++; - } - - sprintf(s, "%f", node->value.real); - if (mxml_write_string(s, p, putc_cb) < 0) - return (-1); - - col += strlen(s); - break; - - case MXML_TEXT : - if (node->value.text.whitespace && col > 0) - { - if (global->wrap > 0 && col > global->wrap) - { - if ((*putc_cb)('\n', p) < 0) - return (-1); - - col = 0; - } - else if ((*putc_cb)(' ', p) < 0) - return (-1); - else - col ++; - } - - if (mxml_write_string(node->value.text.string, p, putc_cb) < 0) - return (-1); - - col += strlen(node->value.text.string); - break; - - case MXML_CUSTOM : - if (global->custom_save_cb) - { - char *data; /* Custom data string */ - const char *newline; /* Last newline in string */ - - - if ((data = (*global->custom_save_cb)(node)) == NULL) - return (-1); - - if (mxml_write_string(data, p, putc_cb) < 0) - return (-1); - - if ((newline = strrchr(data, '\n')) == NULL) - col += strlen(data); - else - col = strlen(newline); - - free(data); - break; - } - - default : /* Should never happen */ - return (-1); - } - - return (col); -} - - -/* - * 'mxml_write_string()' - Write a string, escaping & and < as needed. - */ - -static int /* O - 0 on success, -1 on failure */ -mxml_write_string( - const char *s, /* I - String to write */ - void *p, /* I - Write pointer */ - _mxml_putc_cb_t putc_cb) /* I - Write callback */ -{ - const char *name; /* Entity name, if any */ - - - while (*s) - { - if ((name = mxmlEntityGetName(*s)) != NULL) - { - if ((*putc_cb)('&', p) < 0) - return (-1); - - while (*name) - { - if ((*putc_cb)(*name, p) < 0) - return (-1); - name ++; - } - - if ((*putc_cb)(';', p) < 0) - return (-1); - } - else if ((*putc_cb)(*s, p) < 0) - return (-1); - - s ++; - } - - return (0); -} - - -/* - * 'mxml_write_ws()' - Do whitespace callback... - */ - -static int /* O - New column */ -mxml_write_ws(mxml_node_t *node, /* I - Current node */ - void *p, /* I - Write pointer */ - mxml_save_cb_t cb, /* I - Callback function */ - int ws, /* I - Where value */ - int col, /* I - Current column */ - _mxml_putc_cb_t putc_cb) /* I - Write callback */ -{ - const char *s; /* Whitespace string */ - - - if (cb && (s = (*cb)(node, ws)) != NULL) - { - while (*s) - { - if ((*putc_cb)(*s, p) < 0) - return (-1); - else if (*s == '\n') - col = 0; - else if (*s == '\t') - { - col += MXML_TAB; - col = col - (col % MXML_TAB); - } - else - col ++; - - s ++; - } - } - - return (col); -} - - -/* - * End of "$Id: mxml-file.c 438 2011-03-24 05:47:51Z mike $". - */ diff --git a/ogl_editor/src/External/mxml/mxml-get.c b/ogl_editor/src/External/mxml/mxml-get.c deleted file mode 100644 index a5356d5..0000000 --- a/ogl_editor/src/External/mxml/mxml-get.c +++ /dev/null @@ -1,471 +0,0 @@ -/* - * "$Id: mxml-get.c 427 2011-01-03 02:03:29Z mike $" - * - * Node get functions for Mini-XML, a small XML-like file parsing library. - * - * Copyright 2011 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - * - * Contents: - * - * mxmlGetCDATA() - Get the value for a CDATA node. - * mxmlGetCustom() - Get the value for a custom node. - * mxmlGetElement() - Get the name for an element node. - * mxmlGetFirstChild() - Get the first child of an element node. - * mxmlGetInteger() - Get the integer value from the specified node or its - * first child. - * mxmlGetLastChild() - Get the last child of an element node. - * mxmlGetNextSibling() - Get the next node for the current parent. - * mxmlGetOpaque() - Get an opaque string value for a node or its first - * child. - * mxmlGetParent() - Get the parent node. - * mxmlGetPrevSibling() - Get the previous node for the current parent. - * mxmlGetReal() - Get the real value for a node or its first child. - * mxmlGetText() - Get the text value for a node or its first child. - * mxmlGetType() - Get the node type. - * mxmlGetUserData() - Get the user data pointer for a node. - */ - -/* - * Include necessary headers... - */ - -#include "config.h" -#include "mxml.h" - - -/* - * 'mxmlGetCDATA()' - Get the value for a CDATA node. - * - * @code NULL@ is returned if the node is not a CDATA element. - * - * @since Mini-XML 2.7@ - */ - -const char * /* O - CDATA value or NULL */ -mxmlGetCDATA(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node || node->type != MXML_ELEMENT || - strncmp(node->value.element.name, "![CDATA[", 8)) - return (NULL); - - /* - * Return the text following the CDATA declaration... - */ - - return (node->value.element.name + 8); -} - - -/* - * 'mxmlGetCustom()' - Get the value for a custom node. - * - * @code NULL@ is returned if the node (or its first child) is not a custom - * value node. - * - * @since Mini-XML 2.7@ - */ - -const void * /* O - Custom value or NULL */ -mxmlGetCustom(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node) - return (NULL); - - /* - * Return the integer value... - */ - - if (node->type == MXML_CUSTOM) - return (node->value.custom.data); - else if (node->type == MXML_ELEMENT && - node->child && - node->child->type == MXML_CUSTOM) - return (node->child->value.custom.data); - else - return (NULL); -} - - -/* - * 'mxmlGetElement()' - Get the name for an element node. - * - * @code NULL@ is returned if the node is not an element node. - * - * @since Mini-XML 2.7@ - */ - -const char * /* O - Element name or NULL */ -mxmlGetElement(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node || node->type != MXML_ELEMENT) - return (NULL); - - /* - * Return the element name... - */ - - return (node->value.element.name); -} - - -/* - * 'mxmlGetFirstChild()' - Get the first child of an element node. - * - * @code NULL@ is returned if the node is not an element node or if the node - * has no children. - * - * @since Mini-XML 2.7@ - */ - -mxml_node_t * /* O - First child or NULL */ -mxmlGetFirstChild(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node || node->type != MXML_ELEMENT) - return (NULL); - - /* - * Return the first child node... - */ - - return (node->child); -} - - -/* - * 'mxmlGetInteger()' - Get the integer value from the specified node or its - * first child. - * - * 0 is returned if the node (or its first child) is not an integer value node. - * - * @since Mini-XML 2.7@ - */ - -int /* O - Integer value or 0 */ -mxmlGetInteger(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node) - return (0); - - /* - * Return the integer value... - */ - - if (node->type == MXML_INTEGER) - return (node->value.integer); - else if (node->type == MXML_ELEMENT && - node->child && - node->child->type == MXML_INTEGER) - return (node->child->value.integer); - else - return (0); -} - - -/* - * 'mxmlGetLastChild()' - Get the last child of an element node. - * - * @code NULL@ is returned if the node is not an element node or if the node - * has no children. - * - * @since Mini-XML 2.7@ - */ - -mxml_node_t * /* O - Last child or NULL */ -mxmlGetLastChild(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node || node->type != MXML_ELEMENT) - return (NULL); - - /* - * Return the node type... - */ - - return (node->last_child); -} - - -/* - * 'mxmlGetNextSibling()' - Get the next node for the current parent. - * - * @code NULL@ is returned if this is the last child for the current parent. - * - * @since Mini-XML 2.7@ - */ - -mxml_node_t * -mxmlGetNextSibling(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node) - return (NULL); - - /* - * Return the node type... - */ - - return (node->next); -} - - -/* - * 'mxmlGetOpaque()' - Get an opaque string value for a node or its first child. - * - * @code NULL@ is returned if the node (or its first child) is not an opaque - * value node. - * - * @since Mini-XML 2.7@ - */ - -const char * /* O - Opaque string or NULL */ -mxmlGetOpaque(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node) - return (NULL); - - /* - * Return the integer value... - */ - - if (node->type == MXML_OPAQUE) - return (node->value.opaque); - else if (node->type == MXML_ELEMENT && - node->child && - node->child->type == MXML_OPAQUE) - return (node->child->value.opaque); - else - return (NULL); -} - - -/* - * 'mxmlGetParent()' - Get the parent node. - * - * @code NULL@ is returned for a root node. - * - * @since Mini-XML 2.7@ - */ - -mxml_node_t * /* O - Parent node or NULL */ -mxmlGetParent(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node) - return (NULL); - - /* - * Return the node type... - */ - - return (node->parent); -} - - -/* - * 'mxmlGetPrevSibling()' - Get the previous node for the current parent. - * - * @code NULL@ is returned if this is the first child for the current parent. - * - * @since Mini-XML 2.7@ - */ - -mxml_node_t * /* O - Previous node or NULL */ -mxmlGetPrevSibling(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node) - return (NULL); - - /* - * Return the node type... - */ - - return (node->prev); -} - - -/* - * 'mxmlGetReal()' - Get the real value for a node or its first child. - * - * 0.0 is returned if the node (or its first child) is not a real value node. - * - * @since Mini-XML 2.7@ - */ - -double /* O - Real value or 0.0 */ -mxmlGetReal(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node) - return (0.0); - - /* - * Return the integer value... - */ - - if (node->type == MXML_REAL) - return (node->value.real); - else if (node->type == MXML_ELEMENT && - node->child && - node->child->type == MXML_REAL) - return (node->child->value.real); - else - return (0.0); -} - - -/* - * 'mxmlGetText()' - Get the text value for a node or its first child. - * - * @code NULL@ is returned if the node (or its first child) is not a text node. - * The "whitespace" argument can be NULL. - * - * @since Mini-XML 2.7@ - */ - -const char * /* O - Text string or NULL */ -mxmlGetText(mxml_node_t *node, /* I - Node to get */ - int *whitespace) /* O - 1 if string is preceded by whitespace, 0 otherwise */ -{ - /* - * Range check input... - */ - - if (!node) - { - if (whitespace) - *whitespace = 0; - - return (NULL); - } - - /* - * Return the integer value... - */ - - if (node->type == MXML_TEXT) - { - if (whitespace) - *whitespace = node->value.text.whitespace; - - return (node->value.text.string); - } - else if (node->type == MXML_ELEMENT && - node->child && - node->child->type == MXML_TEXT) - { - if (whitespace) - *whitespace = node->child->value.text.whitespace; - - return (node->child->value.text.string); - } - else - { - if (whitespace) - *whitespace = 0; - - return (NULL); - } -} - - -/* - * 'mxmlGetType()' - Get the node type. - * - * @code MXML_IGNORE@ is returned if "node" is @code NULL@. - * - * @since Mini-XML 2.7@ - */ - -mxml_type_t /* O - Type of node */ -mxmlGetType(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node) - return (MXML_IGNORE); - - /* - * Return the node type... - */ - - return (node->type); -} - - -/* - * 'mxmlGetUserData()' - Get the user data pointer for a node. - * - * @since Mini-XML 2.7@ - */ - -void * /* O - User data pointer */ -mxmlGetUserData(mxml_node_t *node) /* I - Node to get */ -{ - /* - * Range check input... - */ - - if (!node) - return (NULL); - - /* - * Return the user data pointer... - */ - - return (node->user_data); -} - - -/* - * End of "$Id: mxml-get.c 427 2011-01-03 02:03:29Z mike $". - */ diff --git a/ogl_editor/src/External/mxml/mxml-index.c b/ogl_editor/src/External/mxml/mxml-index.c deleted file mode 100644 index b6efc66..0000000 --- a/ogl_editor/src/External/mxml/mxml-index.c +++ /dev/null @@ -1,662 +0,0 @@ -/* - * "$Id: mxml-index.c 426 2011-01-01 23:42:17Z mike $" - * - * Index support code for Mini-XML, a small XML-like file parsing library. - * - * Copyright 2003-2011 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - * - * Contents: - * - */ - -/* - * Include necessary headers... - */ - -#include "config.h" -#include "mxml.h" - - -/* - * Sort functions... - */ - -static int index_compare(mxml_index_t *ind, mxml_node_t *first, - mxml_node_t *second); -static int index_find(mxml_index_t *ind, const char *element, - const char *value, mxml_node_t *node); -static void index_sort(mxml_index_t *ind, int left, int right); - - -/* - * 'mxmlIndexDelete()' - Delete an index. - */ - -void -mxmlIndexDelete(mxml_index_t *ind) /* I - Index to delete */ -{ - /* - * Range check input.. - */ - - if (!ind) - return; - - /* - * Free memory... - */ - - if (ind->attr) - free(ind->attr); - - if (ind->alloc_nodes) - free(ind->nodes); - - free(ind); -} - - -/* - * 'mxmlIndexEnum()' - Return the next node in the index. - * - * Nodes are returned in the sorted order of the index. - */ - -mxml_node_t * /* O - Next node or NULL if there is none */ -mxmlIndexEnum(mxml_index_t *ind) /* I - Index to enumerate */ -{ - /* - * Range check input... - */ - - if (!ind) - return (NULL); - - /* - * Return the next node... - */ - - if (ind->cur_node < ind->num_nodes) - return (ind->nodes[ind->cur_node ++]); - else - return (NULL); -} - - -/* - * 'mxmlIndexFind()' - Find the next matching node. - * - * You should call mxmlIndexReset() prior to using this function for - * the first time with a particular set of "element" and "value" - * strings. Passing NULL for both "element" and "value" is equivalent - * to calling mxmlIndexEnum(). - */ - -mxml_node_t * /* O - Node or NULL if none found */ -mxmlIndexFind(mxml_index_t *ind, /* I - Index to search */ - const char *element, /* I - Element name to find, if any */ - const char *value) /* I - Attribute value, if any */ -{ - int diff, /* Difference between names */ - current, /* Current entity in search */ - first, /* First entity in search */ - last; /* Last entity in search */ - - -#ifdef DEBUG - printf("mxmlIndexFind(ind=%p, element=\"%s\", value=\"%s\")\n", - ind, element ? element : "(null)", value ? value : "(null)"); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!ind || (!ind->attr && value)) - { -#ifdef DEBUG - puts(" returning NULL..."); - printf(" ind->attr=\"%s\"\n", ind->attr ? ind->attr : "(null)"); -#endif /* DEBUG */ - - return (NULL); - } - - /* - * If both element and value are NULL, just enumerate the nodes in the - * index... - */ - - if (!element && !value) - return (mxmlIndexEnum(ind)); - - /* - * If there are no nodes in the index, return NULL... - */ - - if (!ind->num_nodes) - { -#ifdef DEBUG - puts(" returning NULL..."); - puts(" no nodes!"); -#endif /* DEBUG */ - - return (NULL); - } - - /* - * If cur_node == 0, then find the first matching node... - */ - - if (ind->cur_node == 0) - { - /* - * Find the first node using a modified binary search algorithm... - */ - - first = 0; - last = ind->num_nodes - 1; - -#ifdef DEBUG - printf(" find first time, num_nodes=%d...\n", ind->num_nodes); -#endif /* DEBUG */ - - while ((last - first) > 1) - { - current = (first + last) / 2; - -#ifdef DEBUG - printf(" first=%d, last=%d, current=%d\n", first, last, current); -#endif /* DEBUG */ - - if ((diff = index_find(ind, element, value, ind->nodes[current])) == 0) - { - /* - * Found a match, move back to find the first... - */ - -#ifdef DEBUG - puts(" match!"); -#endif /* DEBUG */ - - while (current > 0 && - !index_find(ind, element, value, ind->nodes[current - 1])) - current --; - -#ifdef DEBUG - printf(" returning first match=%d\n", current); -#endif /* DEBUG */ - - /* - * Return the first match and save the index to the next... - */ - - ind->cur_node = current + 1; - - return (ind->nodes[current]); - } - else if (diff < 0) - last = current; - else - first = current; - -#ifdef DEBUG - printf(" diff=%d\n", diff); -#endif /* DEBUG */ - } - - /* - * If we get this far, then we found exactly 0 or 1 matches... - */ - - for (current = first; current <= last; current ++) - if (!index_find(ind, element, value, ind->nodes[current])) - { - /* - * Found exactly one (or possibly two) match... - */ - -#ifdef DEBUG - printf(" returning only match %d...\n", current); -#endif /* DEBUG */ - - ind->cur_node = current + 1; - - return (ind->nodes[current]); - } - - /* - * No matches... - */ - - ind->cur_node = ind->num_nodes; - -#ifdef DEBUG - puts(" returning NULL..."); -#endif /* DEBUG */ - - return (NULL); - } - else if (ind->cur_node < ind->num_nodes && - !index_find(ind, element, value, ind->nodes[ind->cur_node])) - { - /* - * Return the next matching node... - */ - -#ifdef DEBUG - printf(" returning next match %d...\n", ind->cur_node); -#endif /* DEBUG */ - - return (ind->nodes[ind->cur_node ++]); - } - - /* - * If we get this far, then we have no matches... - */ - - ind->cur_node = ind->num_nodes; - -#ifdef DEBUG - puts(" returning NULL..."); -#endif /* DEBUG */ - - return (NULL); -} - - -/* - * 'mxmlIndexGetCount()' - Get the number of nodes in an index. - * - * @since Mini-XML 2.7@ - */ - -int /* I - Number of nodes in index */ -mxmlIndexGetCount(mxml_index_t *ind) /* I - Index of nodes */ -{ - /* - * Range check input... - */ - - if (!ind) - return (0); - - /* - * Return the number of nodes in the index... - */ - - return (ind->num_nodes); -} - - -/* - * 'mxmlIndexNew()' - Create a new index. - * - * The index will contain all nodes that contain the named element and/or - * attribute. If both "element" and "attr" are NULL, then the index will - * contain a sorted list of the elements in the node tree. Nodes are - * sorted by element name and optionally by attribute value if the "attr" - * argument is not NULL. - */ - -mxml_index_t * /* O - New index */ -mxmlIndexNew(mxml_node_t *node, /* I - XML node tree */ - const char *element, /* I - Element to index or NULL for all */ - const char *attr) /* I - Attribute to index or NULL for none */ -{ - mxml_index_t *ind; /* New index */ - mxml_node_t *current, /* Current node in index */ - **temp; /* Temporary node pointer array */ - - - /* - * Range check input... - */ - -#ifdef DEBUG - printf("mxmlIndexNew(node=%p, element=\"%s\", attr=\"%s\")\n", - node, element ? element : "(null)", attr ? attr : "(null)"); -#endif /* DEBUG */ - - if (!node) - return (NULL); - - /* - * Create a new index... - */ - - if ((ind = calloc(1, sizeof(mxml_index_t))) == NULL) - { - mxml_error("Unable to allocate %d bytes for index - %s", - sizeof(mxml_index_t), strerror(errno)); - return (NULL); - } - - if (attr) - ind->attr = strdup(attr); - - if (!element && !attr) - current = node; - else - current = mxmlFindElement(node, node, element, attr, NULL, MXML_DESCEND); - - while (current) - { - if (ind->num_nodes >= ind->alloc_nodes) - { - if (!ind->alloc_nodes) - temp = malloc(64 * sizeof(mxml_node_t *)); - else - temp = realloc(ind->nodes, (ind->alloc_nodes + 64) * sizeof(mxml_node_t *)); - - if (!temp) - { - /* - * Unable to allocate memory for the index, so abort... - */ - - mxml_error("Unable to allocate %d bytes for index: %s", - (ind->alloc_nodes + 64) * sizeof(mxml_node_t *), - strerror(errno)); - - mxmlIndexDelete(ind); - return (NULL); - } - - ind->nodes = temp; - ind->alloc_nodes += 64; - } - - ind->nodes[ind->num_nodes ++] = current; - - current = mxmlFindElement(current, node, element, attr, NULL, MXML_DESCEND); - } - - /* - * Sort nodes based upon the search criteria... - */ - -#ifdef DEBUG - { - int i; /* Looping var */ - - - printf("%d node(s) in index.\n\n", ind->num_nodes); - - if (attr) - { - printf("Node Address Element %s\n", attr); - puts("-------- -------- -------------- ------------------------------"); - - for (i = 0; i < ind->num_nodes; i ++) - printf("%8d %-8p %-14.14s %s\n", i, ind->nodes[i], - ind->nodes[i]->value.element.name, - mxmlElementGetAttr(ind->nodes[i], attr)); - } - else - { - puts("Node Address Element"); - puts("-------- -------- --------------"); - - for (i = 0; i < ind->num_nodes; i ++) - printf("%8d %-8p %s\n", i, ind->nodes[i], - ind->nodes[i]->value.element.name); - } - - putchar('\n'); - } -#endif /* DEBUG */ - - if (ind->num_nodes > 1) - index_sort(ind, 0, ind->num_nodes - 1); - -#ifdef DEBUG - { - int i; /* Looping var */ - - - puts("After sorting:\n"); - - if (attr) - { - printf("Node Address Element %s\n", attr); - puts("-------- -------- -------------- ------------------------------"); - - for (i = 0; i < ind->num_nodes; i ++) - printf("%8d %-8p %-14.14s %s\n", i, ind->nodes[i], - ind->nodes[i]->value.element.name, - mxmlElementGetAttr(ind->nodes[i], attr)); - } - else - { - puts("Node Address Element"); - puts("-------- -------- --------------"); - - for (i = 0; i < ind->num_nodes; i ++) - printf("%8d %-8p %s\n", i, ind->nodes[i], - ind->nodes[i]->value.element.name); - } - - putchar('\n'); - } -#endif /* DEBUG */ - - /* - * Return the new index... - */ - - return (ind); -} - - -/* - * 'mxmlIndexReset()' - Reset the enumeration/find pointer in the index and - * return the first node in the index. - * - * This function should be called prior to using mxmlIndexEnum() or - * mxmlIndexFind() for the first time. - */ - -mxml_node_t * /* O - First node or NULL if there is none */ -mxmlIndexReset(mxml_index_t *ind) /* I - Index to reset */ -{ -#ifdef DEBUG - printf("mxmlIndexReset(ind=%p)\n", ind); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!ind) - return (NULL); - - /* - * Set the index to the first element... - */ - - ind->cur_node = 0; - - /* - * Return the first node... - */ - - if (ind->num_nodes) - return (ind->nodes[0]); - else - return (NULL); -} - - -/* - * 'index_compare()' - Compare two nodes. - */ - -static int /* O - Result of comparison */ -index_compare(mxml_index_t *ind, /* I - Index */ - mxml_node_t *first, /* I - First node */ - mxml_node_t *second) /* I - Second node */ -{ - int diff; /* Difference */ - - - /* - * Check the element name... - */ - - if ((diff = strcmp(first->value.element.name, - second->value.element.name)) != 0) - return (diff); - - /* - * Check the attribute value... - */ - - if (ind->attr) - { - if ((diff = strcmp(mxmlElementGetAttr(first, ind->attr), - mxmlElementGetAttr(second, ind->attr))) != 0) - return (diff); - } - - /* - * No difference, return 0... - */ - - return (0); -} - - -/* - * 'index_find()' - Compare a node with index values. - */ - -static int /* O - Result of comparison */ -index_find(mxml_index_t *ind, /* I - Index */ - const char *element, /* I - Element name or NULL */ - const char *value, /* I - Attribute value or NULL */ - mxml_node_t *node) /* I - Node */ -{ - int diff; /* Difference */ - - - /* - * Check the element name... - */ - - if (element) - { - if ((diff = strcmp(element, node->value.element.name)) != 0) - return (diff); - } - - /* - * Check the attribute value... - */ - - if (value) - { - if ((diff = strcmp(value, mxmlElementGetAttr(node, ind->attr))) != 0) - return (diff); - } - - /* - * No difference, return 0... - */ - - return (0); -} - - -/* - * 'index_sort()' - Sort the nodes in the index... - * - * This function implements the classic quicksort algorithm... - */ - -static void -index_sort(mxml_index_t *ind, /* I - Index to sort */ - int left, /* I - Left node in partition */ - int right) /* I - Right node in partition */ -{ - mxml_node_t *pivot, /* Pivot node */ - *temp; /* Swap node */ - int templ, /* Temporary left node */ - tempr; /* Temporary right node */ - - - /* - * Loop until we have sorted all the way to the right... - */ - - do - { - /* - * Sort the pivot in the current partition... - */ - - pivot = ind->nodes[left]; - - for (templ = left, tempr = right; templ < tempr;) - { - /* - * Move left while left node <= pivot node... - */ - - while ((templ < right) && - index_compare(ind, ind->nodes[templ], pivot) <= 0) - templ ++; - - /* - * Move right while right node > pivot node... - */ - - while ((tempr > left) && - index_compare(ind, ind->nodes[tempr], pivot) > 0) - tempr --; - - /* - * Swap nodes if needed... - */ - - if (templ < tempr) - { - temp = ind->nodes[templ]; - ind->nodes[templ] = ind->nodes[tempr]; - ind->nodes[tempr] = temp; - } - } - - /* - * When we get here, the right (tempr) node is the new position for the - * pivot node... - */ - - if (index_compare(ind, pivot, ind->nodes[tempr]) > 0) - { - ind->nodes[left] = ind->nodes[tempr]; - ind->nodes[tempr] = pivot; - } - - /* - * Recursively sort the left partition as needed... - */ - - if (left < (tempr - 1)) - index_sort(ind, left, tempr - 1); - } - while (right > (left = tempr + 1)); -} - - -/* - * End of "$Id: mxml-index.c 426 2011-01-01 23:42:17Z mike $". - */ diff --git a/ogl_editor/src/External/mxml/mxml-node.c b/ogl_editor/src/External/mxml/mxml-node.c deleted file mode 100644 index 44af759..0000000 --- a/ogl_editor/src/External/mxml/mxml-node.c +++ /dev/null @@ -1,807 +0,0 @@ -/* - * "$Id: mxml-node.c 436 2011-01-22 01:02:05Z mike $" - * - * Node support code for Mini-XML, a small XML-like file parsing library. - * - * Copyright 2003-2011 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - * - * Contents: - * - * mxmlAdd() - Add a node to a tree. - * mxmlDelete() - Delete a node and all of its children. - * mxmlGetRefCount() - Get the current reference (use) count for a node. - * mxmlNewCDATA() - Create a new CDATA node. - * mxmlNewCustom() - Create a new custom data node. - * mxmlNewElement() - Create a new element node. - * mxmlNewInteger() - Create a new integer node. - * mxmlNewOpaque() - Create a new opaque string. - * mxmlNewReal() - Create a new real number node. - * mxmlNewText() - Create a new text fragment node. - * mxmlNewTextf() - Create a new formatted text fragment node. - * mxmlRemove() - Remove a node from its parent. - * mxmlNewXML() - Create a new XML document tree. - * mxmlRelease() - Release a node. - * mxmlRetain() - Retain a node. - * mxml_new() - Create a new node. - */ - -/* - * Include necessary headers... - */ - -#include "config.h" -#include "mxml.h" - - -/* - * Local functions... - */ - -static mxml_node_t *mxml_new(mxml_node_t *parent, mxml_type_t type); - - -/* - * 'mxmlAdd()' - Add a node to a tree. - * - * Adds the specified node to the parent. If the child argument is not - * NULL, puts the new node before or after the specified child depending - * on the value of the where argument. If the child argument is NULL, - * puts the new node at the beginning of the child list (MXML_ADD_BEFORE) - * or at the end of the child list (MXML_ADD_AFTER). The constant - * MXML_ADD_TO_PARENT can be used to specify a NULL child pointer. - */ - -void -mxmlAdd(mxml_node_t *parent, /* I - Parent node */ - int where, /* I - Where to add, MXML_ADD_BEFORE or MXML_ADD_AFTER */ - mxml_node_t *child, /* I - Child node for where or MXML_ADD_TO_PARENT */ - mxml_node_t *node) /* I - Node to add */ -{ -#ifdef DEBUG - fprintf(stderr, "mxmlAdd(parent=%p, where=%d, child=%p, node=%p)\n", parent, - where, child, node); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!parent || !node) - return; - -#if DEBUG > 1 - fprintf(stderr, " BEFORE: node->parent=%p\n", node->parent); - if (parent) - { - fprintf(stderr, " BEFORE: parent->child=%p\n", parent->child); - fprintf(stderr, " BEFORE: parent->last_child=%p\n", parent->last_child); - fprintf(stderr, " BEFORE: parent->prev=%p\n", parent->prev); - fprintf(stderr, " BEFORE: parent->next=%p\n", parent->next); - } -#endif /* DEBUG > 1 */ - - /* - * Remove the node from any existing parent... - */ - - if (node->parent) - mxmlRemove(node); - - /* - * Reset pointers... - */ - - node->parent = parent; - - switch (where) - { - case MXML_ADD_BEFORE : - if (!child || child == parent->child || child->parent != parent) - { - /* - * Insert as first node under parent... - */ - - node->next = parent->child; - - if (parent->child) - parent->child->prev = node; - else - parent->last_child = node; - - parent->child = node; - } - else - { - /* - * Insert node before this child... - */ - - node->next = child; - node->prev = child->prev; - - if (child->prev) - child->prev->next = node; - else - parent->child = node; - - child->prev = node; - } - break; - - case MXML_ADD_AFTER : - if (!child || child == parent->last_child || child->parent != parent) - { - /* - * Insert as last node under parent... - */ - - node->parent = parent; - node->prev = parent->last_child; - - if (parent->last_child) - parent->last_child->next = node; - else - parent->child = node; - - parent->last_child = node; - } - else - { - /* - * Insert node after this child... - */ - - node->prev = child; - node->next = child->next; - - if (child->next) - child->next->prev = node; - else - parent->last_child = node; - - child->next = node; - } - break; - } - -#if DEBUG > 1 - fprintf(stderr, " AFTER: node->parent=%p\n", node->parent); - if (parent) - { - fprintf(stderr, " AFTER: parent->child=%p\n", parent->child); - fprintf(stderr, " AFTER: parent->last_child=%p\n", parent->last_child); - fprintf(stderr, " AFTER: parent->prev=%p\n", parent->prev); - fprintf(stderr, " AFTER: parent->next=%p\n", parent->next); - } -#endif /* DEBUG > 1 */ -} - - -/* - * 'mxmlDelete()' - Delete a node and all of its children. - * - * If the specified node has a parent, this function first removes the - * node from its parent using the mxmlRemove() function. - */ - -void -mxmlDelete(mxml_node_t *node) /* I - Node to delete */ -{ - int i; /* Looping var */ - - -#ifdef DEBUG - fprintf(stderr, "mxmlDelete(node=%p)\n", node); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!node) - return; - - /* - * Remove the node from its parent, if any... - */ - - mxmlRemove(node); - - /* - * Delete children... - */ - - while (node->child) - mxmlDelete(node->child); - - /* - * Now delete any node data... - */ - - switch (node->type) - { - case MXML_ELEMENT : - if (node->value.element.name) - free(node->value.element.name); - - if (node->value.element.num_attrs) - { - for (i = 0; i < node->value.element.num_attrs; i ++) - { - if (node->value.element.attrs[i].name) - free(node->value.element.attrs[i].name); - if (node->value.element.attrs[i].value) - free(node->value.element.attrs[i].value); - } - - free(node->value.element.attrs); - } - break; - case MXML_INTEGER : - /* Nothing to do */ - break; - case MXML_OPAQUE : - if (node->value.opaque) - free(node->value.opaque); - break; - case MXML_REAL : - /* Nothing to do */ - break; - case MXML_TEXT : - if (node->value.text.string) - free(node->value.text.string); - break; - case MXML_CUSTOM : - if (node->value.custom.data && - node->value.custom.destroy) - (*(node->value.custom.destroy))(node->value.custom.data); - break; - default : - break; - } - - /* - * Free this node... - */ - - free(node); -} - - -/* - * 'mxmlGetRefCount()' - Get the current reference (use) count for a node. - * - * The initial reference count of new nodes is 1. Use the @link mxmlRetain@ - * and @link mxmlRelease@ functions to increment and decrement a node's - * reference count. - * - * @since Mini-XML 2.7@. - */ - -int /* O - Reference count */ -mxmlGetRefCount(mxml_node_t *node) /* I - Node */ -{ - /* - * Range check input... - */ - - if (!node) - return (0); - - /* - * Return the reference count... - */ - - return (node->ref_count); -} - - -/* - * 'mxmlNewCDATA()' - Create a new CDATA node. - * - * The new CDATA node is added to the end of the specified parent's child - * list. The constant MXML_NO_PARENT can be used to specify that the new - * CDATA node has no parent. The data string must be nul-terminated and - * is copied into the new node. CDATA nodes use the MXML_ELEMENT type. - * - * @since Mini-XML 2.3@ - */ - -mxml_node_t * /* O - New node */ -mxmlNewCDATA(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ - const char *data) /* I - Data string */ -{ - mxml_node_t *node; /* New node */ - - -#ifdef DEBUG - fprintf(stderr, "mxmlNewCDATA(parent=%p, data=\"%s\")\n", - parent, data ? data : "(null)"); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!data) - return (NULL); - - /* - * Create the node and set the name value... - */ - - if ((node = mxml_new(parent, MXML_ELEMENT)) != NULL) - node->value.element.name = _mxml_strdupf("![CDATA[%s]]", data); - - return (node); -} - - -/* - * 'mxmlNewCustom()' - Create a new custom data node. - * - * The new custom node is added to the end of the specified parent's child - * list. The constant MXML_NO_PARENT can be used to specify that the new - * element node has no parent. NULL can be passed when the data in the - * node is not dynamically allocated or is separately managed. - * - * @since Mini-XML 2.1@ - */ - -mxml_node_t * /* O - New node */ -mxmlNewCustom( - mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ - void *data, /* I - Pointer to data */ - mxml_custom_destroy_cb_t destroy) /* I - Function to destroy data */ -{ - mxml_node_t *node; /* New node */ - - -#ifdef DEBUG - fprintf(stderr, "mxmlNewCustom(parent=%p, data=%p, destroy=%p)\n", parent, - data, destroy); -#endif /* DEBUG */ - - /* - * Create the node and set the value... - */ - - if ((node = mxml_new(parent, MXML_CUSTOM)) != NULL) - { - node->value.custom.data = data; - node->value.custom.destroy = destroy; - } - - return (node); -} - - -/* - * 'mxmlNewElement()' - Create a new element node. - * - * The new element node is added to the end of the specified parent's child - * list. The constant MXML_NO_PARENT can be used to specify that the new - * element node has no parent. - */ - -mxml_node_t * /* O - New node */ -mxmlNewElement(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ - const char *name) /* I - Name of element */ -{ - mxml_node_t *node; /* New node */ - - -#ifdef DEBUG - fprintf(stderr, "mxmlNewElement(parent=%p, name=\"%s\")\n", parent, - name ? name : "(null)"); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!name) - return (NULL); - - /* - * Create the node and set the element name... - */ - - if ((node = mxml_new(parent, MXML_ELEMENT)) != NULL) - node->value.element.name = strdup(name); - - return (node); -} - - -/* - * 'mxmlNewInteger()' - Create a new integer node. - * - * The new integer node is added to the end of the specified parent's child - * list. The constant MXML_NO_PARENT can be used to specify that the new - * integer node has no parent. - */ - -mxml_node_t * /* O - New node */ -mxmlNewInteger(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ - int integer) /* I - Integer value */ -{ - mxml_node_t *node; /* New node */ - - -#ifdef DEBUG - fprintf(stderr, "mxmlNewInteger(parent=%p, integer=%d)\n", parent, integer); -#endif /* DEBUG */ - - /* - * Create the node and set the element name... - */ - - if ((node = mxml_new(parent, MXML_INTEGER)) != NULL) - node->value.integer = integer; - - return (node); -} - - -/* - * 'mxmlNewOpaque()' - Create a new opaque string. - * - * The new opaque node is added to the end of the specified parent's child - * list. The constant MXML_NO_PARENT can be used to specify that the new - * opaque node has no parent. The opaque string must be nul-terminated and - * is copied into the new node. - */ - -mxml_node_t * /* O - New node */ -mxmlNewOpaque(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ - const char *opaque) /* I - Opaque string */ -{ - mxml_node_t *node; /* New node */ - - -#ifdef DEBUG - fprintf(stderr, "mxmlNewOpaque(parent=%p, opaque=\"%s\")\n", parent, - opaque ? opaque : "(null)"); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!opaque) - return (NULL); - - /* - * Create the node and set the element name... - */ - - if ((node = mxml_new(parent, MXML_OPAQUE)) != NULL) - node->value.opaque = strdup(opaque); - - return (node); -} - - -/* - * 'mxmlNewReal()' - Create a new real number node. - * - * The new real number node is added to the end of the specified parent's - * child list. The constant MXML_NO_PARENT can be used to specify that - * the new real number node has no parent. - */ - -mxml_node_t * /* O - New node */ -mxmlNewReal(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ - double real) /* I - Real number value */ -{ - mxml_node_t *node; /* New node */ - - -#ifdef DEBUG - fprintf(stderr, "mxmlNewReal(parent=%p, real=%g)\n", parent, real); -#endif /* DEBUG */ - - /* - * Create the node and set the element name... - */ - - if ((node = mxml_new(parent, MXML_REAL)) != NULL) - node->value.real = real; - - return (node); -} - - -/* - * 'mxmlNewText()' - Create a new text fragment node. - * - * The new text node is added to the end of the specified parent's child - * list. The constant MXML_NO_PARENT can be used to specify that the new - * text node has no parent. The whitespace parameter is used to specify - * whether leading whitespace is present before the node. The text - * string must be nul-terminated and is copied into the new node. - */ - -mxml_node_t * /* O - New node */ -mxmlNewText(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ - int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */ - const char *string) /* I - String */ -{ - mxml_node_t *node; /* New node */ - - -#ifdef DEBUG - fprintf(stderr, "mxmlNewText(parent=%p, whitespace=%d, string=\"%s\")\n", - parent, whitespace, string ? string : "(null)"); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!string) - return (NULL); - - /* - * Create the node and set the text value... - */ - - if ((node = mxml_new(parent, MXML_TEXT)) != NULL) - { - node->value.text.whitespace = whitespace; - node->value.text.string = strdup(string); - } - - return (node); -} - - -/* - * 'mxmlNewTextf()' - Create a new formatted text fragment node. - * - * The new text node is added to the end of the specified parent's child - * list. The constant MXML_NO_PARENT can be used to specify that the new - * text node has no parent. The whitespace parameter is used to specify - * whether leading whitespace is present before the node. The format - * string must be nul-terminated and is formatted into the new node. - */ - -mxml_node_t * /* O - New node */ -mxmlNewTextf(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ - int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */ - const char *format, /* I - Printf-style frmat string */ - ...) /* I - Additional args as needed */ -{ - mxml_node_t *node; /* New node */ - va_list ap; /* Pointer to arguments */ - - -#ifdef DEBUG - fprintf(stderr, "mxmlNewTextf(parent=%p, whitespace=%d, format=\"%s\", ...)\n", - parent, whitespace, format ? format : "(null)"); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!format) - return (NULL); - - /* - * Create the node and set the text value... - */ - - if ((node = mxml_new(parent, MXML_TEXT)) != NULL) - { - va_start(ap, format); - - node->value.text.whitespace = whitespace; - node->value.text.string = _mxml_vstrdupf(format, ap); - - va_end(ap); - } - - return (node); -} - - -/* - * 'mxmlRemove()' - Remove a node from its parent. - * - * Does not free memory used by the node - use mxmlDelete() for that. - * This function does nothing if the node has no parent. - */ - -void -mxmlRemove(mxml_node_t *node) /* I - Node to remove */ -{ -#ifdef DEBUG - fprintf(stderr, "mxmlRemove(node=%p)\n", node); -#endif /* DEBUG */ - - /* - * Range check input... - */ - - if (!node || !node->parent) - return; - - /* - * Remove from parent... - */ - -#if DEBUG > 1 - fprintf(stderr, " BEFORE: node->parent=%p\n", node->parent); - if (node->parent) - { - fprintf(stderr, " BEFORE: node->parent->child=%p\n", node->parent->child); - fprintf(stderr, " BEFORE: node->parent->last_child=%p\n", node->parent->last_child); - } - fprintf(stderr, " BEFORE: node->child=%p\n", node->child); - fprintf(stderr, " BEFORE: node->last_child=%p\n", node->last_child); - fprintf(stderr, " BEFORE: node->prev=%p\n", node->prev); - fprintf(stderr, " BEFORE: node->next=%p\n", node->next); -#endif /* DEBUG > 1 */ - - if (node->prev) - node->prev->next = node->next; - else - node->parent->child = node->next; - - if (node->next) - node->next->prev = node->prev; - else - node->parent->last_child = node->prev; - - node->parent = NULL; - node->prev = NULL; - node->next = NULL; - -#if DEBUG > 1 - fprintf(stderr, " AFTER: node->parent=%p\n", node->parent); - if (node->parent) - { - fprintf(stderr, " AFTER: node->parent->child=%p\n", node->parent->child); - fprintf(stderr, " AFTER: node->parent->last_child=%p\n", node->parent->last_child); - } - fprintf(stderr, " AFTER: node->child=%p\n", node->child); - fprintf(stderr, " AFTER: node->last_child=%p\n", node->last_child); - fprintf(stderr, " AFTER: node->prev=%p\n", node->prev); - fprintf(stderr, " AFTER: node->next=%p\n", node->next); -#endif /* DEBUG > 1 */ -} - - -/* - * 'mxmlNewXML()' - Create a new XML document tree. - * - * The "version" argument specifies the version number to put in the - * ?xml element node. If NULL, version 1.0 is assumed. - * - * @since Mini-XML 2.3@ - */ - -mxml_node_t * /* O - New ?xml node */ -mxmlNewXML(const char *version) /* I - Version number to use */ -{ - char element[1024]; /* Element text */ - - - snprintf(element, sizeof(element), "?xml version=\"%s\" encoding=\"utf-8\"?", - version ? version : "1.0"); - - return (mxmlNewElement(NULL, element)); -} - - -/* - * 'mxmlRelease()' - Release a node. - * - * When the reference count reaches zero, the node (and any children) - * is deleted via mxmlDelete(). - * - * @since Mini-XML 2.3@ - */ - -int /* O - New reference count */ -mxmlRelease(mxml_node_t *node) /* I - Node */ -{ - if (node) - { - if ((-- node->ref_count) <= 0) - { - mxmlDelete(node); - return (0); - } - else - return (node->ref_count); - } - else - return (-1); -} - - -/* - * 'mxmlRetain()' - Retain a node. - * - * @since Mini-XML 2.3@ - */ - -int /* O - New reference count */ -mxmlRetain(mxml_node_t *node) /* I - Node */ -{ - if (node) - return (++ node->ref_count); - else - return (-1); -} - - -/* - * 'mxml_new()' - Create a new node. - */ - -static mxml_node_t * /* O - New node */ -mxml_new(mxml_node_t *parent, /* I - Parent node */ - mxml_type_t type) /* I - Node type */ -{ - mxml_node_t *node; /* New node */ - - -#if DEBUG > 1 - fprintf(stderr, "mxml_new(parent=%p, type=%d)\n", parent, type); -#endif /* DEBUG > 1 */ - - /* - * Allocate memory for the node... - */ - - if ((node = calloc(1, sizeof(mxml_node_t))) == NULL) - { -#if DEBUG > 1 - fputs(" returning NULL\n", stderr); -#endif /* DEBUG > 1 */ - - return (NULL); - } - -#if DEBUG > 1 - fprintf(stderr, " returning %p\n", node); -#endif /* DEBUG > 1 */ - - /* - * Set the node type... - */ - - node->type = type; - node->ref_count = 1; - - /* - * Add to the parent if present... - */ - - if (parent) - mxmlAdd(parent, MXML_ADD_AFTER, MXML_ADD_TO_PARENT, node); - - /* - * Return the new node... - */ - - return (node); -} - - -/* - * End of "$Id: mxml-node.c 436 2011-01-22 01:02:05Z mike $". - */ diff --git a/ogl_editor/src/External/mxml/mxml-private.c b/ogl_editor/src/External/mxml/mxml-private.c deleted file mode 100644 index 72f3e23..0000000 --- a/ogl_editor/src/External/mxml/mxml-private.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - * "$Id: mxml-private.c 422 2010-11-07 22:55:11Z mike $" - * - * Private functions for Mini-XML, a small XML-like file parsing library. - * - * Copyright 2003-2010 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - * - * Contents: - * - * mxml_error() - Display an error message. - * mxml_integer_cb() - Default callback for integer values. - * mxml_opaque_cb() - Default callback for opaque values. - * mxml_real_cb() - Default callback for real number values. - * _mxml_global() - Get global data. - */ - -/* - * Include necessary headers... - */ - -#include "mxml-private.h" - - -/* - * Some crazy people think that unloading a shared object is a good or safe - * thing to do. Unfortunately, most objects are simply *not* safe to unload - * and bad things *will* happen. - * - * The following mess of conditional code allows us to provide a destructor - * function in Mini-XML for our thread-global storage so that it can possibly - * be unloaded safely, although since there is no standard way to do so I - * can't even provide any guarantees that you can do it safely on all platforms. - * - * This code currently supports AIX, HP-UX, Linux, Mac OS X, Solaris, and - * Windows. It might work on the BSDs and IRIX, but I haven't tested that. - */ - -#if defined(__sun) || defined(_AIX) -# pragma fini(_mxml_fini) -# define _MXML_FINI _mxml_fini -#elif defined(__hpux) -# pragma FINI _mxml_fini -# define _MXML_FINI _mxml_fini -#elif defined(__GNUC__) /* Linux and Mac OS X */ -# define _MXML_FINI __attribute((destructor)) _mxml_fini -#else -# define _MXML_FINI _fini -#endif /* __sun */ - - -/* - * 'mxml_error()' - Display an error message. - */ - -void -mxml_error(const char *format, /* I - Printf-style format string */ - ...) /* I - Additional arguments as needed */ -{ - va_list ap; /* Pointer to arguments */ - char s[1024]; /* Message string */ - _mxml_global_t *global = _mxml_global(); - /* Global data */ - - - /* - * Range check input... - */ - - if (!format) - return; - - /* - * Format the error message string... - */ - - va_start(ap, format); - - vsnprintf(s, sizeof(s), format, ap); - - va_end(ap); - - /* - * And then display the error message... - */ - - if (global->error_cb) - (*global->error_cb)(s); - else - fprintf(stderr, "mxml: %s\n", s); -} - - -/* - * 'mxml_ignore_cb()' - Default callback for ignored values. - */ - -mxml_type_t /* O - Node type */ -mxml_ignore_cb(mxml_node_t *node) /* I - Current node */ -{ - (void)node; - - return (MXML_IGNORE); -} - - -/* - * 'mxml_integer_cb()' - Default callback for integer values. - */ - -mxml_type_t /* O - Node type */ -mxml_integer_cb(mxml_node_t *node) /* I - Current node */ -{ - (void)node; - - return (MXML_INTEGER); -} - - -/* - * 'mxml_opaque_cb()' - Default callback for opaque values. - */ - -mxml_type_t /* O - Node type */ -mxml_opaque_cb(mxml_node_t *node) /* I - Current node */ -{ - (void)node; - - return (MXML_OPAQUE); -} - - -/* - * 'mxml_real_cb()' - Default callback for real number values. - */ - -mxml_type_t /* O - Node type */ -mxml_real_cb(mxml_node_t *node) /* I - Current node */ -{ - (void)node; - - return (MXML_REAL); -} - - -#ifdef HAVE_PTHREAD_H /**** POSIX threading ****/ -# include - -static pthread_key_t _mxml_key = -1; /* Thread local storage key */ -static pthread_once_t _mxml_key_once = PTHREAD_ONCE_INIT; - /* One-time initialization object */ -static void _mxml_init(void); -static void _mxml_destructor(void *g); - - -/* - * '_mxml_destructor()' - Free memory used for globals... - */ - -static void -_mxml_destructor(void *g) /* I - Global data */ -{ - free(g); -} - - -/* - * '_mxml_fini()' - Clean up when unloaded. - */ - -static void -_MXML_FINI(void) -{ - _mxml_global_t *global; /* Global data */ - - - if (_mxml_key != -1) - { - if ((global = (_mxml_global_t *)pthread_getspecific(_mxml_key)) != NULL) - _mxml_destructor(global); - - pthread_key_delete(_mxml_key); - _mxml_key = -1; - } -} - - -/* - * '_mxml_global()' - Get global data. - */ - -_mxml_global_t * /* O - Global data */ -_mxml_global(void) -{ - _mxml_global_t *global; /* Global data */ - - - pthread_once(&_mxml_key_once, _mxml_init); - - if ((global = (_mxml_global_t *)pthread_getspecific(_mxml_key)) == NULL) - { - global = (_mxml_global_t *)calloc(1, sizeof(_mxml_global_t)); - pthread_setspecific(_mxml_key, global); - - global->num_entity_cbs = 1; - global->entity_cbs[0] = _mxml_entity_cb; - global->wrap = 72; - } - - return (global); -} - - -/* - * '_mxml_init()' - Initialize global data... - */ - -static void -_mxml_init(void) -{ - pthread_key_create(&_mxml_key, _mxml_destructor); -} - - -#elif defined(WIN32) && defined(MXML1_EXPORTS) /**** WIN32 threading ****/ -# include - -static DWORD _mxml_tls_index; /* Index for global storage */ - - -/* - * 'DllMain()' - Main entry for library. - */ - -BOOL WINAPI /* O - Success/failure */ -DllMain(HINSTANCE hinst, /* I - DLL module handle */ - DWORD reason, /* I - Reason */ - LPVOID reserved) /* I - Unused */ -{ - _mxml_global_t *global; /* Global data */ - - - (void)hinst; - (void)reserved; - - switch (reason) - { - case DLL_PROCESS_ATTACH : /* Called on library initialization */ - if ((_mxml_tls_index = TlsAlloc()) == TLS_OUT_OF_INDEXES) - return (FALSE); - break; - - case DLL_THREAD_DETACH : /* Called when a thread terminates */ - if ((global = (_mxml_global_t *)TlsGetValue(_mxml_tls_index)) != NULL) - free(global); - break; - - case DLL_PROCESS_DETACH : /* Called when library is unloaded */ - if ((global = (_mxml_global_t *)TlsGetValue(_mxml_tls_index)) != NULL) - free(global); - - TlsFree(_mxml_tls_index); - break; - - default: - break; - } - - return (TRUE); -} - - -/* - * '_mxml_global()' - Get global data. - */ - -_mxml_global_t * /* O - Global data */ -_mxml_global(void) -{ - _mxml_global_t *global; /* Global data */ - - - if ((global = (_mxml_global_t *)TlsGetValue(_mxml_tls_index)) == NULL) - { - global = (_mxml_global_t *)calloc(1, sizeof(_mxml_global_t)); - - global->num_entity_cbs = 1; - global->entity_cbs[0] = _mxml_entity_cb; - global->wrap = 72; - - TlsSetValue(_mxml_tls_index, (LPVOID)global); - } - - return (global); -} - - -#else /**** No threading ****/ -/* - * '_mxml_global()' - Get global data. - */ - -_mxml_global_t * /* O - Global data */ -_mxml_global(void) -{ - static _mxml_global_t global = /* Global data */ - { - NULL, /* error_cb */ - 1, /* num_entity_cbs */ - { _mxml_entity_cb }, /* entity_cbs */ - 72, /* wrap */ - NULL, /* custom_load_cb */ - NULL /* custom_save_cb */ - }; - - - return (&global); -} -#endif /* HAVE_PTHREAD_H */ - - -/* - * End of "$Id: mxml-private.c 422 2010-11-07 22:55:11Z mike $". - */ diff --git a/ogl_editor/src/External/mxml/mxml-private.h b/ogl_editor/src/External/mxml/mxml-private.h deleted file mode 100644 index 8789e6c..0000000 --- a/ogl_editor/src/External/mxml/mxml-private.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * "$Id: mxml-private.h 408 2010-09-19 05:26:46Z mike $" - * - * Private definitions for Mini-XML, a small XML-like file parsing library. - * - * Copyright 2003-2010 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - */ - -/* - * Include necessary headers... - */ - -#include "config.h" -#include "mxml.h" - - -/* - * Global, per-thread data... - */ - -typedef struct _mxml_global_s -{ - void (*error_cb)(const char *); - int num_entity_cbs; - int (*entity_cbs[100])(const char *name); - int wrap; - mxml_custom_load_cb_t custom_load_cb; - mxml_custom_save_cb_t custom_save_cb; -} _mxml_global_t; - - -/* - * Functions... - */ - -extern _mxml_global_t *_mxml_global(void); -extern int _mxml_entity_cb(const char *name); - - -/* - * End of "$Id: mxml-private.h 408 2010-09-19 05:26:46Z mike $". - */ diff --git a/ogl_editor/src/External/mxml/mxml-search.c b/ogl_editor/src/External/mxml/mxml-search.c deleted file mode 100644 index f975af1..0000000 --- a/ogl_editor/src/External/mxml/mxml-search.c +++ /dev/null @@ -1,287 +0,0 @@ -/* - * "$Id: mxml-search.c 427 2011-01-03 02:03:29Z mike $" - * - * Search/navigation functions for Mini-XML, a small XML-like file - * parsing library. - * - * Copyright 2003-2010 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - * - * Contents: - * - * mxmlFindElement() - Find the named element. - * mxmlFindValue() - Find a value with the given path. - * mxmlWalkNext() - Walk to the next logical node in the tree. - * mxmlWalkPrev() - Walk to the previous logical node in the tree. - */ - -/* - * Include necessary headers... - */ - -#include "config.h" -#include "mxml.h" - - -/* - * 'mxmlFindElement()' - Find the named element. - * - * The search is constrained by the name, attribute name, and value; any - * NULL names or values are treated as wildcards, so different kinds of - * searches can be implemented by looking for all elements of a given name - * or all elements with a specific attribute. The descend argument determines - * whether the search descends into child nodes; normally you will use - * MXML_DESCEND_FIRST for the initial search and MXML_NO_DESCEND to find - * additional direct descendents of the node. The top node argument - * constrains the search to a particular node's children. - */ - -mxml_node_t * /* O - Element node or NULL */ -mxmlFindElement(mxml_node_t *node, /* I - Current node */ - mxml_node_t *top, /* I - Top node */ - const char *name, /* I - Element name or NULL for any */ - const char *attr, /* I - Attribute name, or NULL for none */ - const char *value, /* I - Attribute value, or NULL for any */ - int descend) /* I - Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST */ -{ - const char *temp; /* Current attribute value */ - - - /* - * Range check input... - */ - - if (!node || !top || (!attr && value)) - return (NULL); - - /* - * Start with the next node... - */ - - node = mxmlWalkNext(node, top, descend); - - /* - * Loop until we find a matching element... - */ - - while (node != NULL) - { - /* - * See if this node matches... - */ - - if (node->type == MXML_ELEMENT && - node->value.element.name && - (!name || !strcmp(node->value.element.name, name))) - { - /* - * See if we need to check for an attribute... - */ - - if (!attr) - return (node); /* No attribute search, return it... */ - - /* - * Check for the attribute... - */ - - if ((temp = mxmlElementGetAttr(node, attr)) != NULL) - { - /* - * OK, we have the attribute, does it match? - */ - - if (!value || !strcmp(value, temp)) - return (node); /* Yes, return it... */ - } - } - - /* - * No match, move on to the next node... - */ - - if (descend == MXML_DESCEND) - node = mxmlWalkNext(node, top, MXML_DESCEND); - else - node = node->next; - } - - return (NULL); -} - - -/* - * 'mxmlFindPath()' - Find a node with the given path. - * - * The "path" is a slash-separated list of element names. The name "*" is - * considered a wildcard for one or more levels of elements. For example, - * "foo/one/two", "bar/two/one", "*\/one", and so forth. - * - * The first child node of the found node is returned if the given node has - * children and the first child is a value node. - * - * @since Mini-XML 2.7@ - */ - -mxml_node_t * /* O - Found node or NULL */ -mxmlFindPath(mxml_node_t *top, /* I - Top node */ - const char *path) /* I - Path to element */ -{ - mxml_node_t *node; /* Current node */ - char element[256]; /* Current element name */ - const char *pathsep; /* Separator in path */ - int descend; /* mxmlFindElement option */ - - - /* - * Range check input... - */ - - if (!top || !path || !*path) - return (NULL); - - /* - * Search each element in the path... - */ - - node = top; - while (*path) - { - /* - * Handle wildcards... - */ - - if (!strncmp(path, "*/", 2)) - { - path += 2; - descend = MXML_DESCEND; - } - else - descend = MXML_DESCEND_FIRST; - - /* - * Get the next element in the path... - */ - - if ((pathsep = strchr(path, '/')) == NULL) - pathsep = path + strlen(path); - - if (pathsep == path || (pathsep - path) >= sizeof(element)) - return (NULL); - - memcpy(element, path, pathsep - path); - element[pathsep - path] = '\0'; - - if (*pathsep) - path = pathsep + 1; - else - path = pathsep; - - /* - * Search for the element... - */ - - if ((node = mxmlFindElement(node, node, element, NULL, NULL, - descend)) == NULL) - return (NULL); - } - - /* - * If we get this far, return the node or its first child... - */ - - if (node->child && node->child->type != MXML_ELEMENT) - return (node->child); - else - return (node); -} - - -/* - * 'mxmlWalkNext()' - Walk to the next logical node in the tree. - * - * The descend argument controls whether the first child is considered - * to be the next node. The top node argument constrains the walk to - * the node's children. - */ - -mxml_node_t * /* O - Next node or NULL */ -mxmlWalkNext(mxml_node_t *node, /* I - Current node */ - mxml_node_t *top, /* I - Top node */ - int descend) /* I - Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST */ -{ - if (!node) - return (NULL); - else if (node->child && descend) - return (node->child); - else if (node == top) - return (NULL); - else if (node->next) - return (node->next); - else if (node->parent && node->parent != top) - { - node = node->parent; - - while (!node->next) - if (node->parent == top || !node->parent) - return (NULL); - else - node = node->parent; - - return (node->next); - } - else - return (NULL); -} - - -/* - * 'mxmlWalkPrev()' - Walk to the previous logical node in the tree. - * - * The descend argument controls whether the previous node's last child - * is considered to be the previous node. The top node argument constrains - * the walk to the node's children. - */ - -mxml_node_t * /* O - Previous node or NULL */ -mxmlWalkPrev(mxml_node_t *node, /* I - Current node */ - mxml_node_t *top, /* I - Top node */ - int descend) /* I - Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST */ -{ - if (!node || node == top) - return (NULL); - else if (node->prev) - { - if (node->prev->last_child && descend) - { - /* - * Find the last child under the previous node... - */ - - node = node->prev->last_child; - - while (node->last_child) - node = node->last_child; - - return (node); - } - else - return (node->prev); - } - else if (node->parent != top) - return (node->parent); - else - return (NULL); -} - - -/* - * End of "$Id: mxml-search.c 427 2011-01-03 02:03:29Z mike $". - */ diff --git a/ogl_editor/src/External/mxml/mxml-set.c b/ogl_editor/src/External/mxml/mxml-set.c deleted file mode 100644 index b0bd527..0000000 --- a/ogl_editor/src/External/mxml/mxml-set.c +++ /dev/null @@ -1,349 +0,0 @@ -/* - * "$Id: mxml-set.c 441 2011-12-09 23:49:00Z mike $" - * - * Node set functions for Mini-XML, a small XML-like file parsing library. - * - * Copyright 2003-2011 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - * - * Contents: - * - * mxmlSetCDATA() - Set the element name of a CDATA node. - * mxmlSetCustom() - Set the data and destructor of a custom data node. - * mxmlSetElement() - Set the name of an element node. - * mxmlSetInteger() - Set the value of an integer node. - * mxmlSetOpaque() - Set the value of an opaque node. - * mxmlSetReal() - Set the value of a real number node. - * mxmlSetText() - Set the value of a text node. - * mxmlSetTextf() - Set the value of a text node to a formatted string. - * mxmlSetUserData() - Set the user data pointer for a node. - */ - -/* - * Include necessary headers... - */ - -#include "config.h" -#include "mxml.h" - - -/* - * 'mxmlSetCDATA()' - Set the element name of a CDATA node. - * - * The node is not changed if it (or its first child) is not a CDATA element node. - * - * @since Mini-XML 2.3@ - */ - -int /* O - 0 on success, -1 on failure */ -mxmlSetCDATA(mxml_node_t *node, /* I - Node to set */ - const char *data) /* I - New data string */ -{ - /* - * Range check input... - */ - - if (node && node->type == MXML_ELEMENT && - strncmp(node->value.element.name, "![CDATA[", 8) && - node->child && node->child->type == MXML_ELEMENT && - !strncmp(node->child->value.element.name, "![CDATA[", 8)) - node = node->child; - - if (!node || node->type != MXML_ELEMENT || !data || - strncmp(node->value.element.name, "![CDATA[", 8)) - return (-1); - - /* - * Free any old element value and set the new value... - */ - - if (node->value.element.name) - free(node->value.element.name); - - node->value.element.name = _mxml_strdupf("![CDATA[%s]]", data); - - return (0); -} - - -/* - * 'mxmlSetCustom()' - Set the data and destructor of a custom data node. - * - * The node is not changed if it (or its first child) is not a custom node. - * - * @since Mini-XML 2.1@ - */ - -int /* O - 0 on success, -1 on failure */ -mxmlSetCustom( - mxml_node_t *node, /* I - Node to set */ - void *data, /* I - New data pointer */ - mxml_custom_destroy_cb_t destroy) /* I - New destructor function */ -{ - /* - * Range check input... - */ - - if (node && node->type == MXML_ELEMENT && - node->child && node->child->type == MXML_CUSTOM) - node = node->child; - - if (!node || node->type != MXML_CUSTOM) - return (-1); - - /* - * Free any old element value and set the new value... - */ - - if (node->value.custom.data && node->value.custom.destroy) - (*(node->value.custom.destroy))(node->value.custom.data); - - node->value.custom.data = data; - node->value.custom.destroy = destroy; - - return (0); -} - - -/* - * 'mxmlSetElement()' - Set the name of an element node. - * - * The node is not changed if it is not an element node. - */ - -int /* O - 0 on success, -1 on failure */ -mxmlSetElement(mxml_node_t *node, /* I - Node to set */ - const char *name) /* I - New name string */ -{ - /* - * Range check input... - */ - - if (!node || node->type != MXML_ELEMENT || !name) - return (-1); - - /* - * Free any old element value and set the new value... - */ - - if (node->value.element.name) - free(node->value.element.name); - - node->value.element.name = strdup(name); - - return (0); -} - - -/* - * 'mxmlSetInteger()' - Set the value of an integer node. - * - * The node is not changed if it (or its first child) is not an integer node. - */ - -int /* O - 0 on success, -1 on failure */ -mxmlSetInteger(mxml_node_t *node, /* I - Node to set */ - int integer) /* I - Integer value */ -{ - /* - * Range check input... - */ - - if (node && node->type == MXML_ELEMENT && - node->child && node->child->type == MXML_INTEGER) - node = node->child; - - if (!node || node->type != MXML_INTEGER) - return (-1); - - /* - * Set the new value and return... - */ - - node->value.integer = integer; - - return (0); -} - - -/* - * 'mxmlSetOpaque()' - Set the value of an opaque node. - * - * The node is not changed if it (or its first child) is not an opaque node. - */ - -int /* O - 0 on success, -1 on failure */ -mxmlSetOpaque(mxml_node_t *node, /* I - Node to set */ - const char *opaque) /* I - Opaque string */ -{ - /* - * Range check input... - */ - - if (node && node->type == MXML_ELEMENT && - node->child && node->child->type == MXML_OPAQUE) - node = node->child; - - if (!node || node->type != MXML_OPAQUE || !opaque) - return (-1); - - /* - * Free any old opaque value and set the new value... - */ - - if (node->value.opaque) - free(node->value.opaque); - - node->value.opaque = strdup(opaque); - - return (0); -} - - -/* - * 'mxmlSetReal()' - Set the value of a real number node. - * - * The node is not changed if it (or its first child) is not a real number node. - */ - -int /* O - 0 on success, -1 on failure */ -mxmlSetReal(mxml_node_t *node, /* I - Node to set */ - double real) /* I - Real number value */ -{ - /* - * Range check input... - */ - - if (node && node->type == MXML_ELEMENT && - node->child && node->child->type == MXML_REAL) - node = node->child; - - if (!node || node->type != MXML_REAL) - return (-1); - - /* - * Set the new value and return... - */ - - node->value.real = real; - - return (0); -} - - -/* - * 'mxmlSetText()' - Set the value of a text node. - * - * The node is not changed if it (or its first child) is not a text node. - */ - -int /* O - 0 on success, -1 on failure */ -mxmlSetText(mxml_node_t *node, /* I - Node to set */ - int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */ - const char *string) /* I - String */ -{ - /* - * Range check input... - */ - - if (node && node->type == MXML_ELEMENT && - node->child && node->child->type == MXML_TEXT) - node = node->child; - - if (!node || node->type != MXML_TEXT || !string) - return (-1); - - /* - * Free any old string value and set the new value... - */ - - if (node->value.text.string) - free(node->value.text.string); - - node->value.text.whitespace = whitespace; - node->value.text.string = strdup(string); - - return (0); -} - - -/* - * 'mxmlSetTextf()' - Set the value of a text node to a formatted string. - * - * The node is not changed if it (or its first child) is not a text node. - */ - -int /* O - 0 on success, -1 on failure */ -mxmlSetTextf(mxml_node_t *node, /* I - Node to set */ - int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */ - const char *format, /* I - Printf-style format string */ - ...) /* I - Additional arguments as needed */ -{ - va_list ap; /* Pointer to arguments */ - - - /* - * Range check input... - */ - - if (node && node->type == MXML_ELEMENT && - node->child && node->child->type == MXML_TEXT) - node = node->child; - - if (!node || node->type != MXML_TEXT || !format) - return (-1); - - /* - * Free any old string value and set the new value... - */ - - if (node->value.text.string) - free(node->value.text.string); - - va_start(ap, format); - - node->value.text.whitespace = whitespace; - node->value.text.string = _mxml_strdupf(format, ap); - - va_end(ap); - - return (0); -} - - -/* - * 'mxmlSetUserData()' - Set the user data pointer for a node. - * - * @since Mini-XML 2.7@ - */ - -int /* O - 0 on success, -1 on failure */ -mxmlSetUserData(mxml_node_t *node, /* I - Node to set */ - void *data) /* I - User data pointer */ -{ - /* - * Range check input... - */ - - if (!node) - return (-1); - - /* - * Set the user data pointer and return... - */ - - node->user_data = data; - return (0); -} - - -/* - * End of "$Id: mxml-set.c 441 2011-12-09 23:49:00Z mike $". - */ diff --git a/ogl_editor/src/External/mxml/mxml-string.c b/ogl_editor/src/External/mxml/mxml-string.c deleted file mode 100644 index 6be4252..0000000 --- a/ogl_editor/src/External/mxml/mxml-string.c +++ /dev/null @@ -1,476 +0,0 @@ -/* - * "$Id: mxml-string.c 424 2010-12-25 16:21:50Z mike $" - * - * String functions for Mini-XML, a small XML-like file parsing library. - * - * Copyright 2003-2010 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - * - * Contents: - * - * _mxml_snprintf() - Format a string. - * _mxml_strdup() - Duplicate a string. - * _mxml_strdupf() - Format and duplicate a string. - * _mxml_vsnprintf() - Format a string into a fixed size buffer. - * _mxml_vstrdupf() - Format and duplicate a string. - */ - -/* - * Include necessary headers... - */ - -#include "config.h" - - -/* - * The va_copy macro is part of C99, but many compilers don't implement it. - * Provide a "direct assignment" implmentation when va_copy isn't defined... - */ - -#ifndef va_copy -# ifdef __va_copy -# define va_copy(dst,src) __va_copy(dst,src) -# else -# define va_copy(dst,src) memcpy(&dst, &src, sizeof(va_list)) -# endif /* __va_copy */ -#endif /* va_copy */ - - -#ifndef HAVE_SNPRINTF -/* - * '_mxml_snprintf()' - Format a string. - */ - -int /* O - Number of bytes formatted */ -_mxml_snprintf(char *buffer, /* I - Output buffer */ - size_t bufsize, /* I - Size of output buffer */ - const char *format, /* I - Printf-style format string */ - ...) /* I - Additional arguments as needed */ -{ - va_list ap; /* Argument list */ - int bytes; /* Number of bytes formatted */ - - - va_start(ap, format); - bytes = vsnprintf(buffer, bufsize, format, ap); - va_end(ap); - - return (bytes); -} -#endif /* !HAVE_SNPRINTF */ - - -/* - * '_mxml_strdup()' - Duplicate a string. - */ - -#ifndef HAVE_STRDUP -char * /* O - New string pointer */ -_mxml_strdup(const char *s) /* I - String to duplicate */ -{ - char *t; /* New string pointer */ - - - if (s == NULL) - return (NULL); - - if ((t = malloc(strlen(s) + 1)) == NULL) - return (NULL); - - return (strcpy(t, s)); -} -#endif /* !HAVE_STRDUP */ - - -/* - * '_mxml_strdupf()' - Format and duplicate a string. - */ - -char * /* O - New string pointer */ -_mxml_strdupf(const char *format, /* I - Printf-style format string */ - ...) /* I - Additional arguments as needed */ -{ - va_list ap; /* Pointer to additional arguments */ - char *s; /* Pointer to formatted string */ - - - /* - * Get a pointer to the additional arguments, format the string, - * and return it... - */ - - va_start(ap, format); - s = _mxml_vstrdupf(format, ap); - va_end(ap); - - return (s); -} - - -#ifndef HAVE_VSNPRINTF -/* - * '_mxml_vsnprintf()' - Format a string into a fixed size buffer. - */ - -int /* O - Number of bytes formatted */ -_mxml_vsnprintf(char *buffer, /* O - Output buffer */ - size_t bufsize, /* O - Size of output buffer */ - const char *format, /* I - Printf-style format string */ - va_list ap) /* I - Pointer to additional arguments */ -{ - char *bufptr, /* Pointer to position in buffer */ - *bufend, /* Pointer to end of buffer */ - sign, /* Sign of format width */ - size, /* Size character (h, l, L) */ - type; /* Format type character */ - int width, /* Width of field */ - prec; /* Number of characters of precision */ - char tformat[100], /* Temporary format string for sprintf() */ - *tptr, /* Pointer into temporary format */ - temp[1024]; /* Buffer for formatted numbers */ - char *s; /* Pointer to string */ - int slen; /* Length of string */ - int bytes; /* Total number of bytes needed */ - - - /* - * Loop through the format string, formatting as needed... - */ - - bufptr = buffer; - bufend = buffer + bufsize - 1; - bytes = 0; - - while (*format) - { - if (*format == '%') - { - tptr = tformat; - *tptr++ = *format++; - - if (*format == '%') - { - if (bufptr && bufptr < bufend) *bufptr++ = *format; - bytes ++; - format ++; - continue; - } - else if (strchr(" -+#\'", *format)) - { - *tptr++ = *format; - sign = *format++; - } - else - sign = 0; - - if (*format == '*') - { - /* - * Get width from argument... - */ - - format ++; - width = va_arg(ap, int); - - snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", width); - tptr += strlen(tptr); - } - else - { - width = 0; - - while (isdigit(*format & 255)) - { - if (tptr < (tformat + sizeof(tformat) - 1)) - *tptr++ = *format; - - width = width * 10 + *format++ - '0'; - } - } - - if (*format == '.') - { - if (tptr < (tformat + sizeof(tformat) - 1)) - *tptr++ = *format; - - format ++; - - if (*format == '*') - { - /* - * Get precision from argument... - */ - - format ++; - prec = va_arg(ap, int); - - snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", prec); - tptr += strlen(tptr); - } - else - { - prec = 0; - - while (isdigit(*format & 255)) - { - if (tptr < (tformat + sizeof(tformat) - 1)) - *tptr++ = *format; - - prec = prec * 10 + *format++ - '0'; - } - } - } - else - prec = -1; - - if (*format == 'l' && format[1] == 'l') - { - size = 'L'; - - if (tptr < (tformat + sizeof(tformat) - 2)) - { - *tptr++ = 'l'; - *tptr++ = 'l'; - } - - format += 2; - } - else if (*format == 'h' || *format == 'l' || *format == 'L') - { - if (tptr < (tformat + sizeof(tformat) - 1)) - *tptr++ = *format; - - size = *format++; - } - - if (!*format) - break; - - if (tptr < (tformat + sizeof(tformat) - 1)) - *tptr++ = *format; - - type = *format++; - *tptr = '\0'; - - switch (type) - { - case 'E' : /* Floating point formats */ - case 'G' : - case 'e' : - case 'f' : - case 'g' : - if ((width + 2) > sizeof(temp)) - break; - - sprintf(temp, tformat, va_arg(ap, double)); - - bytes += strlen(temp); - - if (bufptr) - { - if ((bufptr + strlen(temp)) > bufend) - { - strncpy(bufptr, temp, (size_t)(bufend - bufptr)); - bufptr = bufend; - } - else - { - strcpy(bufptr, temp); - bufptr += strlen(temp); - } - } - break; - - case 'B' : /* Integer formats */ - case 'X' : - case 'b' : - case 'd' : - case 'i' : - case 'o' : - case 'u' : - case 'x' : - if ((width + 2) > sizeof(temp)) - break; - -#ifdef HAVE_LONG_LONG - if (size == 'L') - sprintf(temp, tformat, va_arg(ap, long long)); - else -#endif /* HAVE_LONG_LONG */ - sprintf(temp, tformat, va_arg(ap, int)); - - bytes += strlen(temp); - - if (bufptr) - { - if ((bufptr + strlen(temp)) > bufend) - { - strncpy(bufptr, temp, (size_t)(bufend - bufptr)); - bufptr = bufend; - } - else - { - strcpy(bufptr, temp); - bufptr += strlen(temp); - } - } - break; - - case 'p' : /* Pointer value */ - if ((width + 2) > sizeof(temp)) - break; - - sprintf(temp, tformat, va_arg(ap, void *)); - - bytes += strlen(temp); - - if (bufptr) - { - if ((bufptr + strlen(temp)) > bufend) - { - strncpy(bufptr, temp, (size_t)(bufend - bufptr)); - bufptr = bufend; - } - else - { - strcpy(bufptr, temp); - bufptr += strlen(temp); - } - } - break; - - case 'c' : /* Character or character array */ - bytes += width; - - if (bufptr) - { - if (width <= 1) - *bufptr++ = va_arg(ap, int); - else - { - if ((bufptr + width) > bufend) - width = bufend - bufptr; - - memcpy(bufptr, va_arg(ap, char *), (size_t)width); - bufptr += width; - } - } - break; - - case 's' : /* String */ - if ((s = va_arg(ap, char *)) == NULL) - s = "(null)"; - - slen = strlen(s); - if (slen > width && prec != width) - width = slen; - - bytes += width; - - if (bufptr) - { - if ((bufptr + width) > bufend) - width = bufend - bufptr; - - if (slen > width) - slen = width; - - if (sign == '-') - { - strncpy(bufptr, s, (size_t)slen); - memset(bufptr + slen, ' ', (size_t)(width - slen)); - } - else - { - memset(bufptr, ' ', (size_t)(width - slen)); - strncpy(bufptr + width - slen, s, (size_t)slen); - } - - bufptr += width; - } - break; - - case 'n' : /* Output number of chars so far */ - *(va_arg(ap, int *)) = bytes; - break; - } - } - else - { - bytes ++; - - if (bufptr && bufptr < bufend) - *bufptr++ = *format; - - format ++; - } - } - - /* - * Nul-terminate the string and return the number of characters needed. - */ - - *bufptr = '\0'; - - return (bytes); -} -#endif /* !HAVE_VSNPRINTF */ - - -/* - * '_mxml_vstrdupf()' - Format and duplicate a string. - */ - -char * /* O - New string pointer */ -_mxml_vstrdupf(const char *format, /* I - Printf-style format string */ - va_list ap) /* I - Pointer to additional arguments */ -{ - int bytes; /* Number of bytes required */ - char *buffer, /* String buffer */ - temp[256]; /* Small buffer for first vsnprintf */ - va_list apcopy; /* Copy of argument list */ - - - /* - * First format with a tiny buffer; this will tell us how many bytes are - * needed... - */ - - va_copy(apcopy, ap); - bytes = vsnprintf(temp, sizeof(temp), format, apcopy); - - if (bytes < sizeof(temp)) - { - /* - * Hey, the formatted string fits in the tiny buffer, so just dup that... - */ - - return (strdup(temp)); - } - - /* - * Allocate memory for the whole thing and reformat to the new, larger - * buffer... - */ - - if ((buffer = calloc(1, bytes + 1)) != NULL) - vsnprintf(buffer, bytes + 1, format, ap); - - /* - * Return the new string... - */ - - return (buffer); -} - - -/* - * End of "$Id: mxml-string.c 424 2010-12-25 16:21:50Z mike $". - */ diff --git a/ogl_editor/src/External/mxml/mxml.h b/ogl_editor/src/External/mxml/mxml.h deleted file mode 100644 index 79c711f..0000000 --- a/ogl_editor/src/External/mxml/mxml.h +++ /dev/null @@ -1,329 +0,0 @@ -/* - * "$Id: mxml.h 427 2011-01-03 02:03:29Z mike $" - * - * Header file for Mini-XML, a small XML-like file parsing library. - * - * Copyright 2003-2011 by Michael R Sweet. - * - * These coded instructions, statements, and computer programs are the - * property of Michael R Sweet and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "COPYING" - * which should have been included with this file. If this file is - * missing or damaged, see the license at: - * - * http://www.minixml.org/ - */ - -/* - * Prevent multiple inclusion... - */ - -#ifndef _mxml_h_ -# define _mxml_h_ - -/* - * Include necessary headers... - */ - -# include -# include -# include -# include -# include - - -/* - * Constants... - */ - -# define MXML_TAB 8 /* Tabs every N columns */ - -# define MXML_NO_CALLBACK 0 /* Don't use a type callback */ -# define MXML_INTEGER_CALLBACK mxml_integer_cb - /* Treat all data as integers */ -# define MXML_OPAQUE_CALLBACK mxml_opaque_cb - /* Treat all data as opaque */ -# define MXML_REAL_CALLBACK mxml_real_cb - /* Treat all data as real numbers */ -# define MXML_TEXT_CALLBACK 0 /* Treat all data as text */ -# define MXML_IGNORE_CALLBACK mxml_ignore_cb - /* Ignore all non-element content */ - -# define MXML_NO_PARENT 0 /* No parent for the node */ - -# define MXML_DESCEND 1 /* Descend when finding/walking */ -# define MXML_NO_DESCEND 0 /* Don't descend when finding/walking */ -# define MXML_DESCEND_FIRST -1 /* Descend for first find */ - -# define MXML_WS_BEFORE_OPEN 0 /* Callback for before open tag */ -# define MXML_WS_AFTER_OPEN 1 /* Callback for after open tag */ -# define MXML_WS_BEFORE_CLOSE 2 /* Callback for before close tag */ -# define MXML_WS_AFTER_CLOSE 3 /* Callback for after close tag */ - -# define MXML_ADD_BEFORE 0 /* Add node before specified node */ -# define MXML_ADD_AFTER 1 /* Add node after specified node */ -# define MXML_ADD_TO_PARENT NULL /* Add node relative to parent */ - - -/* - * Data types... - */ - -typedef enum mxml_sax_event_e /**** SAX event type. ****/ -{ - MXML_SAX_CDATA, /* CDATA node */ - MXML_SAX_COMMENT, /* Comment node */ - MXML_SAX_DATA, /* Data node */ - MXML_SAX_DIRECTIVE, /* Processing directive node */ - MXML_SAX_ELEMENT_CLOSE, /* Element closed */ - MXML_SAX_ELEMENT_OPEN /* Element opened */ -} mxml_sax_event_t; - -typedef enum mxml_type_e /**** The XML node type. ****/ -{ - MXML_IGNORE = -1, /* Ignore/throw away node @since Mini-XML 2.3@ */ - MXML_ELEMENT, /* XML element with attributes */ - MXML_INTEGER, /* Integer value */ - MXML_OPAQUE, /* Opaque string */ - MXML_REAL, /* Real value */ - MXML_TEXT, /* Text fragment */ - MXML_CUSTOM /* Custom data @since Mini-XML 2.1@ */ -} mxml_type_t; - -typedef void (*mxml_custom_destroy_cb_t)(void *); - /**** Custom data destructor ****/ - -typedef void (*mxml_error_cb_t)(const char *); - /**** Error callback function ****/ - -typedef struct mxml_attr_s /**** An XML element attribute value. @private@ ****/ -{ - char *name; /* Attribute name */ - char *value; /* Attribute value */ -} mxml_attr_t; - -typedef struct mxml_element_s /**** An XML element value. @private@ ****/ -{ - char *name; /* Name of element */ - int num_attrs; /* Number of attributes */ - mxml_attr_t *attrs; /* Attributes */ -} mxml_element_t; - -typedef struct mxml_text_s /**** An XML text value. @private@ ****/ -{ - int whitespace; /* Leading whitespace? */ - char *string; /* Fragment string */ -} mxml_text_t; - -typedef struct mxml_custom_s /**** An XML custom value. @private@ ****/ -{ - void *data; /* Pointer to (allocated) custom data */ - mxml_custom_destroy_cb_t destroy; /* Pointer to destructor function */ -} mxml_custom_t; - -typedef union mxml_value_u /**** An XML node value. @private@ ****/ -{ - mxml_element_t element; /* Element */ - int integer; /* Integer number */ - char *opaque; /* Opaque string */ - double real; /* Real number */ - mxml_text_t text; /* Text fragment */ - mxml_custom_t custom; /* Custom data @since Mini-XML 2.1@ */ -} mxml_value_t; - -struct mxml_node_s /**** An XML node. @private@ ****/ -{ - mxml_type_t type; /* Node type */ - struct mxml_node_s *next; /* Next node under same parent */ - struct mxml_node_s *prev; /* Previous node under same parent */ - struct mxml_node_s *parent; /* Parent node */ - struct mxml_node_s *child; /* First child node */ - struct mxml_node_s *last_child; /* Last child node */ - mxml_value_t value; /* Node value */ - int ref_count; /* Use count */ - void *user_data; /* User data */ -}; - -typedef struct mxml_node_s mxml_node_t; /**** An XML node. ****/ - -struct mxml_index_s /**** An XML node index. @private@ ****/ -{ - char *attr; /* Attribute used for indexing or NULL */ - int num_nodes; /* Number of nodes in index */ - int alloc_nodes; /* Allocated nodes in index */ - int cur_node; /* Current node */ - mxml_node_t **nodes; /* Node array */ -}; - -typedef struct mxml_index_s mxml_index_t; - /**** An XML node index. ****/ - -typedef int (*mxml_custom_load_cb_t)(mxml_node_t *, const char *); - /**** Custom data load callback function ****/ - -typedef char *(*mxml_custom_save_cb_t)(mxml_node_t *); - /**** Custom data save callback function ****/ - -typedef int (*mxml_entity_cb_t)(const char *); - /**** Entity callback function */ - -typedef mxml_type_t (*mxml_load_cb_t)(mxml_node_t *); - /**** Load callback function ****/ - -typedef const char *(*mxml_save_cb_t)(mxml_node_t *, int); - /**** Save callback function ****/ - -typedef void (*mxml_sax_cb_t)(mxml_node_t *, mxml_sax_event_t, void *); - /**** SAX callback function ****/ - - -/* - * C++ support... - */ - -# ifdef __cplusplus -extern "C" { -# endif /* __cplusplus */ - -/* - * Prototypes... - */ - -extern void mxmlAdd(mxml_node_t *parent, int where, - mxml_node_t *child, mxml_node_t *node); -extern void mxmlDelete(mxml_node_t *node); -extern void mxmlElementDeleteAttr(mxml_node_t *node, - const char *name); -extern const char *mxmlElementGetAttr(mxml_node_t *node, const char *name); -extern void mxmlElementSetAttr(mxml_node_t *node, const char *name, - const char *value); -extern void mxmlElementSetAttrf(mxml_node_t *node, const char *name, - const char *format, ...) -# ifdef __GNUC__ -__attribute__ ((__format__ (__printf__, 3, 4))) -# endif /* __GNUC__ */ -; -extern int mxmlEntityAddCallback(mxml_entity_cb_t cb); -extern const char *mxmlEntityGetName(int val); -extern int mxmlEntityGetValue(const char *name); -extern void mxmlEntityRemoveCallback(mxml_entity_cb_t cb); -extern mxml_node_t *mxmlFindElement(mxml_node_t *node, mxml_node_t *top, - const char *name, const char *attr, - const char *value, int descend); -extern mxml_node_t *mxmlFindPath(mxml_node_t *node, const char *path); -extern const char *mxmlGetCDATA(mxml_node_t *node); -extern const void *mxmlGetCustom(mxml_node_t *node); -extern const char *mxmlGetElement(mxml_node_t *node); -extern mxml_node_t *mxmlGetFirstChild(mxml_node_t *node); -extern int mxmlGetInteger(mxml_node_t *node); -extern mxml_node_t *mxmlGetLastChild(mxml_node_t *node); -extern mxml_node_t *mxmlGetNextSibling(mxml_node_t *node); -extern const char *mxmlGetOpaque(mxml_node_t *node); -extern mxml_node_t *mxmlGetParent(mxml_node_t *node); -extern mxml_node_t *mxmlGetPrevSibling(mxml_node_t *node); -extern double mxmlGetReal(mxml_node_t *node); -extern int mxmlGetRefCount(mxml_node_t *node); -extern const char *mxmlGetText(mxml_node_t *node, int *whitespace); -extern mxml_type_t mxmlGetType(mxml_node_t *node); -extern void *mxmlGetUserData(mxml_node_t *node); -extern void mxmlIndexDelete(mxml_index_t *ind); -extern mxml_node_t *mxmlIndexEnum(mxml_index_t *ind); -extern mxml_node_t *mxmlIndexFind(mxml_index_t *ind, - const char *element, - const char *value); -extern int mxmlIndexGetCount(mxml_index_t *ind); -extern mxml_index_t *mxmlIndexNew(mxml_node_t *node, const char *element, - const char *attr); -extern mxml_node_t *mxmlIndexReset(mxml_index_t *ind); -extern mxml_node_t *mxmlLoadFd(mxml_node_t *top, int fd, - mxml_type_t (*cb)(mxml_node_t *)); -extern mxml_node_t *mxmlLoadFile(mxml_node_t *top, FILE *fp, - mxml_type_t (*cb)(mxml_node_t *)); -extern mxml_node_t *mxmlLoadString(mxml_node_t *top, const char *s, - mxml_type_t (*cb)(mxml_node_t *)); -extern mxml_node_t *mxmlNewCDATA(mxml_node_t *parent, const char *string); -extern mxml_node_t *mxmlNewCustom(mxml_node_t *parent, void *data, - mxml_custom_destroy_cb_t destroy); -extern mxml_node_t *mxmlNewElement(mxml_node_t *parent, const char *name); -extern mxml_node_t *mxmlNewInteger(mxml_node_t *parent, int integer); -extern mxml_node_t *mxmlNewOpaque(mxml_node_t *parent, const char *opaque); -extern mxml_node_t *mxmlNewReal(mxml_node_t *parent, double real); -extern mxml_node_t *mxmlNewText(mxml_node_t *parent, int whitespace, - const char *string); -extern mxml_node_t *mxmlNewTextf(mxml_node_t *parent, int whitespace, - const char *format, ...) -# ifdef __GNUC__ -__attribute__ ((__format__ (__printf__, 3, 4))) -# endif /* __GNUC__ */ -; -extern mxml_node_t *mxmlNewXML(const char *version); -extern int mxmlRelease(mxml_node_t *node); -extern void mxmlRemove(mxml_node_t *node); -extern int mxmlRetain(mxml_node_t *node); -extern char *mxmlSaveAllocString(mxml_node_t *node, - mxml_save_cb_t cb); -extern int mxmlSaveFd(mxml_node_t *node, int fd, - mxml_save_cb_t cb); -extern int mxmlSaveFile(mxml_node_t *node, FILE *fp, - mxml_save_cb_t cb); -extern int mxmlSaveString(mxml_node_t *node, char *buffer, - int bufsize, mxml_save_cb_t cb); -extern mxml_node_t *mxmlSAXLoadFd(mxml_node_t *top, int fd, - mxml_type_t (*cb)(mxml_node_t *), - mxml_sax_cb_t sax, void *sax_data); -extern mxml_node_t *mxmlSAXLoadFile(mxml_node_t *top, FILE *fp, - mxml_type_t (*cb)(mxml_node_t *), - mxml_sax_cb_t sax, void *sax_data); -extern mxml_node_t *mxmlSAXLoadString(mxml_node_t *top, const char *s, - mxml_type_t (*cb)(mxml_node_t *), - mxml_sax_cb_t sax, void *sax_data); -extern int mxmlSetCDATA(mxml_node_t *node, const char *data); -extern int mxmlSetCustom(mxml_node_t *node, void *data, - mxml_custom_destroy_cb_t destroy); -extern void mxmlSetCustomHandlers(mxml_custom_load_cb_t load, - mxml_custom_save_cb_t save); -extern int mxmlSetElement(mxml_node_t *node, const char *name); -extern void mxmlSetErrorCallback(mxml_error_cb_t cb); -extern int mxmlSetInteger(mxml_node_t *node, int integer); -extern int mxmlSetOpaque(mxml_node_t *node, const char *opaque); -extern int mxmlSetReal(mxml_node_t *node, double real); -extern int mxmlSetText(mxml_node_t *node, int whitespace, - const char *string); -extern int mxmlSetTextf(mxml_node_t *node, int whitespace, - const char *format, ...) -# ifdef __GNUC__ -__attribute__ ((__format__ (__printf__, 3, 4))) -# endif /* __GNUC__ */ -; -extern int mxmlSetUserData(mxml_node_t *node, void *data); -extern void mxmlSetWrapMargin(int column); -extern mxml_node_t *mxmlWalkNext(mxml_node_t *node, mxml_node_t *top, - int descend); -extern mxml_node_t *mxmlWalkPrev(mxml_node_t *node, mxml_node_t *top, - int descend); - - -/* - * Semi-private functions... - */ - -extern void mxml_error(const char *format, ...); -extern mxml_type_t mxml_ignore_cb(mxml_node_t *node); -extern mxml_type_t mxml_integer_cb(mxml_node_t *node); -extern mxml_type_t mxml_opaque_cb(mxml_node_t *node); -extern mxml_type_t mxml_real_cb(mxml_node_t *node); - - -/* - * C++ support... - */ - -# ifdef __cplusplus -} -# endif /* __cplusplus */ -#endif /* !_mxml_h_ */ - - -/* - * End of "$Id: mxml.h 427 2011-01-03 02:03:29Z mike $". - */ diff --git a/units.lua b/units.lua index 9bddf12..8084ab9 100644 --- a/units.lua +++ b/units.lua @@ -31,6 +31,7 @@ StaticLibrary { CPPPATH = { ".", "ogl_editor/external/glfw/include", "ogl_editor/external/glfw/lib", + { "ogl_editor/external/glfw/lib/cocoa" ; Config = "macosx-*-*" }, { "ogl_editor/external/glfw/lib/win32" ; Config = "win32-*-*" } }, PROGOPTS = {