Last modified: Tue Jun 2 15:50:55 1998

X-Window 簡易ライブラリ Xplib マニュアル

利用条件

Xp Library は,千葉工業大学の大川茂樹先生 が早稲田大学在学中に作られたものですが, 「基本的にフリーウェアとして公開していますので, 直接的な営利目的でない限り,特に使用に制限はしていません. どうぞお使いください.」とのことです。

以下、大川先生のコメントの続きです。

直接的な営利目的とは,このライブラリそのもの,あるいは このライブラリをそのままの形で組み込んだパッケージソフトを 市販したりするようなことを指します.

ただし,著作権は早稲田大学に帰属させてありますので, 再配布する場合には,その旨の記述を残してください. また,公式なサポートはできません. (個人的な質問にはお答えできるかもしれませんが)

あと,細かいことですが,X11R6 以降で,RPM resource の1つと して libXp.a なる,私のものとは全く無関係の同名ライブラリが 標準で添付されるようになり,少々困っています. とりあえず,使用時には LIBRARY_PATH の設定等に気をつけてください.

最後に,もし可能でしたら,このライブラリを使われてのご意見などを お聞かせいただけると幸いです.


はじめに

このライブラリセットは、 非常に簡単な関数を組み合わせて必要最小限の グラフィクス操作を行うためにプレーンのXを 元に作られた関数の集まりです。 そのため、あるデータをちょっと画面に出してみたいが XGraph 等の汎用ツールでは不十分だ、というような 場合に、いち早くプログラムが作れるという 特長があります。 いわゆるBASICの グラフィクス環境と類似しているものです。

使用上の制約

  1. Display, Window, Screen, GC の各 ID はいずれも1つのみしか持てない。
  2. Xtoolkit や Motif 等のより上位のウィジェットセットとの共存はできない。
  3. 図形描画後のウィンドウのリサイズには対処していない。

サンプルプログラム

#include "Xp.h"
#include <stdio.h>

void main()
{
    char ch;
    int pos[2];

    XpInitWindow( 1000, 800 );             /* ウィンドウ生成 */
    XpSetWindowName( "test" );             /* ウィンドウ名 */
    XpDrawPoint( 100, 100 );               /* 点 */
    XpDrawLine( 200, 100, 700, 100 );      /* 線 */
    XpDrawBox( 200, 200, 400, 300 );       /* 四角形 */
    XpFillBox( 500, 300, 600, 400 );       /* 塗り潰した四角形 */
    XpFillCircle( 600, 500, 30 );          /* 塗り潰した円 */
    XpSetFont( "rk24" );                   /* フォント */
    XpDrawString( "Test", 100, 500 );      /* 文字列 */
    XpDrawChar( 'x', 600, 600 );           /* 文字 */
    XpSetFont( "kanji16" );                /* 漢字フォント */
    XpDrawString16( "テスト", 100, 600 );  /* 2バイト系文字列 */
    XpSetColor( "#ff0000" );               /* カラー(#RGB) */
    XpFillBox( 800, 100, 900, 200 );       /* 塗り潰した四角形 */
    XpDrawCircle( 600, 400, 60 );          /* 円 */

    for( ;; ) {                            /* 無限ループ */
        XpWaitEvent( &ch, pos );           /* イベント待ち */
	if ( ch == 'A' )                   /* 左ボタンでクリア */
            XpClearWindow();
	if ( ch == 'B' )                   /* 中ボタンで座標表示 */
            printf("X:%d Y:%d\n", pos[0], pos[1] );
        if ( ch == 'C' )                   /* 右ボタンで終了 */
            exit(0);
    }
}

実行例


各関数の説明

ウィンドウ生成と初期化

void XpInitWindow ( int x, int y );

横 x ドット、縦 y ドットのウィンドウを生成し、 マウスやキーボードからのイベントの受け入れ準備および カラーマップの初期設定などを行います。

ウィンドウのフラッシュ

void XpFlushWindow ( );

リクエストバッファの内容を強制的に送り出します。
ウィンドウへのリクエスト(描画など)は、発生と同時にサーバに 送られるのではなく、通常はクライアント側のリクエストバッファに 蓄積されます。 こうして一定量のリクエストがたまった段階で、まとめてサーバに 送ることで処理効率を高めていますが、強制的にバッファの内容を すべてサーバに送ってウィンドウ上に表示などをするために、 この関数を用います。

ウィンドウに名前をつける

void XpSetWindowName ( char *name );

生成したウィンドウに name という名前をつけます。 ウィンドウマネージャの設定に応じて、 画面上部などにこの名前が表示されます。

ウィンドウのクリア

void XpClearWindow ( );

ウィンドウの中のすべての部品を消去します。

線幅の変更

void XpLineWidth ( int width );

この関数をコールしたあとで描画する線の幅(太さ)を width ドット にします。

イベント処理

void XpWaitEvent ( char *c_data, int *pos );

この関数を実行後、ウィンドウ上でキーボードまたはマウス操作のイベントが 起こると、c_data にその原因、pos[0] にマウスの X座標、pos[1] に マウスの Y座標が入ります。
イベントの原因は、

マウス押下:左ボタンが'A'、中ボタンが'B'、右ボタンが'C' で、
マウス離し:左ボタンが'a'、中ボタンが'b'、右ボタンが'c' 。
キーボードの場合は、そのキーのキャラクターそのもの。

カラー指定

void XpSetColor ( char *color );

この関数をコールした後で描画される部品の色を color に設定します。
色名はこのリスト にある 名前を用いるか、または HTML の色指定と同じ "#RRGGBB"形式を用いてください(半角#に続いて RED成分・GREEN成分・BLUE成分を各16進2文字で表記)。

カラーを黒に設定

void XpSetBlack ( );

この関数をコールした後で描画される部品の色を 黒に設定します (頻繁に用いるので別途関数を設けました)。

カラーを白に設定

void XpSetWhite ( );

この関数をコールした後で描画される部品の色を 白に設定します (頻繁に用いるので別途関数を設けました)。

点を描く

void XpDrawPoint ( int x1, int y1 );

( x1, y1 ) に1ドットの点を描きます。

線を引く

void XpDrawLine ( int x1, int y1, int x2, int y2 );

( x1, y1 ) から ( x2, y2 ) に線を引きます。 線幅は、事前に XpLineWidth で 設定した場合はそれに従い、していない場合はデフォルトの 1ドットとなります。

四角形を描く

void XpDrawBox ( int x1, int y1, int x2, int y2 );

( x1, y1 ) と ( x2, y2 ) を対頂点とした四角形を描きます (線幅については XpDrawLine に同じ)。

中を塗り潰した四角形を描く

void XpFillBox ( int x1, int y1, int x2, int y2 );

( x1, y1 ) と ( x2, y2 ) を対頂点とした四角形を描き、 中を塗り潰します。

円を描く

void XpDrawCircle ( int x, int y, int r );

中心 ( x, y ) 、半径 r の円を描きます。

中を塗り潰した円を描く

void XpFillCircle ( int x, int y, int r );

中心 ( x, y ) 、半径 r の円を描き、中を塗り潰します。


Takuya NISHIMOTO