Added SDL_GetDisplayName(), with implementation for Mac OS X

This commit is contained in:
Sam Lantinga 2012-12-31 11:07:46 -08:00
parent 5e519b21ed
commit ce28a79602
5 changed files with 49 additions and 2 deletions

View file

@ -109,6 +109,7 @@ struct SDL_Window
*/
struct SDL_VideoDisplay
{
char *name;
int max_display_modes;
int num_display_modes;
SDL_DisplayMode *display_modes;

View file

@ -581,6 +581,15 @@ SDL_AddVideoDisplay(const SDL_VideoDisplay * display)
displays[index] = *display;
displays[index].device = _this;
_this->displays = displays;
if (display->name) {
displays[index].name = SDL_strdup(display->name);
} else {
char name[32];
SDL_itoa(index, name, 10);
displays[index].name = SDL_strdup(name);
}
} else {
SDL_OutOfMemory();
}
@ -612,6 +621,14 @@ SDL_GetIndexOfDisplay(SDL_VideoDisplay *display)
return 0;
}
const char *
SDL_GetDisplayName(int displayIndex)
{
CHECK_DISPLAY_INDEX(displayIndex, NULL);
return _this->displays[displayIndex].name;
}
int
SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect)
{
@ -2195,8 +2212,12 @@ SDL_VideoQuit(void)
}
}
if (_this->displays) {
for (i = 0; i < _this->num_displays; ++i) {
SDL_free(_this->displays[i].name);
}
SDL_free(_this->displays);
_this->displays = NULL;
_this->num_displays = 0;
}
if (_this->clipboard_text) {
SDL_free(_this->clipboard_text);

View file

@ -24,6 +24,9 @@
#include "SDL_cocoavideo.h"
/* We need this for IODisplayCreateInfoDictionary and kIODisplayOnlyPreferredName */
#include <IOKit/graphics/IOGraphicsLib.h>
/* we need this for ShowMenuBar() and HideMenuBar(). */
#include <Carbon/Carbon.h>
@ -217,6 +220,18 @@ Cocoa_ReleaseDisplayModeList(_THIS, CFArrayRef modelist)
#endif
}
static char *
Cocoa_GetDisplayName(CGDirectDisplayID displayID)
{
NSDictionary *deviceInfo = (NSDictionary *)IODisplayCreateInfoDictionary(CGDisplayIOServicePort(displayID), kIODisplayOnlyPreferredName);
NSDictionary *localizedNames = [deviceInfo objectForKey:[NSString stringWithUTF8String:kDisplayProductName]];
if ([localizedNames count] > 0) {
return [[localizedNames objectForKey:[[localizedNames allKeys] objectAtIndex:0]] UTF8String];
}
return NULL;
}
void
Cocoa_InitModes(_THIS)
{
@ -284,6 +299,7 @@ Cocoa_InitModes(_THIS)
displaydata->display = displays[i];
SDL_zero(display);
display.name = Cocoa_GetDisplayName(displays[i]);
if (!GetDisplayMode (_this, moderef, &mode)) {
Cocoa_ReleaseDisplayMode(_this, moderef);
SDL_free(displaydata);