Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 44 lines (33 sloc) 1.55 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
//
// Grayifier.m
// GrayFocus
//
// Created by Andy Matuschak on 8/5/10.
// Copyright 2010 Andy Matuschak. All rights reserved.
//

#import "Grayifier.h"
#include <Carbon/Carbon.h>
#import "CGSPrivate.h"

extern OSStatus CGSNewConnection(const void **attributes, CGSConnection * id);

@implementation Grayifier

static CGSWindowFilterRef grayscaleFilter;
static CGSConnection connection;

+ (void)load
{
CGSNewConnection(NULL, &connection);
CGSNewCIFilterByName(connection, (CFStringRef)@"CIColorControls", &grayscaleFilter);
CGSSetCIFilterValuesFromDictionary(connection, grayscaleFilter, (CFDictionaryRef)[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:@"inputSaturation"]);

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(grayify:) name:NSWindowDidResignKeyNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(grayify:) name:NSWindowDidResignMainNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(colorize:) name:NSWindowDidBecomeMainNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(colorize:) name:NSWindowDidBecomeKeyNotification object:nil];
}

+ (void)grayify:(NSNotification *)note
{
CGSAddWindowFilter(connection, [(NSWindow *)[note object] windowNumber], grayscaleFilter, 1 << 2);
}

+ (void)colorize:(NSNotification *)note
{
CGSRemoveWindowFilter(connection, [(NSWindow *)[note object] windowNumber], grayscaleFilter);
}

@end
Something went wrong with that request. Please try again.