Xaw

Section: XFree86 (3)
Updated: Version
索引 xjman
 

名前


 Xaw - X Athena ウィジェット  

説明

Xaw は X ツールキットイントリンシクス(Xt)ライブラリをベースとした ウィジェットセットである。 このオンラインマニュアルは XFree86 による Xaw ライブラリに対する追加・ 修正(Xaw7)について説明する。また、このバージョンと以前の X コンソーシアム によるリリース(Xaw6)の間の共通インタフェースについてもいくらか説明する。  

アクション

全ての Xaw ウィジェットは追加のトランスレーション call-proc, declare, get-values を持つようになった。 これらのアクションの書式は以下の通りである:

action-name (boolean-expression, arguments)

action-namecall-proc, declare, get-values, set-values のいずれかである。

boolean-expression は演算子 | (or), & (and), ^ (xor), ~ (not) から構成される。 演算数は変数名($ で始まる)またはリソース名(.* による バインディングを持たないもの)、定数名になれる。 定数名には mine (event->xany.window == XtWindow(widget)), faked (event->xany.send_event != 0), true (1), false (0) 等が含まれる。

arguments は自己記述的であり、 $ で始まる場合には変数を示し、それ以外の場合にはリソース名を示す。

call-proc (boolean-expression, procedure-name)
このアクションを使うと、最初の引き数であるブール式の評価を、 アクション手続きを呼び出す前に行える。 そして、式評価が真となった場合にだけ手続きが呼ばれる。 実行例:
call-proc($inside & $pressed, notify)
declare (boolean-expression, variable, value, ...)
このアクションは、新しい変数を生成したり変数の値を変えるために使われる。 変数と値の組はいくつでも指定できる。 実行例:
declare(1, $pressed, 1)
get-values (boolean-expression, variable, value, ...)
このアクションを使うとウィジェットのリソース値を変数に読み込むことができる。 変数と値の組はいくつでも指定できる。 実行例:
get-values(1, $fg, foreground, $bg, background)
set-values (boolean-expression, variable, value, ...)
このアクションを使うと、指定した値をウィジェットのリソースに設定できる。 指定する値は変数でもかまわない。 変数と値の組はいくつでも指定できる。 実行例:
set-values(1, foreground, $bg, background, $fg)

ラベルウィジェットをボタンのように動作させるトランスレーションの例を示す:

<Map>:      get-values(1, $fg, foreground, $bg, background)\n\
<Btn1Down>: set-values(1, foreground, yellow, background, gray30)\n\
<Btn1Up>:   set-values(1, foreground, $fg, background, $bg)
 

ディスプレイリスト

全ての Xaw ウィジェットは追加のリソース displayList を持つ ようになった。 このリソースを使うと、リソース文字列に埋め込んだコマンドを使って ウィジェットの装飾を描画できる。 displayList リソースの書式は以下の通りである:

[class-name:]function-name arguments[[{;\n}]...]

class-name はウィジェット内の描画のために登録された関数の任意の 集合である。 現在は xlib クラスのみが存在する。このクラスを使うと Xlib の描画プリミティブにアクセスできる。

function-name 描画または設定のために呼び出す関数(後述)である。

arguments は、呼び出す displayList に合わせて適切に指定する。 関数が座標を必要とする場合、書式は {+-}<integer> or <integer>/<integer> となる。 指定例:

        +0,+0      top, left
        -0,-0      bottom, right
        -+10,-+10  bottom+10, right+10
        +0,1/2     left, vertical-center
arc-mode mode
円弧のモードを設定する。指定可能なパラメータは "pieslice" (円弧を ArcPieSlice に設定) および "chord" (ArcChord に設定)である。 指定例:
arc-mode chord
bg color-spec

background color-spec 背景色を設定する。 color-spec は有効な色指定でなければならない。 指定例:
background red
cap-style style
キャップ(線分の端の形状を決めるグラフィックス属性)のスタイルを指定する。 指定可能な style は "notlast" (スタイルを CapNotLast に設定), "butt" (CapBut に設定), "round" (CapRound 設定), "projecting" (CapProjecting に設定)である。 指定例:
cap-style round
clip-mask pixmap-spec
クリップマスクに使うピックスマップを設定する。 ピックスマップをパラメータとして必要とする。 ピックスマップの指定方法は後述の「ピックスマップ」セクションで 説明されている。 指定例:
clip-mask xlogo11
clip-origin x,y
クリップの原点の x, y 座標を設定する。
2 つの引き数(x, y 座標)が必要である。 指定例:
clip-origin 10,10
clip-rects x1,y1,x2,y2 [...,xn,yn]

clip-rectangles x1,y1,x2,y2 [...,xn,yn] マスクでクリップを行う矩形のリストを設定する。 引き数の数は 4 の倍数でなければならない。引き数は座標である。 矩形の幅と高さはパーザが計算する。 指定例:
clip-rects 0,0,10,20, 20,10,30,30
coord-mode mode
fill-polygon, draw-lines, draw-points で使う 座標系のモードを変更する。 指定可能なパラメータは "modeorigin" (座標系のモードを CoordModeOrigin に設定), "previous" (CoordModePrevious に設定) である。 指定例:
coord-mode previous
copy-area {pixmap-spec|.},dstx,dsty[,x2,y2,srcx,srcy]
XCopyArea を呼び出す。 文字「.」はウィンドウの内容をコピーすることを示す。 pixmap-spec は後述の「ピックスマップ」のセクションで定義されている。 X2y2 はコピー領域の端の座標であり、幅・高さではない。 これらの値が未定義ならば、パーザによって計算される。 src_xsrc_y のデフォルト値は 0 である。 指定例:
copy-area Term,10,10
copy-plane {pixmap-spec|.},dstx,dsty[,x2,y2,srcx,srcy,plane]
XCopyPlane を呼び出す。 文字「.」はウィンドウの内容をコピーすることを示す。 pixmap-spec は後述の「ピックスマップ」のセクションで定義されている。 X2y2 はコピー領域の端の座標であり、幅・高さではない。 これらの値が未定義ならば、パーザによって計算される。 src_xsrc_y のデフォルト値は 0 である。 plane のデフォルト値は 1 である。 指定例:
copy-plane star,10,10
dashes i1[...,in]
線の描画の際に使う点線の属性を設定する。 引き数は 127 個まで指定できる。 指定例:
dashes 3,7 9,10
draw-arc x1,y1,x2,y2[,start-angle,end-angle]
円弧を描画する。 最初の 4 つの引き数は円弧を包む矩形である。 残りの 2 つの引き数は(指定されていれば)描画の開始と終了の角度である。 角度の単位は度数である。 指定例:
draw-arc +0,+0,-1,-1,0,90
draw-rect x1,y1,x2,y2

draw-rectangle x1,y1,x2,y2 矩形を描画する。
4 つの引き数が必要であり、これらは開始と終了の座標(x, y の組)である。 指定例:
draw-rect +1,+1,-5,-5
draw-string x,y,string
テキスト文字列を描画する。 3 つの引き数(x, y 座標と文字列)を必要とする。 空白文字を含む文字列は「"」文字でクォートできる。「\」 文字も使えるが、この文字は 2 回エスケープしなければならない。 指定例:
draw-string 10,10, "Hello world!"
exposures boolean
GC にグラフィックスの露出に関する属性(露出時にイベントを生成するかどう か)を設定する。 指定可能なパラメータは整数または "true", "false", "on", "off" のいずれ かである。 指定例:
exposures true
fill-arc x1,y1,x2,y2[,start-angle,end-angle]
draw-arc と似ているが、円弧の内容を現在の前景色で塗りつぶす点が 異なる。 指定例:
fill-arc +0,+0,-1,-1,0,180
fill-poly x1,y1 [...,xn,yn]

fill-polygon x1,y1 [...,xn,yn] draw-lines と似ているが、閉じた多角形を塗りつぶす点が異なる。 開始点と終了点の座標が異なる場合はこれらは接続される。 指定例:
fill-poly +0,+10, +10,+20, +30,+0
fill-rect x1,y1,x2,y2
fill-rectangle x1,y1,x2,y2 draw-rect と似ているが、矩形領域を現在の前景色で塗りつぶす点が異 なる。 指定例:
fill-rect +10,+10,-20,-20
fill-rule rule
塗りつぶしの規則を設定する。 指定できるパラメータは "evenodd" (塗りつぶし規則を EvenOddRule に設定),
 "winding" (WindingRule に設定) である。 指定例:
fill-rule winding
fill-style style
塗りつぶしのスタイルを設定する。 指定可能なパラメータは "solid" (塗りつぶしのスタイルを FillSolid に設定), "tiled" (FillTiled に設定), "stippled" (FillStippled に設定), "opaquestippled" (FillOpaqueStippled に設定) である。 指定例:
fill-style tiled
font font-spec
テキスト関数で使うフォントを設定する。 指定例:
font -*-*-*-R-*-*-*-120-*-*-*-*-ISO8859-1
fg color-spec

foreground color-spec background と同様だが、現在の前景色を設定する点が異なる。 指定例:
foreground blue
mask
このコマンドは、本当に再描画する必要がある領域だけを描画したい場合に 便利である。引き数は取らない。
function function-spec
特定の GC 関数を設定する。 指定できるパラメータは以下の通りである(括弧内は設定される GC 関数): "set"(GXset), "clear"(GXclear), "and"(GXand), "andreverse"(GXandReverse), "copy"(GXcopy), "andinverted"(GXandInverted), "noop"(GXnoop), "xor"(GXxor), "or"(GXor), "nor"(GXnor), "equiv"(GXequiv), "invert"(GXinvert), "orreverse"(GXorReverse), "copyinverted"(GXcopyInverted), "nand"(GXnand)。 指定例:
function xor
join-style style
折れ線のスタイルを設定する。 指定できるパラメータは "miter"(折れ線のスタイルを JoinMiter に設定), "round"(JoinRound に設定), "bevel"(JoinBevel に設定)である。 指定例:
join-style round
image {pixmap-spec},xs,ys,[xe,ye]
この関数は複雑な装飾をウィジェット内で素早く構成する方法として実装され ている。 pixmap-spec は後述の「ピックスマップ」セクションで定義されている。 xs, ys はピックスマップのコピーを開始する座標である。 xe, ye は省略してもかまわない(デフォルト値は 前者が xs + pixmap.width, 後者が ys + pixmap.height である)。 ピックスマップがマスクを持つ場合は、コピーはこれに従ってマスク処理される。 指定例:
image pixmap.xpm,0,0,20,20
line x1,y1,x2,y2
draw-line x1,y1,x2,y2 現在の前景色で線を描画する。 引き数を 4 つ(始点と終点を表す頂点の組)必要とする。 指定例:
line +0,+0, -1,-1
line-width integer
線の描画幅を選択する。 指定例:
line-width 2
line-style style
線のスタイルを設定する。 指定可能なパラメータは "solid"(スタイルを LineSolid に設定), "onoffdash"(LineOnOffDash に設定), "doubledash"(LineDoubleDash に設定) である。 指定例:
line-style onoffdash
lines x1,y1,x2,y2 [...,xn,yn]
draw-lines x1,y1,x2,y2 [...,xn,yn] 複数個の線を描画する。 任意の数の引き数の組(ふたつの引き数が一組)を指定できる。 指定例:
lines +0,-1, -1,-1, -1,+0
paint-string x,y,string
draw-string と同じであるが、背景色も使用する。 指定例:
paint-string 10,20, "Sample text"
point x,y

draw-point x,y 点を描画する。 引き数が 2 つ(座標を表す数値の組)必要である。 指定例:
point +10,+10
plane-mask integer
プレーンマスクを設定する。 整数値のパラメータを取る。 指定例:
plane-mask -1
points x1,y1 [...,xn,yn]
draw-points x1,y1 [...,xn,yn] 複数個の点を指定された座標列に描画する。 指定例:
points +1,+2, +1,+4, +1,+6
segments x1,y1,x2,y2 [...,xn,yn]
draw-segments x1,y1,x2,y2 [...,xn,yn] 複数個の線分を描画する。 引き数の数は 4 の倍数でなければならない。 指定例:
segments +1,+2,+1,-3, +2,-2,-3,-2
shape-mode mode
fill-polygon で使う形状モードを設定できる。 指定可能なパラメータは "complex"(モードを Complex に設定), "convex"(Convex に設定), "nonconvex"(Nonconvex に設定)である。 指定例:
shape-mode convex
stipple pixmap-spec
スティプル処理に使うピックスマップを設定する。 ピックスマップを引き数として要求する。 指定方法は後述の「ピックスマップ」セクションで説明されている。 指定例:
stipple plaid
subwindow-mode mode
GC のサブウィンドウモードを設定する。 指定可能なパラメータは "includeinferiors"(モードを IncludeInferiors に設定), "clipbychildren"(ClipByChildren に設定)である。 指定例:
subwindow-mode includeinferiors
tile pixmap-spec
タイル処理用のピックスマップを指定する。 ピックスマップを引き数として要求する。 指定方法は後述の「ピックスマップ」セクションで説明されている。 指定例:
tile xlogo11?foreground=red&background=gray80
ts-origin x,y
タイルとスティプルの原点の x, y 座標を設定する。 2 つの引き数(x, y 座標)を必要とする。 指定例:
ts-origin 10,10
umask
GC のマスク処理を無効にする(mask コマンドで設定されている場合)。 引き数は不要である。

ウィジェット内の効果として影を描画する例:

foreground gray30;\
draw-lines +1,-1,-1,-1,-1,+1;\
foreground gray85;\
draw-lines -1,+0,+0,+0,+0,-1
 

ピックスマップ

String 型から Pixmap 型へのコンバータが Xaw に追加されている。 このコンバータは拡張されることが想定されており、複数の画像フォーマット のロードに対応できるように抽象化されている。 このコンバータは URL に似たフォーマットが使われている。 書式は以下の通りである:

[type:]name[?arg=val[{&}...]]

type には bitmap, gradient, xpm のいずれ かが指定できる。

name にはファイル名を指定する。あるいは gradient 型の場合 には、verticalhorizontal のいずれかとなる。

arg=val はコンバータに与える引き数のリストである。 引き数リストの前には疑問符が置かれ、複数の引き数がある場合には "&" で 区切られる。 最も一般的な引き数は foregroundbackground である。 gradient 型は startend (色勾配の開始および終了の色)、 steps (色を節約できる)、dimension (勾配のサイズを指定) も引き数として受け付ける。 xpm コンバータは、closeness 引き数も受け付ける。 この引き数は色をあまり使えない時に役立つ(カラーマップが制限を受けて いるときに便利である)。  

Text ウィジェット

このバージョンの Xaw ライブラリへの変更の大部分は TextWidget, TextSrcObject, TextSinkObject とその関連ファイルに対して行われた。

Text ウィジェットの見た目での変化は、Xaw6 の実装(スクロールバーと 自動リサイズ)のバグのためである。 Xaw6 では、スクロールバーを追加・削除するとテキストカーソルを表示したま まにできなくなる問題がいくつか起きたし、ウィジェットがカーソルは可視 だと思っているのに実際には可視でないということが非常に起きやすかった。 また、ウィジェットの大きいジオメトリへの自動リサイズを許すと他の問題が 起きた。このため、アプリケーションが矛盾のないレイアウトを持つことは 難しかったし、ウィンドウマネージャが介入しなければウィンドウが 画面より大きくなってしまうこともあった。 したがって、スクロールバーと自動リサイズを含む一部の機能は無効にされて いた。 Text ウィジェットの新規リソースや変更されたリソースに関する後述の セクションを参照すること。

Text ウィジェットの動作は Emacs (テキストエディタ)に基本としている。 今回のリリースでは、Emacs ユーザになじみの深い操作がさらに追加された。 テキストの新しいアクションには以下のものがある:

indent
テキストブロックをインデントする。 この機能はデフォルトでは割り当てられていない。 Text ウィジェットはソースオブジェクトの自動インデントもデフォルトでは 行おうとしない。
keyboard-reset
キーボートの状態をリセットする。 繰り返し回数を 1 に戻し、undo 機能が有効であれば undo と redo を切り替 える。 デフォルトのキー割り当ては Control<Key>G である。
kill-ring-yank
このバージョンの Xaw では、どのテキスト領域で kill されたテキストも メモリに保持され、同じアプリケーション内ならばテキスト領域間での カット・アンド・ペーストが行える。 デフォルトのキー割り当ては Meta<Key>Y である。
numeric
このアクションをここで説明しているのは文書化のためだけである。 このアクションは 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, または - の いずれかが入力された時にデフォルトで呼び出され、テキスト操作の 繰り返し回数を指定できる。
set-keyboard-focus
トップレベルウィジェットへのフォーカスをテキスト領域に設定する。 デフォルトでは無効にされているが、<Btn1Down> イベントに割り当て られている。
toggle-overwrite
上書きモードをトグルさせる。 上書きモードでは、テキスト領域に挿入された文字は、既にあるテキストに 上書きされる。 デフォルトでは <Key>Insert キーに割り当てられている。
undo
textSrcObject の enableUndo を設定する。 デフォルトでは有効ではないが、Control<Key>_ キーに割り当てられて いる。

Text ウィジェットの新しいリソースおよび変更されたリソースには以下のよ うなものがある:

justify (Class Justify)
テキストの左右・中央揃えを設定する。 left, right, center, full のいずれかが指定できる。 autoFill リソースが設定されており、かつ leftColumn リソースと rightColumn リソースが正しく設定され ている時だけ有効となる。
leftColumn (Class Column)
テキストを区切る場所となる左カラムを指定する。 英数文字で始まるテキスト行は自動的にこのカラムから始まる。
positionCallback (Class Callback)
カーソルが移動した時またはファイルのサイズが変わった時に毎回呼び出される コールバックを設定できるようにする。 このコールバックは以下のデータへのポインタを引き数として呼び出される。
typedef struct {
    int line_number;
    int column_number;
    XawTextPosition insert_position;
    XawTextPosition last_position;
    Boolean overwrite_mode;
} XawTextPositionInfo;
このコールバックは、プログラマが Xaw ウィジェットセットを使って テキストエディタを書くのを助けるためのものである。
resize (Class Resize)
サポートされなくなったが、Xaw6 テキストウィジェット向けに書かれた リソース指定との後方互換性のために認識はされる。
rightColumn (Class Column)
テキストを区切る場所となる右カラムを指定する。 英数文字で始まる行はこのカラムで自動的に終わりとなる。
scrollHorizontal (Class Scroll)

scrollVertical (Class Scroll) これらのリソースは、Text ウィジェットの左辺または下辺への スクロールバーの配置を制御する。 指定できる値は XawtextScrollAlwaysXawtextScrollNever である。 このリソースに対して以下の文字列を変換するコンバータが登録されている: always, never. XawtextScrollWhenNeeded (および whenNeeded, これは コンバータが認識する) という値は、Xaw6 の Text ウィジェットのために 書かれたリソース指定との後方互換性のために指定できるが、無視される( 実際には XawtextScrollNever として扱われる)。
 

Text Source オブジェクト

textSrcObject を使うと、内容の複数ウィンドウに表示することや、undo 情報の格納ができる。 textSrcObject の新しいリソースは以下の通りである:
callback (Class Callback)
前のバージョンの Xaw では、このリソースを TextSource オブジェクトの サブクラスの中に持っていた。 現在は undo 機能が有効なときにテキストの状態をコールバック関数に伝え られるように変更された。
enableUndo (Class Undo)
Boolean 型のリソース値であり、undo 機能を有効/無効にする。 デフォルト値は False である。
sourceChanged (Class Changed)
callback リソースと同じく、このリソースは前のバージョンでは TextSource オブジェクトのサブクラス内にあった。 現在のバージョンでは、undo 機能が有効になっているときに テキストの変更/未変更の状態を制御できるように textSrcObject 内にある。
 

Text Sink オブジェクト

textSinkObject のサブクラスである asciiSinkObject と multiSinkObject は新しいカーソル形状(ベースライン位置のキャレットではなくなった)に対応 するため少し変更された。このカーソル形状は Text ウィジェットの 入力フォーカスを示し、色を設定することもできる。 新しいリソースは以下のものである:
cursorColor (Class Color)
テキストのカーソルの色を設定できる。この色は、選択されたテキスト を描画するためにも使われる。
 

Simple Menu ウィジェット

メニュー項目を配置するための simpleMenuWidget のアルゴリズムは、 単独カラムでは画面に収まらない時に複数カラム処理が有効となるように変更 された。 また、サブメニューが有効となるようにも修正された。  

sme BSB オブジェクト

新しいリソースが smeBSBObject に追加されている。これはサブメニューを 割り当てられるようにするものである。 新しいリソースは以下の通りである:
menuName (Class MenuName)
メニュー項目の上にポインタがある際にポップアップするポップアップ ウィジェットの名前、または NULL を指定する。 指定されたメニューは、smeBSBObject のポップアップ時の親の子でなければな らない点に注意すること。
 

制限

Xaw は現在活発に開発されている。 Xaw の将来のリリースと完全に互換性を保っておきたいプログラムでは、 公開されているインタフェースだけを使うべきである。 ウィジェットのサブクラス化は悪くない考えであり、プログラムの作業を助け ることも多いが、現在の Xaw の開発状況では、プライベートデータ構造体にアクセスするようなプログラム は将来のリリースで問題を起こすかもしれない。 こういった問題を避け、新しいリリースでのソース互換・バイナリ互換を 保証するための努力が行われている。  

作者

オリジナルの X コンソーシアム版の Athena ウィジェットセットと、その ドキュメントは多くの人々による成果物である。 このメンバーには Chris D. Peterson, Ralph Swick, Mark Ackerman, Donna Converse, Jim Fulton, Loretta Guarino-Reid, Charles Haynes, Rich Hyde, Mary Larson, Joel McCormack, Ron Newman, Jeanne Rich, Terry Weissman, Mike Gancarz, Phil Karlton, Kathleen Langone, Ram Rao, Smokey Wallace, Al Mento, Jean Diaz が含まれる。

XFree86 による Xaw への追加と変更は C'esar Pereira de Andrade が行った。  

関連項目

Athena Widget Set - C Language Interface


 

Index

名前
説明
アクション
ディスプレイリスト
ピックスマップ
Text ウィジェット
Text Source オブジェクト
Text Sink オブジェクト
Simple Menu ウィジェット
sme BSB オブジェクト
制限
作者
関連項目

jman



Time: 07:00:56 GMT, January 12, 2009