about summary refs log tree commit diff
path: root/src/engine/external/glfw/lib/macosx/macosx_init.c
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2007-08-22 07:52:33 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2007-08-22 07:52:33 +0000
commit8b3c16e6152a527f9aec1a88a9eed74119de7000 (patch)
treef0bde5cea15e696e42cade06a3b12ff6b13acc57 /src/engine/external/glfw/lib/macosx/macosx_init.c
parent9899666a7ce6679a3b9667ab09f615f4d0769c16 (diff)
downloadzcatch-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/macosx_init.c')
-rw-r--r--src/engine/external/glfw/lib/macosx/macosx_init.c194
1 files changed, 194 insertions, 0 deletions
diff --git a/src/engine/external/glfw/lib/macosx/macosx_init.c b/src/engine/external/glfw/lib/macosx/macosx_init.c
new file mode 100644
index 00000000..c123daf0
--- /dev/null
+++ b/src/engine/external/glfw/lib/macosx/macosx_init.c
@@ -0,0 +1,194 @@
+//========================================================================

+// GLFW - An OpenGL framework

+// File:        macosx_init.c

+// 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.

+//

+//========================================================================

+

+#include "internal.h"

+

+#include <unistd.h>

+

+//========================================================================

+// Global variables

+//========================================================================

+

+// KCHR resource pointer for keycode translation

+void *KCHRPtr;

+

+

+//========================================================================

+// _glfwInitThreads() - 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

+

+void _glfwChangeToResourcesDirectory( void )

+{

+    CFBundleRef mainBundle = CFBundleGetMainBundle();

+    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;

+    }

+}

+

+int _glfwPlatformInit( void )

+{

+    struct timeval tv;

+    UInt32 nullDummy = 0;

+

+    _glfwWin.MacWindow = NULL;

+    _glfwWin.AGLContext = NULL;

+    _glfwWin.CGLContext = NULL;

+    _glfwWin.WindowFunctions = NULL;

+    _glfwWin.MouseUPP = NULL;

+    _glfwWin.CommandUPP = NULL;

+    _glfwWin.KeyboardUPP = 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;

+    }

+

+    _glfwDesktopVideoMode = CGDisplayCurrentMode( kCGDirectMainDisplay );

+    if( _glfwDesktopVideoMode == NULL )

+    {

+        fprintf(

+            stderr,

+            "glfwInit failing because it kind find the desktop display mode\n" );

+        return GL_FALSE;

+    }

+

+    _glfwInitThreads();

+

+    _glfwChangeToResourcesDirectory();

+

+    if( !_glfwInstallEventHandlers() )

+    {

+    	fprintf(

+            stderr,

+            "glfwInit failing because it can't install event handlers\n" );

+        _glfwPlatformTerminate();

+        return GL_FALSE;

+    }

+

+    // 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;

+}

+

+int _glfwPlatformTerminate( 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;

+    }

+    

+    return GL_TRUE;

+}

+