Previous: 多数の図形を描く
Up: Xウィンドウ実習
第4回 グラフィックスを描く
Previous Page: 多数の図形を描く
Next Page: Xウィンドウ・プログラミング
第5回 ウィンドウのプログラミング・スタイル
さらに応用例を1つ。
今度は非常に細長い長方形を少しずつ色を変えながら描き、
色が連続的に変化しているように見せるプログラムです。
ここでは少しぜいたくですが、空の色に全部で64色使っています。そのために
色の配列 sora[ ] を宣言し、for文を使って少しずつ変化する色のデータを
与えるように工夫がされています。
次のプログラムを完成させてください。
ソース・ファイル名は win13.c とします。
win13.c
#include<stdio.h>
#include<X11/Xlib.h>
main()
{
Display *dsp; /* ディスプレイ構造体の宣言 */
Window win; /* ウィンドウ構造体の宣言 */
Colormap cmap; /* カラーマップの宣言 */
XColor yama, hosi, sora[64]; /* カラー構造体の宣言 */
GC gc; /* GC構造体の宣言 */
int x, y, width, height;
int m;
dsp = XOpenDisplay( NULL ); /* ディスプレイのオープン */
cmap = DefaultColormap( dsp, 0 ); /* カラーマップを得る */
/* カラーマップから色を得る */
yama.red=0; yama.green=20000; yama.blue=0;
XAllocColor( dsp, cmap, &yama );
hosi.red=65000; hosi.green=65000; hosi.blue=0;
XAllocColor( dsp, cmap, &hosi );
for( m=0 ; m<64 ; m++ )
{
sora[m].red=m*1000;
sora[m].green=30000-m*(64-m)*15;
sora[m].blue=64000-m*1000;
XAllocColor( dsp, cmap, &sora[m] );
}
/* ウィンドウの生成 */
win = XCreateSimpleWindow( dsp, DefaultRootWindow(dsp),
0, 0, 600, 400, 1,
BlackPixel(dsp,0), WhitePixel(dsp,0) );
/* GCの生成 */
gc = XCreateGC( dsp, win, NULL , NULL );
XStoreName( dsp, win, "夕暮れ" ); /* タイトルの設定 */
XMapWindow( dsp, win ); /* ウィンドウの表示 */
XFlush( dsp );
getchar(); /* リターンキーの入力まで停止する */
/* 図形を描く */
XSetForeground( dsp, gc, yama.pixel ); /* 色の設定 */
x=0; y=320; width=600; height=80;
XFillRectangle( dsp, win, gc, x, y, width, height ); /* 長方形 */
for( m=0 ; m<64 ; m++ )
{
XSetForeground( dsp, gc, sora[m].pixel ); /* 色の設定 */
x=0; y=m*5; width=600; height=5;
XFillRectangle( dsp, win, gc, x, y, width, height ); /* 長方形 */
}
XSetForeground( dsp, gc, hosi.pixel ); /* 色の設定 */
XDrawPoint( dsp, win, gc, 30, 55 );
XDrawPoint( dsp, win, gc, 100, 15 );
XDrawPoint( dsp, win, gc, 200, 10 );
XDrawPoint( dsp, win, gc, 250, 30 );
XDrawPoint( dsp, win, gc, 340, 20 );
XDrawPoint( dsp, win, gc, 450, 40 );
XDrawPoint( dsp, win, gc, 510, 25 );
XDrawPoint( dsp, win, gc, 570, 45 );
XFlush( dsp );
getchar(); /* リターンキーの入力まで停止する */
XCloseDisplay( dsp ); /* ディスプレイのクローズ */
}
プログラムができたら、コンパイルして実行してみましょう。