ADDED Set3000x2000Res.m Index: Set3000x2000Res.m ================================================================== --- Set3000x2000Res.m +++ Set3000x2000Res.m @@ -0,0 +1,57 @@ +/* + * This small program sets the resolution to 3000x2000 in HiDPI mode. + * + * Unfortunately, this is necessary because macOS does not allow selecting 3:2 + * resolutions as used by some travel displays. + * + * Compile with: + * clang -framework CoreGraphics -framework Foundation Set3000x2000Res.m + */ + +#import +#import + +int +main() +{ + NSArray *allModes = (NSArray *)CGDisplayCopyAllDisplayModes( + CGMainDisplayID(), (CFDictionaryRef)@{ + (NSString *)kCGDisplayShowDuplicateLowResolutionModes: @YES + }); + CGDisplayModeRef pickedMode = NULL; + for (id object in allModes) { + CGDisplayModeRef mode = (CGDisplayModeRef)object; + + if (CGDisplayModeGetWidth(mode) == 1500 && + CGDisplayModeGetHeight(mode) == 1000 && + CGDisplayModeGetRefreshRate(mode) == 60) { + pickedMode = mode; + break; + } + } + + if (pickedMode == NULL) { + NSLog(@"Mode not found!"); + return 1; + } + + CGDisplayConfigRef config; + if (CGBeginDisplayConfiguration(&config) != kCGErrorSuccess) { + NSLog(@"CGBeginDisplayConfiguration failed!"); + return 1; + } + + if (CGConfigureDisplayWithDisplayMode(config, CGMainDisplayID(), + pickedMode, NULL) != kCGErrorSuccess) { + NSLog(@"CGConfigureDisplayWithMode failed!"); + return 1; + } + + if (CGCompleteDisplayConfiguration(config, kCGConfigurePermanently) != + kCGErrorSuccess) { + NSLog(@"CGCompleteDisplayConfiguration failed!"); + return 1; + } + + return 0; +}