ウインドウに 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" を使った方が軽くていいかも?

期待

Mac ソフトウェア

画面キャプチャツールの開発に着手する。名前は「SimpleCap」。Simple Capture の略。まずはウィンドウキャプチャやタイマーキャプチャなどスタンダードな機能の実装を当面の目標としよう。完成後は公開する予定。なお動作環境は Mac OS X 10.5 以上とする。

過去の記事を読むと、Apple のサンプル「Son of Grab」で見られるような、Leopard での新しいウインドウキャプチャ方法を利用するみたい。

今年はじめ、MacHeist バンドルについてきた定番キャプチャソフトウェア、「Snapz Pro X」を初めて使い、その静止画撮影機能にがっかりした(枠の形が決められていてカスタムシェイプのウインドウや複数のメニューをその形で切り抜いて撮ることができない、重なっていたり画面の外にはみ出ていたりして隠れているオブジェクトが撮れないなど)が、これは期待できそう。

白い Leopard

Mac ソフトウェア

ターミナルで

defaults write -g NSUseLeopardWindowValues NO

と入力すると、ウインドウが Tiger のデザインになる。

アクティブ時の白いタイトルバー、バックグラウンドのストライプ模様など、こちらの方が好きだった人も多いのではないだろうか。

隠し設定だが、自分の Mac では 2 日使っても問題は起きていない。試す人はもちろん自己責任で。

ちなみに、Cocoa アプリケーションのみ反映されるみたい。

© 2005-2021 zumuya