XmDrawingArea
Motifの白紙のウィジェット。自前の見た目を持たず、再描画の必要やリサイズ、クリックを通知するだけで、描画はすべてプログラムに任せる。
Motifにはボタンやリスト、テキストフィールドなど見た目の完成した部品があったが、グラフや地図、独自の図を表示する手段はなかった。その答えがXmDrawingAreaである。自分では何も描かないマネージャウィジェットで、代わりに三つのコールバックを提供する。XmNexposeCallbackはXサーバーがExposeイベントを送ったとき、XmNresizeCallbackはサイズが変わったとき、XmNinputCallbackはキー押下とマウスボタンで呼ばれる。コールバックの中でXtWindowでウィジェットのウィンドウを取得し、グラフィックスコンテキストを作り、ツールキットなしのプログラムと同様にXlibで描く。マネージャでもあるので任意の座標に子を置け、「ボタンの載ったキャンバス」にいちばん近い存在だった。
落とし穴はXの古典的なものだ。ウィンドウの覆いが複数の矩形に分かれて外れると複数のExposeイベントが来るので、そのたびに全体を描き直すと無駄な再描画が何度も起きる。リサイズのコールバックはウィンドウがマップされる前、描く先がまだないうちに届くこともある。SGIのGLwMDrawingAreaは同じウィジェットの裏にOpenGLコンテキストを付けたもので、1990年代のUnix向けCADの多くがこれで3DビューをMotifのウィンドウに載せた。