ひtoりgoと

ウインドウに Core Image フィルタで Aero 風?

macOS 開発

参考:QSWindowFilter

CGSWindowFilterRef filterRef; {
    CGSNewCIFilterByName(someConnection, CFSTR("CIGaussianBlur"), &filterRef);
    NSDictionary* options = [NSDictionary dictionaryWithObject: [NSNumber numberWithFloat: 3.0] forKey: @"inputRadius"];
    CGSSetCIFilterValuesFromDictionary(someConnection, filterRef, (CFDictionaryRef)options);
}
CGSAddWindowFilter(someConnection, [window windowNumber], filterRef, __compositingType);

こんなことをやるとウインドウのバックグラウンドに Core Image フィルタを適用できる。
(Tiger 以前だと正しく動作しないので注意。ウインドウが表示されてから実行しなければならない。windowNumber はウインドウが表示されてないと取得できないため。)

CIGaussianBlur フィルタを使うことで、Leopard のメニューやウインドウのシートのようなぼかし効果を再現してみた。

対象範囲はウインドウ全体のようで、この実験でもよく見ると丸い角の部分までぼやけてしまっているのがわかる。

Blurminal もこうやって実現しているのだろうか。それとも、もっと楽な方法があったりして...

2012.2.2 追記

どうせ隠し関数を使うのなら、高品質だけど重い "CIGaussianBlur" よりも、隠れフィルタの "CICheapBlur" を使った方が軽くていいかも?

Share

リンクも共有もお気軽に。記事を書くモチベーションの向上に役立てます。

© 2005-2022 zumuya