XAW(3)

名前
 XAW - X Athena ウィジェット

説明
Xaw は Xt イントリンシクスをベースとしたウィジェットセットである。 このオンラインマニュアルは XFree86 による Xaw ライブラリに対する追加・ 修正を説明する。共通インタフェースについてもいくらか説明する。

アクション
全ての Xaw ウィジェットは追加のトランスレーション call-proc, declare, get-values, set-values を持つようになった。 これらのアクションの書式は以下の通りである:
action-name(boolean-expression, arguments)
action-name は call-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
    このアクションを使うと(最初の引き数にした)ブール式の評価を、 アクション手続きを呼び出す前に行える。 そして、この式が真となった場合だけ手続きが手続きが呼ばれる。 実行例:
    call-proc("$inside & $pressed", notify)

declare
    このアクションは、get-values のように、新しい変数を生成したり 変数の値を変えるために使われる。 実行例:
    declare(1, $pressed, 1)

get-values
    このアクションを使うとリソース値を変数に読み込むことができる。 実行例:
    get-values(1, $fg, foreground, $bg, background)

set-values
    このアクションを使うとウィジェットのリソースを設定できる。 実行例:
    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 クラスのみが存在する。
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
    背景色を設定する。引き数は有効な色指定でなければならない。 指定例:
    background red

cap-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 についてはこのオンラインマニュアルの「ピックスマップ」の セクションで定義されている。 X2 と y2 はコピー領域の端の座標であり、幅・高さではない。 もし定義されていないければパーザが計算する。 src_x と src_y のデフォルト値は 0 である。 指定例:
    copy-area Term,10,10

copy-plane {pixmap-spec|.},dstx,dsty[,x2,y2,srcx,srcy,plane]
    XCopyPlane を呼び出す。 文字「.」はウィンドウの内容をコピーすることを示す。pixmap-spec はこのオンラインマニュアルの「ピックスマップ」の セクションで定義されている。 X2 と y2 はコピー領域の端の座標であり、幅・高さではない。 もし定義されていなければパーザが計算する。 Src_x と src_y のデフォルト値は 0 である。 指定例:
    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 つの引き数が必要であり、これらは開始と終了の座標である。 指定例:
    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 で使う shape モードを設定できる。 指定可能なパラメータは "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 型の場合 には、vertical か horizontal のいずれかとなる。
arg=val はコンバータに与える引き数のリストである。 最も一般的な引き数は foreground と background である。 gradient 型は start と end (色勾配の開始および終了の色)、 steps (色を節約できる)、size (勾配のサイズを指定) も引き数 として受け付ける。 xpm コンバータは、色をあまり使えない時に役立つ closeness 引き数も受け付ける(カラーマップが制限を受けているときに便利である)。

Text ウィジェット
このバージョンの Xaw ライブラリへの変更の大部分は TextWidget, TextSrcObject, TextSinkObject とその関連ファイルに対して行 われた。Text ウィジェットの動作は Emacs (テキストエディタ)に基本として いる。今回のリリースで Emacs との互換性が向上した。 以下のアクションが新しく追加されている:

indent
    このアクションを使うとテキストブロックのインデントが行える。 この機能はデフォルトでは有効になっていない。 このアクションを呼び出すトランスレーションが xedit エディタに追 加されている(キー割り当ては Control<Key>X, <Key>Tab)。

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
    デフォルトでは Control<Key>_ キーに割り当てられており、undo 機能 を呼び出す。undo はデフォルトでは無効にされている。 この機能は textSrcObject の enableUndo を設定すると有効になる。

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 ウィジェットセットを使って テキストエディタを書くのを助けるためのものである。

rightColumn (Class Column)
    テキストを区切る際の右カラムを指定する。 英数文字で始まる行はこのカラムで自動的に終わりとなる。

Text Source オブジェクト
textSrcObject は、内容の複数ウィンドウへの表示と、undo 情報の格納がで きるように修正されている。 textSrcObject の新しいリソースは以下の通りである:

callback (Class Callback)
    前のバージョンの Xaw はこのクラスをサブクラスに持っていた。 この変更が行われたのは、undo 機能が有効になっているときに テキストの状態をコールバック関数に伝えられるようにするためである。

enableUndo (Class Undo)
    Boolean 型のリソース値であり、undo 機能を有効/無効にする。 デフォルトとは False である。

sourceChanged (Class Changed)
    callback リソースと同じく、このリソースは前のバージョンではサブクラス 内にあった。現在のバージョンでは、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 の開発状況では、プライベートデータ構造体にアクセスするようなプログラム は将来のリリースで問題を起こすかもしれない。 こういった問題を避け、少なくともソースおよびバイナリ互換性を将来のリリー スでも保証するための努力は行われている。

著者
XFree86 による Xaw への追加と変更は Cae'sar Pereira de Andrade が行った。