forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			113 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			113 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#import <Cocoa/Cocoa.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <kinc/display.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/log.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define maxDisplays 10
							 | 
						||
| 
								 | 
							
								// Display displays[maxDisplays];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*void initMacDisplays() {
							 | 
						||
| 
								 | 
							
								    for (int i = 0; i < maxDisplays; ++i) {
							 | 
						||
| 
								 | 
							
								        displays[i]._data.index = i;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int kinc_count_displays(void) {
							 | 
						||
| 
								 | 
							
									NSArray *screens = [NSScreen screens];
							 | 
						||
| 
								 | 
							
									return (int)[screens count];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int kinc_primary_display(void) {
							 | 
						||
| 
								 | 
							
									NSArray *screens = [NSScreen screens];
							 | 
						||
| 
								 | 
							
									NSScreen *mainScreen = [NSScreen mainScreen];
							 | 
						||
| 
								 | 
							
									for (int i = 0; i < maxDisplays; ++i) {
							 | 
						||
| 
								 | 
							
										if (mainScreen == screens[i]) {
							 | 
						||
| 
								 | 
							
											return i;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return -1;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_display_init(void) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								kinc_display_mode_t kinc_display_available_mode(int display, int mode) {
							 | 
						||
| 
								 | 
							
									kinc_display_mode_t dm;
							 | 
						||
| 
								 | 
							
									dm.width = 800;
							 | 
						||
| 
								 | 
							
									dm.height = 600;
							 | 
						||
| 
								 | 
							
									dm.frequency = 60;
							 | 
						||
| 
								 | 
							
									dm.bits_per_pixel = 32;
							 | 
						||
| 
								 | 
							
									return dm;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int kinc_display_count_available_modes(int display) {
							 | 
						||
| 
								 | 
							
									return 1;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool kinc_display_available(int display) {
							 | 
						||
| 
								 | 
							
									return true;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const char *kinc_display_name(int display) {
							 | 
						||
| 
								 | 
							
									return "Display";
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								kinc_display_mode_t kinc_display_current_mode(int display) {
							 | 
						||
| 
								 | 
							
									NSArray *screens = [NSScreen screens];
							 | 
						||
| 
								 | 
							
									NSScreen *screen = screens[display];
							 | 
						||
| 
								 | 
							
									NSRect screenRect = [screen frame];
							 | 
						||
| 
								 | 
							
									kinc_display_mode_t dm;
							 | 
						||
| 
								 | 
							
									dm.width = screenRect.size.width;
							 | 
						||
| 
								 | 
							
									dm.height = screenRect.size.height;
							 | 
						||
| 
								 | 
							
									dm.frequency = 60;
							 | 
						||
| 
								 | 
							
									dm.bits_per_pixel = 32;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									NSDictionary *description = [screen deviceDescription];
							 | 
						||
| 
								 | 
							
									NSSize displayPixelSize = [[description objectForKey:NSDeviceSize] sizeValue];
							 | 
						||
| 
								 | 
							
									NSNumber *screenNumber = [description objectForKey:@"NSScreenNumber"];
							 | 
						||
| 
								 | 
							
									CGSize displayPhysicalSize = CGDisplayScreenSize([screenNumber unsignedIntValue]); // in millimeters
							 | 
						||
| 
								 | 
							
									double ppi = displayPixelSize.width / (displayPhysicalSize.width * 0.039370);      // Convert MM to INCH
							 | 
						||
| 
								 | 
							
									dm.pixels_per_inch = round(ppi);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return dm;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//**
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								int Display::x() {
							 | 
						||
| 
								 | 
							
								    NSArray* screens = [NSScreen screens];
							 | 
						||
| 
								 | 
							
								    NSScreen* screen = screens[_data.index];
							 | 
						||
| 
								 | 
							
								    NSRect rect = [screen frame];
							 | 
						||
| 
								 | 
							
								    return rect.origin.x;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int Display::y() {
							 | 
						||
| 
								 | 
							
								    NSArray* screens = [NSScreen screens];
							 | 
						||
| 
								 | 
							
								    NSScreen* screen = screens[_data.index];
							 | 
						||
| 
								 | 
							
								    NSRect rect = [screen frame];
							 | 
						||
| 
								 | 
							
								    return rect.origin.y;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int Display::width() {
							 | 
						||
| 
								 | 
							
								    NSArray* screenArray = [NSScreen screens];
							 | 
						||
| 
								 | 
							
								    NSScreen* screen = [screenArray objectAtIndex:_data.index];
							 | 
						||
| 
								 | 
							
								    NSRect screenRect = [screen visibleFrame];
							 | 
						||
| 
								 | 
							
								    return screenRect.size.width;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int Display::height() {
							 | 
						||
| 
								 | 
							
								    NSArray* screenArray = [NSScreen screens];
							 | 
						||
| 
								 | 
							
								    // unsigned screenCount = [screenArray count];
							 | 
						||
| 
								 | 
							
								    NSScreen* screen = [screenArray objectAtIndex:_data.index];
							 | 
						||
| 
								 | 
							
								    NSRect screenRect = [screen visibleFrame];
							 | 
						||
| 
								 | 
							
								    return screenRect.size.height;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int Display::frequency() {
							 | 
						||
| 
								 | 
							
								    return 60;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int Display::pixelsPerInch() {
							 | 
						||
| 
								 | 
							
								    return 96;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								*/
							 |