diff options
Diffstat (limited to 'Invert.m')
| -rw-r--r-- | Invert.m | 57 | 
1 files changed, 57 insertions, 0 deletions
| @@ -1,10 +1,67 @@  #import "Invert.h" +#define MAX_DISPLAYS 8 +  @implementation Invert +- (id)init +{ +    self = [super init]; +    if (self) { +        _inverted = NO; +    } +    return self; +} +  - (void)toggleInvertColors:(NSEvent *)event  {      NSLog(@"Toggling"); + +    if (!_inverted) { +        [self invertColors]; + +        _inverted = YES; +    } +    else { +        [self restoreColors]; + +        _inverted = NO; +    } +} + +- (void)invertColors +{ +    const CGGammaValue inverted_gamma[2] = {1, 0}; + +    CGDirectDisplayID active_displays[MAX_DISPLAYS]; +    uint32_t display_count; + +    CGError error = CGGetActiveDisplayList( +        MAX_DISPLAYS, +        &active_displays[0], +        &display_count +    ); +    if (error != kCGErrorSuccess) { +        // return 69; +    } + +    for (int i = 0; i < display_count; i++) { +        error = CGSetDisplayTransferByTable( +            active_displays[i], +            2, +            inverted_gamma, +            inverted_gamma, +            inverted_gamma +        ); +        if (error != kCGErrorSuccess) { +            // TODO: error handling +        } +    } +} + +- (void)restoreColors +{ +    CGDisplayRestoreColorSyncSettings();  }  @end | 
