#include #include "Display.h" #include #include namespace Kore { namespace Display { void fatalError(const char *message) { printf("main: %s\n", message); exit(1); } enum { MAXIMUM_DISPLAY_COUNT = 10 }; DeviceInfo displays[MAXIMUM_DISPLAY_COUNT]; int displayCounter = -1; bool initialized = false; void enumDisplayMonitors(DeviceInfo screens[], int &displayCounter); void enumerate() { if (initialized) { return; } initialized = true; enumDisplayMonitors(displays, displayCounter); } int count() { return displayCounter + 1; } int width(int index) { return displays[index].width; } int height(int index) { return displays[index].height; } int x(int index) { return displays[index].x; } int y(int index) { return displays[index].y; } bool isPrimary(int index) { return displays[index].isPrimary; } const DeviceInfo *primaryScreen() { for (int index = 0; index < MAXIMUM_DISPLAY_COUNT; ++index) { const DeviceInfo &info = displays[index]; if (info.isAvailable && info.isPrimary) { return &info; } } if (!displays[0].isAvailable) { log(Warning, "No display attached?"); // TODO (DK) throw exception? return nullptr; } log(Warning, "No primary display defined, returning first display"); return &displays[0]; } const DeviceInfo *screenById(int id) { for (int index = 0; index < MAXIMUM_DISPLAY_COUNT; ++index) { const DeviceInfo &info = displays[index]; if (info.number == id) { return &info; } } if (!displays[0].isAvailable) { log(Warning, "No display available"); // TODO (DK) throw exception? return nullptr; } log(Warning, "No display with id \"%i\" found, returning first display", id); return &displays[0]; } } }