From 7930df330cf142fb3d85c8c4d448a0e5d91bf13a Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 7 Mar 2021 02:15:30 +0100 Subject: Toggle colour inversion on global hotkey When the registered global hotkey is pressed, toggle screen colour inversion. Move the colour inversion code to the `Invert` class. --- Invert.h | 5 ++++- Invert.m | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.m | 32 -------------------------------- 3 files changed, 61 insertions(+), 33 deletions(-) diff --git a/Invert.h b/Invert.h index c84685e..91a9f69 100644 --- a/Invert.h +++ b/Invert.h @@ -1,6 +1,9 @@ #import +#import -@interface Invert : NSObject +@interface Invert : NSObject { + BOOL _inverted; +} - (void)toggleInvertColors:(NSEvent *)event; diff --git a/Invert.m b/Invert.m index a41eb46..b5675eb 100644 --- a/Invert.m +++ b/Invert.m @@ -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 diff --git a/main.m b/main.m index 8ffc3b2..a5db0a9 100644 --- a/main.m +++ b/main.m @@ -1,11 +1,8 @@ #import -#import #import "Invert.h" #import "DDHotKeyCenter.h" -#define MAX_DISPLAYS 8 - int main(int argc, const char * argv[]) { [NSApplication sharedApplication]; @@ -23,37 +20,8 @@ int main(int argc, const char * argv[]) { NSLog(@"Error registering hotkey"); } - 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 - } - } - // for (;;) {} // sleep(4); - // - // CGDisplayRestoreColorSyncSettings(); // TODO: trap? // [invert release]; -- cgit v1.2.3