about summary refs log tree commit diff
path: root/src/engine/external/glfw/lib/macosx/macosx_fullscreen.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_fullscreen.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_fullscreen.c')
-rw-r--r--src/engine/external/glfw/lib/macosx/macosx_fullscreen.c126
1 files changed, 126 insertions, 0 deletions
diff --git a/src/engine/external/glfw/lib/macosx/macosx_fullscreen.c b/src/engine/external/glfw/lib/macosx/macosx_fullscreen.c
new file mode 100644
index 00000000..b16495fb
--- /dev/null
+++ b/src/engine/external/glfw/lib/macosx/macosx_fullscreen.c
@@ -0,0 +1,126 @@
+//========================================================================

+// GLFW - An OpenGL framework

+// File:        macosx_fullscreen.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"

+

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

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

+}

+                            

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

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

+}

+

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

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

+}

+

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

+// glfwGetDesktopMode() - Get the desktop video mode

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

+

+void _glfwPlatformGetDesktopMode( GLFWvidmode *mode )

+{

+    _glfwCGToGLFWVideoMode( _glfwDesktopVideoMode, mode );

+}

+