Solaris X Window System 開発ガイド

透明オーバーレイウィンドウの基本的な特性

透明オーバーレイウィンドウは、ピクセルを透明に描画できる X InputOutput ウィンドウの特殊なクラスです。透明オーバーレイウィンドウのハンドルは、X ウィンドウの型 Window を持っています。標準の X ウィンドウと同様に、オーバーレイウィンドウは描画可能であり、オーバーレイウィンドウのハンドルは Drawable を取る任意の Xlib 描画ルーチンに渡すことができます。

透明オーバーレイウィンドウによって、ペイント型の属性を含むグラフィックコンテキスト属性のセットが拡張されました。透明オーバーレイ拡張機能を使用すると、不透明ペイントまたは透明ペイントを使用して透明オーバーレイウィンドウを描画できます。

ペイント型

標準 X InputOutput ウィンドウや他のドロアブル (ピックスマップなど) には不透明ペイントしか使用できませんが、透明オーバーレイウィンドウでは透明ペイントを使用してピクセルを描画できます。ペイントされた有効なピクセル値により、背後のウィンドウ内のピクセルは不透明に隠されます。このようなピクセルには、表示されるカラー値が関連付けられています。透明に描画されたピクセルは固有のカラーを持たず、下にあるピクセルから表示カラーを継承します。

不透明にペイントされたピクセルに有効なピクセル値は、XAllocColor() または別の標準ピクセル割当メカニズムを介して取得されます。ビジュアルに有効なカラーマップエントリの範囲外の値など、有効でないピクセル値を使用して不透明にペイントすると、透明オーバーレイウィンドウの場合も標準 X InputOutput ウィンドウの場合も結果は不定になります。

ペイント型は、データ構造体 XSolarisOvlPaintType で定義されます。デフォルトでは、GC のペイント型は不透明です。XSolarisOvlPaintType データ構造体は次のように定義されます。

typedef

enum { 	XSolarisOvlPaintTransparent, 	XSolarisOvlPaintOpaque, }

XSolarisOvlPaintType;

可視性

透明オーバーレイウィンドウは、すべてのピクセルが透明であっても可視的であるとみなされます。透明オーバーレイウィンドウ内の完全に透明な可視ピクセルについては、その下にあるアンダーレイのピクセルが表示されます。

オーバーレイウィンドウがアンマップされたり移動されたりすると、その下のアンダーレイがエクスポージャイベントを受け取る場合があります。たとえば、このような状況は、異なるプレーングループ内にあるオーバーレイウィンドウとアンダーレイウィンドウを同時に表示することができないデバイス上で発生します。

透明ペイントの描画

アプリケーションでは、Xlib のプリミティブを使用してオーバーレイウィンドウに描画できます。また、XGL グラフィックスライブラリなどの Solaris ビジュアルグラフィックスライブラリを通じ、そのライブラリの GC コンテキスト内でペイントを透明にするように指定して、透明オーバーレイウィンドウに透明ペイントを描画できます。Solaris ビジュアルライブラリごとに、透明オーバーレイウィンドウへの描画方法が定義されています。詳細については、ライブラリのマニュアルを参照してください。