95 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <Kore/Log.h>
 | |
| 
 | |
| #include "Display.h"
 | |
| 
 | |
| #include <cstdio>
 | |
| #include <cstdlib>
 | |
| 
 | |
| 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];
 | |
| 		}
 | |
| 	}
 | |
| }
 |