|
Blender
V2.59
|
00001 00030 #include <Cocoa/Cocoa.h> 00031 00032 #include "GHOST_DisplayManagerCocoa.h" 00033 #include "GHOST_Debug.h" 00034 00035 // We do not support multiple monitors at the moment 00036 00037 00038 GHOST_DisplayManagerCocoa::GHOST_DisplayManagerCocoa(void) 00039 { 00040 } 00041 00042 00043 GHOST_TSuccess GHOST_DisplayManagerCocoa::getNumDisplays(GHOST_TUns8& numDisplays) const 00044 { 00045 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 00046 00047 numDisplays = (GHOST_TUns8) [[NSScreen screens] count]; 00048 00049 [pool drain]; 00050 return GHOST_kSuccess; 00051 } 00052 00053 00054 GHOST_TSuccess GHOST_DisplayManagerCocoa::getNumDisplaySettings(GHOST_TUns8 display, GHOST_TInt32& numSettings) const 00055 { 00056 GHOST_ASSERT((display==kMainDisplay), "GHOST_DisplayManagerCocoa::getNumDisplaySettings(): only main display is supported"); 00057 00058 numSettings = (GHOST_TInt32)3; //Width, Height, BitsPerPixel 00059 00060 return GHOST_kSuccess; 00061 } 00062 00063 00064 GHOST_TSuccess GHOST_DisplayManagerCocoa::getDisplaySetting(GHOST_TUns8 display, GHOST_TInt32 index, GHOST_DisplaySetting& setting) const 00065 { 00066 //Note that only current display setting is available 00067 NSScreen *askedDisplay; 00068 00069 GHOST_ASSERT((display==kMainDisplay), "GHOST_DisplayManagerCocoa::getDisplaySetting(): only main display is supported"); 00070 00071 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 00072 00073 if (display == kMainDisplay) //Screen #0 may not be the main one 00074 askedDisplay = [NSScreen mainScreen]; 00075 else 00076 askedDisplay = [[NSScreen screens] objectAtIndex:display]; 00077 00078 if(askedDisplay == nil) { 00079 [pool drain]; 00080 return GHOST_kFailure; 00081 } 00082 00083 NSRect frame = [askedDisplay visibleFrame]; 00084 setting.xPixels = frame.size.width; 00085 setting.yPixels = frame.size.height; 00086 00087 setting.bpp = NSBitsPerPixelFromDepth([askedDisplay depth]); 00088 00089 setting.frequency = 0; //No more CRT display... 00090 00091 #ifdef GHOST_DEBUG 00092 printf("display mode: width=%d, height=%d, bpp=%d, frequency=%d\n", setting.xPixels, setting.yPixels, setting.bpp, setting.frequency); 00093 #endif // GHOST_DEBUG 00094 00095 [pool drain]; 00096 return GHOST_kSuccess; 00097 } 00098 00099 00100 GHOST_TSuccess GHOST_DisplayManagerCocoa::getCurrentDisplaySetting(GHOST_TUns8 display, GHOST_DisplaySetting& setting) const 00101 { 00102 NSScreen *askedDisplay; 00103 00104 GHOST_ASSERT((display==kMainDisplay), "GHOST_DisplayManagerCocoa::getCurrentDisplaySetting(): only main display is supported"); 00105 00106 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 00107 00108 if (display == kMainDisplay) //Screen #0 may not be the main one 00109 askedDisplay = [NSScreen mainScreen]; 00110 else 00111 askedDisplay = [[NSScreen screens] objectAtIndex:display]; 00112 00113 if(askedDisplay == nil) { 00114 [pool drain]; 00115 return GHOST_kFailure; 00116 } 00117 00118 NSRect frame = [askedDisplay visibleFrame]; 00119 setting.xPixels = frame.size.width; 00120 setting.yPixels = frame.size.height; 00121 00122 setting.bpp = NSBitsPerPixelFromDepth([askedDisplay depth]); 00123 00124 setting.frequency = 0; //No more CRT display... 00125 00126 #ifdef GHOST_DEBUG 00127 printf("current display mode: width=%d, height=%d, bpp=%d, frequency=%d\n", setting.xPixels, setting.yPixels, setting.bpp, setting.frequency); 00128 #endif // GHOST_DEBUG 00129 00130 [pool drain]; 00131 return GHOST_kSuccess; 00132 } 00133 00134 00135 GHOST_TSuccess GHOST_DisplayManagerCocoa::setCurrentDisplaySetting(GHOST_TUns8 display, const GHOST_DisplaySetting& setting) 00136 { 00137 GHOST_ASSERT((display==kMainDisplay), "GHOST_DisplayManagerCocoa::setCurrentDisplaySetting(): only main display is supported"); 00138 00139 #ifdef GHOST_DEBUG 00140 printf("GHOST_DisplayManagerCocoa::setCurrentDisplaySetting(): requested settings:\n"); 00141 printf(" setting.xPixels=%d\n", setting.xPixels); 00142 printf(" setting.yPixels=%d\n", setting.yPixels); 00143 printf(" setting.bpp=%d\n", setting.bpp); 00144 printf(" setting.frequency=%d\n", setting.frequency); 00145 #endif // GHOST_DEBUG 00146 00147 //Display configuration is no more available in 10.6 00148 00149 /* CFDictionaryRef displayModeValues = ::CGDisplayBestModeForParametersAndRefreshRate( 00150 m_displayIDs[display], 00151 (size_t)setting.bpp, 00152 (size_t)setting.xPixels, 00153 (size_t)setting.yPixels, 00154 (CGRefreshRate)setting.frequency, 00155 NULL);*/ 00156 00157 #ifdef GHOST_DEBUG 00158 /* printf("GHOST_DisplayManagerCocoa::setCurrentDisplaySetting(): switching to:\n"); 00159 printf(" setting.xPixels=%d\n", getValue(displayModeValues, kCGDisplayWidth)); 00160 printf(" setting.yPixels=%d\n", getValue(displayModeValues, kCGDisplayHeight)); 00161 printf(" setting.bpp=%d\n", getValue(displayModeValues, kCGDisplayBitsPerPixel)); 00162 printf(" setting.frequency=%d\n", getValue(displayModeValues, kCGDisplayRefreshRate)); */ 00163 #endif // GHOST_DEBUG 00164 00165 //CGDisplayErr err = ::CGDisplaySwitchToMode(m_displayIDs[display], displayModeValues); 00166 00167 return /*err == CGDisplayNoErr ?*/ GHOST_kSuccess /*: GHOST_kFailure*/; 00168 }