Solaris X Window System 開発ガイド

エリアとそのペイント型のコピー

XSolarisCopyAreaAndPaintType ルーチンは、カラー情報のソースとなるドロアブルの指定された領域を、カラー情報の宛先イメージとなるドロアブルの指定された領域にコピーします。宛先イメージとなるドロアブルがオーバーレイでなければ、ペイント型情報のソースとなるドロアブル内で指定されたペイント型情報に従って、ペイント型情報の宛先イメージとなるドロアブルの指定された領域も塗りつぶします。

XSolarisOvlCopyAreaAndPaintType ルーチンを使用すれば、カラーまたはペイント型の情報が格納されているクライアントのメモリー空間内のイメージと、指定されたオーバーレイウィンドウの矩形とを結合することができます。その場合は、最初にイメージとペイント型のデータをサーバーに移動し、XPutImage を使用して、適切なデプスの 2 つのピクセルマップにデータをコピーします。次に、カラーとペイント型のドロアブルを指定した XSolarisOvlCopyAreaAndPaintType を呼び出して、情報をオーバーレイにコピーします。

このルーチンを使用すれば、特定のドロアブルからピクセル情報 (カラーとペイント型の情報) を取り出すこともできます。その場合は、最初に 2 つの分離可能な宛先ドロアブルを指定する XSolarisOvlCopyAreaAndPaintType を呼び出します。次に、各ドロアブルに対して XGetImage を呼び出し、サーバーからクライアントのメモリー空間にデータを転送します。

XSolarisCopyAreaAndPaintType の構文と引数を次に示します。

void

XSolarisOvlCopyAreaAndPaintType(Display * display, Drawable colorsrc,

		Drawable painttypesrc, Drawable colordst, 		Drawable painttypedst, GC

colorgc, GC painttypegc, 		int colorsrc_x, int colorsrc_y, int

painttypesrc_x, 		int painttypesrc_y, unsigned int width,

unsigned int height, 		int colordst_x, int colordst_y, int

painttypedst_x, 		int painttypedst_y, unsigned long action, unsigned long

plane)

display

X サーバーへの接続を指定する。 

colorsrc

カラー情報のソースとなるドロアブル。colorsrc として、任意のデプスのドロアブルまたはオーバーレイウィンドウを指定できる。

painttypesrc

ペイント型情報のソースとなるドロアブル。painttypesrc として、任意のドロアブルまたはオーバーレイウィンドウを指定できる。painttypesrc がオーバーレイウィンドウでない場合、plane で指定された painttypesrc のビットプレーンはペイント型データであるかのように処理され、コピーに使用される。この場合、plane は 1 つのビットセットを持たなければならない。

colordst

カラー情報の宛先となるドロアブル。 

painttypedst

ペイント型情報の宛先となるドロアブル。colordst がオーバーレイである場合、このドロアブルは無視される。

colorgc

カラー情報のコピーに使用する GC。 

painttypegc

painttypedst 内の領域の描画に使用する GC。colordst/painttypedst がオーバーレイである場合、この GC は無視される。

colorsrc_x

colorsrc_y

カラー情報のソース矩形の左上隅の XY 座標を、カラー情報のソースドロアブルの原点に対する相対座標で指定する。 

painttypesrc_x

painttypesrc_y

ペイント型情報のソース矩形の左上隅の XY 座標を、ペイント型情報のソースドロアブルの原点に対する相対座標で指定する。 

width, height

ソースおよび宛先の矩形の幅と高さをピクセル単位で指定する。 

colordst_x

colordst_y

カラー情報の宛先矩形の左上隅の XY 座標を、カラー情報の宛先ドロアブルの原点に対する相対座標で指定する。 

painttypedst_x

painttypedst_y

ペイント型情報の宛先矩形の左上隅の XY 座標を、ペイント型情報の宛先ドロアブルの原点に対する相対座標で指定する。colordst/painttypedst がオーバーレイである場合は、colordst_x と colordst_y が使用される。

action

どのペイント型データをコピーするかを指定する。指定できる値は、XSolarisOvlCopyOpaque、XSolarisOvlCopyTransparent、XSolarisOvlCopyAll のいずれか。 

plane

painttypesrc がオーバーレイでないときに、ペイント型情報として使用する painttypesrc のソースビットプレーンを指定する。

colordst として任意のドロアブルを指定できますが、colorsrc と同じデプスで同じルートを持たないと、BadMatch エラーが発生します。colordst がオーバーレイの場合は、painttypedst が無視され、それ以外の場合は painttypedst として任意のタイプのドロアブルを指定できます。

表 6-5 に、ソースと宛先の組み合わせとそれらの動作を示します。表の左側は colorsrc/paittypesrc の組み合わせ、表の上側は colordst/painttypedst の組み合わせを表します。A1〜A8 の各動作については、表に続いて説明します。表の中で「不可能」と記載された箇所は、colordst がオーバーレイの場合は painttypedst が無視されるために、その組み合わせが不可能であることを示します。

表 6-5 XSolarisOvlCopyAreaAndPaintType のソース/宛先の組み合わせと動作

 

オーバーレイ/オーバーレイ 

オーバーレイ/ドロアブル 

ドロアブル/オーバーレイ 

ドロアブル/ドロアブル 

オーバーレイ/オーバーレイ 

A1 

不可能 

A5 

A5 

オーバーレイ/ドロアブル 

A2 

不可能 

A6 

A6 

ドロアブル/オーバーレイ 

A3 

不可能 

A7 

A7 

ドロアブル/ドロアブル 

A4 

不可能 

A8 

A8 

action 引数は、不透明ペイント (XSolarisOvlCopyOpaque) 、透明ペイント (XSolarisOvlCopyTransparent) 、それら両方 (XSolarisOvlCopyAll) のいずれをコピー対象とするかを指定します。これによって、クライアントは不透明ペイントまたは透明ペイントを累積することができます。

XSolarisOvlCopyPaintType と同様の方法で、NoExpose イベントと GraphicsExpose イベントが生成されます。

colordst 引数にオーバーレイを指定すると、painttypedstpainttypegcpainttypedst_xpainttypedst_y の各引数はすべて無視されます。painttypegc には NULL ポインタ、painttypedst には None 値を指定できます。オーバーレイは、painttypesrc で指定される領域内のピクセルで定義されるのとまったく同じペイント型を持ちます。カラー情報をコピーしても、宛先のペイント型は影響を受けません。

このルーチンで使用される colorgc の GC 構成要素は、function、plane-mask、subwindow-mode、graphics-exposure、clip-x-origin、clip-y-origin、clip-mask です。

colordst がオーバーレイでない場合は、painttypegc の GC 構成要素として、function、plane-mask、fill-style、subwindow-mode、clip-x-origin、clip-y-origin、clip-mask が使用されます。また、GC モードに依存する構成要素として、foreground、background、tile、stipple、tile-stipple-x-origin、tile-stipple-y-origin が使用される場合もあります。

このルーチンで発生する可能性のあるエラーは、BadDrawableBadGCBadMatchBadValue です。