EN JA
VGL(3)
VGL(3) FreeBSD Library Functions Manual VGL(3)

名称

VGLBitmapAllocateBits, VGLBitmapCopy, VGLBitmapCreate, VGLBitmapDestroy, VGLBitmapPutChar, VGLBitmapString, VGLBlankDisplay, VGLBox, VGLCheckSwitch, VGLClear, VGLEllipse, VGLEnd, VGLFilledBox, VGLFilledEllipse, VGLGetXY, VGLInit, VGLLine, VGLKeyboardInit, VGLKeyboardEnd, VGLKeyboardGetCh, VGLMouseInit, VGLMouseMode, VGLMouseSetImage, VGLMouseSetStdImage, VGLMouseStatus, VGLPanScreen, VGLSetBorder, VGLSetPalette, VGLSetPaletteIndex, VGLSetVScreenSize, VGLSetXY, VGLTextSetFontFileビデオグラフィックスライブラリ関数

ライブラリ

Video Graphics Library (libvgl, -lvgl)

書式

#include < sys/fbio.h>
#include < sys/consio.h>
#include < sys/kbio.h>
#include < vgl.h>

int
VGLInit( int mode);

void
VGLEnd( void);

void
VGLCheckSwitch( void);

int
VGLTextSetFontFile( char *filename);

int
VGLKeyboardInit( int code);

void
VGLKeyboardEnd( void);

int
VGLKeyboardGetCh( void);

int
VGLMouseInit( int mode);

void
VGLMouseMode( int mode);

int
VGLMouseStatus( int *x, int *y, char *buttons);

void
VGLMouseSetImage( VGLBitmap *AndMask, VGLBitmap *OrMask);

void
VGLMouseSetStdImage( void);

u_long
VGLGetXY( VGLBitmap *object, int x, int y);

void
VGLSetXY( VGLBitmap *object, int x, int y, u_long color);

void
VGLLine( VGLBitmap *object, int x1, int y1, int x2, int y2, u_long color);

void
VGLBox( VGLBitmap *object, int x1, int y1, int x2, int y2, u_long color);

void
VGLFilledBox( VGLBitmap *object, int x1, int y1, int x2, int y2, u_long color);

void
VGLEllipse( VGLBitmap *object, int xc, int yc, int a, int b, u_long color);

void
VGLFilledEllipse( VGLBitmap *object, int xc, int yc, int a, int b, u_long color);

VGLBitmap *
VGLBitmapCreate( int type, int xsize, int ysize, byte *bits);

void
VGLBitmapDestroy( VGLBitmap *object);

int
VGLBitmapAllocateBits( VGLBitmap *object);

int
VGLBitmapCopy( VGLBitmap *src, int srcx, int srcy, VGLBitmap *dst, int dstx, int dsty, int width, int hight);

void
VGLBitmapPutChar( VGLBitmap *Object, int x, int y, byte ch, byte fgcol, byte bgcol, int fill, int dir);

void
VGLBitmapString( VGLBitmap *Object, int x, int y, char *str, byte fgcol, byte bgcol, int fill, int dir);

void
VGLClear( VGLBitmap *object, u_long color);

void
VGLSetPalette( byte *red, byte *green, byte *blue);

void
VGLSetPaletteIndex( byte color, byte red, byte green, byte blue);

void
VGLSetBorder( byte color);

int
VGLSetVScreenSize( VGLBitmap *object, int vxsize, int vysize);

int
VGLPanScreen( VGLBitmap *object, int x, int y);

void
VGLBlankDisplay( int blank);

解説

libvgl はコンソールドライバ (syscons) によりサポートされたグラフィックスモードにプログラマがアクセスできるようにするライブラリです。ライブラリは実際のビデオハードウェアのプログラムを引き受け、様々なグラフィック操作を行う多くの単純な機能を提供します。さらに FreeBSD の標準のマウスシステムによって、現在動作中のマウスポインタをグラフィックイメージに透過的に重ね合わせる能力を含む、マウスのサポートがあります。 mouse(4) を参照。ライブラリは、別の仮想コンソールに切り替わる前に現在のイメージをメモリに格納することにより画面の切り替えを処理します。そしてユーザの切り替えを戻した時に復元します。異なる仮想コンソールでいくつかのグラフィックアプリケーションを同時に可能にします。

次は様々な関数の簡単な説明です。

VGLInit() ライブラリを初期化して、グラフィックモード mode を設定します。

VGLEnd() グラフィックのモードを終了して、 VGLInit() が呼び出される前にアクティブだった画面モードを復旧します。

VGLCheckSwitch() どんなグラフィックス出力も行わずにプログラムが処理する期間が長くなる場合、時々この関数を呼ぶことでシステムが画面を切り替えられるようになるでしょう。

VGLTextSetFontFile() 組み込みフォントの代わりにファイル filename のフォントを使用する文字/文字列関数を指示します。

VGLKeyboardInit() “raw” (生の) I/O モードでキーボードを設定して、使用されるキーコードを指定します。 codeVGL_XLATEKEYS, VGL_CODEKEYS あるいは VGL_RAWKEYS でなければなりません。 VGL_XLATEKEYS が指定される時、キーボードは、raw キーボードスキャンコードを文字コードに翻訳します。 VGL_RAWKEYS が使用される場合、raw (生の) キーボードスキャンコードはそのまま読まれます。 VGL_CODEKEYS は中間のキーコードです。キーが押される時、2 つ以上の raw スキャンコードが生成されるかも知れませんが、各キーにはユニークなコードが割り当てられます。

VGLKeyboardEnd() キーボードの使用が終った時、この関数を呼びます。

VGLKeyboardGetCh() キーボードから 1 バイトを読み込みます。キーボード I/O が“raw”入力モードのままで、入力されたデータがなくても、関数はブロックしません。そして、0 を返します。

VGLMouseInit() マウスを初期化します。引数が VGL_MOUSESHOW である場合は、オプションの画面上マウスポインタを表示します。

VGLMouseMode() 引数が VGL_MOUSESHOW である場合、マウスポインタを表示し、引数が VGL_MOUSEHIDE である場合、マウスポインタを隠すかのどちらかです。

VGLMouseStatus() 現在のマウスポインタの座標および x, y, buttons にボタン状態を返します。返り値は、マウスポインタが現在画面に表示されているかいないかを反映します。

VGLMouseSetImage() この関数で、画面上のマウスポインタのイメージを変更できます。

VGLMouseSetStdImage() この関数はマウスポインタを標準の矢印に戻します。

VGLGetXY() object 引数の座標 x, y にあるピクセルの色を取り出し、そして、バイト値としてそれを返します。

VGLSetXY() object 引数の座標 x, y にあるピクセルの色を color バイト値に設定します。

VGLLine() x1, y1 から x2, y2 へ色 color の直線を引きます。

VGLBox() 左上角の x1, y1 右下角の x2, y2 の四角形を色 color で描きます。

VGLFilledBox() 左上角の x1, y1 右下角の x2, y2 の (中まで) 塗り潰し四角形を色 color で描きます。

VGLEllipse() 中心が xc, yca ピクセル幅 b ピクセル高の楕円を色 color で描きます。

VGLFilledEllipse() 中心が xc, yca ピクセル幅 b ピクセル高の (中まで) 塗り潰し楕円を色 color で描きます。

VGLBitmapCreate() ビットマップオブジェクトを作成して、指定された値およびビットデータでそれを初期化します。 type はインメモリビットマップのための MEMBUF でなければなりません。 bits ビットマップデータが後で関連させられるかもしれないので、 bits は NULL かもしれません。

さらに、静的に宣言されたビットマップオブジェクトを初期化するマクロ VGLBITMAP_INITIALIZER( type, xsize, ysize, bits) があります。

VGLBitmapDestroy() ビットマップデータおよびビットマップオブジェクトを解放します。

VGLBitmapAllocateBits() 指定されたオブジェクトのためにビットデータバッファを割り付けます。

VGLBitmapCopy() 上左角 srcx, srcy のビットマップ src の長方形のピクセルをサイズ width, heightdstx, dsty のビットマップ dst へコピーします。

VGLBitmapPutChar() 文字 ch を位置 x, y に前景色 fgcol で書き込みます。 fill が != 0 の場合、背景として色 bgcol が使われ、そうでなければ背景は透明となります。文字は、引数 dir によって指定された方向へ描かれます。

VGLBitmapString() 文字列 str を位置 x, y に前景色 fgcol で書き込みます。 fill が != 0 の場合、背景として色 bgcol が使われ、そうでなければ背景は透明となります。文字列は、引数 dir によって指定された方向へ描かれます。

VGLClear() 全ビットマップを色 color でクリアします。

VGLSetPalette() この関数は使用されるパレットを設定します。引数 red, green, blue はそれぞれ 256 位置のバイト配列を指すべきです。

VGLSetPaletteIndex() パレットインデックス color を指定された RGB 値に設定します。

VGLSetBorder() 境界色を色 color に設定します。

VGLSetVScreenSize() ディスプレイの仮想画面サイズを変更します。 vty が前景にある時、この関数が呼ばれなければならないことに注意してください。そして、 objectVGLDisplay でなければなりません。インメモリビットマップをこの関数へ渡すことはエラーになります。

希望の仮想画面の幅は、ビデオカードハードウェアのために達成できないかもしれません。そのような場合、ビデオドライバ (そして、基本的な BIOS) は次の最大の値を選ぶかもしれません。仮想画面がどのように実際設定されたのか確かめるために、常にこの関数を呼んだ後に object->VXsizeVYsize を検査してください。

できるだけ大きな仮想画面を設定するために、任意の大きな値でこの関数を呼び出すことができます。

VGLSetVScreenSize(10000, 10000);

VGLPanScreen() 仮想画面の表示された画面の原点を変更します。 vty が前景にある時、この関数が呼ばれなければならないことに注意してください。 objectVGLDisplay でなければなりません。インメモリビットマップをこの関数へ渡すことはエラーになります。

VGLBlankDisplay() 引数 blank が≠ 0 である場合に、ディスプレイを空白とします。ディスプレイの更新が終わったときにユーザが始めて見るように、ディスプレイの更新中に画面を止めるためにこれができます。

プログラム終了とシグナル処理

プログラムを終了する前に VGLEnd() を呼ぶことは重要です。シグナルハンドラをインストールしていて、プログラムを終了するために VGLEnd() および exit(3) を呼ぼうとする場合、慎重さも必要です。プログラムが内部の libvgl 関数で動作している間にシグナルがキャッチされたなら、 VGLEnd() はグラフィックスハードウェアを適切に復旧することができないかもしれません。

シグナルおよびプログラム終了を扱う推奨される方法はシグナルの配信を示すためのフラグを持つことです。使用者のシグナルハンドラはこのフラグを設定してもプログラムを直ちに終了しません。プログラムの主要な部分は、それが終了するかどうか確かめるためにフラグをチェックします。また、フラグが設定されている場合、 VGLEnd() および exit(3) を呼びます。

VGLInit() が SIGINT, SIGTERM, SIGSEGV および SIGBUS のためのその内部シグナルハンドラをインストールし、これらのシグナルのうちの 1 つがキャッチされた後、適切な時にプログラムを終了することに注意してください。使用者がこれらのシグナルのために自分のシグナルハンドラを持ちたい場合は、 VGLInit() の後にハンドラをインストールしてください。

SIGUSR1SIGUSR2 は、画面切り替えおよびマウスポインタを制御するために、 libvgl によって内部で使用され、 libvgl クライアントプログラムに利用可能ではありません。

歴史

vgl ライブラリは、 FreeBSD 3.0 で登場しました。

作者

Søren Schmidt <sos@FreeBSD.org>
February 25, 2012 FreeBSD