int WIN_InitModes(_THIS) { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; DWORD i, j, count; DISPLAY_DEVICE device; device.cb = sizeof(device); for (i = 0;; ++i) { TCHAR DeviceName[32]; if (!EnumDisplayDevices(NULL, i, &device, 0)) { break; } if (!(device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) { continue; } SDL_memcpy(DeviceName, device.DeviceName, sizeof(DeviceName)); #ifdef DEBUG_MODES printf("Device: %s\n", WIN_StringToUTF8(DeviceName)); #endif count = 0; for (j = 0;; ++j) { if (!EnumDisplayDevices(DeviceName, j, &device, 0)) { break; } if (!(device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) { continue; } count += WIN_AddDisplay(device.DeviceName); } if (count == 0) { WIN_AddDisplay(DeviceName); } } if (_this->num_displays == 0) { SDL_SetError("No displays available"); return -1; } return 0; }
int WIN_InitModes(_THIS) { int pass; DWORD i, j, count; DISPLAY_DEVICE device; device.cb = sizeof(device); /* Get the primary display in the first pass */ for (pass = 0; pass < 2; ++pass) { for (i = 0; ; ++i) { TCHAR DeviceName[32]; if (!EnumDisplayDevices(NULL, i, &device, 0)) { break; } if (!(device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) { continue; } if (pass == 0) { if (!(device.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE)) { continue; } } else { if (device.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) { continue; } } SDL_memcpy(DeviceName, device.DeviceName, sizeof(DeviceName)); #ifdef DEBUG_MODES printf("Device: %s\n", WIN_StringToUTF8(DeviceName)); #endif count = 0; for (j = 0; ; ++j) { if (!EnumDisplayDevices(DeviceName, j, &device, 0)) { break; } if (!(device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) { continue; } if (pass == 0) { if (!(device.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE)) { continue; } } else { if (device.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) { continue; } } count += WIN_AddDisplay(_this, device.DeviceName); } if (count == 0) { WIN_AddDisplay(_this, DeviceName); } } } if (_this->num_displays == 0) { return SDL_SetError("No displays available"); } return 0; }
static SDL_bool WIN_AddDisplay(LPTSTR DeviceName) { SDL_VideoDisplay display; SDL_DisplayData *displaydata; SDL_DisplayMode mode; #ifdef DEBUG_MODES printf("Display: %s\n", WIN_StringToUTF8(DeviceName)); #endif #if _MSC_VER == 1200 if (!WIN_GetDisplayMode(NULL, ENUM_CURRENT_SETTINGS, &mode)) { #else if (!WIN_GetDisplayMode(DeviceName, ENUM_CURRENT_SETTINGS, &mode)) { #endif return SDL_FALSE; } displaydata = (SDL_DisplayData *) SDL_malloc(sizeof(*displaydata)); if (!displaydata) { return SDL_FALSE; } SDL_memcpy(displaydata->DeviceName, DeviceName, sizeof(displaydata->DeviceName)); SDL_zero(display); display.desktop_mode = mode; display.current_mode = mode; display.driverdata = displaydata; SDL_AddVideoDisplay(&display); return SDL_TRUE; } int WIN_InitModes(_THIS) { DWORD i, j, count; DISPLAY_DEVICE device; #if _MSC_VER == 1200 WIN_AddDisplay("\\\\.\\DISPLAY1"); #else device.cb = sizeof(device); for (i = 0;; ++i) { TCHAR DeviceName[32] = {0}; if (!EnumDisplayDevices(NULL, i, &device, 0)) { break; } if (!(device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) { continue; } SDL_memcpy(DeviceName, device.DeviceName, sizeof(DeviceName)); #ifdef DEBUG_MODES printf("Device: %s\n", WIN_StringToUTF8(DeviceName)); #endif count = 0; for (j = 0;; ++j) { if (!EnumDisplayDevices(DeviceName, j, &device, 0)) { break; } if (!(device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) { continue; } count += WIN_AddDisplay(device.DeviceName); } if (count == 0) { WIN_AddDisplay(DeviceName); } } #endif if (_this->num_displays == 0) { SDL_SetError("No displays available"); return -1; } return 0; }