プライベートAPI CGSAddWindowFilter()の使用に関連する古いトリックは、何らかの理由でマーベリックスでもう機能していないようです。私はHow does on-screen color inversion work in OS X?に記載されているいくつかのコードを試したところ、次のコードは次のようになりますwindow。NSWindowでOSX 10.9(Mavericks)でCIFilterを使用するには?
#import "AppDelegate.h"
//Declarations to avoid compiler warnings (because of private APIs):
typedef void * CGSConnection;
typedef void * CGSWindowID;
extern OSStatus CGSNewConnection(const void **attributes, CGSConnection * id);
typedef void *CGSWindowFilterRef;
extern CGError CGSNewCIFilterByName(CGSConnection cid, CFStringRef filterName, CGSWindowFilterRef *outFilter);
extern CGError CGSAddWindowFilter(CGSConnection cid, CGSWindowID wid, CGSWindowFilterRef filter, int flags);
extern CGError CGSSetCIFilterValuesFromDictionary(CGSConnection cid, CGSWindowFilterRef filter, CFDictionaryRef filterValues);
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[self.window setOpaque:NO];
[self.window setAlphaValue:1.0];
[self.window setBackgroundColor:[NSColor colorWithCalibratedWhite:0.0 alpha:0.1]];
self.window.level = NSDockWindowLevel;
CGSConnection thisConnection;
CGSWindowFilterRef compositingFilter;
int compositingType = 1; // under the window
/* Make a new connection to CoreGraphics */
CGSNewConnection(NULL, &thisConnection);
/* Create a CoreImage filter and set it up */
CGSNewCIFilterByName(thisConnection, CFSTR("CIColorInvert"), &compositingFilter);
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:3.0] forKey:@"inputRadius"];
CGSSetCIFilterValuesFromDictionary(thisConnection, compositingFilter, (__bridge CFDictionaryRef)options);
/* Now apply the filter to the window */
CGSAddWindowFilter(thisConnection, (CGSWindowID)[self.window windowNumber], compositingFilter, compositingType);
}
@end
誰でも、OSX 10.8と同じようにフィルタをバックグラウンドに適用する方法を知っていますか?
マーベリックスでMenuBarFilterをもう一度動作させるには、これが必要です。
2ヶ月前は何もしていません。しかし、今回はありません!ちょうど知るために、これは10.8以下でどのように動作しますか? –
私は昨日何も来なかったので、Terminal.appをリバースエンジニアリングすることにしました。これを発見しました。これは古いOSXバージョンと互換性があるかどうかわかりませんが、テストしてお知らせします。 –
Parallelsでは10.8をテストすることができません。これらのエフェクトは機能しませんが、10.8のTerminal.appはこの関数を使用しているため、動作しています。 –