処理(Transaction) を使用したディスプレイの構成
Quartz Display Services を使用すると、1 回の処理(transaction) で一連のディスプレイを構成することができます。構成変更の実行中に、Quartz はすべてのオンラインディスプレイで標準のフェード効果を実行します。ディスプレイが白黒の単色にフェードして、構成が行われ、ディスプレイは正常に戻ります。フェード効果の詳細については、フェード効果の使用 を参照してください。
CGBeginDisplayConfiguration を呼び出して、新しい処理(transaction) を開始します。次のステップは、あなたが何をしたいのかを宣言することです。たとえば、以下の関数を使用できます。
- CGConfigureDisplayWithDisplayMode はディスプレイのディスプレイモードを設定します。(OS X v10.5 では代わりに CGConfigureDisplayMode (旧式)を使用してください)。
- CGConfigureDisplayMirrorOfDisplay は、ミラーリングセットにディスプレイを追加します。
- CGConfigureDisplayOrigin は、ディスプレイの原点をグローバルディスプレイ空間内に設定します。
- CGConfigureDisplayFadeEffect はフェード効果をカスタマイズします。(この関数を呼び出すと、1 つのディスプレイ構成のフェード動作が変更され、恒久的な効果はありません。)
処理(transaction) の準備が完了したら、CGCompleteDisplayConfiguration を呼び出して処理を実行します。この呼び出しでは、また構成変更の範囲も指定します。通常、kCGConfigureForAppOnly を指定して、アプリケーションの存続期間に変更を適用します。
リスト 1 は、カスタムのフェード効果を持つ構成処理を使用して、OS X v10.6 以降の単一のディスプレイのディスプレイモードを変更する方法を示しています。OS X v10.5 以前の場合は、代わりにリスト 2 を参照してください。各番号付きコード行の詳細な説明はリストの後に示します。
リスト 1 単純な構成処理(OS X v10.6 以降)
void MyDisplaySwitchToMode (CGDirectDisplayID display, CGDisplayModeRef mode) { CGDisplayConfigRef config; // 1 CGBeginDisplayConfiguration (&config); // 2 CGConfigureDisplayWithDisplayMode (config, display, mode, NULL); // 3 CGConfigureDisplayFadeEffect ( // 4 config, 0.6, // fade out interval in seconds 1.0, // fade in interval 0.5, // red 0.5, // green 0.5 // blue ); CGCompleteDisplayConfiguration (config, kCGConfigureForAppOnly); // 5 }
リスト 2 単純な構成処理(OS X v10.5)
void MyDisplaySwitchToMode (CGDirectDisplayID display, CFDictionaryRef mode) { CGDisplayConfigRef config; // 1 CGBeginDisplayConfiguration (&config); // 2 CGConfigureDisplayMode (config, display, mode); // 3 CGConfigureDisplayFadeEffect ( // 4 config, 0.6, // fade out interval in seconds 1.0, // fade in interval 0.5, // red 0.5, // green 0.5 // blue ); CGCompleteDisplayConfiguration (config, kCGConfigureForAppOnly); // 5 }
コードの動作は以下のとおりです。
- 一連のディスプレイ構成変更用のコンテキストを提供する変数である、ディスプレイ構成オブジェクトを宣言します。
- 新しい構成処理を開始し、ディスプレイ構成オブジェクトを戻して渡します。
- この構成のディスプレイモードの変更を宣言します。
- この構成のデフォルトのフェード効果をカスタマイズします。新しいフェード色はグレーです。
- アプリケーションの範囲で新しい構成を適用します。戻ったとき、構成オブジェクトはもはや有効ではありません。