Index: OpenSceneGraph/trunk/src/osgViewer/CMakeLists.txt
===================================================================
--- OpenSceneGraph/trunk/src/osgViewer/CMakeLists.txt (revision 9671)
+++ OpenSceneGraph/trunk/src/osgViewer/CMakeLists.txt (revision 9879)
@@ -67,85 +67,102 @@
 
     IF(APPLE)
-        SET(OSG_WINDOWING_SYSTEM "Carbon" CACHE STRING "Windowing system type for graphics window creation, options Carbon or X11.")
+        SET(OSG_WINDOWING_SYSTEM "Carbon" CACHE STRING "Windowing system type for graphics window creation, options Carbon, Cocoa or X11.")
     ELSE(APPLE)
         SET(OSG_WINDOWING_SYSTEM "X11" CACHE STRING "Windowing system type for graphics window creation. options only X11")
     ENDIF(APPLE)
     
-
-    IF(${OSG_WINDOWING_SYSTEM} STREQUAL "Carbon")
-
-        # FIXME: OS X needs selection mechanism for Cocoa, Carbon, X11
+    IF(${OSG_WINDOWING_SYSTEM} STREQUAL "Cocoa")
+		ADD_DEFINITIONS(-DUSE_DARWIN_COCOA_IMPLEMENTATION)
         SET(LIB_PUBLIC_HEADERS ${LIB_PUBLIC_HEADERS} 
-            ${HEADER_PATH}/api/Carbon/GraphicsWindowCarbon
-            ${HEADER_PATH}/api/Carbon/PixelBufferCarbon
+            ${HEADER_PATH}/api/Cocoa/GraphicsWindowCocoa
+            ${HEADER_PATH}/api/Cocoa/PixelBufferCocoa
         )
         SET(LIB_COMMON_FILES ${LIB_COMMON_FILES} 
-            GraphicsWindowCarbon.cpp
-            PixelBufferCarbon.cpp
+            GraphicsWindowCocoa.mm
+            DarwinUtils.h
+            DarwinUtils.mm
+            PixelBufferCocoa.mm
         )
 
-    ELSE(${OSG_WINDOWING_SYSTEM} STREQUAL "Carbon")
-
-        # X11 for everybody else
-
-
-        INCLUDE(FindPkgConfig OPTIONAL)
-        IF (PKG_CONFIG_FOUND)
-
-            PKG_CHECK_MODULES(XRANDR xrandr)
+	SET(LIB_EXTRA_LIBS ${COCOA_LIBRARY} ${LIB_EXTRA_LIBS})
+
+    ELSE(${OSG_WINDOWING_SYSTEM} STREQUAL "Cocoa")
+        IF(${OSG_WINDOWING_SYSTEM} STREQUAL "Carbon")	
+			ADD_DEFINITIONS(-DUSE_DARWIN_CARBON_IMPLEMENTATION)
+            SET(LIB_PUBLIC_HEADERS ${LIB_PUBLIC_HEADERS} 
+                ${HEADER_PATH}/api/Carbon/GraphicsWindowCarbon
+                ${HEADER_PATH}/api/Carbon/PixelBufferCarbon
+            )
+            SET(LIB_COMMON_FILES ${LIB_COMMON_FILES} 
+                GraphicsWindowCarbon.cpp
+                DarwinUtils.h
+                DarwinUtils.mm
+                PixelBufferCarbon.cpp
+            )
+	    SET(LIB_EXTRA_LIBS ${COCOA_LIBRARY} ${LIB_EXTRA_LIBS})
+
+        ELSE(${OSG_WINDOWING_SYSTEM} STREQUAL "Carbon")
+
+            # X11 for everybody else
+
+
+            INCLUDE(FindPkgConfig OPTIONAL)
+            IF (PKG_CONFIG_FOUND)
+
+                PKG_CHECK_MODULES(XRANDR xrandr)
+                
+                IF (XRANDR_FOUND) 
+                    OPTION(OSGVIEWER_USE_XRANDR "Set to ON to enable Xrandr support for GraphicsWindowX11." ON)
+                ELSE(XRANDR_FOUND) 
+                    SET(OSGVIEWER_USE_XRANDR OFF)
+                ENDIF (XRANDR_FOUND)
+            ELSE(PKG_CONFIG_FOUND)
+                SET(OSGVIEWER_USE_XRANDR OFF)
+            ENDIF(PKG_CONFIG_FOUND)
+
+
+            SET(LIB_PUBLIC_HEADERS ${LIB_PUBLIC_HEADERS}
+                ${HEADER_PATH}/api/X11/GraphicsWindowX11
+                ${HEADER_PATH}/api/X11/PixelBufferX11
+            )
+
+
+            SET(LIB_COMMON_FILES ${LIB_COMMON_FILES} 
+                GraphicsWindowX11.cpp 
+                PixelBufferX11.cpp
+            )
             
-            IF (XRANDR_FOUND) 
-                OPTION(OSGVIEWER_USE_XRANDR "Set to ON to enable Xrandr support for GraphicsWindowX11." ON)
-            ELSE(XRANDR_FOUND) 
-                SET(OSGVIEWER_USE_XRANDR OFF)
-            ENDIF (XRANDR_FOUND)
-        ELSE(PKG_CONFIG_FOUND)
-            SET(OSGVIEWER_USE_XRANDR OFF)
-        ENDIF(PKG_CONFIG_FOUND)
-
-
-        SET(LIB_PUBLIC_HEADERS ${LIB_PUBLIC_HEADERS}
-            ${HEADER_PATH}/api/X11/GraphicsWindowX11
-            ${HEADER_PATH}/api/X11/PixelBufferX11
-        )
-
-
-        SET(LIB_COMMON_FILES ${LIB_COMMON_FILES} 
-            GraphicsWindowX11.cpp 
-            PixelBufferX11.cpp
-        )
-        
-        IF(OSGVIEWER_USE_XRANDR)
-        
-            ADD_DEFINITIONS(-DOSGVIEWER_USE_XRANDR)
-            SET(LIB_PRIVATE_HEADERS ${LIB_PRIVATE_HEADERS} ${XRANDR_INCLUDE_DIRS} )
-
-            IF  (X11_Xrandr_LIB)
-                SET(LIB_EXTRA_LIBS ${X11_Xrandr_LIB} ${LIB_EXTRA_LIBS})
-            ELSE(X11_Xrandr_LIB)
-                SET(LIB_EXTRA_LIBS ${XRANDR_LIBRARIES} ${LIB_EXTRA_LIBS})
-            ENDIF(X11_Xrandr_LIB)
+            IF(OSGVIEWER_USE_XRANDR)
             
-        ENDIF(OSGVIEWER_USE_XRANDR)
-
-        # X11 on Apple requires X11 library plus OpenGL linking hack on Leopard
-        IF(APPLE)
-            # Find GL/glx.h 
-            IF(EXISTS ${CMAKE_OSX_SYSROOT}/usr/X11/include/GL/glx.h)
-                SET(OPENGL_INCLUDE_DIR /usr/X11/include)
-                SET(OPENGL_LIBRARIES /usr/X11/lib/libGL.dylib)
-            ELSEIF(EXISTS ${CMAKE_OSX_SYSROOT}/usr/X11R6/include/GL/glx.h)
-                SET(OPENGL_INCLUDE_DIR /usr/X11R6/include)
-                SET(OPENGL_LIBRARIES /usr/X11R6/lib/libGL.dylib)
-            ENDIF(EXISTS ${CMAKE_OSX_SYSROOT}/usr/X11/include/GL/glx.h)
-            INCLUDE_DIRECTORIES(BEFORE SYSTEM ${OPENGL_INCLUDE_DIR})
-
-            SET(LIB_EXTRA_LIBS ${X11_X11_LIB} ${OPENGL_LIBRARIES} ${LIB_EXTRA_LIBS})
-            SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:${CMAKE_OSX_SYSROOT}/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib")
-        ENDIF(APPLE)
-            
-
-    ENDIF(${OSG_WINDOWING_SYSTEM} STREQUAL "Carbon")
-
+                ADD_DEFINITIONS(-DOSGVIEWER_USE_XRANDR)
+                SET(LIB_PRIVATE_HEADERS ${LIB_PRIVATE_HEADERS} ${XRANDR_INCLUDE_DIRS} )
+
+                IF  (X11_Xrandr_LIB)
+                    SET(LIB_EXTRA_LIBS ${X11_Xrandr_LIB} ${LIB_EXTRA_LIBS})
+                ELSE(X11_Xrandr_LIB)
+                    SET(LIB_EXTRA_LIBS ${XRANDR_LIBRARIES} ${LIB_EXTRA_LIBS})
+                ENDIF(X11_Xrandr_LIB)
+                
+            ENDIF(OSGVIEWER_USE_XRANDR)
+
+            # X11 on Apple requires X11 library plus OpenGL linking hack on Leopard
+            IF(APPLE)
+                # Find GL/glx.h 
+                IF(EXISTS ${CMAKE_OSX_SYSROOT}/usr/X11/include/GL/glx.h)
+                    SET(OPENGL_INCLUDE_DIR /usr/X11/include)
+                    SET(OPENGL_LIBRARIES /usr/X11/lib/libGL.dylib)
+                ELSEIF(EXISTS ${CMAKE_OSX_SYSROOT}/usr/X11R6/include/GL/glx.h)
+                    SET(OPENGL_INCLUDE_DIR /usr/X11R6/include)
+                    SET(OPENGL_LIBRARIES /usr/X11R6/lib/libGL.dylib)
+                ENDIF(EXISTS ${CMAKE_OSX_SYSROOT}/usr/X11/include/GL/glx.h)
+                INCLUDE_DIRECTORIES(BEFORE SYSTEM ${OPENGL_INCLUDE_DIR})
+
+                SET(LIB_EXTRA_LIBS ${X11_X11_LIB} ${OPENGL_LIBRARIES} ${LIB_EXTRA_LIBS})
+                SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:${CMAKE_OSX_SYSROOT}/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib")
+            ENDIF(APPLE)
+                
+
+        ENDIF(${OSG_WINDOWING_SYSTEM} STREQUAL "Carbon")
+    ENDIF(${OSG_WINDOWING_SYSTEM} STREQUAL "Cocoa")
 ENDIF(WIN32)
 
