diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-08-22 07:52:33 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-08-22 07:52:33 +0000 |
| commit | 8b3c16e6152a527f9aec1a88a9eed74119de7000 (patch) | |
| tree | f0bde5cea15e696e42cade06a3b12ff6b13acc57 /src/engine/external/glfw/lib/macosx/platform.h | |
| parent | 9899666a7ce6679a3b9667ab09f615f4d0769c16 (diff) | |
| download | zcatch-8b3c16e6152a527f9aec1a88a9eed74119de7000.tar.gz zcatch-8b3c16e6152a527f9aec1a88a9eed74119de7000.zip | |
major engine cleanup. dependency on baselib removed. engine is now C code (not ansi tho). some other cruft removed aswell
Diffstat (limited to 'src/engine/external/glfw/lib/macosx/platform.h')
| -rw-r--r-- | src/engine/external/glfw/lib/macosx/platform.h | 349 |
1 files changed, 349 insertions, 0 deletions
diff --git a/src/engine/external/glfw/lib/macosx/platform.h b/src/engine/external/glfw/lib/macosx/platform.h new file mode 100644 index 00000000..6f90df88 --- /dev/null +++ b/src/engine/external/glfw/lib/macosx/platform.h @@ -0,0 +1,349 @@ +//======================================================================== +// GLFW - An OpenGL framework +// File: platform.h +// Platform: Mac OS X +// API Version: 2.6 +// WWW: http://glfw.sourceforge.net +//------------------------------------------------------------------------ +// Copyright (c) 2002-2006 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 + + +// Include files +#include <Carbon/Carbon.h> +#include <OpenGL/OpenGL.h> +#include <AGL/agl.h> +#include <sched.h> +#include <pthread.h> +#include <sys/sysctl.h> +#include "../../include/GL/glfw.h" + + +//======================================================================== +// 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 + +//======================================================================== +// full-screen/desktop-window "virtual" function table +//======================================================================== + +typedef int ( * GLFWmacopenwindowfun )( int, int, int, int, int, int, int, int, int, int, int, int, int, int, int ); +typedef void ( * GLFWmacclosewindowfun )( void ); +typedef void ( * GLFWmacsetwindowtitlefun )( const char * ); +typedef void ( * GLFWmacsetwindowsizefun )( int, int ); +typedef void ( * GLFWmacsetwindowposfun )( int, int ); +typedef void ( * GLFWmaciconifywindowfun )( void ); +typedef void ( * GLFWmacrestorewindowfun )( void ); +typedef void ( * GLFWmacrefreshwindowparamsfun )( void ); +typedef void ( * GLFWmacsetmousecursorposfun )( int, int ); + +typedef struct +{ + GLFWmacopenwindowfun OpenWindow; + GLFWmacclosewindowfun CloseWindow; + GLFWmacsetwindowtitlefun SetWindowTitle; + GLFWmacsetwindowsizefun SetWindowSize; + GLFWmacsetwindowposfun SetWindowPos; + GLFWmaciconifywindowfun IconifyWindow; + GLFWmacrestorewindowfun RestoreWindow; + GLFWmacrefreshwindowparamsfun RefreshWindowParams; + GLFWmacsetmousecursorposfun SetMouseCursorPos; +} +_GLFWmacwindowfunctions; + + +//======================================================================== +// Global variables (GLFW internals) +//======================================================================== + +GLFWGLOBAL CFDictionaryRef _glfwDesktopVideoMode; + +//------------------------------------------------------------------------ +// Window structure +//------------------------------------------------------------------------ +typedef struct _GLFWwin_struct _GLFWwin; + +struct _GLFWwin_struct { + + // ========= PLATFORM INDEPENDENT MANDATORY PART ========================= + + // Window states + int Opened; // Flag telling if window is opened or not + int Active; // Application active flag + int Iconified; // Window iconified flag + + // 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 RefreshRate; // Refresh rate (for fullscreen mode) + int WindowNoResize; // Resize- and maximize gadgets disabled flag + int Samples; + + // Window status + int Width, Height; // Window width and heigth + + // Extensions & OpenGL version + int Has_GL_SGIS_generate_mipmap; + int Has_GL_ARB_texture_non_power_of_two; + int GLVerMajor,GLVerMinor; + + + // ========= PLATFORM SPECIFIC PART ====================================== + + WindowRef MacWindow; + AGLContext AGLContext; + CGLContextObj CGLContext; + + EventHandlerUPP MouseUPP; + EventHandlerUPP CommandUPP; + EventHandlerUPP KeyboardUPP; + EventHandlerUPP WindowUPP; + + _GLFWmacwindowfunctions* WindowFunctions; + + // for easy access by _glfwPlatformGetWindowParam + int Accelerated; + int RedBits, GreenBits, BlueBits, AlphaBits; + int DepthBits; + int StencilBits; + int AccumRedBits, AccumGreenBits, AccumBlueBits, AccumAlphaBits; + int AuxBuffers; + int Stereo; +}; + +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 { + + // 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 ); + +int _glfwInstallEventHandlers( void ); + +//======================================================================== +// Prototypes for full-screen/desktop-window "virtual" functions +//======================================================================== + +int _glfwMacFSOpenWindow( int width, int height, 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 refreshrate ); +void _glfwMacFSCloseWindow( void ); +void _glfwMacFSSetWindowTitle( const char *title ); +void _glfwMacFSSetWindowSize( int width, int height ); +void _glfwMacFSSetWindowPos( int x, int y ); +void _glfwMacFSIconifyWindow( void ); +void _glfwMacFSRestoreWindow( void ); +void _glfwMacFSRefreshWindowParams( void ); +void _glfwMacFSSetMouseCursorPos( int x, int y ); + +int _glfwMacDWOpenWindow( int width, int height, 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 refreshrate ); +void _glfwMacDWCloseWindow( void ); +void _glfwMacDWSetWindowTitle( const char *title ); +void _glfwMacDWSetWindowSize( int width, int height ); +void _glfwMacDWSetWindowPos( int x, int y ); +void _glfwMacDWIconifyWindow( void ); +void _glfwMacDWRestoreWindow( void ); +void _glfwMacDWRefreshWindowParams( void ); +void _glfwMacDWSetMouseCursorPos( int x, int y ); + +#endif // _platform_h_ |