入れ子マネージャーの追加の最適化

サブマネージャーのマネージャーへの追加は、以下の 2 とおりの方法で行うことができます。
この最初の方法では、サブマネージャーの塗りつぶし中に親マネージャーの境界の複数の再計算が必要です。 オブジェクトをサブマネージャーに追加すると、サブマネージャーの境界が変更されるだけでなく、その祖先マネージャーすべての境界が変更されます。
  1. サブマネージャーを親マネージャーに追加する。
  2. サブマネージャーを塗りつぶす。
二番目の方法では、そのすべての祖先マネージャーの境界が変更されず、常に高速です。一般的に、サブオブジェクトのすべてのカスタマイズを完了してから、サブオブジェクトをマネージャーに追加する方が高速です。
  1. サブマネージャーを塗りつぶす。
  2. それを親マネージャーに追加する。
ただし、オブジェクトがマネージャーに追加される順序を制御することは必ずしもできません。この場合は、次の挿入調整セッションが役立ちます。
manager.setInsertionAdjusting(true);
try {
    ... add nested managers and nodes recursively in any order ..
} finally {
    manager.setInsertionAdjusting(false);
}
これにより、サブマネージャーおよびそのコンテンツが不正な順序で追加された場合でも、パフォーマンスが最適化されます。また、挿入調整フラグを false に設定したときのみ、マネージャーおよびそのすべてのサブマネージャーの境界ボックスが再計算されます。マネージャーの境界の変更に関連するイベントも、そのときまで遅延されます。
挿入調整フラグは、最上位のマネージャーにのみ設定する必要があり、すべての既存および新規作成されたサブマネージャーに自動的に伝搬されます。挿入調整フラグは、オブジェクトが追加されるときのパフォーマンスにのみ影響します。オブジェクトが削除されるときには影響がありません。