共通デスクトップ環境 プログラマーズ・ガイド (国際化対応編)

ジオメトリ管理

VendorShell ウィジェットは、入力メソッドのユーザ・インタフェース・コンポーネントのジオメトリ管理とフォーカス管理を必要に応じて提供します。ロケールがそれを保証する場合 (たとえばロケールが日本語の EUC (拡張 UNIX コード) ロケールの場合)、VendorShell ウィジェットは、必要なプリエディット領域かステータス領域あるいはその両方のジオメトリを自動的に割り当てて管理します。

現在行われているプリエディットによっては補助領域が必要になります。補助領域が必要な場合は、VendorShell ウィジェットは補助領域の手続きを生成して管理します。通常、VendorShell ウィジェットの子は複数の Text および TextField ウィジェットを管理できるコンテナ・ウィジェット (XmBulletinBoard ウィジェットまたは XmRowColumn ウィジェットなど) であり、ユーザからのマルチバイト文字の入力ができます。このシナリオでは、すべての Text ウィジェットは同一の入力メソッドを共用します。


注 -

ステータス領域、プリエディット領域、補助領域にはアプリケーションのプログラマはアクセスできません。たとえば、アプリケーションのプログラマがステータス領域のウィンドウ ID にアクセスすることは想定されていません。それらのコンポーネントは必要に応じて VendorShell ウィジェット・クラスが管理するので、ユーザはそれらのコンポーネントのインスタンスの生成や管理について考える必要はありません。


アプリケーションのプログラマは、VendorShell ウィジェット・クラスの XmNpreedetType リソースを介して、入力メソッドのユーザ・インタフェース・コンポーネントの動作をいくらかコントロールできます。OffTheSpot モードと OverTheSpot モードについては、「入力メソッド」を参照してください。

ジオメトリ管理は、すべての入力メソッドのユーザ・インタフェースのコンポーネントに及びます。アプリケーション・プログラム・ウィンドウ (TopLevelShell ウィジェット) がサイズ変更されると、入力メソッドのユーザ・インタフェースのコンポーネントもそれに応じてサイズ変更され、その中のプリエディットされた文字列は必要に応じて再配置されます。もちろん、シェル・ウィンドウのサイズ変更ポリシーが true であることを想定しています。

VendorShell ウィジェットが作成されるとき、特定の入力メソッドがステータス領域、プリエディット領域、あるいはその両方を必要とする場合、VendorShell のサイズはそれらのコンポーネントが必要とする領域を考慮します。プリエディット領域とステータス領域が必要とする特別な領域は、VendorShell ウィジェットの領域の一部です。それらの領域も、サイズ変更する必要がある場合は VendorShell ウィジェットに管理されます。

それらの領域 (ステータス領域およびプリエディット領域) の潜在的な手続きの作成のために、現在使用されている入力メソッドによって、VendorShell ウィジェット領域のサイズは必ずしも子のサイズにぴったり合うように伸縮する必要はありません。VendorShell ウィジェット領域のサイズは、子のジオメトリとこれらの入力メソッドのユーザ・インタフェース領域のジオメトリの両方が入るように伸縮します。VendorShell ウィジェットと子ウィジェット (メイン・ウィンドウ領域) 間の高さには差があるかもしれません (たとえば 20 ピクセル)。幅のジオメトリは、入力メソッドのユーザ・インタフェースのコンポーネントに影響されません。

まとめると、子に要求されたサイズは可能であれば受け付けられます。VendorShell の実際のサイズは子よりも大きい場合もあります。

VendorShell ウィジェットと子のジオメトリを指定する要求は、互いに矛盾しない限り、または VendorShell ウィジェットのサイズ変更能力の制約内であれば行われます。矛盾する場合は、子のウィジェット・ジオメトリ要求が優先します。たとえば、子ウィジェットのサイズが 100 * 100 に指定された場合、VendorShell のサイズも 100 * 100 に指定されます。子ウィジェットのサイズが 100 * 100 になるのに対して、VendorShell のサイズは結果的に 100 * 120 になります。子ウィジェットのサイズが指定されない場合、独自のサイズ指定を使用する必要があれば VendorShell は子ウィジェットを縮小します。たとえば、VendorShell のサイズが 100 * 100 に指定され、子のサイズは指定されない場合、子ウィジェットのサイズは 100 * 80 になります。VendorShell ウィジェットがサイズ変更を禁止されている場合は、子のジオメトリ要求がどうであっても VendorShell ウィジェットは独自のジオメトリ指定を使用します。