BOOL CALLBACK sdl_monitor_info::monitor_enum_callback(HMONITOR handle, HDC dc, LPRECT rect, LPARAM data) { osd_monitor_info ***tailptr = (osd_monitor_info ***)data; osd_monitor_info *monitor; MONITORINFOEX info; BOOL result; // get the monitor info info.cbSize = sizeof(info); result = GetMonitorInfo(handle, (LPMONITORINFO)&info); assert(result); (void)result; // to silence gcc 4.6 // guess the aspect ratio assuming square pixels float aspect = (float)(info.rcMonitor.right - info.rcMonitor.left) / (float)(info.rcMonitor.bottom - info.rcMonitor.top); // allocate a new monitor info char *temp = utf8_from_wstring(info.szDevice); // copy in the data monitor = global_alloc(sdl_monitor_info((UINT64) handle, temp, aspect)); osd_free(temp); // hook us into the list **tailptr = monitor; *tailptr = &monitor->m_next; // enumerate all the available monitors so to list their names in verbose mode return TRUE; }
void sdl_monitor_info::add_primary_monitor(void *data) { // make a list of monitors osd_monitor_info::list = NULL; osd_monitor_info **tailptr = &sdl_monitor_info::list; // allocate a new monitor info osd_monitor_info *monitor = global_alloc_clear(sdl_monitor_info(0, "", 1.0f)); //monitor->refresh(); // guess the aspect ratio assuming square pixels monitor->set_aspect((float)(monitor->position_size().width()) / (float)(monitor->position_size().height())); // hook us into the list *tailptr = monitor; //tailptr = &monitor->m_next; }
void sdl_monitor_info::init() { osd_monitor_info **tailptr; // make a list of monitors osd_monitor_info::list = NULL; tailptr = &osd_monitor_info::list; #if (SDLMAME_SDL2) { int i; osd_printf_verbose("Enter init_monitors\n"); for (i = 0; i < SDL_GetNumVideoDisplays(); i++) { sdl_monitor_info *monitor; char temp[64]; snprintf(temp, sizeof(temp)-1, "%s%d", OSDOPTION_SCREEN,i); // allocate a new monitor info monitor = global_alloc_clear(sdl_monitor_info(i, temp, 1.0f)); osd_printf_verbose("Adding monitor %s (%d x %d)\n", monitor->devicename(), monitor->position_size().width(), monitor->position_size().height()); // guess the aspect ratio assuming square pixels monitor->set_aspect((float)(monitor->position_size().width()) / (float)(monitor->position_size().height())); // hook us into the list *tailptr = monitor; tailptr = &monitor->m_next; } } osd_printf_verbose("Leave init_monitors\n"); #elif defined(SDLMAME_WIN32) EnumDisplayMonitors(NULL, NULL, monitor_enum_callback, (LPARAM)&tailptr); #else add_primary_monitor((void *)&tailptr); #endif }