1
0
forked from 0ad/0ad

Implements GetVideoMode on OS X (10.6+ compatible), based on patch by Echelon9. Fixes #847.

This was SVN commit r10897.
This commit is contained in:
historic_bruno 2012-01-11 23:41:59 +00:00
parent 6bb54ee1d4
commit ed237ff1a6

View File

@ -28,6 +28,7 @@
#include "lib/sysdep/gfx.h"
#include <mach-o/dyld.h>
#include <ApplicationServices/ApplicationServices.h>
// "copy" text into the clipboard. replaces previous contents.
@ -61,8 +62,40 @@ namespace gfx {
Status GetVideoMode(int* xres, int* yres, int* bpp, int* freq)
{
// TODO Implement
return ERR::NOT_SUPPORTED; // NOWARN
// TODO: This breaks 10.5 compatibility, as CGDisplayCopyDisplayMode
// and CGDisplayModeCopyPixelEncoding were not available
CGDisplayModeRef currentMode = CGDisplayCopyDisplayMode(kCGDirectMainDisplay);
if(xres)
*xres = (int)CGDisplayPixelsWide(kCGDirectMainDisplay);
if(yres)
*yres = (int)CGDisplayPixelsHigh(kCGDirectMainDisplay);
if(bpp)
{
// CGDisplayBitsPerPixel was deprecated in OS X 10.6
CFStringRef pixelEncoding = CGDisplayModeCopyPixelEncoding(currentMode);
if (CFStringCompare(pixelEncoding, CFSTR(IO32BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo)
*bpp = 32;
else if (CFStringCompare(pixelEncoding, CFSTR(IO16BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo)
*bpp = 16;
else if (CFStringCompare(pixelEncoding, CFSTR(IO8BitIndexedPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo)
*bpp = 8;
else // error
*bpp = 0;
// We're responsible for this
CFRelease(pixelEncoding);
}
if(freq)
*freq = (int)CGDisplayModeGetRefreshRate(currentMode);
// We're responsible for this
CGDisplayModeRelease(currentMode);
return INFO::OK;
}
Status GetMonitorSize(int* xres, int* yres, int* bpp, int* freq)