※ ※ このページは書きかけです。以下の可能性があります。 ※ ・誤字、脱字等のチェックをおこなっていません。 ※ ・テキスト、表などフォーマットがされていない。 ※ ・画像が抜けている。 ※
この章では、グラフパックの構成や使用方法、各ファンクションなどについて説明します。
13.1 グラフパックとは
グラフパックは、MSXViewの環境を維持しながらウィンドウに対して、高速に描画するためのルーチン群です。グラフパックを使えば、ペン、タイルのパターンや色などを自由に設定し、線や箱などの図形をクリッピングして描画することができます。
MSXViewでは、文字以外の画面表示はすべてグラフパックを使用します(文字の表示はフォントパックを使う)。描画することができるのは、ウィンドウ環境の描画エリア(ズームされた領域)だけです。したがって、グラフパックを使うときは、ディスプレイマネージャで描画環境を設定して下さい。描画環境の設定については、ディスプレイマネージャの章を参照して下さい。
13.2 グラフパックの使い方
グラフパックを使って描画するときは、次のような手順になります。
- 描画に使うペンの属性を設定して、.createpen()でペンを作成し、ペンハンドルを割り付けます。ただし、すでに存在するペン(システム標準ペンSYSPENなど)を使うときは必要ありません。
- 描画するウィンドウを.chwin()、.pushwin()などでカレントウィンドウにします。
- 表示を行うエリアを.zoom()で、ズームします。
- .chpen()、.pushpen()などで、使用するペンをカレントペンにします。
- グラフパックの描画ファンクションを使って、実際に描画します。
- .endzoom()で、描画状態を終了します。
- 必要に応じて、.poppen()などで、カレントペンを元に戻します。
- 必要に応じて、.popwin()などで、カレントウィンドウを元に戻します。
13.3 描画の構成と機能
13.3.1 ペン
描画環境(線の種類、ペンの大きさ、ペンの居ろ、塗りつぶしの色、バックの色)はPENと呼びます。通常は、このPENで描画されます。
13.3.2 データ構造
- 座標データ(-32768〜+32767)
typedef struct _pos {
int xp;
int yp;
} POS;
- 領域データ
typedef struct _area {
int xp;
int yp;
unsigned xs;
unsigned ys;
} POS;
- カラーデータ
#define COLOR char
- RGBカラーデータ
typedef struct _rgb {
TINY red;
TINY green;
TINY blue;
} RGB;
- タイルパターンデータ
typedef struct _tile {
TINY sw;
COLOR on;
COLOR off;
TINY pat[8];
} TILE;
- ペン
typedef struct _grafpen {
TINY line[4];
TINY xbot;
TINY ybot;
TINY xs;
TINY ys;
TINY pat[8];
TILE pen;
TILE fill;
TILE back;
} PEN;
13.4 ファンクション一覧
グラフパックには、以下のファンクションがあります。
表3.8 グラフパックのファンクション一覧
| 機能番号 | 名前 | 意味 | ページ |
| 4 | _setpalette() | パレットの設定 | 440 |
| 5 | _getpalette() | パレットの獲得 | 440 |
| 166 | _initgraf() | グラフパックの初期化 | 425 |
| 167 | _setpen() | ペンの設定 | 425 |
| 168 | _direct() | 描画エリアの設定 | 425 |
| 169 | _testpos() | 図形の重なりをテストするモードの開始 | 426 |
| 170 | _testarea() | エリアの重なりをテストするモードの開始 | 426 |
| 171 | _endtest() | テストモードの終了 | 427 |
| 172 | _setrub() | ラバーバンドモードの開始・終了 | 427 |
| 173 | _getrub() | ラバーバンドカラーの獲得 | 427 |
| 174 | _movepen() | ペンの移動 | 428 |
| 175 | _pset() | 点の描画 | 428 |
| 176 | _line() | 線の描画 | 428 |
| 177 | _frame() | 四角形の描画 | 429 |
| 178 | _box() | 中を塗りつぶした四角形の描画 | 429 |
| 179 | _round() | 角の丸い四角形の描画 | 429 |
| 180 | _fillround() | 中を塗りつぶした角の丸い四角形の描画 | 430 |
| 181 | _oval() | 円の描画 | 430 |
| 182 | _filloval() | 中を塗りつぶした円の描画 | 430 |
| 183 | _arc() | 円弧の描画 | 431 |
| 184 | _pai() | 扇型の描画 | 431 |
| 185 | _fillpai() | 中を塗りつぶした扇形の描画 | 432 |
| 186 | _dicon() | アイコンの描画 | 432 |
| 187 | _colicon() | 指定色によるアイコンの描画 | 433 |
| 188 | _index() | 上部のみ角の丸い四角形の描画 | 433 |
| 189 | _polygon() | 多角形の描画 | 433 |
| 190 | _fillpolygon() | 中を塗りつぶした多角形の描画 | 434 |
| 191 | _scroll() | エリア内のスクロール | 435 |
| 192 | _copy() | エリアのコピー | 435 |
| 193 | _move() | エリアの移動 | 436 |
| 194 | _framearea() | エリアにしたがった四角形の描画 | 436 |
| 195 | _erasearea() | カレントペンによるエリアの塗りつぶし | 437 |
| 196 | _erase() | 指定色でのエリアの塗りつぶし | 437 |
| 197 | _curtain() | エリアの塗りつぶし(OR) | 437 |
| 198 | _changecolor() | エリア内の指定色の変更 | 438 |
| 199 | _reverse() | エリアの塗りつぶし(XOR) | 438 |
| 200 | _roundarea() | エリアにしたがった角の丸い四角形の描画 | 439 |
| 201 | _pixel() | カラーコードの獲得 | 439 |
| 202 | _readbit() | エリア内のカラーコードの読み出し | 439 |
| 203 | _writebit() | エリアへのカラーコードの書き込み | 440 |
| 297 | _moveframe() | エリアの移動 | 436 |
13.5 ファンクションの説明
以下では、グラフパックの各ファンクションについて説明します。
13.5.1 表記法
ファンクションの説明では、次のように表記します。